如何创建第二个播放器/电脑

本文关键字:第二个 播放器 电脑 创建 何创建 | 更新日期: 2023-09-27 18:24:43

我正在创建一个双人骰子游戏,玩家可以与另一个用户或计算机一起玩。我很难弄清楚如何创建一个双人游戏。我不确定我是否必须为每个用户创建单独的类,然后创建该类的对象以拥有两个单独的播放器,或者我是否只需要创建一个像这样的变量

static int player = 1;

并将其分配给特定区域,然后使用模数来计算哪个玩家在上面。

此外,在我的roll_Btn方法下,你会看到,当骰子掷"1"并清除指定字段时,我正试图让它切换到下一个用户,它确实做到了,但一旦我再次尝试掷骰子,然后程序就在我身上结束了。请参阅下面的代码。感谢您的帮助和指导。

public partial class Game : Form
{
    public Game()
    {
        InitializeComponent();
    }
    static int player = 1;
    private void Game_Load(object sender, EventArgs e)
    {
        oneNameTxt.Text = diceFrm.player1.ToUpper();
        twoNameTxt.Text = diceFrm.player2.ToUpper();
    }
    private void endBtn_Click(object sender, EventArgs e)
    {
        diceFrm end = new diceFrm();
        end.Show();
        this.Hide();
    }
    private void standBtn_Click(object sender, EventArgs e)
    {
        oneScoreTxt.Text = totalTxt.Text;
    }
    private void rollBtn_Click(object sender, EventArgs e)
    {
        int t1 = Convert.ToInt32(turnsTxt.Text);
        int t2 = t1 + 1;
        turnsTxt.Text = t2.ToString();
        Random rand = new Random();
        int dice = rand.Next(1, 7);
        rollTxt.Text = dice.ToString();
        int d1 = Convert.ToInt32(totalTxt.Text);
        int d2 = d1 + dice;
        totalTxt.Text = d2.ToString();
        if(dice == 1)
        {
            player++;
            rollTxt.Text = String.Empty;
            turnsTxt.Text = String.Empty;
            totalTxt.Text = String.Empty;
        }
    }
    private void oneScoreTxt_TextChanged(object sender, EventArgs e)
    {
        int score1 = Convert.ToInt32(oneScoreTxt.Text);
        int score2 = Convert.ToInt32(twoScoreTxt.Text);
        if (score1 >= 100 || score2 >= 100)
        {
            whatLbl.Text = "Winner";
        }
        else
        {
            whatLbl.Text = "Turn";
        }
    }

如何创建第二个播放器/电脑

正如Ogul Ozgul所说,

    private void rollBtn_Click(object sender, EventArgs e)
    {
        ...
        if (dice == 1)
        {
            ...
            turnsTxt.Text = String.Empty;
            ...
        }
    }

当你掷1时,你的回合Text.Text=String.Empty,因此当你下次掷时,

    private void rollBtn_Click(object sender, EventArgs e)
    {
        int t1 = Convert.ToInt32(turnsTxt.Text); // program crash
        ...
    }

你的程序会崩溃得很厉害。

解决方案:我建议您在整个代码中使用TryParse而不是Convert。它将更加强健。

例如。

    private void rollBtn_Click(object sender, EventArgs e)
    {
        int t1 = 0;
        int.TryParse(turnsTxt.Text, out t1)
        int t2 = t1 + 1;
        turnsTxt.Text = t2.ToString(); 
        ...
        //rest of your code
    }