⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gamelogic.cpp

📁 用qt写的网络五子棋程序
💻 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 + -