如何为井字棋游戏创建无限滚动网格板?

问题描述 投票:0回答:1

我是 Unity 新手,我已经在互联网上搜索了大约 5 天,了解如何为 Tic Tac Toe 游戏创建无限板以及无限板 Tic Tac Toe 游戏中的获胜组合是什么。请问有人可以帮我吗?

类似这样的事情

https://tic.netlify.app/

我尝试了许多不同的选项,例如使用这样的 C# 脚本生成网格

  
    public void GenerateGrid()
    {

        _tiles = new Dictionary<Vector2, Tile>();
        for (int x = 0; x < _width; x++)
        {
            for (int y = 0; y < _height; y++)
            {
                var spawnedTile = Instantiate(_tilePrefab, new Vector3(x, y), Quaternion.identity);
                spawnedTile.name = $"Tile {x} {y}";

                var isOffset = (x % 2 == 0 && y % 2 != 0) || (x % 2 != 0 && y % 2 == 0);
                spawnedTile.Init(isOffset);


                _tiles[new Vector2(x, y)] = spawnedTile;
            }
        }

        _cam.transform.position = new Vector3((float)_width / 2 - 0.5f, (float)_height / 2 - 0.5f, -10);
    }

但现在的问题是如何无限生成这个网格?为了处理这种情况,我决定当相机移动到屏幕边缘附近时生成新的网格,但什么也没有发生。然后我决定使用 Tilemap ,仍然没有希望。有人可以帮我吗?如何生成无限网格板?最好的方法是什么。存档这个?

unity-game-engine tic-tac-toe infinitegrid
1个回答
0
投票

伪代码形式的字典方法:

  • 有设置瓷砖的字典。推荐 Vector2Int 或自定义 long long 结构(如果您想要更大)作为键,并使用 bool 作为值(true x,false o)。如果您喜欢可读性,您还可以使用自定义枚举作为值。
  • 准备好瓦片地图以进行操作
  1. 当相机移动时

    • 使用相机位置和大小确定可见图块坐标的范围
    • 在此范围内查找字典
    • 在可见范围内生成瓦片地图,在适当的坐标处填充x o
  2. 当玩家移动时

    • 确定点击的图块坐标
    • 在坐标和玩家布尔值处向字典添加新条目
    • 更新视图(基本上调用与1相同的函数。)
    • 检查获胜条件
    • 交换到其他玩家

棘手的部分是平滑地生成瓦片地图。我建议将相机游戏对象保持在原点,因为浮点错误很远(如果你有足够的耐心到达那里)将会很明显。让图块地图在到达终点时快速向后移动。就游戏玩法而言,我想指出的是,你有一个非常大的游戏环境,但并不是真正无限的游戏环境。当到达坐标类型范围的末尾时,您将环绕。崩溃的唯一危险是如果你玩的时间足够长而内存不足。

© www.soinside.com 2019 - 2024. All rights reserved.