投稿者 るきお  (社会人) 投稿日時 2013/10/29 15:23:56
さて、このカードを4人のプレイヤーに配ることにしましょう。
この段階でわからなければ、上記のプログラムを基にして、「プレイヤーにカードを配るためにはどういう構造にしたらよいか?」という切り口で質問しましょう。
上記のプログラムが基になっていれば、データの読み書きついてはいろいろとわかるので回答もしやすいです。
たとえば、
・すべてのカードはcards変数に格納されている。
・カードのマークはMarkプロパティを読めばわかる。
・カードの数字はNumberプロパティを読めばわかる。
という感じです。

さて、今回は4人のプレイヤーの手札を表現するために 4つのコレクションを追加しましょう。
Dim player1Cards As New List(Of Card)
    Dim player2Cards As New List(Of Card)
    Dim player3Cards As New List(Of Card)
    Dim player4Cards As New List(Of Card)

この4つのコレクションにカードを配りましょう。
すべてのカードはcardsの中にあるのでcardsからデータを読んで、プレイヤーのカードのコレクションにデータを書き込みましょう。

ここまで整えば、カードを配る方法はおおむね次のようになるはずです。
For i As Integer = 0 To cards.Count - 1
    Select Case i Mod 4
        Case 0
            player1Cards.Add(cards(i))
        Case 1
            player2Cards.Add(cards(i))
        Case 2
            player3Cards.Add(cards(i))
        Case 3
            player4Cards.Add(cards(i))
    End Select
Next


しかし、これでは問題があります。いつも同じプレイヤーに同じカードが配られるのです。
またプレイヤーの数が4人で固定という点も問題になるでしょう。

このような問題があるものの、ここまでの全体像は次のようになります。
Public Class Form1

    Dim cards As New List(Of Card)

    Dim player1Cards As New List(Of Card)
    Dim player2Cards As New List(Of Card)
    Dim player3Cards As New List(Of Card)
    Dim player4Cards As New List(Of Card)

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

        For i As Integer = 1 To 13
            cards.Add(New Card With {.Mark = "スペード", .Number = i})
            cards.Add(New Card With {.Mark = "ダイヤ", .Number = i})
            cards.Add(New Card With {.Mark = "クラブ", .Number = i})
            cards.Add(New Card With {.Mark = "ハート", .Number = i})
        Next

        cards.Add(New Card With {.Mark = "ババ"})

        For i As Integer = 0 To cards.Count - 1
            Select Case i Mod 4
                Case 0
                    player1Cards.Add(cards(i))
                Case 1
                    player2Cards.Add(cards(i))
                Case 2
                    player3Cards.Add(cards(i))
                Case 3
                    player4Cards.Add(cards(i))
            End Select
        Next

    End Sub
End Class

Public Class Card
    Public Property Mark As String
    Public Property Number As Integer
End Class