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

📄 robotdeal.cpp

📁 java程序五子棋源代码。 java程序五子棋源代码。
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	int tempid = 0 - queuenum;
	userid.Format("%d",tempid);
	if(strcmp(succflag,"0")==0){ //成功
		sprintf(sqlbuf, "update gobang_robotinfo set status = '05',oppstatus ='00',\
			oppuserid='0' where userid = '%s'",userid);
		dbp->SQLExecDirect(sqlbuf,TRUE,TRUE);

	}else{
		sprintf(sqlbuf, "update gobang_robotinfo set status = '107' where userid = '%s'",userid);
		dbp->SQLExecDirect(sqlbuf,TRUE,TRUE);
		
	}

	
}

//对家坐下响应
void  RobotDeal::OppSitRespond(TDBPEx *dbp,CString recvbody,int queuenum){
	char sqlbuf[1024]={0};
	char *tempstr;
	CString userid,status,oppuserid,oppstatus;
	CString roomid,tableid,tableseq;
	char *body;
	char tempbody[1024] = {0};
	strcpy(tempbody,recvbody);
	body = tempbody;
	tempstr = split(body,SUBDIVISION);
	oppuserid = tempstr;
	int tempid = 0 - queuenum;
	userid.Format("%d",tempid);
	sprintf(sqlbuf, "update gobang_robotinfo set oppuserid = '%s',\
		oppstatus = '03' where userid = '%s'",oppuserid,userid);
	dbp->SQLExecDirect(sqlbuf,TRUE,TRUE);
}

//对家站起响音
void  RobotDeal::OppUpRespond(TDBPEx *dbp,NODE_STRUCT recvNode){
	char sqlbuf[1024]={0};
	char *tempstr;
	CString userid,status,oppuserid,oppstatus;
	CString roomid,tableid,tableseq;
	int colorflag;
	char *body;
	char tempbody[1024] = {0};
	strcpy(tempbody,recvNode.body);
	body = tempbody;
	int tempid = 0 - recvNode.queuenum;
	userid.Format("%d",tempid);
	sprintf(sqlbuf,"select roomid,tableid,tableseq from gobang_robotinfo where userid = '%s'",userid);
	dbp->SQLExecDirect(sqlbuf,false);
	if(dbp->SQLFetch() == PBL_Error_OK){
		dbp->SQLGetDataStr(1,roomid);
		dbp->SQLGetDataStr(2,tableid);
		dbp->SQLGetDataStr(3,tableseq);
	}
	dbp->SQLFreeStmt();
	if(strcmp(tableseq,"0")==0){
		colorflag = 1;
	}else{
		colorflag = 2;
	}
	sprintf(sqlbuf, "update gobang_robotinfo set oppuserid = '0',\
			oppstatus = '00',colorflag = %d where userid = '%s'",colorflag,userid);
	dbp->SQLExecDirect(sqlbuf,TRUE,TRUE);
	Sleep(100);
	strcpy(recvNode.operate_id,"007");   //用户准备好
	sprintf(recvNode.body,"%s;%s;%s;%s",userid,roomid,tableid,tableseq);
	if(svr_send_queue->Insert(&recvNode) == FALSE){
	}
}


//对家准备好响应
void  RobotDeal::OppReadyRespond(TDBPEx *dbp,CString recvbody,int queuenum){
	char sqlbuf[1024]={0};
	char *tempstr;
	CString userid,status,oppuserid,oppstatus;
	CString roomid,tableid,tableseq;
	char *body;
	char tempbody[1024] = {0};
	strcpy(tempbody,recvbody);
	body = tempbody;
	tempstr = split(body,SUBDIVISION);
	oppuserid = tempstr;
	int tempid = 0 - queuenum;
	userid.Format("%d",tempid);
	sprintf(sqlbuf, "update gobang_robotinfo set oppstatus = '04' where userid = '%s'",userid);
	dbp->SQLExecDirect(sqlbuf,TRUE,TRUE);

}

