五子棋C语言代码

五子棋C语言代码,第1张

五子棋C语言代码如下:

#include <stdioh>

#include <biosh>

#include <ctypeh>

#include <conioh>

#include <dosh>

#define CROSSRU 0xbf /右上角点/

#define CROSSLU 0xda /左上角点/

#define CROSSLD 0xc0 /左下角点/

#define CROSSRD 0xd9 /右下角点/

#define CROSSL 0xc3 /左边/

#define CROSSR 0xb4 /右边/

#define CROSSU 0xc2 /上边/

#define CROSSD 0xc1 /下边/

#define CROSS 0xc5 /十字交叉点/

/定义棋盘左上角点在屏幕上的位置/

#define MAPXOFT 5

#define MAPYOFT 2

/定义1号玩家的 *** 作键键码/

#define PLAY1UP 0x1157/上移--'W'/

#define PLAY1DOWN 0x1f53/下移--'S'/

#define PLAY1LEFT 0x1e41/左移--'A'/

#define PLAY1RIGHT 0x2044/右移--'D'/

#define PLAY1DO 0x3920/落子--空格键/

/定义2号玩家的 *** 作键键码/

#define PLAY2UP 0x4800/上移--方向键up/

#define PLAY2DOWN 0x5000/下移--方向键down/

#define PLAY2LEFT 0x4b00/左移--方向键left/

#define PLAY2RIGHT 0x4d00/右移--方向键right/

#define PLAY2DO 0x1c0d/落子--回车键Enter/

/若想在游戏中途退出, 可按 Esc 键/

#define ESCAPE 0x011b

/定义棋盘上交叉点的状态, 即该点有无棋子 /

/若有棋子, 还应能指出是哪个玩家的棋子 /

#define CHESSNULL 0 /没有棋子/

#define CHESS1 'O'/一号玩家的棋子/

#define CHESS2 'X'/二号玩家的棋子/

/定义按键类别/

#define KEYEX99v 0/退出键/

#define KEYFALLCHESS 1/落子键/

#define KEYMOVECURSOR 2/光标移动键/

#define KEYINVALID 3/无效键/

/定义符号常量: 真, 假 --- 真为1, 假为0 /

#define TRUE 1

#define FALSE 0

//

/ 定义数据结构 /

/棋盘交叉点坐标的数据结构/

struct point

{

int x,y;

};

或者下面这个:

#include <graphicsh>

#include <stdlibh>

#include <stdioh>

#include <conioh>

#define N 15

#define B 7

#define STOP -10000

#define OK 1

#define NO 0

#define UP 328

#define DOWN 336

#define LEFT 331

#define RIGHT 333

int a[N+1][N+1];

int zx,zy;

int write=1,biaoji=0;

struct zn{

long sum;

int y;

int x;

}w[N+1][N+1],max,max1;

void cbar(int i,int x,int y,int r);

void map(int a[][]);

int getkey();

int key();

void zuobiao(int x,int y,int i);

int tu(int a[][],int write);

int wtu(int a[][],int write);

int zhineng(int a[][]);

int zh5(int y,int x,int a[][]);

long zzh5(int b[][],int i);

main()

{

int i,j;

int gdriver=DETECT;

int gmode;

initgraph(&gdriver,&gmode,"");

zx=(N+1)/2;

zy=(N+1)/2;

for(i=1;i<=N;i++)

for(j=1;j<=N;j++)

a[i][j]=0;

map(a);

i=1;

while(i)

{

int k,n;

k=wtu(a,write);

if(k==STOP) goto end;

map(a);

n=zhineng(a);

if(n==STOP) goto end;

map(a);

}

end:

;

}

int zhineng(int a[N+1][N+1])

{

int i,j;

int k;

maxsum=-1;

for(i=0;i<=N;i++)

for(j=0;j<+N;j++)

{

w[i][j]sum=0;

w[i][j]x=i;

w[i][j]y=j;

}

for(i=1;i<=N-4;i++)

for(j=1;j<=N-4;j++)

{

k=zh5(i,j,a);

if(k==STOP) return (STOP);

}

for(i=1;i<=N;i++)

for(j=1;j<=N;j++)

{

if(maxsum<w[i][j]sum)

{

maxsum=w[i][j]sum;

maxy=i;

maxx=j;

}

else if(maxsum==w[i][j]sum)

{

if(((maxy-zy)(maxy-zy)+(maxx-zx)(maxx-zx))>((i-zy)(i-zy)+(j-zx)(j-zx)))

maxsum=w[i][j]sum;

maxy=i;

maxx=j;

}

}

if(a[maxy][maxx]==0)

{

a[maxy][maxx]=-1;

zy=maxy;

zx=maxx;

}

}

