(完整版)数据结构毕业课程设计-五子棋 联系客服

发布时间 : 星期日 文章(完整版)数据结构毕业课程设计-五子棋更新完毕开始阅读c33653aaaff8941ea76e58fafab069dc502247d2

'W' )

{ 凡是接受了“上操作”,则Move_X的值减一, if( Currect( Move_X- 1, Move_Y ) ) {

Move_X-= 1; } }

else if( … ) { }

这是接下来的转换操作

ChangeCoordinates( Move_X, Move_Y, &Temp_X, &Temp_Y ); Gotoxy( Temp_X, Temp_Y );

2.5判定

对于每次走棋后,首先应该做的就是判定一否有五个棋子已经连成一线,也是一个简单的搜索过程,由于每次走的点不一定是最外部的点,因此从每次走的点的两头同时搜索,当遇到两端同时结束时,搜索结束。当满足五子时游戏结束。当然,当棋盘被走满时,游戏亦结束。代码如下: bool Legal( int Point ) {

if( Point< 1|| Point> MAX 2+ 1 ) return false; else

return true; }

搜索45度角是否为满足ChessBoard.MINBOX 以X正轴为参考轴

if( !Flag ) {

Count= 1;

for( int i1= X- 1, j1= Y+ 1, i2= X+ 1, j2= Y- 1 ; Legal( i1 )&& Legal( j1 )|| Legal( i2 )&& Legal( j2 ) ; i1--, j1++, i2++, j2-- ) {

int LastCount= Count;

if( Legal( i1 )&& Legal( j1 )&& ChessBoard.Status[i1][j1]== Ply )

{

Count++; }

if( Legal( i2 )&& Legal( j2 )&& ChessBoard.Status[i2][j2]== Ply )

{

Count++; }

if( LastCount== Count ) break;

if( Count== ChessBoard.MINBOX )

{

Flag= 1;

return true; } } }

2.6 悔棋的实现

虽说下棋悔棋是一种不道义的行为,但是如果双方约定好了,未尝不

可。在没写悔棋之前,只是记录了“上一次”的位置,声明了Last_X, Last_Y; 当然既然要求悔棋,那么直接调用栈顶元素,即可定位上次走棋的位置。那么悔棋呢,取出“上一次”的位置,判定位置(不同的位置对应不同的填充图形类型)在二维数组中撤销走棋时所赋予的 Ply 值(玩家一走时,其值为

1,玩家二走时,其值为

2),重新将

ChessBoard.Status[ Last_X ][ Last_Y ] 赋为0。代码如下: int GetFillType( int X, int Y ) {

if( X== 1 ) {

if( Y== 1 ) return 0; else if( Y== 16 ) return 2; else

return 1; }

else if( X== 16 ) {

if( Y== 1 ) return 6; else if( Y== 16 )