IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 五子棋游戏程序记录和复盘功能设置 -> 正文阅读

[游戏开发]五子棋游戏程序记录和复盘功能设置

五子棋游戏程序记录和复盘功能设置

大家都玩过手机的小游戏吧。我是编程爱好者,喜欢动脑筋研究一些算法,编程做出小游戏程序,很有趣很有成就感。在学习VB6编程时就编制过钻石棋和伤脑筋十二块那样的游戏,都是标准Windows图形界面的。现在有空闲时就玩手机上编译手机游戏。

前些天我在站内发布了一款双人对弈版的五子棋游戏程序。接下来在研究人机对战的电脑智能应子算法,参阅很多五子棋书籍棋谱和五子棋竞赛的对抗棋谱。为了摆谱,就在此游戏程序上添加了复盘功能。程序没关闭就能复现出上一次的盘面。另外还加了记录功能和显示下子序号,每盘棋都打印黑白双方下子记录,界面上也显示记录。有一点就是程序关闭记录也就没了。解决的方法是把记录存为文本文件,需要时可作为复盘数据。

复盘数据和记录数据添加方法:在下子时记录下子序号,所下子点位,代码如下
加变量声明:
int ?fudat[100] ; ? ?//复盘数据组
int ?fusum ; ? ? ? ? ? //复盘黑白下子总数
string ?cordp ; ? ? ? //每条记录字串

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkBiYWlkdV80MTgwMTc3MA,size_18,color_FFFFFF,t_70,g_se,x_16

black_do (){ ? ?//黑棋下子
? ? ? ? ?pn[n]=1; ? ?
? ? ? ? ? s6="白棋选子"; ??
? ? ? ? ? ?cordp=" B "+intToString (n); ? ?//走子记录,B 黑子,n 下子
? ? ? if (cordp != ss2) { ? ?//不重复记录

? ? ? ? ? dn=dn+1; ? ?print dn; ? ? ? ? ? ? ?//打印下子序号 dn
? ? ? ? ? ? ?print cordp; ? ss2=cordp; ? ? //打印记录
? ? ? ? ? ? ?dwn[dn]=n ; ? ?//print play number 保留记录
? ? ? ? ? ?fudat[dn]=n; ? ?fusum=dn; ?//复盘数据,复盘总子数
? ? ? ? ? ? ? ? ? ? ? }
? ? ?board ();
? ? ?testAI (); ? ? //电脑下子测试
}//black_do ()

white_do (){ ? ?//白棋下子
? ? ? ? pn[n]=2;
? ? ? ? ? s6="黑棋选子"; ? ? ??
? ? ? ? ? cordp="W "+intToString (n); ? ? //走子记录
? ? ? if (cordp != ss2) {?
? ? ? ? ? ?dn=dn+1; ? ?print dn; ??
? ? ? ? ? ? ?print cordp; ? ?ss2=cordp; ?
? ? ? ? ? ? ?dwn[dn]=n ; ? ?//print play number
? ? ? ? ? fudat[dn]=n; ? ?fusum=dn; ?//复盘
? ? ? ? ? ? ? ?}
}//white_do ()

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkBiYWlkdV80MTgwMTc3MA,size_18,color_FFFFFF,t_70,g_se,x_16

