2012-10-12 95 views
0

我开始制作一款跳棋游戏,并且我已经获得了所有图形和绘制的棋盘。 在我开始创作这些作品之前,我想知道怎样才能解决棋子运动的逻辑问题。我应该制作一个每个方格的桌子,检测它是否有棋子,如果是,是什么颜色? (即0 =空,1 =红,2 =黑),或者你们对这个问题有更好的想法吗?制作棋子游戏的逻辑?

+0

可能更好的http://gamedev.stackexchange.com – Markus

+0

参见本: - http://forums.whirlpool.net.au/archive/1147465 –

+1

你是问有关的算法为计算机挑选移动,或你是否在寻找逻辑来追踪两名球员(可能是人类)球员的位置? –

回答

6

通过使用面向对象的原则,我会去的东西,如:

enum Side { 
    BLACK, 
    RED; 
} 

class Position { 
    int x, int y; 
} 

class Piece 
{ 
    Position position; // position inside the board 
    Side side; // which side the piece is 
} 

class Board 
{ 
    Piece[][] board = new Piece[8][8]; 

    boolean isMoveLegal(Piece p, Position newPosition) { 
    ... 
    } 

    void doMove(Piece p, Position newPosition) { 
    if (isMoveLegal(p, newPosition) { 
     // game logic of movement and eating other pieces if needed 
    } 
    } 
} 

一个比较幼稚的做法可以用一个简单的地图:

class Position { 
    int x, int y; 
} 

class Piece 
{ 
    Side side; // which side the piece is 
} 

class Board 
{ 
    HashMap<Piece, Position> board; 

    boolean isMoveLegal(Piece p, Position newPosition) { 
    ... 
    } 

    void doMove(Piece p, Position newPosition) { 
    if (isMoveLegal(p, newPosition) { 
     // game logic of movement and eating other pieces if needed 
    } 
    } 
} 

这可以使用,以避免存储一块内部的当前位置。

+0

所以我不得不预先定义数组中的部分? – Chris

+0

这似乎过分巴洛克式。有很多冗余数据(例如,存储在'board [2] [3]'中的'Piece'''需要将'[2] [3]'存储在''position''属性中)。每当一块棋子移动时,您需要以一致的方式在两个地方更新数据。 –

+0

它仅取决于你想放置运动逻辑的位置。我经常发现自己处于最好拥有冗余数据的境地,而不是找到一种方法来获取您之前没有计划存储的信息。特别是对于一个简单的任务,例如棋子游戏(碰巧在更复杂的环境中发现自己处于同一种情况,并且将元素与元素一起存储一直是不错的选择)。 – Jack

1

您应该制作一个二维数组来表示电路板。

int[][] board = new int[8][8]; 
+2

这会有帮助吗? – Chris

+0

我不打算写他的跳棋比赛。他问如何代表董事会 –

+1

事实上,他问到需要跟踪移动的簿记。这比仅仅将矩阵表示为矩阵更复杂。 –