//对家开始游戏响应
void  RobotDeal::OppStartRespond(TDBPEx *dbp,NODE_STRUCT recvNode){
	char sqlbuf[1024]={0};
	char *tempstr;
	char chesscontent[227] = {0};
	FiveStoneProcess fivestone;
	CString userid,oppuserid;
	short colorflag,grade;
	CString seqnum;
	CString roomid,opptableid,tableid,tableseq;
	int tempid = 0 - recvNode.queuenum;
	char *body;
	body = recvNode.body;
	tempstr = split(body,SUBDIVISION);
	oppuserid = tempstr;
	tempstr = split(body,SUBDIVISION);
	opptableid = tempstr;
	
	userid.Format("%d",tempid);
	strcpy(recvNode.err_code,"000");
	strcpy(recvNode.service_id,"001");
	strcpy(recvNode.operate_id,"009");
	strcpy(recvNode.ctrlmsg,"0");
	sprintf(sqlbuf,"select colorflag,grade,roomid,tableid from gobang_robotinfo where userid = '%s'",userid);
	dbp->SQLExecDirect(sqlbuf,false);
	if(dbp->SQLFetch() == PBL_Error_OK){
		dbp->SQLGetDataSInt(1,colorflag);
		dbp->SQLGetDataSInt(2,grade);
		dbp->SQLGetDataStr(3,roomid);
		dbp->SQLGetDataStr(4,tableid);
	
		seqnum=roomid+tableid;
	}
	dbp->SQLFreeStmt();
	if(strcmp(opptableid,tableid)==0){ //是对家
		chesscontent[0] = '0';
		for(int i = 1; i < 16 ; i++) //初始化棋盘
			for(int j = 1; j < 16 ; j++)
			{
				fivestone.points[i][j] = 0;
				chesscontent[(i-1)*15+j] = '0';
			}
			chesscontent[226] = '\0';
			if(colorflag == 1){  
				fivestone.setthinkpos(0);
				fivestone.setGrade(grade);
				fivestone.points[8][8] = 1;
				chesscontent[113] = '1';
				char temp1[30]={0};
				sprintf(temp1,"%s;%s;1;8;8;1",userid,seqnum);
				strcpy(recvNode.body,temp1);
				AddMsg("计算机开始走棋%s:(8,8)!",userid);	
				Sleep(5000);
				//把服务程序处理好后的棋盘状态等信息放入共享内存
				if(svr_send_queue->Insert(&recvNode) == FALSE){
					AddMsg("写发送共享内存错误!");
				}
	}
	sprintf(sqlbuf,"update gobang_robotinfo set oppstatus = '05',content='%s' where userid='%s'",chesscontent,userid);
	dbp->SQLExecDirect(sqlbuf,true,true);

	}
	
}

//用户下子响应
void  RobotDeal::UserPlayRespond(TDBPEx *dbp,NODE_STRUCT recvNode){
	char sqlbuf[1024]={0};
	char chesscontent[227] = {0};
	CString chesstemp,seqnum;
	FiveStoneProcess fivestone;
	char *tempstr;
	CString userid,stepflag;
	CString roomid,tableid,tableseq;
	short colorflag;
	short grade = 2;
	int tempid = 0 - recvNode.queuenum;
	char *body;
	body = recvNode.body;
	tempstr = split(body,SUBDIVISION);
	tempstr = split(body,SUBDIVISION);
	stepflag = tempstr;
	userid.Format("%d",tempid);
	if(strcmp(stepflag,"0")!=0){   //游戏一盘结束
		sprintf(sqlbuf,"select colorflag from gobang_robotinfo where userid = '%s'",userid);
		dbp->SQLExecDirect(sqlbuf,false);
		if(dbp->SQLFetch() == PBL_Error_OK){
			dbp->SQLGetDataSInt(1,colorflag);
		}
		dbp->SQLFreeStmt();
		if(stepflag == 1){ //黑方胜
			if(colorflag == 2){
				AddMsg("计算机走棋%s:输了!",userid);
			}else{
				AddMsg("计算机走棋%s:赢了!",userid);
			}
		}else if(stepflag == 2){
			if(colorflag == 1){
				AddMsg("计算机走棋%s:输了!",userid);
			}else{
				AddMsg("计算机走棋%s:赢了!",userid);
			}
		}else if(stepflag == 3){
			AddMsg("计算机走棋%s:和了!",userid);
		}
		//初始化棋盘
		chesscontent[0] = '0';
		for(int i = 1; i < 16 ; i++) //初始化棋盘
			for(int j = 1; j < 16 ; j++)
			{
				fivestone.points[i][j] = 0;
				chesscontent[(i-1)*15+j] = '0';
			}
			chesscontent[226] = '\0';
		//更新用户状态
		colorflag = colorflag%2+1;
		sprintf(sqlbuf,"update gobang_robotinfo set content='%s',colorflag = %d \
			where userid='%s'",chesscontent,colorflag,userid);
		dbp->SQLExecDirect(sqlbuf,true,true);
		Sleep(100);
		strcpy(recvNode.operate_id,"007");   //用户准备好
		sprintf(recvNode.body,"%s;%s;%s;%s",userid,roomid,tableid,tableseq);
		if(svr_send_queue->Insert(&recvNode) == FALSE){
			}
	}
	
}