//复盘功能设置为replay ( ) ?,命令按钮调用即可。
//也可改为按步逐子显示复盘,i= 1- fusum
replay (){ ? ?//复盘功能设计
? ? ? gamestart (); ? ? ? ?//棋盘重绘
? ? ? setDisplay (1); ? ? ?//显示
? ? ? print "fusum= " ,fusum; ? ? ?//测试
? ?for (i=1;i<=fusum;i++){ ? ?
? //draw chess pieces 画出复盘黑子白子
? ? ?kn=fudat[i] ; ? ? ? ?//取得数据
? ? ?sd=i-i/2*2 ; ? ? ? ? //mod ?序号,单数=白子,双数=黑子
? ? ? dx=(kn-(kn/15*15))*40; ? ? //转坐标
? ? ? dy=(kn/15)*40+40;
? ? ? ?if (dx==0){ dx=15*40; ? ?dy=dy-40; ? }
?if ( sd==0){ ?//white 画白子
? print i, " ? W ",kn ; ? ? ? //打印记录
? ? ? ss=intToString (kn);
? ? ? ?cordp="W "+ss; ? ? ? ?//界面记录
? ? cs.SetColor (255,140,80,40); ?//piecesW
? ? ? ?cs.DrawCircle(dx+2,dy+2,15);
? ? cs.SetColor (255,220,220,220); ?//pieceW
? ? ? ?cs.DrawCircle(dx,dy,15);
? ? cs.SetColor (255,250,250,250); ?//pieceW
? ? ? ?cs.DrawCircle(dx-5,dy-5,2); ? }
?if ( sd==1){ ?//black 画黑子
? ? print i, " ? B ",kn ; ? ? ? //打印记录
? ? ? ss=intToString (kn);
? ? ? ?cordp="B "+ss; ? ? ? ?//界面记录
? ? cs.SetColor (255,220,100,40); ?//piecesB
? ? ? ?cs.DrawCircle(dx+1,dy+1,15);
? ? cs.SetColor (255,0,0,0); ? ? ? ? ? ? //pieceB
? ? ? ?cs.DrawCircle(dx,dy,15);
? ? cs.SetColor (255,200,200,200); ?//pieceB
? ? ? ?cs.DrawCircle(dx-5,dy-5,2); ? ? ? }
? ? if (i==fusum){ ? ? ?//最后一子
? ? cs.SetColor (255,0,250,0); ? ?//标志最末胜子点
? ? ? ?cs.DrawCircle(dx,dy,5); ? ? ?
? ? ? ? ? cs.SetTextSize (60); ??
? ? ? ? ? cs.SetColor (255,200,100,50); ?
? ? ? ? ? cs.DrawText ("复 ?盘",253, 553) ; ??
? ? ? ? ? ?cs.SetColor (255,20,250,0); ?
? ? ? ? ? cs.DrawText ("复 ?盘",250, 550) ; ? ? ? }
? ? ? ?cs.SetTextSize (16); ??
? ? ? ?s=intToString (i); ? ? ? //标记序号
? ? ? ? ?cs.SetColor (255,250,0,0); ?
? ? ? ? ?cs.DrawText (s,dx-2,dy+5);
? ? ? //界面显示记录
? ? ? cs.SetTextStyle (0);
? ? ? ?cs.SetTextSize (16);
? ? ?cs.SetColor(255,255,250,250);
? ? cs.DrawText (cordp,665,i*16); ? ? ?//写记录
? ? cs.Update ();
? ? sleep (1000);
? ? ? ? ? ?} ? ? //draw replay chess pieces ? ? ? ? ? ? ? ?
}//replay ()


下面的游戏代码是用MySpringC写的,v2.7是目前最新版本。我是在安卓手机上编写的,可制作成安卓手机桌面app应用程序。此样例可复制黏贴到编译器直接使用,亦可用 VB ,VC, ?java ?改写。

以下是完整的源码:
// ?最简单的 C 语言编程
// ?myspringc ?v2.7 ?可编译安卓本机 app 应用
// ?此样例可复制黏贴到 myspringc ?编译
// ?此文档可用 VB,VC ?, ?java 改写
//**********************************
//**** ? ?五子棋 Gobang ?AI ? ? ? ? ?********
//**** ? ?人机对战 ?双人对奕 ? ? ? ********
//**********************************
Canvas cs; ? ?//画布
string sBarDes[10];
int nBarId[10];
string sMenu[50];
int nMenu[50];
float src[4]; ?//ClearDraw (cls) clear screen
int size[2]; ? ?//load picture size
string s1,s2,s3,s4,s5,s6,s7; ? ? ?//显示
string s,ss,ss1,ss2,ss3;
?int dx,dy; ? ? ? ?//draw X, Y
FileInput filebox; ? //file Input box
string fname; ?//filename
int i,j,t,kn; ? ? ? ? ? //t = times ?计算时间
int pn[300]; ? ? // pn ?0=" " , 1=black , 2=white
int n; ? ? ? ? ? ? ? ?// 225 棋子编码号, 容错下标加大
int px,py; ? ? ? ?// piece x,y
int context; ? ?//canvasProc 触控
int obj;
int id;
int event;
int dn; ? ? ? ?//下子计数
int isDo; ? ? ?//游戏操作控制 1=可下子,0=不可下
int B,W,k; ? //detect win Black White
string cordp; ? //record ? 记录字串
int cord; ? ? ? ?//record switch
int mode; ? ? ?//0=人人,1=人机
int wn; ? ?
int sn;
int dwn[100]; ? ? ?//记录下子点位号,打印界面序号码
int cn; ? ? ?//AI record num
int gn ; ? ?//game round number
int fudat[100]; ? ? ?//复盘数据
int fusum; ? ?//复盘记录总数
int sd; ? ? ? ? //复盘
//**********

main(){
setDisplay(1);
? cs.SetBackground(200,200,200);
? cs.Active();
? ?sBarDes[0]="开始游戏";
? ?nBarId[0]=100;
? ?sBarDes[1]="选择模式";
? ?nBarId[1]=101;
? ?sBarDes[2]="悔 ?棋";
? ?nBarId[2]=102;
? ?sBarDes[3]="复 ?盘";
? ?nBarId[3]=103;
? ?sBarDes[4]="退出程序";
? ?nBarId[4]=104;
? ?sBarDes[5]="记录";
? ?nBarId[5]=105;
? ?setToolBarHeight(6);
? ?setButtonTextSize(13);
? ?setToolBarBackgroundColor(255,220,220,220);
? ?setButtonColor(255,0,0,240);
? ?setButtonTextColor(255,255,255,0);
? ?setToolBar(100,myToolBarProc,sBarDes,nBarId,6);
? ?setTitle("五子棋 (双人对奕) V.1.0.5 ? ");
//**********
? cs.SetProc (context, mycanvasProc);
? ? ? mode=0 ; ?
? ? ? s7="游戏模式:双人对奕";?
? ? ? gn=0;
? ? ? gamestart (); ? ?//游戏初始界面
//draw title ****
? ? ? ? ss3="五子棋 (双人对奕)";
? ?cs.SetTextSize (60);
? ?cs.SetTextStyle (1);
? ? ?cs.SetFillMode (1);//0不填色,1填色
? ? cs.SetColor(255,180,90,40);
? ? ? ? ?cs.DrawText (ss3,104,504);
? ? ? cs.SetColor(255,0,250,0);
? ? ? ? ?cs.DrawText (ss3,100,500);
? ? cs.SetFillMode (0);//0不填色,1填色
? ? cs.SetColor(255,250,250,0);
? ? ? ? ?cs.DrawText (ss3,100,500);
? ? ?cs.Update(); ?
while (){}
? }//main ()

mycanvasProc (int context,int obj,int id,int event,float x,float y){ ? ? ? ? ?
? ? ? ?// ? board (); ? //redraw board
? ? ?if (isDo==0) return ; ? //结束标志 ??
? ? kn=kn+1; ? ? //延时, ?减少闪屏
? ? ?if ((kn-kn/2*2)==0){ kn=0; ? }else{ ?return; ?} ?
? ? ? ?board (); ? //redraw board
? //** get chess piece position X Y?
? ?if (x>40&&x<610&&y>40&&y<610){
? ? ? px=(int)(x/40)*40; ? ?//取整数,选子坐标
? ? ? py=(int)(y/40)*40;
? ? ? s=intToString (px);
? ? ? s1= "px = "+s;
? ? ? s=intToString (py);
? ? ? s2= "py = "+s;
? ? ? ? ? ?dx=px/40; ? dy=py/40;
? ? ? s=intToString (dx);
? ? ? s3= "dx = "+s;
? ? ? s=intToString (dy);
? ? ? s4= "dy = "+s;
? ? ? ? ? ?n=(dy-1)*15+dx; ? ?//pn number 转棋子编码
? ? ? s5="选定落子位 >> ? "+intToString (n);
? ? cs.SetFillMode (0);//0不填色,1填色
? cs.SetColor (255,250,0,0); ?//chess flag选子标记
? ? cs.DrawRect (px-20,py-20,px+20,py+20); ?
? ? ? ? ? ? ?} ? ?
? ?//选子后落子缓冲按钮
? ? if (isDo==1){ ?//可下子
? ? if (x>100&&x<300&&y>900&&y<960){
? ? ? ? ? ?if (mode==0) black_do (); ? ?//双人对弈
? ? ? ? ? ?if (mode==1) {
? ? ? ? ? ? ? ? ? black_do (); ? ? ? ?//人机,黑棋下子
? ? ? ? ? ? ? ? ?// chessAI (); ? ?} ? ?//人机,机下子 ? ??
? ? ? ? ? ? ? ? ? testAI (); ? ?} ? ?//人机,机下子测试?
? ? ? ? ? ? ? ? } ? ?//黑已下
? ? if (x>400&&x<600&&y>900&&y<960){
? ? ? ? ? white_do (); ?
? ? ? ? ? ? ? ? ? ?} ? //白棋已下
? ? ? ? ?} ?//isDo==1 ? ??

? ?cs.SetFillMode (1);//0不填色,1填色
? ?cs.SetColor (255,230,230,230); ?//clear n
? ? cs.DrawRect (525,770,600,810);
? ? ?// cs.SetColor(255,255,0,0);
? ? // cs.SetTextSize (24);
? ? ?//cs.DrawText (s1,50,700); ?//测试
? ? ?//cs.DrawText (s2,50,740);
? ? ?//cs.DrawText (s3,200,700);
? ? ?//cs.DrawText (s4,200,740);
? ? ?cs.SetColor(255,0,0,180);
? ? ?cs.SetTextSize (30);
? ? ?cs.DrawText (s5,330,800);
? ? cs.Update ();
}//mycanvasProc?

testAI (){
//正在研究电脑下子智能算法********
//求解方案?
//**** AI 走子 **********************?
?return;
do_white: ?
? ?//print " sn= ",sn ," k= ",k ;
? ? ? dx=(sn-(sn/15*15))*40;
? ? ? dy=(sn/15)*40+40;
? ? ? ?if (dx==0){ dx=15*40; ? ?dy=dy-40; ? }
? ? ? cs.SetColor (255,250,250,0); ?
? ? ? cs.DrawCircle (dx,dy,5);
? ? cs.Update ();
? ? ?dwn[dn+1]=sn; ? ? //存储白下子信息供打印
}//testAI ()

chessAI (){ ? ? //人机模式 AI下子
? ? ? if (isDo==0) return ; ? //结束标志 ??

?//**** AI 走子 **********************?
?return;
put_white:
? ? ?pn[wn]=2;
? ? ? ? ? s6="黑棋选子"; ? ? ??
? ? ? ? ? cordp="w "+intToString (n); ? ? //走子记录
? ? ? if (cordp != ss2&&n<260) {?
? ? ? ? ? ? ?dn=dn+1; ? ?print dn; ??
? ? ? ? ? ? ?print cordp; ? ?ss2=cordp; ? ? } ? ??
? ? board ();
}//chessAI ()

black_do (){ ? ?//黑棋下子
? ? ? ? ?pn[n]=1; ? ?
? ? ? ? ? s6="白棋选子"; ??
? ? ? ? ? ?cordp=" B "+intToString (n); ? ?//走子记录
? ? ? if (cordp != ss2) { ? ?//不重复记录
? ? ? ? ? dn=dn+1; ? ?print dn; ??
? ? ? ? ? ? ?print cordp; ? ss2=cordp;?
? ? ? ? ? ? ?dwn[dn]=n ; ? ?//print play number
? ? ? ? ? ?fudat[dn]=n; ? ?fusum=dn; ?//复盘
? ? ? ? ? ? ? ? ? ? ? }
? ? ?board ();
? ? ?testAI (); ? ? //test AI
}//black_do ()

white_do (){ ? ?//白棋下子
? ? ? ? pn[n]=2;
? ? ? ? ? s6="黑棋选子"; ? ? ??
? ? ? ? ? cordp="W "+intToString (n); ? ? //走子记录
? ? ? if (cordp != ss2) {?
? ? ? ? ? ?dn=dn+1; ? ?print dn; ??
? ? ? ? ? ? ?print cordp; ? ?ss2=cordp; ?
? ? ? ? ? ? ?dwn[dn]=n ; ? ?//print play number
? ? ? ? ? fudat[dn]=n; ? ?fusum=dn; ?//复盘
? ? ? ? ? ? ? ?}
}//white_do ()

board (){ ? ? ? ?//初始棋盘,更新棋盘
? ?// draw board grids 棋盘方格
? ? cs.SetFillMode (1);//0不填色,1填色
? cs.SetColor (255,250,250,250); ?//backcolor
? ? cs.DrawRect (0,0,650,850); ? ? ? //底板
? cs.SetColor (255,110,110,110); ?
? ? cs.DrawRect (10,10,637,638);
? cs.SetColor (255,220,150,50); ?
? ? cs.DrawRect (8,8,632,632);
? cs.SetColor (255,250,180,100); ?
? ? cs.DrawRect (20,20,620,620);
? ? cs.SetFillMode (0);//0不填色,1填色
? ? ?for (i=1;i<15;i++){ ? ? ? //draw grids
? ? ? ? for (j=1;j<15;j++){ ? ?
? ? cs.SetColor (255,150,150,150); ?//grid color
? ? ? ? cs.DrawRect(i*40-1,j*40-1,i*40+39,j*40+39); ?
? ? cs.SetColor (255,250,250,250); ?//grid color
? ? ? ? cs.DrawRect(i*40,j*40,i*40+40,j*40+40); ?
? ? ? ? ?} ?}
? ? cs.SetColor (255,0,0,0); ?// 框线
? ? ? ?cs.DrawRect (21,21,620,620);
? ? ? ?cs.DrawRect (20,20,620,620);

? ? //draw flag points
? ? cs.SetFillMode (1);//0不填色,1填色
? ? cs.SetColor (255,240,240,240); ?//pieces
? ? ? ?cs.DrawCircle(160,160,5); ? ? //星
? ? ? ?cs.DrawCircle(480,160,5);
? ? ? ?cs.DrawCircle(160,480,5);
? ? ? ?cs.DrawCircle(480,480,5);
? ? ? ?cs.DrawCircle(320,320,5); ? ?//中元

? //draw button 绘制按钮
? cs.SetColor (255,250,250,250); ?
? ? cs.DrawRect (100,900,301,960);
? ? cs.DrawRect (400,900,601,960);
? cs.SetColor (255,250,0,0); ?
? ? ? for (i=1;i<60;i++){ ? ?//按钮渐变色
? cs.SetColor (255,240-i*4,240-i*3,250-i*4); ?
? ? ? cs.DrawLine (101,900+i,300,900+i); ?
? ? ? cs.DrawLine (401,900+i,600,900+i); ?
? ? ? ? ? } ? ?
? ?cs.SetColor (255,0,120,0); ?
? ? ? ?cs.DrawCircle (141,931,15);
? ?cs.SetColor (255,0,0,0); ?
? ? ? ?cs.DrawCircle (140,930,15);
? ?cs.SetColor (255,220,220,220); ?
? ? ? ?cs.DrawCircle (135,925,2);

? ?cs.SetColor (255,0,120,0); ?
? ? ? ?cs.DrawCircle (442,932,15);
? ?cs.SetColor (255,220,220,220); ?
? ? ? cs.DrawCircle (440,930,15);
? ?cs.SetColor (255,250,250,250); ?
? ? ? ?cs.DrawCircle (435,925,2);

? ? ? cs.SetColor(255,255,250,0);
? ? ? cs.SetTextStyle (1);
? ? ? cs.SetTextSize (32);
? ? ? cs.DrawText ("黑子下",178,940);
? ? ? cs.DrawText ("白子下",478,940);
? ?//print title ?界面文字
? ? cs.SetTextSize (80);
? ? ? cs.SetTextStyle (1);
? ?cs.SetColor (255,100,100,100); ?
? ? ? ? cs.DrawText ("五子棋",50,770);
? ? ? ? cs.DrawText ("Gobang",50,870);
? ?cs.SetColor (255,220,220,220); ?
? ? ? ? cs.DrawText ("五子棋",52,772);
? ? ? ? cs.DrawText ("Gobang",52,872);

? ?for (i=1;i<=225;i++){ ? ?
? //draw chess pieces 画出已下黑白子
? ? ?dx=(i-(i/15*15))*40;
? ? ?dy=(i/15)*40+40;
? ? ? ?if (dx==0){ dx=15*40; ? ?dy=dy-40; ? }
?if ( pn[i]==2){ ?//white
? ? cs.SetColor (255,140,80,40); ?//piecesW
? ? ? ?cs.DrawCircle(dx+2,dy+2,15);
? ? cs.SetColor (255,220,220,220); ?//pieceW
? ? ? ?cs.DrawCircle(dx,dy,15);
? ? cs.SetColor (255,250,250,250); ?//pieceW
? ? ? ?cs.DrawCircle(dx-5,dy-5,2); ? }
?if (pn[i]==1){ ?//black
? ? cs.SetColor (255,220,100,40); ?//piecesB
? ? ? ?cs.DrawCircle(dx+1,dy+1,15);
? ? cs.SetColor (255,0,0,0); ? ? ? ? ? ? ?//pieceB
? ? ? ?cs.DrawCircle(dx,dy,15);
? ? cs.SetColor (255,200,200,200); ?//pieceB
? ? ? ?cs.DrawCircle(dx-5,dy-5,2); ? ? ? }
? ? ? ? ? ? ? } ? ? //draw chess pieces
? ? ?cs.SetColor (255,240,0,0); ?//刚落子标记
? ? ? ?cs.DrawCircle(px,py,5);
? ? //提示选子
? ? ?cs.SetTextSize (42);
? ? ?cs.SetColor(255,255,120,250);
? ? ?cs.DrawRect (390,670,600,740);
? ? ?cs.SetColor(255,255,250,0);
? ? ?cs.DrawText (s6,415,720); ? ?//pn num
? ? ?cs.SetTextSize (36);
? ? if (mode==0) cs.SetColor(255,205,200,80);
? ? if (mode==1) cs.SetColor(255,250,150,0);
? ? cs.DrawText (s7,20,680); ? ? ?//mode
? ? ? ?cs.SetTextStyle (0);
? ? ? ?cs.SetTextSize (16);
? ? ?cs.SetColor(255,255,250,250);
? ? cs.DrawText (cordp,665,dn*16); ? ? ?//record?

? //draw pieces number 画出下子序号*****
? ? ?for (i=1;i<=dn;i++){ ? ?//到已下子总数
? ? ? ?cn=i ;
? ? ? ?s=intToString(cn) ;
? ? ? ? ? ? kn=dwn[i] ; ? ? ? ? //读取下子点位号转为坐标 dx,dy?
? ? ?dx=(kn-(kn/15*15))*40;
? ? ?dy=(kn/15)*40+40;
? ? ? ?if (dx==0){ dx=15*40; ? ?dy=dy-40; ? }
? ? ? ? ?cs.SetTextSize (16);
? ? ? ? ?cs.SetColor (255,0,160,0); ?
? ? ? ? ?cs.DrawText (s,dx-5,dy+11);
? ? ? ? ? ? ? ? } ??
? cs.Update ();
? ? detect ();
}//board ()

