如何在单人井字游戏中使计算机移动



我正在尝试制作一个单人井字游戏。我已经有 2 名玩家使用我在网上找到的一些代码工作,但我没有任何运气用我已经拥有的代码输入单人游戏的代码。我有一个开始菜单,询问您是否要玩 1 或 2 个玩家,然后它会转到游戏形式以开始游戏(所有主要代码都在其中)此外,我是 vb 的新手,还不知道所有术语,所以如果您可以提供帮助,请详细说明并在代码中留下评论。

我想做的是让计算机在第一次移动时随机选择,然后根据已经播放的内容做出选择。我想我可以自己得到那部分,我只需要帮助弄清楚如何将随机数生成器合并到我已经拥有的代码中。

我想知道的最后一件事,这是 vb.net 还是 vb6?我真的不知道有什么区别,因为这是我的第一个Visual Basic项目。

这就是我认为代码会去的地方,但如果我错了,请告诉我,我可以发布整个代码:

Public Class Form1
Dim flag As Boolean = False
Private mute As Integer = 0
Private Sub Buttons(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click, Button5.Click, Button6.Click, Button7.Click, Button8.Click, Button9.Click
    If flag = False Then
        ' DirectCast(sender, Button).Image = (My.Resources.Mario)
        DirectCast(sender, Button).Text = "X"
        flag = True
        My.Computer.Audio.Play(My.Resources.fireball, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player O "
        buttonDisable()
        computerMove()
    Else
        ' DirectCast(sender, Button).Image = (My.Resources.Luigi)
        DirectCast(sender, Button).Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
    If muteOff.Visible = True Then
        My.Computer.Audio.Stop()
    End If
    win()
    checkDraw()
End Sub

这是我为进行"智能"计算机移动而编写的以下代码我认为它可以改进,但我不确定如何改进。注意:它不是所需的全部代码,但我相信您可以得到我在做什么的提示。

Private Sub computerMove()
    'XXO
    If Button1.Text = "X" And Button2.Text = "X" And Button3.Enabled = True Then
        Button3.Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
    If Button2.Text = "X" And Button3.Text = "X" And Button1.Enabled = True Then
        Button1.Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
    If Button4.Text = "X" And Button5.Text = "X" And Button6.Enabled = True Then
        Button6.Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
    If Button6.Text = "X" And Button5.Text = "X" And Button4.Enabled = True Then
        Button4.Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
    If Button7.Text = "X" And Button8.Text = "X" And Button9.Enabled = True Then
        Button9.Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
    If Button9.Text = "X" And Button8.Text = "X" And Button7.Enabled = True Then
        Button7.Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
    If Button1.Text = "X" And Button4.Text = "X" And Button7.Enabled = True Then
        Button7.Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
    If Button7.Text = "X" And Button4.Text = "X" And Button1.Enabled = True Then
        Button1.Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
    If Button2.Text = "X" And Button5.Text = "X" And Button8.Enabled = True Then
        Button8.Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
    If Button8.Text = "X" And Button5.Text = "X" And Button2.Enabled = True Then
        Button2.Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
    If Button3.Text = "X" And Button6.Text = "X" And Button9.Enabled = True Then
        Button9.Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
    If Button9.Text = "X" And Button6.Text = "X" And Button3.Enabled = True Then
        Button3.Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
    If Button1.Text = "X" And Button5.Text = "X" And Button9.Enabled = True Then
        Button9.Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
    If Button9.Text = "X" And Button5.Text = "X" And Button1.Enabled = True Then
        Button1.Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
    If Button3.Text = "X" And Button5.Text = "X" And Button7.Enabled = True Then
        Button7.Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
    If Button7.Text = "X" And Button5.Text = "X" And Button3.Enabled = True Then
        Button3.Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
    'XOX
    If Button1.Text = "X" And Button7.Text = "X" And Button4.Enabled = True Then
        Button4.Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
    If Button1.Text = "X" And Button3.Text = "X" And Button2.Enabled = True Then
        Button2.Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
    If Button1.Text = "X" And Button9.Text = "X" And Button5.Enabled = True Then
        Button5.Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
    If Button4.Text = "X" And Button6.Text = "X" And Button5.Enabled = True Then
        Button5.Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
    If Button2.Text = "X" And Button8.Text = "X" And Button5.Enabled = True Then
        Button5.Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
    If Button3.Text = "X" And Button9.Text = "X" And Button6.Enabled = True Then
        Button6.Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
    If Button3.Text = "X" And Button7.Text = "X" And Button5.Enabled = True Then
        Button5.Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
    If Button7.Text = "X" And Button9.Text = "X" And Button8.Enabled = True Then
        Button8.Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
    If Button1.Text = "X" And Button3.Text = "X" And Button2.Enabled = True Then
        Button2.Text = "O"
        flag = False
        My.Computer.Audio.Play(My.Resources.marioJump, AudioPlayMode.Background)
        playerTurn.Text = " Turn: Player X "
        buttonDisable()
    End If
End Sub

我还有最后一个问题。不仅在这一部分,而且在代码的其他领域,我也想做一个函数?(我不擅长术语,所以我只想说)按钮。制作一个按钮,单击该按钮时将启用事件(我可以这样做),但也可以在代码中的其他地方禁用事件。示例:当我在开始屏幕上时,它询问我是否要玩 1 或 2 个玩家,我希望单人游戏按钮启用 computerMove() 子并在其他地方禁用或更改代码。

要回答您关于随机计算机移动的第一个问题:您可以创建一个函数来返回(包括)1 到 9 之间的随机整数,因为您有 9 个按钮。我最近不得不做类似的事情,我的结果看起来像这样。

Dim rnd As New System.Random
Private Function generateRandomInt(ByVal min As Integer, ByVal max As Integer)
    Dim value As Integer = rnd.Next(min, max + 1)
    Return value
End Function

然后只需致电

generateRandomInt(1, 9)

您可以查看随机类以获取更多背景信息。

关于 CPU 行为:我不是游戏开发人员,但您的方法似乎有点过于复杂。与其为每个可能的场景创建 if-case,不如编写一个方法来动态检查字段(或案例中的按钮)及其周围的字段,以确定人类玩家是否接近一行 3。我敢肯定,尽管有很多关于此的示例和教程,您可以复制。

最新更新