首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查玩家是否在抽搐-战术-脚趾游戏中获胜?

如何检查玩家是否在抽搐-战术-脚趾游戏中获胜?
EN

Stack Overflow用户
提问于 2016-10-15 13:22:06
回答 3查看 1K关注 0票数 0

嗨,我在Visual上工作,我正在尝试构建toe。如果玩家赢了,我就被困在支票里了。我试过用激活的方法。小例子:

代码语言:javascript
复制
    private void StartForm_Activated(object sender, EventArgs e)
    {
        if ((_pcb1.Image == imagecircle) && (_pcb2.Image == imagecircle) && (_pcb3.Image == imagecircle))
        {
           MessageBox.Show("You Win!");

        }
        if ((_pcb4.Image == imagecircle) && (_pcb5.Image == imagecircle) && (_pcb6.Image == imagecircle))
        {
            MessageBox.Show("You Win!");
        }

        if ((_pcb7.Image == imagecircle) && (_pcb8.Image == imagecircle) && (_pcb9.Image == imagecircle))
        {
            MessageBox.Show("You Win!");
        }
    }

(我知道还有更多的情况要赢)。它永远不会进入该方法,我试图找到一个在窗体打开时总是活动的方法。请帮助:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-15 13:53:10

你应该检查球员的每一次移动后的胜利。我想,你的玩家可以通过点击“移动”按钮或者点击游戏区域来做出他们的动作。我还假设,您有按钮或游戏字段的Click事件。因此,您应该在按钮或游戏字段的Click事件中粘贴您的检查代码。

票数 0
EN

Stack Overflow用户

发布于 2016-10-15 13:56:03

下面是一些扩展到任何游戏大小的代码:

代码语言:javascript
复制
public class Level
{
    private readonly Team[,] _game;

    public Level(int extent)
    {
        _game = new Team[extent, extent];
    }

    public bool HasWon(Team team)
    {
        var yMax = GetYMax();
        var xMax = GetXMax();
        var won = false;

        // check horizontally
        for (var y = 0; y < yMax; y++)
        {
            won = false;
            for (var x = 0; x < xMax; x++)
                won |= _game[y, x] == team;

            if (won) return true;
        }

        // TODO check vertically

        // TODO check diagonally

        return won;
    }

    public void SetTile(Team team, int x, int y)
    {
        var xMax = GetXMax();
        var yMax = GetYMax();

        if ((x < 0) || (x > xMax))
            throw new ArgumentOutOfRangeException("x");

        if ((y < 0) || (y > yMax))
            throw new ArgumentOutOfRangeException("y");

        _game[y, x] = team;
    }

    private int GetXMax()
    {
        var xMax = _game.GetUpperBound(1);
        return xMax;
    }

    private int GetYMax()
    {
        var yMax = _game.GetUpperBound(0);
        return yMax;
    }
}

public enum Team
{
    Red,
    Blue
}

让你做的事情:

  • 实现检查团队是否在纵向或对角线上获胜的逻辑
  • 使用这个类实现您的游戏,根据数组_game绘制图片(公开发布)
  • 研究|或操作符,了解它在这里的用法:https://msdn.microsoft.com/en-us/library/6373h346.aspx
  • 进一步调试代码(我没有:)
票数 0
EN

Stack Overflow用户

发布于 2016-10-15 15:06:43

如果您想要找到经常被调用的方法,以便检查玩家是否赢了,您可以创建一个每1毫秒运行一次的Timer。那么Timer.Tick的事件处理程序就是这样一个方法。

然而,你不应该找到这样一种方法来检查输赢。每1毫秒就检查一次,这是浪费资源。

想想看,什么动作会影响抽搐脚趾游戏的结果呢?当然,这是当任何一个球员放置(X或O)在板上!那就是你需要检查是否有人赢了。另外,如果放置的是X,您不需要检查正在玩O的玩家是否赢了,因为这根本不可能!

此外,检查图片框中的图像是否等于X或O图像实际上是“非抽象”代码。尝试通过抽象将这些东西放入一个模型中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40059545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档