detect (){
? ?//detect Black chess ?判胜 ******
? ?for (i=1;i<16;i++){ ? ? // B 黑子
? ? ? ?for (j=1;j<12;j++){ ? ?
? ? ? ? ? k=(i-1)*15+j ; ? ?//pn(B) number
? ? ? ?if (pn[k]==1){
? ? ? if ( pn[k+1]==1&&pn[k+2]==1&&pn[k+3]==1&&pn[k+4]==1){ ?goto showwin ; ?} ? //右
? ? ? ? ? ? } ? } ? }
? ?for (i=1;i<12;i++){ ? ? // B 黑子
? ? ? ?for (j=1;j<16;j++){ ? ?
? ? ? ? ? k=(i-1)*15+j ; ? ?//pn(B) number
? ? ? ?if (pn[k]==1){
? ? if ( pn[k+15]==1&&pn[k+30]==1&&pn[k+45]==1&&pn[k+60]==1){ ?goto showwin ; ?} ?//下
? ? ? ? ? ? ? } ? } ? ?}
? for (i=1;i<12;i++){ ? ? // B 黑子
? ? ? ?for (j=1;j<12;j++){ ? ?
? ? ? ? ? k=(i-1)*15+j ; ? ?//pn(B) number
? ? ? ?if (pn[k]==1){
? ? ? ?if ( pn[k+16]==1&&pn[k+32]==1&&pn[k+48]==1&&pn[k+64]==1){ ?goto showwin ; ?} ?//右斜
? ? ? ? ? ? ? } ? ?} ? ?}
? for (i=1;i<12;i++){ ? ? // B 黑子
? ? ? ?for (j=5;j<16;j++){ ? ?
? ? ? ? ? k=(i-1)*15+j ; ? ?//pn(B) number
? ? ? ?if (pn[k]==1){
? ? ? ?if ( pn[k+14]==1&&pn[k+28]==1&&pn[k+42]==1&&pn[k+56]==1){ ?goto showwin ; ?} ?//斜左
? ? ? ? ? ? ? } ? ? } ? ? } ? ? ?
//********************************
//detect White chess 判胜 ******
? ? for (i=1;i<16;i++){ ? ?// W 白子
? ? ? ?for (j=1;j<12;j++){ ? ?
? ? ? ? ? k=(i-1)*15+j ; ? ?//pn(W) number
? ? ? ? if (pn[k]==2){
? ? ? if ( pn[k+1]==2&&pn[k+2]==2&&pn[k+3]==2&&pn[k+4]==2){ ?goto showwin ; ?} ? //右
? ? ? ? ? ?} ? ?} ? ?}
? ?for (i=1;i<12;i++){ ? ? // W 白子
? ? ? ?for (j=1;j<16;j++){ ? ?
? ? ? ? ? k=(i-1)*15+j ; ? ?//pn(W) number
? ? ? ?if (pn[k]==2){
? ? ? if ( pn[k+15]==2&&pn[k+30]==2&&pn[k+45]==2&&pn[k+60]==2){ ?goto showwin ; ?} ?//下 ? ?
? ? ? ? ? ? ?} ? ?} ? ?}
? for (i=1;i<12;i++){ ? ? // W 白子
? ? ? ?for (j=1;j<12;j++){ ? ?
? ? ? ? ? k=(i-1)*15+j ; ? ?//pn(W) number
? ? ? ?if (pn[k]==2){
? ? ? if ( pn[k+16]==2&&pn[k+32]==2&&pn[k+48]==2&&pn[k+64]==2){ ?goto showwin ; ?} ?//右斜
? ? ? ? ? ? ?} ? ?} ? ?}
? ?for (i=1;i<12;i++){ ? ? // W 白子
? ? ? ?for (j=5;j<16;j++){ ? ?
? ? ? ? ? k=(i-1)*15+j ; ? ?//pn(W) number
? ? ? ?if (pn[k]==2){
? ? ? if ( pn[k+14]==2&&pn[k+28]==2&&pn[k+42]==2&&pn[k+56]==2){ ?goto showwin ; ?} ?//斜左
? ? ? ? ? ? ?} ? ? ?} ? ? }?
//*****************************
? if (dn>100) {
? ? ? ss="( ?和 ?棋 ?)"; ?goto showwin; ? ?}
return;
?//show win flag ?判胜负
showwin: ? ?
? ? ?cs.SetTextSize (60);
? ? ? if (pn[k]==1) { ss="黑棋胜 ! ?!"; ? print ss; }
? ? ? if (pn[k]==2) { ss="白棋胜 ! ?!"; ? print ss; }
? ?cs.SetTextStyle (1);
? ? ?cs.SetFillMode (1);//0不填色,1填色
? ? cs.SetColor(255,180,90,40);
? ? ? ? ?cs.DrawText (ss,204,504);
? ? ? cs.SetColor(255,255,0,0);
? ? ? ? ?cs.DrawText (ss,200,500);
? ? cs.SetFillMode (0);//0不填色,1填色
? ? cs.SetColor(255,250,250,0);
? ? ? ? ?cs.DrawText (ss,200,500);
? cs.Update ();
? ? ?isDo=0; ? ? ?//结束标志
}//detect ()
?
gamestart (){
? ? setDisplay (1); ?
? ? cord=1 ; ? ?//记录开关
? ? for (i=1;i<226;i++){ ?pn[i]=0; ? } ? //init pn (n)
? ? for (i=0;i<=90;i++){ ?dwn[i]=0; ? } ? //init dwn (n)
? ? ? ? isDo=1; ? ? ? ? //游戏操作控制
? ? ? ? s6="黑棋选子"; ? ? //init
? ? ? ? px=320 ; ?py=320 ; ? ? ?//标记
? ? ? ?// mode=0 ; ?s7="游戏模式:双人对奕";
? ? ? ? dn=0; ? ? ?//计数清零
? ? ? ? gn=gn+1; ? ?//game round + 1
? ? ? ? ?clearOutput(); ? ? //清除记录
? ? ? ? ?cs.SetBackground(200,200,200); ?//清记录
? ? ? ?board (); ? ? ?//绘出棋板
? }//gamestart ()

undo(){ ? ? ?//悔棋,可选子连续清除
? ? ? if (isDo==1) {?
? ? ? ? ? ? pn[n]=0; ? ? fudat[dn]=0;
? ? ? ? ? ? ?print "悔 "+intToString (n);
? ? ? ? ? ? cs.SetTextStyle (0);
? ? ? ? ? ? cs.SetTextSize (16);
? ? ? ? ? ? cs.SetColor(255,250,0,0);
? ? ? ? ? ? cs.DrawText ("悔",652,dn*16); ??
? ? ? ? ? ? dn=dn-1 ; ?//序号减 1
? ? ? ? ? ? cs.Update ();
? ? ? ? ? ? board (); ? ? ? ? }
}//undo ()

replay (){ ? ?//复盘功能设计
? ? ? gamestart (); ? ? ? ?//棋盘重绘
? ? ? setDisplay (1); ? ? ?//显示
? ? ? print "fusum= " ,fusum; ? ? ?//测试
? ?for (i=1;i<=fusum;i++){ ? ?
? //draw chess pieces 画出复盘黑子白子
? ? ?kn=fudat[i] ; ? ? ? ?//取得数据
? ? ?sd=i-i/2*2 ; ? ? ? ? //mod ?序号,单数=白子,双数=黑子
? ? ? dx=(kn-(kn/15*15))*40; ? ? //转坐标
? ? ? dy=(kn/15)*40+40;
? ? ? ?if (dx==0){ dx=15*40; ? ?dy=dy-40; ? }
?if ( sd==0){ ?//white 画白子
? print i, " ? W ",kn ; ? ? ? //打印记录
? ? ? ss=intToString (kn);
? ? ? ?cordp="W "+ss; ? ? ? ?//界面记录
? ? cs.SetColor (255,140,80,40); ?//piecesW
? ? ? ?cs.DrawCircle(dx+2,dy+2,15);
? ? cs.SetColor (255,220,220,220); ?//pieceW
? ? ? ?cs.DrawCircle(dx,dy,15);
? ? cs.SetColor (255,250,250,250); ?//pieceW
? ? ? ?cs.DrawCircle(dx-5,dy-5,2); ? }
?if ( sd==1){ ?//black 画黑子
? ? print i, " ? B ",kn ; ? ? ? //打印记录
? ? ? ss=intToString (kn);
? ? ? ?cordp="B "+ss; ? ? ? ?//界面记录
? ? cs.SetColor (255,220,100,40); ?//piecesB
? ? ? ?cs.DrawCircle(dx+1,dy+1,15);
? ? cs.SetColor (255,0,0,0); ? ? ? ? ? ? //pieceB
? ? ? ?cs.DrawCircle(dx,dy,15);
? ? cs.SetColor (255,200,200,200); ?//pieceB
? ? ? ?cs.DrawCircle(dx-5,dy-5,2); ? ? ? }
? ? if (i==fusum){ ? ? ?//最后一子
? ? cs.SetColor (255,0,250,0); ? ?//标志最末胜子点
? ? ? ?cs.DrawCircle(dx,dy,5); ? ? ?
? ? ? ? ? cs.SetTextSize (60); ??
? ? ? ? ? cs.SetColor (255,200,100,50); ?
? ? ? ? ? cs.DrawText ("复 ?盘",253, 553) ; ??
? ? ? ? ? ?cs.SetColor (255,20,250,0); ?
? ? ? ? ? cs.DrawText ("复 ?盘",250, 550) ; ? ? ? }
? ? ? ?cs.SetTextSize (16); ??
? ? ? ?s=intToString (i); ? ? ? //标记序号
? ? ? ? ?cs.SetColor (255,250,0,0); ?
? ? ? ? ?cs.DrawText (s,dx-2,dy+5);
? ? ? //界面显示记录
? ? ? cs.SetTextStyle (0);
? ? ? ?cs.SetTextSize (16);
? ? ?cs.SetColor(255,255,250,250);
? ? cs.DrawText (cordp,665,i*16); ? ? ?//写记录
? ? cs.Update ();
? ? sleep (1000);
? ? ? ? ? ?} ? ? //draw replay chess pieces ? ? ? ? ? ? ? ?
}//replay ()

