×

[PR]この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。

ゲームを作ろう! ポーカーその2 カード交換


前回はボタン配置と、最初の5枚のトランプを並べるプログラムを作りました。
今回は前回作った「交換」ボタンと「配る」ボタンを実際に動かせるようにします。

「交換」ボタンは、押した時点でカードを交換する仕組みではありません。
「交換」を押すと「残す」ボタンに変化し、「残す」ボタンが表示してあるカードは「配る」を押しても交換されない、というルールです。
「配る」を押すまでは、「交換」「残す」を何度でも選択可能です。
なのでまず、各カードが「交換」「残す」のどちらなのかを示す隠しパラメータを用意しておきましょう。

nokosu1 = 0
nokosu2 = 0
nokosu3 = 0
nokosu4 = 0
nokosu5 = 0

5枚のカードの初期状態は「0」(交換)、残すは「1」に切り替えることにします。

If Controls.LastClickedButton = koukan2button Then
  Controls.HideControl(koukan2button)
  Controls.ShowControl(nokosu2button)
  nokosu2 = 1
EndIf

If Controls.LastClickedButton = koukan3button Then
  Controls.HideControl(koukan3button)
  Controls.ShowControl(nokosu3button)
  nokosu3 = 1
EndIf

If Controls.LastClickedButton = koukan4button Then
  Controls.HideControl(koukan4button)
  Controls.ShowControl(nokosu4button)
  nokosu4 = 1
EndIf

If Controls.LastClickedButton = koukan5button Then
  Controls.HideControl(koukan5button)
  Controls.ShowControl(nokosu5button)
  nokosu5 = 1
EndIf
  
If Controls.LastClickedButton = nokosu1button Then
  Controls.ShowControl(koukan1button)
  Controls.HideControl(nokosu1button)
  nokosu1 = 0
EndIf

If Controls.LastClickedButton = nokosu2button Then
  Controls.ShowControl(koukan2button)
  Controls.HideControl(nokosu2button)
  nokosu2 = 0
EndIf

If Controls.LastClickedButton = nokosu3button Then
  Controls.ShowControl(koukan3button)
  Controls.HideControl(nokosu3button)
  nokosu3 = 0
EndIf

If Controls.LastClickedButton = nokosu4button Then
  Controls.ShowControl(koukan4button)
  Controls.HideControl(nokosu4button)
  nokosu4 = 0
EndIf

If Controls.LastClickedButton = nokosu5button Then
  Controls.ShowControl(koukan5button)
  Controls.HideControl(nokosu5button)
  nokosu5 = 0
EndIf

これで、ボタン切り替えが可能になるはず。

次に、「配る」を押した時の動作を考えます。
前回、カードはnumber[1]〜number[10]まで10枚用意し、そのうちnumber[1]〜number[5]を並べました。
残りのnumber[6]〜number[10]はそれぞれを1〜5と同じ場所に配置した後に、Controls.HideControlを使って一度隠します。
そしてnokosu1〜nokosu5の隠しパラメータを参照して、交換の「0」であったらControls.ShowControlを使って表示する、という感じです。

