📄 robotdeal.cpp
字号:
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 + -