int zh5(int y,int x,int a[N+1][N+1])

{

int i,j;

int b[6][6];

long c[13];

long d[6][6];

long temp;

for(i=y;i<=y+4;i++)

for(j=x;j<=x+4;j++)

b[i+1-y][j+1-x]=a[i][j];

c[1]=b[1][1]+b[1][2]+b[1][3]+b[1][4]+b[1][5];

c[2]=b[2][1]+b[2][2]+b[2][3]+b[2][4]+b[2][5];

c[3]=b[3][1]+b[3][2]+b[3][3]+b[3][4]+b[3][5];

c[4]=b[4][1]+b[4][2]+b[4][3]+b[4][4]+b[4][5];

c[5]=b[5][1]+b[5][2]+b[5][3]+b[5][4]+b[5][5];

c[6]=b[1][1]+b[2][1]+b[3][1]+b[4][1]+b[5][1];

c[7]=b[1][2]+b[2][2]+b[3][2]+b[4][2]+b[5][2];

c[8]=b[1][3]+b[2][3]+b[3][3]+b[4][3]+b[5][3];

c[9]=b[1][4]+b[2][4]+b[3][4]+b[4][4]+b[5][4];

c[10]=b[1][5]+b[2][5]+b[3][5]+b[4][5]+b[5][5];

c[11]=b[1][1]+b[2][2]+b[3][3]+b[4][4]+b[5][5];

c[12]=b[1][5]+b[2][4]+b[3][3]+b[4][2]+b[5][1];

for(i=1;i<=12;i++)

{

switch(c[i])

{

case 5:biaoji=1;return(STOP);

case -5:biaoji=-1;return(STOP);

case -4:c[i]=100000;break;

case 4:c[i]=100000;break;

case -3:c[i]=150;break;

case 3:c[i]=150;break;

case -2:c[i]=120;break;

case 2:c[i]=100;break;

case -1:c[i]=1;break;

case 1:c[i]=1;break;

default: c[i]=0;

}

}

for(i=1;i<=12;i++)

{

if(c[i]==150)

c[i]+=zzh5(b,i);

}

for(i=1;i<=5;i++)

for(j=1;j<=5;j++)

d[i][j]=0;

for(i=1;i<=5;i++)

for(j=1;j<=5;j++)

{

if(i==j) d[i][j]+=c[11];

if((i+j)==6) d[i][j]+=c[12];

d[i][j]+=c[i]+c[j+5];

}

for(i=1;i<=5;i++)

for(j=1;j<=5;j++)

{

if(b[i][j]!=0)

d[i][j]=-2;

}

max1sum=-1;

max1y=0;

max1x=0;

for(i=1;i<=5;i++)

for(j=1;j<=5;j++)

{

if(max1sum<d[i][j])

{

max1sum=d[i][j];

max1y=i;

max1x=j;

w[i+y-1][j+x-1]sum+=max1sum;

}

else if(max1sum==d[i][j])

{

if(((i+y-1-zy)(i+y-1-zy)+(j+x-1-zx)(j+x-1-zx))>((max1y+y-1-zy)(max1y+y-1-zy)+(max1x+x-1-zx)(max1x+x-1-zx)))

{

max1sum=d[i][j];

max1y=i;

max1x=j;

}

}

}

}

long zzh5(int b[6][6],int n)