If Controls.LastClickedButton = kubarubutton Then
  'トランプ残り5枚を配置して、隠す
  GraphicsWindow.FontSize =60
  For n = 6 To 10
    For x = 1 To 52
      If number[n] = x Then
        If 1 <= x And x <= 13 Then
          GraphicsWindow.BrushColor = "Red"
          Pos2a[n-5] = Shapes.AddText(Text.GetCharacter(9829))
          Shapes.Move(Pos2a[n-5], 100*(n-5), 80)
        EndIf
        If 14 <= x And x <= 26 Then
          GraphicsWindow.BrushColor = "Red"
          Pos2a[n-5] = Shapes.AddText(Text.GetCharacter(9830))
          Shapes.Move(Pos2a[n-5], 100*(n-5), 80)
        EndIf
        If 27 <= x And x <= 39 Then
           GraphicsWindow.BrushColor = mojicolor
           Pos2a[n-5] = Shapes.AddText(Text.GetCharacter(9827))
           Shapes.Move(Pos2a[n-5], 100*(n-5), 80)
        EndIf
        If 40 <= x And x <= 52 Then
          GraphicsWindow.BrushColor = mojicolor
          Pos2a[n-5] = Shapes.AddText(Text.GetCharacter(9824))
          Shapes.Move(Pos2a[n-5], 100*(n-5), 80)
        EndIf
      If x=1 or x=1+13 Then
          GraphicsWindow.BrushColor = "Red"
          Pos2b[n-5] = Shapes.AddText("A")
          Shapes.Move(Pos2b[n-5], 100*(n-5)+7, 150)
        ElseIf x=10 or x=10+13 Then
          GraphicsWindow.BrushColor = "Red"
          Pos2b[n-5] = Shapes.AddText("10")
          Shapes.Move(Pos2b[n-5], 100*(n-5)-11, 150)
        ElseIf x=11 or x=11+13 Then
          GraphicsWindow.BrushColor = "Red"
          Pos2b[n-5] = Shapes.AddText("J")
          Shapes.Move(Pos2b[n-5], 100*(n-5)+7, 150)
        ElseIf x=12 or x=12+13 Then
          GraphicsWindow.BrushColor = "Red"
          Pos2b[n-5] = Shapes.AddText("Q")
          Shapes.Move(Pos2b[n-5], 100*(n-5)+7, 150)
        ElseIf x=13 or x=13+13 Then
          GraphicsWindow.BrushColor = "Red"
          Pos2b[n-5] = Shapes.AddText("K")
          Shapes.Move(Pos2b[n-5], 100*(n-5)+7, 150)
        ElseIf x=1+13*2 or x=1+13*3 Then
          GraphicsWindow.BrushColor = mojicolor
          Pos2b[n-5] = Shapes.AddText("A")
          Shapes.Move(Pos2b[n-5], 100*(n-5)+7, 150)
        ElseIf x=10+13*2 or x=10+13*3 Then
          GraphicsWindow.BrushColor = mojicolor
          Pos2b[n-5] = Shapes.AddText("10")
          Shapes.Move(Pos2b[n-5], 100*(n-5)-11, 150)
        ElseIf x=11+13*2 or x=11+13*3 Then
          GraphicsWindow.BrushColor = mojicolor
          Pos2b[n-5] = Shapes.AddText("J")
          Shapes.Move(Pos2b[n-5], 100*(n-5)+7, 150)
        ElseIf x=12+13*2 or x=12+13*3 Then
          GraphicsWindow.BrushColor = mojicolor
          Pos2b[n-5] = Shapes.AddText("Q")
          Shapes.Move(Pos2b[n-5], 100*(n-5)+7, 150)
        ElseIf x=13+13*2 or x=13+13*3 Then
          GraphicsWindow.BrushColor = mojicolor
          Pos2b[n-5] = Shapes.AddText("K")
          Shapes.Move(Pos2b[n-5], 100*(n-5)+7, 150)
        Else
        If 1+1 <= x And x <= 13-4 Then
          GraphicsWindow.BrushColor = "Red"
          Pos2b[n-5] = Shapes.AddText(x)
          Shapes.Move(Pos2b[n-5], 100*(n-5)+7, 150)
        EndIf
        If 14+1 <= x And x <= 26-4 Then
          GraphicsWindow.BrushColor = "Red"
          Pos2b[n-5] = Shapes.AddText(x-13)
          Shapes.Move(Pos2b[n-5], 100*(n-5)+7, 150)
        EndIf
        If 27+1 <= x And x <= 39-4 Then
           GraphicsWindow.BrushColor = mojicolor
          Pos2b[n-5] = Shapes.AddText(x-13*2)
          Shapes.Move(Pos2b[n-5], 100*(n-5)+7, 150)
        EndIf
        If 40+1 <= x And x <= 52-4 Then
          GraphicsWindow.BrushColor = mojicolor
          Pos2b[n-5] = Shapes.AddText(x-13*3)
          Shapes.Move(Pos2b[n-5], 100*(n-5)+7, 150)
        EndIf
        EndIf
      EndIf
    EndFor
  EndFor

  Controls.HideControl(Pos2a[1])
  Controls.HideControl(Pos2a[2])
  Controls.HideControl(Pos2a[3])
  Controls.HideControl(Pos2a[4])
  Controls.HideControl(Pos2a[5])
  Controls.HideControl(Pos2b[1])
  Controls.HideControl(Pos2b[2])
  Controls.HideControl(Pos2b[3])
  Controls.HideControl(Pos2b[4])
  Controls.HideControl(Pos2b[5])
  
  'ボタン類を隠す
  Controls.HideControl(koukan1button)
  Controls.HideControl(koukan2button)
  Controls.HideControl(koukan3button)
  Controls.HideControl(koukan4button)
  Controls.HideControl(koukan5button)
  Controls.HideControl(nokosu1button)
  Controls.HideControl(nokosu2button)
  Controls.HideControl(nokosu3button)
  Controls.HideControl(nokosu4button)
  Controls.HideControl(nokosu5button)
  Controls.HideControl(kubarubutton)

  'nokosu1〜nokosu5を参照して、カード交換をする
  If nokosu1 = 0 Then
    Controls.HideControl(Pos1a[1])
    Controls.HideControl(Pos1b[1])
    Controls.ShowControl(Pos2a[1])
    Controls.ShowControl(Pos2b[1])
    number[1] = number[6] 'number[6]を新たなnumber[1]に設定する
  EndIf
  
  
  If nokosu2 = 0 Then
    Controls.HideControl(Pos1a[2])
    Controls.HideControl(Pos1b[2])
    Controls.ShowControl(Pos2a[2])
    Controls.ShowControl(Pos2b[2])
    number[2] = number[7]
  EndIf

  If nokosu3 = 0 Then
    Controls.HideControl(Pos1a[3])
    Controls.HideControl(Pos1b[3])
    Controls.ShowControl(Pos2a[3])
    Controls.ShowControl(Pos2b[3])
    number[3] = number[8]
  EndIf
  
  If nokosu4 = 0 Then
    Controls.HideControl(Pos1a[4])
    Controls.HideControl(Pos1b[4])
    Controls.ShowControl(Pos2a[4])
    Controls.ShowControl(Pos2b[4])
    number[4] = number[9]
  EndIf

  If nokosu5 = 0 Then
    Controls.HideControl(Pos1a[5])
    Controls.HideControl(Pos1b[5])
    Controls.ShowControl(Pos2a[5])
    Controls.ShowControl(Pos2b[5])
    number[5] = number[10]
  EndIf
EndIf

これを前回のサブルーチン「trumpnarabe」に追加すれば、実際にトランプの交換まで行えます。
次回は最大の問題、「ポーカーの役をどう判定するか」について。

次:その3 役の判定


▲TOPへ戻る