📄 gamelogic.cpp
字号:
#include "gamelogic.h" GameLogic::GameLogic(){ mGameState='f'; mMyside=QString("null"); mCurrentTurn=QString("black"); for(int i=0;i<15; i++) for(int j=0; j<15; j++) mChessBoard[i][j]=-1;}void GameLogic::clearChessInfo(){ mChessRecord.clearRecord(); int i, j; for(i=0; i<15; i++) for(j=0; j<15; j++) mChessBoard[i][j]=-1; mCurrentTurn=QString("black"); } //需要维护当前自己是哪方,是到谁走,k=1表示是自己下的,k=0表示是对方下的bool GameLogic::CanPut(QPoint PutPos, int k){ //如果棋子位置不合法 if(PutPos.x()<=0 || PutPos.y()<=0 || PutPos.x()>15 || PutPos.y()>15) { printf("in GameLogic::CanPut: invalid chesspoint %d,%d\n", PutPos.x(), PutPos.y()); return false; } if(mGameState!='p') { printf("in gamelogic :: canput ,game not started!\n"); return false; } else printf("in gamelogic :: canput ,game started!\n"); //判断棋盘上该位置是否有棋子 if(mChessBoard[PutPos.x()][PutPos.y()]!=-1) { printf("in gamelogic :: canput, already have chess\n"); return false; }// if(k==1)//如果是自己下的 { //不到自己 if(mCurrentTurn.compare(mMyside)!=0) { printf("not your turn! :mCurrentTurn%s, mMyside%s\n",mCurrentTurn.ascii(), mMyside.ascii()); return false; } else return true; } else if(k==0)//如果是对方下的 { //不到对方 if(mCurrentTurn.compare(mMyside)==0) { printf("not your turn!\n"); return false; } else return true; } }//以x,y点为中心,计算direction 方向的side方棋子个数int GameLogic :: CountStones(int x, int y ,int side, int direction){ int count=1; int rx,ry; int dx=0,dy=0; rx=x;ry=y; switch(direction) { case 0://horizontal ' - ' { dx=-1; dy=0; break; } case 1://vertical ' | ' { dx=0; dy=-1; break; } case 2://右下斜 '\' { dx=-1; dy=-1; break; } case 3:// '/' { dx=-1;dy=1; break; } } //每条线上左右两个方向 for(int i=0; i<2; i++); { while(rx+dx>=0&&rx+dx<=15&&ry+dy>=0&&ry+dy<=15&&mChessBoard[rx+dx][ry+dy]==side) { rx+=dx; ry+=dy; count++; } if(dx==-1&&dy==0) { dx=1; } else if(dx==0&&dy==-1) { dy=1; } else if(dx==-1&&dy==-1) { dx=1; dy=1; } else { dx=1; dy=-1; } rx=x; ry=y; } return count; }//判断输赢,调用countstonesbool GameLogic :: JudgeWin(int x, int y, int s){ if(CountStones(x, y, s, 0)==5 ||CountStones(x, y, s, 1)==5 ||CountStones(x, y, s, 2)==5 ||CountStones(x, y, s, 3)==5) return true; else return false; }void GameLogic :: setTurn(QString side){ mCurrentTurn=side;}QString GameLogic :: getTurn(){ return mCurrentTurn;}bool GameLogic :: PutNewChess(int x, int y, int k){ int s; QString nextturn; if(mCurrentTurn.compare(QString("white"))==0) { nextturn=QString("black"); s=0; } else if(mCurrentTurn.compare(QString("black"))==0) { nextturn=QString("white"); s=1; } else { printf("in GameLogic: putnewchess, mCurrentTurn %s\n", mCurrentTurn.ascii()); return false; } if(CanPut(QPoint(x, y), k)) { mChessRecord.AddRecord(QPoint(x, y),s); mChessBoard[x][y]=s; mCurrentTurn=nextturn; return true; } else { printf("in GameLogic: putnewchess, canput return false \n"); return false; } return true; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -