Domemo (vb 버전) Lv2

16338 단어 VB. 네 t

학위도?



일부 보드 게임.
사내 연구회에서 작성하는 프로그램의 소재로서 선정.
Domemo에 대해 자세히 알아보기


왜 Domemo를 만들기로 결정했다면,
만들고 놀 수 있는 것을 소재로 하는 것이 동기 부여가 계속 쉽기 때문에.

규칙 등은 Lv1 기사을 참조.

향후 로드맵



Lv1 : 우선 합쳐 보자.
Lv2 : 플레이어의 처리를 함수로 정리해 보자 (now!)
Lv3: 플레이어 1을 조작할 수 있도록 하자
Lv4: CPU를 강하게 하자
Lv5: 플레이어를 클래스화해보자

Lv2 : 플레이어의 처리를 함수로 정리합시다.



Lv1의 기사의 프로그램을 보면, 플레이어 1~4의 처리가
비슷한 것을 쓰고 있어 보기 어렵습니다.

함수에 정리해, 깔끔하게 해 봅시다.
Module Module1

    ' Player2~4の手札を表示する
    Sub show(cards As List(Of Integer))
        For Each card In cards
            Console.Write(card)
        Next
        Console.WriteLine("")
    End Sub

    ' Player1の手札を伏せて表示する
    Sub showMask(cards As List(Of Integer))
        For Each card In cards
            Console.Write("X")
        Next
        Console.WriteLine("")
    End Sub

    ' 7: 各プレイヤーは自分が持っているカードを予想して、宣言する
    Sub declarationCard(declaration As Integer,
                        playerCards As List(Of Integer),
                        playerName As String,
                        openCards As List(Of Integer))
        Console.WriteLine(playerName & " -> " & declaration)

        ' 8: 予想があっていたら、手札からカードを場に移動して表にする
        If playerCards.Remove(declaration) Then
            Console.WriteLine("jackPot!")
            openCards.Add(declaration)

            ' 9: 最初に手札がなくなったプレイヤーが勝ち
            If playerCards.Count = 0 Then
                Console.WriteLine(playerName & " win!")

                ' 判定がループの外に移動したので何か入力されるまで待つ
                Console.ReadKey()

                ' ゲームを終了させる
                Environment.Exit(0)
            End If
        End If
    End Sub

    Sub Main()
        ' 1: 1~7までのカードを用意する
        Dim cards As List(Of Integer) = New List(Of Integer)

        For i As Integer = 1 To 7
            For j As Integer = 1 To i
                cards.Add(i)
            Next
        Next

        ' 2: カードをシャッフルする
        Dim shuffledCards As List(Of Integer) = 
            cards.OrderBy(Function(x) Guid.NewGuid()).ToList

        show(shuffledCards)

        ' 3: 場にカードを4枚表にする
        Dim openCards As List(Of Integer) = shuffledCards.GetRange(0, 4)

        ' 4: 4枚のカードを、内容を伏せたままゲームから除外する
        Dim closeCards As List(Of Integer) = shuffledCards.GetRange(4, 4)

        ' 5: カードを5枚ずつ4人のプレイヤーに配る
        Dim player1 As List(Of Integer) = shuffledCards.GetRange(8, 5)
        Dim player2 As List(Of Integer) = shuffledCards.GetRange(13, 5)
        Dim player3 As List(Of Integer) = shuffledCards.GetRange(18, 5)
        Dim player4 As List(Of Integer) = shuffledCards.GetRange(23, 5)

        Dim random As New Random()

        ' 6: 各プレイヤーは自分には見えないようにカードを表にする
        For i As Integer = 1 To 30
            Console.WriteLine("---------------------------------")
            ' 場のカードとプレイヤーの手札を表示する
            Console.Write("open->")
            show(openCards)
            Console.Write("player1->")
            showMask(player1)
            Console.Write("player2->")
            show(player2)
            Console.Write("player3->")
            show(player3)
            Console.Write("player4->")
            show(player4)

            ' 7: 各プレイヤーは他のプレイヤーのカードを見ながら、自分が持っているカードを予想して、宣言する
            ' Player1
            Dim declaration As Integer = random.Next(7) + 1
            declarationCard(declaration, player1, "player1", openCards)

            ' Player2
            declaration = random.Next(7) + 1
            declarationCard(declaration, player2, "player2", openCards)

            ' Player3
            declaration = random.Next(7) + 1
            declarationCard(declaration, player3, "player3", openCards)

            ' Player4
            declaration = random.Next(7) + 1
            declarationCard(declaration, player4, "player4", openCards)

            ' 何か入力したら次のターンにいくようにする
            Console.ReadKey()
        Next

    End Sub

End Module

그 밖에도 정리할 수 있는 곳이 있을지도?
생각해 봅시다.

좋은 웹페이지 즐겨찾기