//对家下棋响应
void  RobotDeal::OppPlayRespond(TDBPEx *dbp,NODE_STRUCT recvNode){
	char sqlbuf[1024]={0};
	char chesscontent[227] = {0};
	CString chesstemp,seqnum;
	FiveStoneProcess fivestone;
	char *tempstr;
	CString userid,stepflag;
	int stepnum;
	CString roomid,tableid,tableseq;
	int x,y,colorflag;
	short grade = 2;
	int tempid = 0 - recvNode.queuenum;
	char *body;
	body = recvNode.body;
	//strcpy(body,recvbody);
	tempstr = split(body,SUBDIVISION);
	stepflag = tempstr;
	tempstr = split(body,SUBDIVISION);
	stepnum = atoi(tempstr);
	tempstr = split(body,SUBDIVISION);
	x = atoi(tempstr);
	tempstr = split(body,SUBDIVISION);
	y = atoi(tempstr);
	tempstr = split(body,SUBDIVISION);
	colorflag = atoi(tempstr);
	userid.Format("%d",tempid);
	if(strcmp(stepflag,"0")==0){  //游戏没结束
		strcpy(recvNode.operate_id,"009");
		sprintf(sqlbuf,"select grade,roomid,tableid,tableseq,content from gobang_robotinfo where userid = '%s'",userid);
		dbp->SQLExecDirect(sqlbuf,false);
		if(dbp->SQLFetch() == PBL_Error_OK){
			dbp->SQLGetDataSInt(1,grade);
			dbp->SQLGetDataStr(2,roomid);
			dbp->SQLGetDataStr(3,tableid);
			dbp->SQLGetDataStr(4,tableseq);
			dbp->SQLGetDataStr(5,chesstemp);
			strcpy(chesscontent,chesstemp);
			seqnum=roomid+tableid;
		}
		dbp->SQLFreeStmt();
		for(int i = 1; i < 16 ; i++)
			for(int j = 1; j < 16 ; j++)
			{
				fivestone.points[i][j] = chesscontent[(i-1)*15+j]-48;
			}
		fivestone.setGrade(grade);
		chesscontent[(x-1)*15+y] = colorflag+48;   //更改棋盘当前的状态
		//算法入口
		fivestone.setthinkpos(0);
		//没有子
		fivestone.points[x][y] = colorflag;
		x = y = 0;
		if (colorflag == 2)    //计算机先走
			fivestone.getpoint(x,y,1,false);
		else 
			fivestone.getpoint(x,y,2,false);
		if (x!=0) 
		{	
			stepnum++;
			if (colorflag == 2) 
			{
				fivestone.points[x][y] = 1;
				chesscontent[(x-1)*15+y] = '1';
				char temp1[50]={0};
				sprintf(temp1,"%s;%s;%d;%d;%d;1",userid,seqnum,stepnum,x,y);
				strcpy(recvNode.body,temp1);
			}
			else 
			{
				fivestone.points[x][y] = 2;
				chesscontent[(x-1)*15+y] = '2';
				char temp1[50]={0};
				sprintf(temp1,"%s;%s;%d;%d;%d;2",userid,seqnum,stepnum,x,y);
				strcpy(recvNode.body,temp1);
			}
			AddMsg("计算机走棋%s:(%d,%d)!",userid,x,y);	
			sprintf(sqlbuf,"update gobang_robotinfo set content='%s' where userid='%s'",chesscontent,userid);
			dbp->SQLExecDirect(sqlbuf,true,true);
		//	Sleep(5000);
			//把服务程序处理好后的棋盘状态等信息放入共享内存
			if(svr_send_queue->Insert(&recvNode) == FALSE){
				AddMsg("写发送共享内存错误!");
			}
		}
	}else{  //游戏一盘结束
		if(stepflag == 1){ //黑方胜
			if(colorflag == 1){
				AddMsg("计算机走棋%s:输了!",userid);
			}else{
				AddMsg("计算机走棋%s:赢了!",userid);
			}
		}else if(stepflag == 2){
			if(colorflag == 2){
				AddMsg("计算机走棋%s:输了!",userid);
			}else{
				AddMsg("计算机走棋%s:赢了!",userid);
			}
		}else if(stepflag == 3){
			AddMsg("计算机走棋%s:和了!",userid);
		}
		
		//初始化棋盘
		chesscontent[0] = '0';
		for(int i = 1; i < 16 ; i++) //初始化棋盘
			for(int j = 1; j < 16 ; j++)
			{
				fivestone.points[i][j] = 0;
				chesscontent[(i-1)*15+j] = '0';
			}
			chesscontent[226] = '\0';
		//更新用户状态
		sprintf(sqlbuf,"update gobang_robotinfo set content='%s',colorflag = %d \
			where userid='%s'",chesscontent,colorflag,userid);
			dbp->SQLExecDirect(sqlbuf,true,true);
		Sleep(100);
		strcpy(recvNode.operate_id,"007");   //用户准备好
		sprintf(recvNode.body,"%s;%s;%s;%s",userid,roomid,tableid,tableseq);
		if(svr_send_queue->Insert(&recvNode) == FALSE){
		}
		

	}
	
}


