代码之家  ›  专栏  ›  技术社区  ›  AllenG

六边形平面的形式和运动表示

  •  5
  • AllenG  · 技术社区  · 14 年前

    在此声明 int[,]

    string[3,3] => tic-tac-toe board (or similar)
    string[8,8] => chess or checkers board
    

    要“移动”飞机上的某个项目,我们只需将其分配到一个新的“位置”

    //using our tic-tac-toe board:
    string[0,0] = "x"; //top-left
    string[1,1] = "o"; //middle-middle
    
    //to move
    string[0,1] = bN; //Black Knight's starting positon
    string[2,2] = bN; //Black Knight moves
    string[0,1] = String.Empty;
    

    那么,如何表示一个六边形平面(一堆六边形)以及如何处理从一个位置到下一个位置的移动呢?

    注:这不是纯粹的理论,因为我有一个小游戏的想法,在我的头脑中,这将需要这种运动,但我不能围绕我的头怎么做。我看了一些其他的问题,但没有找到一个很好的匹配。。。

    2 回复  |  直到 14 年前
        1
  •  7
  •   Glorfindel DataWraith    5 年前

    我不知道这是否是最佳的解决方案,但我要做的是创建一个新的电路板类电路板将是一个“单元”的集合每个单元将包含一个指向它的每个相邻单元的指针(或空,如果单元在边缘上)。您可以在board类上实现一些遍历单元格的迭代器。

    你必须把它更像一个列表而不是一个向量。但这至少是一个开始。


    alt text

    仍然只需使用[,]来访问每个单元格,但要计算出您是否正在遍历单元格(右上为[+1,-1],右上为[+1,0],右下为[0,+1],左下为[-1,+1],左上为[-1,0],左上为[0,-1])

    编辑

    例子:

    const int X = 10;
    const int Y = 10;
    int grid[,] = new int[X+(2*Y), Y];
    
    bool IsCellOffLimits(int x, int y)
    {
        return (x < Y-y || x > X-y || y < 0 || y > Y);
    }
    

    alt text

    如果你很聪明,你可以只使用普通的空格,但只要让你的代码在Y-Y或X-Y范围内的任何东西在电路板的另一边。但我会把代码留给读者。

        2
  •  0
  •   Jimmy Hoffa    14 年前

    三个方向,左/右,上/下,有趣的角度单向/反向。

    public class Player
    {
        public int X { get; set; }
        public int Y { get; set; }
    
        public void MoveLeft() { X++; }
        public void MoveRight() { X--; }
    
        public void MoveUp() { Y++; }
        public void MoveDown() { Y--; }
    
        public void MoveFunny() { Y++; X++; }
        public void MoveOtherFunny() { Y--; X--; }
    }