{

int i,j,k,l,m;

switch(n)

{

case 1:i=b[1][1];j=b[1][2];k=b[1][3];l=b[1][4];m=b[1][5];break;

case 2:i=b[2][1];j=b[2][2];k=b[2][3];l=b[2][4];m=b[2][5];break;

case 3:i=b[3][1];j=b[3][2];k=b[3][3];l=b[3][4];m=b[3][5];break;

case 4:i=b[4][1];j=b[4][2];k=b[4][3];l=b[4][4];m=b[4][5];break;

case 5:i=b[5][1];j=b[5][2];k=b[5][3];l=b[5][4];m=b[5][5];break;

case 6:i=b[1][1];j=b[2][1];k=b[3][1];l=b[4][1];m=b[5][1];break;

case 7:i=b[1][2];j=b[2][2];k=b[3][2];l=b[4][2];m=b[5][2];break;

case 8:i=b[1][3];j=b[2][3];k=b[3][3];l=b[4][3];m=b[5][3];break;

case 9:i=b[1][4];j=b[2][4];k=b[3][4];l=b[4][4];m=b[5][4];break;

case 10:i=b[1][5];j=b[2][5];k=b[3][5];l=b[4][5];m=b[5][5];break;

case 11:i=b[1][1];j=b[2][2];k=b[3][3];l=b[4][4];m=b[5][5];break;

case 12:i=b[1][5];j=b[2][4];k=b[3][3];l=b[4][2];m=b[5][1];break;

}

if((i==0&&j==1&&k==1&&l==1&&m==0))

return (900);

if((i==0&&j==-1&&k==-1&&l==-1&&m==0))

return(1000);

if((i==0&&j==0&&k==1&&l==1&&m==1)||(i==1&&j==1&&k==1&&l==0&&m==0))

return(20);

if((i==0&&j==0&&k==-1&&l==-1&&m==-1)||(i==-1&&j==-1&&k==-1&&l==0&&m==0))

return(20);

if((i==-1&&j==1&&k==1&&l==1&&m==1)||(i==1&&j==-1&&k==1&&l==1&&m==1)||(i==1&&j==1&&k==-1&&l==1&&m==1)||(i==1&&j==1&&k==1&&l==-1&&m==1)||(i==1&&j==1&&k==1&&l==1&&m==-1))

return(-60);

if((i==1&&j==-1&&k==-1&&l==-1&&m==-1)||(i==-1&&j==1&&k==-1&&l==-1&&m==-1)||(i==-1&&j==1&&k==-1&&l==-1&&m==-1)||(i==-1&&j==-1&&k==-1&&l==1&&m==-1)||(i==-1&&j==-1&&k==-1&&l==-1&&m==1))

return(-60);

}

int wtu(int a[N+1][N+1],int write)

{

int i=1;

map(a);

zuobiao(zx,zy,1);

while(i)

{

int k;

k=tu(a,write);

if(k==OK) i=0;

if(k==STOP) return (STOP);

}

}

int getkey()

{

int key,lo,hi;

key=bioskey(0);

lo=key&0x00ff;

hi=(key&0xff00)>>8;

return((lo==0) hi+256:lo);

}

int key()

{

int k;

k=getkey();

switch(k)

{

case 27: return (STOP);

case 13:

case ' ': return (OK);

case 328: return (UP);

case 336: return (DOWN);

case 331: return (LEFT);

case 333: return (RIGHT);

default: return (NO);

}

}

void zuobiao(int x,int y,int i)

{

int r;

if(i!=0)

{

setcolor(GREEN);

for(r=1;r<=5;r++)

circle(75+25x,25+25y,r);

}

else

{

if(a[zy][zx]==1)

{

setcolor(8);

for(r=1;r<=5;r++)

circle(75+25x,25+25y,r);

}

else if(a[zy][zx]==-1)

{

setcolor(WHITE);

for(r=1;r<=5;r++)

circle(75+25x,25+25y,r);

}

else

{

setcolor(B);

for(r=1;r<=5;r++)

circle(75+25x,25+25y,r);

setcolor(RED); line(75+25zx-5,25+25zy,75+25x+5,25+25zy);

line(75+25zx,25+25zy-5,75+25zx,25+25zy+5);

}

}

}

int tu(int a[N+1][N+1],int write)

{

int k;

re:

k=key();

if(k==OK)

{

if(a[zy][zx]==0)

{

a[zy][zx]=write;

}

else

goto re;

}

if(k==STOP) return(STOP);

if(k==NO) goto re;

if(k==UP)

{

int i,j;

if(zy==1) j=zy;

else j=zy-1;

zuobiao(zx,zy,0);

zuobiao(zx,j,1);

zy=j;

goto re;

}

if(k==DOWN)

{

int i,j;

if(zy==N) j=zy;

else j=zy+1;

zuobiao(zx,zy,0);

zuobiao(zx,j,1);

zy=j;

goto re;

}

if(k==LEFT)

{

int i,j;

if(zx==1) i=zx;

else i=zx-1;

zuobiao(zx,zy,0);

zuobiao(i,zy,1);

zx=i;

goto re;

}

if(k==RIGHT)

{

int i,j;

if(zx==N) i=zx;

else i=zx+1;

zuobiao(zx,zy,0);

zuobiao(i,zy,1);

zx=i;

goto re;

}

}

void cbar(int i,int x,int y,int r)

{

if(i!=0)

{

if(i==1)

setcolor(8);

else if(i==-1)

setcolor(WHITE);

for(i=1;i<=r;i++)

{

circle(x,y,i);

}

}

}

void map(int a[N+1][N+1])

{

int i,j;

cleardevice();

setbkcolor(B);

setcolor(RED);

for(i=0;i<N;i++)

{

line(100,50+25i,75+N25,50+25i);

line(100+25i,50,100+25i,25+N25);

}

for(i=1;i<=N;i++)

for(j=1;j<=N;j++)

cbar(a[i][j],75+25j,25+25i,10);

}

参考文章: Cocos Creator 实战教程(1)——人机对战五子棋(节点事件相关)

源码: goBang

思考一:作为对手的系统用什么算法下棋?

估值函数、搜索算法和胜负判断等

博弈算法,在极大极小值搜索中应用alpha-beta剪枝

智能五子棋博弈程序的核心算法

智能五子棋中的算法研究

人机版五子棋两种算法概述

思考二:人机博弈的要点

1棋局的状态能够在机器中表示出来,并能让程序知道当时的博弈状态

2合法的走法规则如何在机器中实现,以便不让机器随便乱走而有失公平

3如何让机器从所有的合法走法中选择最佳的走法

4一种判断博弈状态优劣的方法,并能让机器能够做出智能的选择

5一个显示博弈状态的界面,有了这样的界面程序才能用的起来而有意义

思考三:五子棋下棋规矩

五子棋对局,执行黑方指定开局、三手可交换、五手两打的规定。

整个对局过程中黑方有禁手,白方无禁手。

黑方禁手有三三禁手、四四禁手和长连禁手三种

思考四:人机下棋逻辑

系统先下,黑棋落子,交换下子顺序

玩家下,监测胜负(无胜负,交换下子顺序)

系统下(五元组中找最优位置),监测胜负(无胜负,交换下子顺序)

。。。

直到分出胜负(这里未考虑平局)

出现提示窗,告知玩家战局结果,同时可选择“返回菜单”或“再来一局”

具体实现:涉及知识点

官方文档--预制资源

将其改名为Chess拖入下面assets文件夹使其成为预制资源

1在canvas节点上挂载Menu脚本组件

2在按钮事件中,拖拽和选择相应的Target,Component和Handler

初始化棋子节点断点截图

系统为黑棋的评分表:

​ 找最优位置下子

个人想法

这是我学习五子棋游戏开发的记录,后续还会写其他游戏开发,加油!

很多朋友喜欢玩五子棋,但是只有一个人的时候如何去玩呢,其实我们的手机里面就可以玩。如何在手机里面下五子棋,只需要简单的几步,就可以完成哦。

工具/原料:手机软件版本:140、手机型号名称:iphone X、微信版本:7018

1、打开微信软件,点击下方发现,选择最后一个小程序。

2、在搜索小程序框框里面输入五子棋,点击搜索。

3、选择五子棋游戏经典版,点击即可进入游戏页面。

4、选择对应的难度选择,先后手,点击开始游戏。

5、之后就可以进行游戏了,是不是很简单呢。

6、如果经常玩的话,可以将游戏添加到小程序,下次查找的时候就会比较的简单了。

一:19×19的棋盘

二:能判断输赢

三:最好是人机对战的

如下部分程序:

import javaawt;

import javaawtevent;

class wuziqi

{

public static void main(String args[])

{

new frame();

}

}

class frame extends Frame

{

frame()

{

super("五子棋游戏");

myCanvas canvas=new myCanvas();

thisadd(canvas);

thisaddWindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent e)

{

Systemexit(0);

}

}

);

thispack();

thisshow();

}

}

class myCanvas extends Canvas

{

myCanvas()

{

}

public void paint(Graphics g)

{

Dimension size=thisgetSize();

gdrawRect(0,0,sizewidth-1,sizeheight-1);

gsetColor(ColorlightGray);

gdraw3DRect(1,1,sizewidth-3,sizeheight-3,true);

gsetColor(Colorblack);

for(int i=0;i<19;i++)

{

gdrawLine(30,30+i24,462,30+i24);

}

for(int j=0;j<19;j++)

{

gdrawLine(30+j24,30,30+j24,462);

}

}

public Dimension getPreferredSize()

{

return new Dimension(492,492);

}

}

以上就是关于五子棋C语言代码全部的内容,包括:五子棋C语言代码、五子棋人机博弈游戏(cocos creator)、五子棋怎么下等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9398322.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存