//对家放弃下子
void RobotDeal::OppGiveUp(TDBPEx *dbp,NODE_STRUCT recvNode){
	char sqlbuf[1024]={0};
	char chesscontent[227] = {0};
	CString chesstemp,seqnum;
	FiveStoneProcess fivestone;
	char *tempstr;
	CString userid;
	int stepnum;
	short grade = 2,colorflag;
	CString roomid,tableid,tableseq;
	int tempid = 0 - recvNode.queuenum;
	char *body;
	int x,y;
	body = recvNode.body;
	tempstr = split(body,SUBDIVISION);
	stepnum = atoi(tempstr);
	stepnum++;
	userid.Format("%d",tempid);
	sprintf(sqlbuf,"select grade,roomid,tableid,tableseq,content,colorflag from gobang_robotinfo where userid = '%s'",userid);
	dbp->SQLExecDirect(sqlbuf,false);
	if(dbp->SQLFetch() == PBL_Error_OK){
		dbp->SQLGetDataSInt(1,grade);
		dbp->SQLGetDataStr(2,roomid);
		dbp->SQLGetDataStr(3,tableid);
		dbp->SQLGetDataStr(4,tableseq);
		dbp->SQLGetDataStr(5,chesstemp);
		dbp->SQLGetDataSInt(6,colorflag);
		strcpy(chesscontent,chesstemp);
		seqnum=roomid+tableid;
	}
	dbp->SQLFreeStmt();
	for(int i = 1; i < 16 ; i++)
		for(int j = 1; j < 16 ; j++)
		{
			fivestone.points[i][j] = chesscontent[(i-1)*15+j]-48;
		}
	fivestone.setGrade(grade);
	//算法入口
	fivestone.setthinkpos(0);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -