みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Visual Basicでトランプ版ガチャガチャ

日中、同じ質問をしたのですが、
私の説明力不足で意図がうまく伝わらなかったので、画像つきで再質問させていただきます。
回答してくださった方々、すみません!

Visual Basic 2010 Express を使って、
「トランプの山からランダムに、1枚ずつ1回100円でカードを引いていき、最終的にハートのカードが5枚揃ったら、プレイヤーの勝ちが表示されるゲーム」
を作りたいです。

・要は、トランプ版ガチャガチャです。所持金を消費し、運に任せてハートを集めるゲームです。
・当たったハートのカードは、下に表示されます。他のカードは破棄ですが、再びひくこともあります。
・VBは4,5回大学で習った程度の初心者。プログラミングはVB以外触ったことなし。
 Dimの意味がやっと分かるくらい。

画面レイアウトを載せておきます。
ご指導どうぞよろしくお願いいたします。

投稿日時 - 2012-09-30 22:47:11

QNo.7725722

困ってます

質問者が選んだベストアンサー

こんにちは


私の読解力不足で、ゲームのルールがよく掴めてませんが、想像で作成してみました。


>トランプの山からランダムに~~~~~勝ちが表示されるゲーム」
コンピュータとの対戦ではなさそうですね。


>ガチャガチャ
「ガチャガチャ」ってなにかな~



>所持金
所持金はいくらなのかわかりませんでしたので、ComboBoxで選択できるようにしました。


>他のカードは破棄ですが、再びひくこともあります。
「他のカードは破棄」はわかりますが、「再びひくこともあります。」はわかりませんでしたので、プログラムには反映してません。


>VBは4,5回大学で習った程度の初心者。プログラミングはVB以外触ったことなし。
「大学で習った」なんてすごいですね。私は趣味で、去年の夏頃から始めましたので、やっと初心者から卒業(技術面はまだ初心者)しました。でもJavaも勉強してます(趣味で)。
Dimは本当は必要ありまよね。
int test=0;←Java  これでInteger型になります。


>画像つきで
画像の出し方がわかりませんので、適当に作成しました。
すいません、画像の出し方を教えてください。


ゲームですが
#最初にComboBoxから、持ち点の選択をしなければ「スタート」ボタンが押せないようになっています。
持ち点を選択したら「確定」をクリックしてください。

#「スタート」ボタンをクリックするたびに、カードを引くことになります。
「スタート」ボタンをクリックするたびに、引いたカードが右側に表示されます。
ハートのカードを引くと、フォームの真ん中より少し下に表示されます。

#持ち点がなくなった場合と、ハートのカードが5枚揃った時点で、終了です。

#もう1度ゲームを再開する場合は、「再スタート」をクリックしてください。
もう1度ComboBoxから、持ち点の選択して「確定」をクリック、「スタート」ボタンをクリックです。


トランプの画像は下記のURLからダウンロードしてください。
http://kagoturikentarou.dousetsu.com/ncsoretomo2.html
他の画像を使う場合は、ハートのカードのファイル名の先頭の文字を"h"に変更してください。


左側の画像は、プレー中の画像です、右側の画像はデザイナー画面の画像です。

サンプルコードは、文字制限のためここに掲載できませんので、次の回答に掲載します。

投稿日時 - 2012-10-02 07:09:07

お礼

大変遅くなってしまいすみません。
まさにbybalsendercase様の画像にそっくりなものを作ろうとしていました。
いくつかコードを真似させていただき、無事に作ることができましたので
ベストアンサーとさせていただきます。
拙い説明でしたのに回答していただき本当にありがとうございました!

投稿日時 - 2012-11-24 11:48:51

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(4)

続き2

下記のコードを「続き1」のコードの下に追加してください。

'Clickイベント
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Button3.Enabled = False
tranpcount = ar.Count 'トランプの枚数の枚数を数える
'PictureBoxに描画するサイズの設定
PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
PictureBox2.SizeMode = PictureBoxSizeMode.Zoom
PictureBox3.SizeMode = PictureBoxSizeMode.Zoom
PictureBox4.SizeMode = PictureBoxSizeMode.Zoom
PictureBox5.SizeMode = PictureBoxSizeMode.Zoom
PictureBox6.SizeMode = PictureBoxSizeMode.Zoom

'ランダムな数字の変数
Dim rndm1 As Integer

'0からtranpcount-1までのランダムな数字を取得
rndm1 = rndm.Next(tranpcount)

'リストにある項目が見つかるまでループする
Do
If ar.Contains(ar(rndm1)) Then
Exit Do
End If
Loop
'上記で取得した値からプレイヤーが引いたトランプをPictureBoxに描画
PictureBox1.Image = Image.FromFile(DIR_NAME & "\" & ar(rndm1))

Dim head1 As String

'ファイル名の先頭の文字を取得
head1 = ar(rndm1).Substring(0, 1)

'(ハード)のトランプ判断 ファイル名の先頭の文字が"h"かどうか調べる
If head1 = "h" Then
victry += 1 '先頭の文字が同一であればカウントする     
playercount += 100
bank += 100
'当たったハートのカードは、下に表示する
If victry = 1 Then
PictureBox2.Image = Image.FromFile(DIR_NAME & "\" & ar(rndm1))
ElseIf victry = 2 Then
PictureBox3.Image = Image.FromFile(DIR_NAME & "\" & ar(rndm1))
ElseIf victry = 3 Then
PictureBox4.Image = Image.FromFile(DIR_NAME & "\" & ar(rndm1))
ElseIf victry = 4 Then
PictureBox5.Image = Image.FromFile(DIR_NAME & "\" & ar(rndm1))
ElseIf victry = 5 Then
PictureBox6.Image = Image.FromFile(DIR_NAME & "\" & ar(rndm1))
End If
Else 'それ以外にカウントする
playercount -= 100
bank -= 100
End If

'1度使ったトランプは破棄
ar.RemoveAt(rndm1)

'各ラベルに表示
Label3.Text = bank

'プレイヤーの勝ちを判断
If victry = 5 Then
MsgBox("プレイヤーの勝ち!")
Button1.Enabled = False
Button2.Enabled = True
Button3.Enabled = False
ar.Clear() 'リストをクリアする
Exit Sub
End If

'持ち点がなくなった場合
If bank <= 0 Then
MsgBox("持ち点がありません。")
Button1.Enabled = False
Button2.Enabled = True
Button3.Enabled = False
ar.Clear() 'リストをクリアする
Exit Sub
End If

If tranpcount < 2 Then
MsgBox("トランプがありません、終了です。")
Button1.Enabled = False
Button2.Enabled = True
Button3.Enabled = False
ar.Clear() 'リストをクリアする
Exit Sub
End If
End Sub
'初期化
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
ComboBox1.Text = ""
ComboBox1.Items.Clear()
Button3.Enabled = True
f1()

PictureBox1.Image = Nothing
PictureBox2.Image = Nothing
PictureBox3.Image = Nothing
PictureBox4.Image = Nothing
PictureBox5.Image = Nothing
PictureBox6.Image = Nothing
End Sub

End Class


わからないところや、違うところがありましたら、お手数ですが返信してください。

投稿日時 - 2012-10-02 07:20:51

続き1

文字制限のため、サンプルは2回に分けますので、後で繋いでください。

Public Class Form1
Const DIR_NAME As String = "C:\test" 'フォルダーパス
Dim rndm As New Random 'Randomのインスタンス
Dim ar As New List(Of String) 'トランプをリストにする
Dim tranpcount As Integer 'トランプの枚数
Dim victry As Integer 'ハートのカードが出たときのカウンター
Dim bank As Integer '持ち点
Dim playercount As Integer 'プレイヤーの得点
Private Sub f1() Handles MyBase.Shown
victry = 0
bank = 0
playercount = 0
Button1.Enabled = False
Button2.Enabled = False
'ComboBoxに持ち点を登録
ComboBox1.Items.Add("1000")
ComboBox1.Items.Add("2000")
ComboBox1.Items.Add("3000")

'ファイルの検索
Dim ofolder As New IO.DirectoryInfo(DIR_NAME)
Dim ofile As IO.FileInfo
'ループでファイル名をリストにAddする()
For Each ofile In ofolder.GetFiles("*", IO.SearchOption.AllDirectories)
ar.Add(ofile.Name)
Next
End Sub
'ComboBoxから値を選ぶ
Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
'ComboBoxの値をLabel3に表示
Dim comst As String
comst = ComboBox1.SelectedItem
Label3.Text = comst
bank = CInt(comst) 'StringからIntegerに変換
If CInt(comst) = 0 Then
MsgBox("持ち点を選んでください。")
Return
End If
Button1.Enabled = True
End Sub

次の投稿のコードを上記の下に追加してください。

投稿日時 - 2012-10-02 07:15:56

ANo.1

課題を丸投げ?所持金の上限など、仕様が不完全。
しかも「画面レイアウト」見えないし。


トランプの山からランダムに
・ゲーム開始時に配列内にランダムに格納しておく

1枚ずつ1回100円でカードを引いていき、
・所持金がある限り、上記の配列からから取り出す

最終的にハートのカードが5枚揃ったら
・所持金と獲得したカード枚数を保持する変数が必要

プレイヤーの勝ちが表示されるゲーム
・You Win!でいいのかな?
・破産orあきらめるボタンはどうするの?


プレイヤーの所持金・獲得カード枚数の変数
カードを格納する配列変数(スートの必要なので2次元配列か)

投稿日時 - 2012-09-30 23:00:31

お礼

遅くなってしまいすみません。
技術不足説明不足にも関わらず、ご回答いただきどうもありがとうございます。
無事に作ることができました。

投稿日時 - 2012-11-24 11:52:08

あなたにオススメの質問