myToolBarProc(int nBtn,int nContext){
? ? ? if(nBtn==100){//开始游戏
? ? ? ? ? ?gamestart (); ? ?
? ? ? ? ? ? ? ? ?}
? ? ? if(nBtn==101){//选择模式
? ? ? ? ? ? mode=mode+1; ? ?//0=人人, 1= 人机
? ? ? ? ? ?if (mode>1) mode=0 ; ?
? ? ? ? ? ?if (mode==0) s7="游戏模式:双人对弈 "; ??
? ? ? ? ? ?if (mode==1) s7="游戏模式:人机模式 "; ?
? ? ? ? ? ? ? ?gamestart (); ??
? ? ? ? ? ? ? ? ? ?}
? ? ? if(nBtn==102){//悔棋
? ? ? ? ? ? undo () ; ??
? ? ? ? ? ? ? ? ? ? }
? ? ? if(nBtn==103){//显示图板,复盘
? ? ? ? ? ? replay ();
? ? ? ? ? ? ? ? ? ? ?}
? ? ? if(nBtn==104){//退出程序
? ? ? ? ? clearOutput();
? ? ? ? ? cs.ClearDraw (0,src);
? ? ? ? ? setDisplay (0);
? ? ? ? ? exit (0); ? ?
? ? ? ? ? ? ? ? ? ?}
? ? ?if(nBtn==105){//查看记录
? ? ? ? ? ? cord=cord+1;
? ? ? ? ? ? if (cord>1) cord=0 ;
? ? ? ? ? ? if (cord==0) setDisplay (0); ? ?//查看记录
? ? ? ? ? ? if (cord==1) setDisplay (1); ? ?//显示棋板
? ? ? ? ? ? ? ? ? }
}//myToolBar ()

loadpic (){ ?//可用于装载预设棋盘底图
//use filebox open a file and load a picture
? ? ? ? ?filebox.SetTitle("装载图片(*.bmp;*.jpg;*.png)");
? ? ? ? ?filebox.SetFilter(".bmp;.jpg;.png");
? ? ? ? ?filebox.Show();
? ? ? ? ?if(filebox.GetCount()==1){
? ? ? ? ? ? fname=filebox.GetFileName(0);
? ? ? ? ? ? if(getPicSize(fname,size)<0){
? ? ? ? ? ? ? ?return; ? ? ? ? ? }
? ? ? ? ? cs.ClearDraw (0,src);
? ? ? ? ? cs.DrawBitmap(fname,0,2);
? ? ? ? ? cs.Update ();
? ? ? ? ? ? ? }
}//loadpic ()

?


//**** ?End ?********

?

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-02-24 15:38:55  更:2022-02-24 15:39:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 16:30:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码