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