关于一个五子棋人机对战源代码的AI代码

&&&&五子棋人机对战源代码
&五子棋人机对战源代码
控制台的五子棋人机对战~欢迎大家学习讨论
若举报审核通过,可奖励20下载分
被举报人:
owuxiang1234
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
Q.为什么我点的下载下不了,但积分却被扣了
A. 由于下载人数众多,下载服务器做了并发的限制。若发现下载不了,请稍后再试,多次下载是不会重复扣分的。
Q.我的积分不多了,如何获取积分?
A. 获得积分,详细见。
完成任务获取积分。
论坛可用分兑换下载积分。
第一次绑定手机,将获得5个C币,C币可。
关注并绑定CSDNID,送10个下载分
下载资源意味着您已经同意遵守以下协议
资源的所有权益归上传用户所有
未经权益所有人同意,不得将资源中的内容挪作商业或盈利用途
CSDN下载频道仅提供交流平台,并不能对任何下载资源负责
下载资源中如有侵权或不适当内容,
本站不保证本站提供的资源的准确性,安全性和完整性,同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
开发技术下载排行
您当前C币:0&&&可兑换 0 下载积分
兑换下载分:&
消耗C币:0&
立即兑换&&
兑换成功你当前的下载分为 。前去下载资源
你下载资源过于频繁,请输入验证码
如何快速获得积分?
你已经下载过该资源,再次下载不需要扣除积分
五子棋人机对战源代码
所需积分:1
剩余积分:0
扫描微信二维码精彩活动、课程更新抢先知
VIP会员,免积分下载
会员到期时间:日
剩余下载次数:1000
五子棋人机对战源代码
剩余次数:&&&&有效期截止到:
你还不是VIP会员VIP会员享免积分 . 专属通道极速下载
VIP下载次数已满VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员
你的VIP会员已过期VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员一个简单的C语言编写的五子棋程序
请各位指点一下 算法 - 开源中国社区
当前访客身份:游客 [
当前位置:
我们是一个课程设计,让设计一个五子棋的游戏,让我们写实训报告,源代码调试出来了,可是实训报告不知道怎么写,求大神们指点。
一、需求分析
建立一个简单的五子棋游戏,能够实现人机对战。人人对战的简单功能。
二、概要设计(典型算法)
三、模块设计
四、详细设计
五、调试分析
六、用户使用说明
七、参考文献
八、对所设计的软件进行自我评价,如创新点、未解决的问题等情况说明
九、程序源代码
# include&stdio.h&
# include&string.h&
# include&stdlib.h&
# define SPA 0
# define MAN 1
# define COM 2
/* 空位置设为0 ,玩家下的位置设为1 ,电脑下的位置设为2 */
int qipan[15][15];
/* 15*15的棋盘 */
int a,b,c,d,x;
/* a b为玩家下子坐标 ,c d为电脑下子坐标 x为剩余空位置*/
void start();
/* 程序的主要控制函数 */
void draw();
/* 画棋盘 */
int win(int p,int q);
/* 判断胜利 p q为判断点坐标 */
void AI(int *p,int *q);
/* 电脑下子 p q返回下子坐标 */
int value(int p,int q);
/* 计算空点p q的价值 */
int qixing(int n,int p,int q);
/* 返回空点p q在n方向上的棋型 n为1-8方向 从右顺时针开始数 */
void yiwei(int n,int *i,int *j);
/* 在n方向上对坐标 i j 移位 n为1-8方向 从右顺时针开始数
void main()
printf(&还要再来一把吗?输入y或n:&); getchar(); scanf(&%c&,&k);
while(k!='y'&&k!='n'){ printf(&输入错误,请重新输入\n&); scanf(&%c&,&k); }
system(&cls&);
}while(k=='y');
printf(&谢谢使用!\n&);
void start()
int i,j,a1,b1,c1,d1,
/* a1 b1储存玩家上手坐标 c1 d1储存电脑上手坐标 */
printf(&\t╔═══════════════════════════════╗\n&);
printf(&\t║
printf(&\t║
欢迎使用五子棋对战程序
祝您玩的愉快挑战无极限
printf(&\t║
printf(&\t║
._______________________.
printf(&\t║
| _____________________ |
printf(&\t║
printf(&\t║
printf(&\t║
printf(&\t║
made by XXX
printf(&\t║
| I___________________I |
printf(&\t║
!_______________________!
printf(&\t║
._[__________]_.
printf(&\t║
.___|_______________|___.
printf(&\t║
printf(&\t║
~~~~ [CD-ROM]
printf(&\t║
!_____________________!
printf(&\t║
printf(&\t║
printf(&\t║
寒 星 溪 月 疏 星 首,花 残 二 月 并 白 莲。
printf(&\t║
雨 月 金 星 追 黑 玉,松 丘 新 宵 瑞 山 腥。
printf(&\t║
星 月 长 峡 恒 水 流,白 莲 垂 俏 云 浦 岚。
printf(&\t║
黑 玉 银 月 倚 明 星,斜 月 明 月 堪 称 朋。
printf(&\t║
二 十 六 局 先 弃 二,直 指 游 星 斜 彗 星。
printf(&\t║
printf(&\t║
printf(&\t║
1.人机对战
2.人人对战
printf(&\t║
printf(&\t╚═══════════════════════════════╝\n&);
printf(&\t\t\t请输入1或2:&);
scanf(&%d&,&choice);
/* 选择模式:人机或人人 */
while(choice!=1&&choice!=2) { printf(&输入错误,请重新输入:&); scanf(&%d&,&choice); }
if(choice==1){
/* 人机模式 */
system(&cls&);
printf(&欢迎使用五子棋人机对战!下子请输入坐标(如13 6)。悔棋请输入15 15。\n\n\n&);
for(j=0;j&15;j++)
for(i=0;i&15;i++)
qipan[j][i]=SPA;
/* 置棋盘全为空 */
printf(&先下请按1,后下请按2:&);
scanf(&%d&,&i);
while(i!=1&&i!=2)
{ printf(&输入错误,请重新输入:&); scanf(&%d&,&i); }
if(i==1) {
/* 如果玩家先手下子 */
printf(&请下子:&); scanf(&%d%d&,&a,&b);
while((a&0||a&14)||(b&0||b&14)) { printf(&坐标错误!请重新输入:&); scanf(&%d%d&,&a,&b); }
a1=a; b1=b; x--; qipan[a]=MAN; system(&cls&); draw();
while(x!=0){
if(x==225) { c=7; d=7; qipan[d][c]=COM; x--; system(&cls&); draw(); }
/* 电脑先下就下在7 7 */
else { AI(&c,&d); qipan[d][c]=COM; x--; system(&cls&); draw(); } /* 电脑下子 */
c1=c; d1=d;
/* 储存电脑上手棋型 */
if(win(c,d)){
/* 电脑赢 */
printf(&要悔棋吗?请输入y或n:&); getchar(); scanf(&%c&,&ch);
while(ch!='y'&&ch!='n') { printf(&输入错误,请重新输入:&); scanf(&%c&,&ch); }
if(ch=='n') { printf(&下不过电脑很正常,请不要灰心!!!\n&); }
else { x+=2; qipan[d][c]=SPA; qipan[a1]=SPA; system(&cls&); draw(); } /* 悔棋 */
printf(&电脑下在%d %d\n请输入:&,c,d); scanf(&%d%d&,&a,&b);
/* 玩家下子 */
if(a==15&&b==15) { x+=2; qipan[d][c]=SPA; qipan[a1]=SPA; system(&cls&); draw(); printf(&请输入:&); scanf(&%d%d&,&a,&b); } /* 悔棋 */
while((a&0||a&14)||(b&0||b&14)||qipan[a]!=SPA) { printf(&坐标错误或该位置已有子!请重新输入:&); scanf(&%d%d&,&a,&b); }
a1=a; b1=b; x--; qipan[a]=MAN; system(&cls&); draw();
if(win(a,b)){ printf(&电脑神马的都是浮云!!!\n&); }
/* 玩家赢 */
printf(&和局\n&);
if(choice==2){
system(&cls&);
printf(&欢迎使用五子棋人人对战!下子请输入坐标(如13 6)。悔棋请输入15 15。
for(j=0;j&15;j++)
for(i=0;i&15;i++)
qipan[j][i]=SPA; /* 置棋盘全为空 */
while(x!=0){
printf(&1P请输入:&); scanf(&%d%d&,&a,&b);
if(a==15&&b==15) { x+=2; qipan[d][c]=SPA; qipan[a1]=SPA; system(&cls&); draw(); printf(&1P请输入:&); scanf(&%d%d&,&a,&b); }
while((a&0||a&14)||(b&0||b&14)||qipan[a]!=SPA) { printf(&坐标错误或该位置已有子!请重新输入:&); scanf(&%d%d&,&a,&b); }
a1=a; b1=b; x--; qipan[a]=MAN; system(&cls&); draw();
printf(&1P下在%d %d。\n&,a,b);
if(win(a,b)){ printf(&你真棒!!!\n&); }
/* 玩家1赢 */
printf(&2P请输入:&); scanf(&%d%d&,&c,&d);
if(c==15&&d==15) { x+=2; qipan[a]=SPA; qipan[d1][c1]=SPA; system(&cls&); draw(); printf(&2P请输入:&); scanf(&%d%d&,&c,&d); }
while((c&0||c&14)||(d&0||d&14)||qipan[d][c]!=SPA) { printf(&坐标错误或该位置已有子!请重新输入:&); scanf(&%d%d&,&c,&d); }
c1=c; d1=d; x--; qipan[d][c]=COM; system(&cls&); draw();
printf(&2P下在%d %d。\n&,c,d);
if(win(c,d)){ printf(&你真棒!!!\n&); }
/* 玩家2赢 */
printf(&和局\n&);
void draw() /* 画棋盘 */
char p[15][15][4];
for(j=0;j&15;j++)
for(i=0;i&15;i++){
if(qipan[j][i]==SPA) strcpy(p[j][i],&
if(qipan[j][i]==MAN) strcpy(p[j][i],&●\0&);
if(qipan[j][i]==COM) strcpy(p[j][i],&◎\0&);
┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐\n&);
for(i=0,j=0;i&14;i++,j++){
%2d│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%d\n&,j,p[i][0],p[i][1],p[i][2],p[i][3],p[i][4],p[i][5],p[i][6],p[i][7],p[i][8],p[i][9],p[i][10],p[i][11],p[i][12],p[i][13],p[i][14],j);
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤\n&);
14│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│0\n&,p[14][0],p[14][1],p[14][2],p[14][3],p[14][4],p[14][5],p[14][6],p[14][7],p[14][8],p[14][9],p[14][10],p[14][11],p[14][12],p[14][13],p[14][14]);
└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘\n&);
int win(int p,int q)
/* 判断胜利 p q为判断点坐标,胜利返回1,否则返回0 */
int k,n=1,m,P,Q;
/* k储存判断点p q的状态COM或MAN。P Q储存判断点坐标。n为判断方向。m为个数。 */
k=qipan[q][p];
while(n!=5){
while(k==qipan[q][p]){
if(m==5) return 1;
yiwei(n,&p,&q); if(p&0||p&14||q&0||q&14)
n+=4; m-=1; p=P; q=Q;
/* 转向判断 */
while(k==qipan[q][p]){
if(m==5) return 1;
yiwei(n,&p,&q); if(p&0||p&14||q&0||q&14)
n-=3; p=P; q=Q;
/* 不成功则判断下一组方向 */
void AI(int *p,int *q)
/* 电脑下子 *p *q返回下子坐标 */
int i,j,k,max=0,I,J;
/* I J为下点坐标 */
for(j=0;j&15;j++)
for(i=0;i&15;i++)
if(qipan[j][i]==SPA){
/* 历遍棋盘,遇到空点则计算价值,取最大价值点下子。 */
k=value(i,j);
if(k&=max) { I=i; J=j; max=k; }
*p=I; *q=J;
int value(int p,int q) /* 计算空点p q的价值 以k返回 */
int n=1,k=0,k1,k2,K1,K2,X1,Y1,Z1,X2,Y2,Z2,
int a[2][4][4]={40,400,,6,10,600,,200,0,6,10,500,0,30,300,,8,300,,0,0,4,20,300,0};
/* 数组a中储存己方和对方共32种棋型的值
己方0对方1
活0冲1空活2空冲3
子数0-3(0表示1个子,3表示4个子) */
while(n!=5){
k1=qixing(n,p,q); n+=4;
/* k1,k2为2个反方向的棋型编号 */
k2=qixing(n,p,q); n-=3;
if(k1&k2) { temp=k1; k1=k2; k2= }
/* 使编号小的为k1,大的为k2 */
K1=k1; K2=k2;
/* K1 K2储存k1 k2的编号 */
Z1=k1%10; Z2=k2%10; k1/=10; k2/=10; Y1=k1%10; Y2=k2%10; k1/=10; k2/=10; X1=k1%10; X2=k2%10;
/* X Y Z分别表示 己方0对方1
活0冲1空活2空冲3
子数0-3(0表示1个子,3表示4个子) */
if(K1==-1) { if(K2&0) { k+=0; } else k+=a[X2][Y2][Z2]+5;
/* 空棋型and其他 */
if(K1==-2) { if(K2&0) { k+=0; } else k+=a[X2][Y2][Z2]/2; };
/* 边界冲棋型and其他 */
if(K1==-3) { if(K2&0) { k+=0; } else k+=a[X2][Y2][Z2]/3; };
/* 边界空冲棋型and其他 */
if(((K1&-1&&K1&4)&&((K2&-1&&K2&4)||(K2&9&&K2&14)))||((K1&99&&K1&104)&&((K2&99&&K2&104)||(K2&109&&K2&114)))){
/* 己活己活 己活己冲 对活对活 对活对冲 的棋型赋值*/
if(Z1+Z2&=2) { k+=a[X2][Y2][3]; }
else { k+=a[X2][Y2][Z1+Z2+1]; }
if(((K1&9&&K1&14)&&(K2&9&&K2&14))||((K1&109&&K1&114)&&(K2&109&&K2&114))){
/* 己冲己冲 对冲对冲 的棋型赋值*/
if(Z1+Z2&=2) { k+=10000; }
else { k+=0; }
if(((K1&-1&&K1&4)&&((K2&99&&K2&104)||(K2&109&&K2&114)))||((K1&9&&K1&14)&&((K2&99&&K2&104)||(K2&109&&K2&114)))){
/* 己活对活 己活对冲 己冲对活 己冲对冲 的棋型赋值*/
if(Z1==3||Z2==3) { k+=10000; }
else { k+=a[X2][Y2][Z2]+a[X1][Y1][Z1]/4; }
{ k+=a[X1][Y1][Z1]+a[X2][Y2][Z2];
/* 其他棋型的赋值 */
int qixing(int n,int p,int q)
/* 返回空点p q在n方向上的棋型号 n为1-8方向 从右顺时针开始数 */
int k,m=0;
/* 棋型号注解:
己活000-003 己冲010-013 对活100-103 对冲110-113 己空活020-023 己空冲030-033 对空活120-123 对空冲130-133 空-1 边界冲-2 边界空冲-3*/
yiwei(n,&p,&q);
if(p&0||p&14||q&0||q&14) k=-2;
/* 边界冲棋型 */
switch(qipan[q][p]){
case COM:{
m++; yiwei(n,&p,&q);
if(p&0||p&14||q&0||q&14) { k=m+9; }
while(qipan[q][p]==COM) { m++; yiwei(n,&p,&q); if(p&0||p&14||q&0||q&14) { k=m+9; } }
if(qipan[q][p]==SPA) k=m-1;
/* 己方活棋型 */
else k=m+9;
/* 己方冲棋型 */
case MAN:{
m++; yiwei(n,&p,&q);
if(p&0||p&14||q&0||q&14) { k=m+109; }
while(qipan[q][p]==MAN) { m++; yiwei(n,&p,&q); if(p&0||p&14||q&0||q&14) { k=m+109; } }
if(qipan[q][p]==SPA) k=m+99;
/* 对方活棋型 */
else k=m+109;
/* 对方冲棋型 */
case SPA:{
yiwei(n,&p,&q);
if(p&0||p&14||q&0||q&14) { k=-3; }
/* 边界空冲棋型 */
switch(qipan[q][p]){
case COM:{
m++; yiwei(n,&p,&q);
if(p&0||p&14||q&0||q&14) { k=m+29; }
while(qipan[q][p]==COM) { m++; yiwei(n,&p,&q); if(p&0||p&14||q&0||q&14) { k=m+29; } }
if(qipan[q][p]==SPA) k=m+19;
/* 己方空活棋型 */
else k=m+29;
/* 己方空冲棋型 */
case MAN:{
m++; yiwei(n,&p,&q);
if(p&0||p&14||q&0||q&14) { k=m+129; }
while(qipan[q][p]==MAN) { m++; yiwei(n,&p,&q); if(p&0||p&14||q&0||q&14) { k=m+129; } }
if(qipan[q][p]==SPA) k=m+119;
/* 对方空活棋型 */
else k=m+129;
/* 对方空冲棋型 */
case SPA: k=-1;
/* 空棋型 */
void yiwei(int n,int *i,int *j)
/* 在n方向上对坐标 i j 移位 n为1-8方向 从右顺时针开始数 */
switch(n){
case 1: *i+=1;
case 2: *i+=1; *j+=1;
case 3: *j+=1;
case 4: *i-=1; *j+=1;
case 5: *i-=1;
case 6: *i-=1; *j-=1;
case 7: *j-=1;
case 8: *i+=1; *j-=1;
共有2个答案
<span class="a_vote_num" id="a_vote_num_
代码有问题,而且代码风格也很糟糕。
--- 共有 1 条评论 ---
他这个估计是OS网站问题
(3年前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
曾经写过简单的AI
采用的是估值法,例如连2是20分,连3是100分,活四是10000分,死四是1000分,差不多这样的思路,这个分值需要你自己来设置,设置的好坏直接影响AI聪明
然后在估值法的基础上可以进行一些阿法贝塔剪枝。。。
更多开发者职位上
有什么技术问题吗?
格子_的其它问题
类似的话题&&&&java五子棋人机对战完整源码
&java五子棋人机对战完整源码
java五子棋人机对战完整源码 包含AI
亲测可运行
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
Q.为什么我点的下载下不了,但积分却被扣了
A. 由于下载人数众多,下载服务器做了并发的限制。若发现下载不了,请稍后再试,多次下载是不会重复扣分的。
Q.我的积分不多了,如何获取积分?
A. 获得积分,详细见。
完成任务获取积分。
论坛可用分兑换下载积分。
第一次绑定手机,将获得5个C币,C币可。
关注并绑定CSDNID,送10个下载分
下载资源意味着您已经同意遵守以下协议
资源的所有权益归上传用户所有
未经权益所有人同意,不得将资源中的内容挪作商业或盈利用途
CSDN下载频道仅提供交流平台,并不能对任何下载资源负责
下载资源中如有侵权或不适当内容,
本站不保证本站提供的资源的准确性,安全性和完整性,同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
开发技术下载排行
您当前C币:0&&&可兑换 0 下载积分
兑换下载分:&
消耗C币:0&
立即兑换&&
兑换成功你当前的下载分为 。前去下载资源
你下载资源过于频繁,请输入验证码
如何快速获得积分?
你已经下载过该资源,再次下载不需要扣除积分
java五子棋人机对战完整源码
所需积分:3
剩余积分:0
扫描微信二维码精彩活动、课程更新抢先知
VIP会员,免积分下载
会员到期时间:日
剩余下载次数:1000
java五子棋人机对战完整源码
剩余次数:&&&&有效期截止到:
你还不是VIP会员VIP会员享免积分 . 专属通道极速下载
VIP下载次数已满VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员
你的VIP会员已过期VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员求五子棋人机对战算法_百度知道五子棋人机对战 代码分享(求改进)_easyx吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:6,057贴子:
五子棋人机对战 代码分享(求改进)收藏
五子棋人机对战//
电脑方设计思路:在能下棋的空位置中,假设电脑和玩家下在此处,分别算出各个空位置的分数,并找出最大值//
如果最大值是玩家下的,那么电脑就“抢”他的位置,即做到了“防守”//
如果最大值是电脑下的,那就让电脑在此处下,即做到了“进攻”#include&graphics.h&
图形库头文件#include &conio.h&
控制台输入输出,包含getch()函数#include&time.h&#include &stdlib.h&void start ();
开始界面void chessboard();
布置棋盘int score (int m,int n,int k);
打分函数int judge (int m,int n,int k);
判断输赢int a[16][16];
定义全局二维数组,作为虚拟棋盘,记录棋盘情况:0 代表空格 1 代表人下的棋 2 代表电脑下的棋 void main (){srand((unsigned)time(NULL));// 随机种子int score_p[16][16],score_c[16][16];int k,i,j,s,t,x=0,max,p;MOUSEMSGstart();for(;;){k=1;for(i=1;i&16;i++){for(j=1;j&16;j++)a[i][j]=0;}
chessboard();//
获取玩家选择,是否先下HWND wnd = GetHWnd();if (MessageBox(wnd, _T("大神,你要让电脑先下吗?"), _T("提醒"), MB_OKCANCEL | MB_ICONQUESTION) == IDOK){i=rand()%6+6;
//在6-12之间,找一个随机数作为电脑下棋的X坐标j=rand()%6+6;
//在6-12之间,找一个随机数作为电脑下棋的Y坐标a[i][j]=2;setfillcolor(BLACK);fillcircle(50*i,50*j,20);}for(;;){for(;p!=1;){//
玩家下棋,获取鼠标信息m = GetMouseMsg(); switch(m.uMsg){case WM_LBUTTONDOWN:{for(i=50;i&=750;i=i+50){for(j=50;j&=750;j=j+50){if(m.x&i+10&&m.x&i-10&&m.y&j+10&&m.y&j-10&&a[i/50][j/50]==0)
判断是否能下及下好位置{setfillcolor(WHITE);fillcircle(i,j,20);p=1;}}if(p==1){}}}}}p=0;a[i/50][j/50]=1;x=judge(i/50,j/50,k);
if(x&4){settextcolor(YELLOW);settextstyle(30, 0, _T("方正舒体"));outtextxy(200,0, "---你赢啦按任意键继续---");getch();}k=-k;//
初始化分数score_c[i][j]:电脑分数 score_p[i][j]:玩家分数for(i=1;i&16;i++){for(j=1;j&16;j++){score_c[i][j]=0;score_p[i][j]=0;}}for(i=1;i&16;i++){for(j=1;j&16;j++){if(a[i][j]==0){a[i][j]=1;x=score(i,j,1);score_p[i][j]+=x;
记录如果玩家下在此处,得到多少分a[i][j]=2;x=score(i,j,-1);score_c[i][j]+=x;
记录如果电脑下在此处,得到多少分a[i][j]=0;}}}//
找到能下棋的空位置中,假设电脑和人下在此处,得到分数中最大值for(s=t=i=1,max=score_c[1][1];i&16;i++){for(j=1;j&16;j++){if(score_c[i][j]&max){max=score_c[i][j];s=i;t=j;}}}for(i=1;i&16;i++){for(j=1;j&16;j++){if(score_p[i][j]&max){max=score_p[i][j];s=i;t=j;}}}a[s][t]=2;
在最高分处落棋setfillcolor(BLACK);fillcircle(s*50,t*50,20);x=judge(s,t,k);if(x&4){settextcolor(YELLOW);settextstyle(30, 0, _T("方正舒体"));outtextxy(200, 0, "---你输啦按任意键继续---");getch();}k=-k;
}}void start(){initgraph(900,800);setbkcolor(WHITE);cleardevice();settextcolor(RED);
settextstyle(60, 0, _T("方正舒体"));
outtextxy(220, 100, "五子棋人机对战");
outtextxy(500, 200, " ---安然");
settextstyle(30, 0, _T("宋体"));
outtextxy(300,300,"按任意键开始游戏");getch();}void chessboard(){initgraph(900,800);setbkcolor(BROWN);cleardevice();settextcolor(RED);settextstyle(120, 0, _T("方正舒体"));outtextxy(780, 80, "五");outtextxy(780, 200, "子");outtextxy(780, 320, "棋");settextstyle(30, 0, _T("方正舒体"));outtextxy(780, 450, "-安然");for(i=50;i&=750;i=i+50){setlinecolor(BLACK);line(50,i,750,i);line(i,50,i,750);}}int judge (int m,int n,int k){int s,i,j,p=0,q=0,x=0,shu,heng,zuoxie,if (k==1)s=1;elses=2;for(i=m;i&m+5,i&16;i++){if(a[i][n]!=s)elsep++;}for(i=m-1;i&m-5,i&0;i--){if(a[i][n]!=s)elseq++;}heng=p+q;for(j=n,p=0;j&n+5,j&16;j++){if(a[m][j]!=s)elsep++;}for(j=n-1,q=0;j&n-5,j&0;j--){if(a[m][j]!=s)elseq++;}shu=p+q;for(i=m,j=n,p=0;i&16,i&m+5,j&16;i++,j++){if(a[i][j]!=s)elsep++;}for(i=m-1,j=n-1,q=0;i&0,i&m-5,j&0;i--,j--){if(a[i][j]!=s)elseq++;}zuoxie=p+q;for(i=m,j=n,p=0;i&0,i&m-5,j&16;i--,j++){if(a[i][j]!=s)elsep++;}for(i=m+1,j=n-1,q=0;i&16,i&m+5,j&0;i++,j--){if(a[i][j]!=s)elseq++;}youxie=p+q;x=if(shu&x)x=if(zuoxie&x)x=if(youxie&x)x=}int score (int m,int n,int k){int i,j,p=0,q=0,b[4]={0},x=0,shu,heng,zuoxie,if (k==1)s=1;elses=2;for(i=m;i&m+5,i&16;i++){if(a[i][n]!=s){if(a[i][n]==0){b[0]++;}}elsep++;}for(i=m-1;i&m-5,i&0;i--){if(a[i][n]!=s){
if(a[i][n]==0){b[0]++;}}elseq++;}heng=p+q;for(j=n,p=0;j&n+5,j&16;j++){if(a[m][j]!=s){
if(a[m][j]==0){b[1]++;}}elsep++;}for(j=n-1,q=0;j&n-5,j&0;j--){if(a[m][j]!=s){
if(a[i][n]==0){b[1]++;}}elseq++;}shu=p+q;for(i=m,j=n,p=0;i&16,i&m+5,j&16;i++,j++){if(a[i][j]!=s){
if(a[i][j]==0){b[2]++;}}elsep++;}for(i=m-1,j=n-1,q=0;i&0,i&m-5,j&0;i--,j--){if(a[i][j]!=s){
if(a[i][j]==0){b[2]++;}}elseq++;}zuoxie=p+q;for(i=m,j=n,p=0;i&0,i&m-5,j&16;i--,j++){if(a[i][j]!=s){
if(a[i][j]==0){b[3]++;}}elsep++;}for(i=m+1,j=n-1,q=0;i&16,i&m+5,j&0;i++,j--){if(a[i][j]!=s){
if(a[i][j]==0){b[3]++;}}elseq++;}youxie=p+q;if(heng&4||shu&4||zuoxie&4||youxie&4){x=100;}else{for(i=0;i&4;i++){if(b[i]==0){b[i]=-20;}}x=heng+b[0];if(shu+b[1]&x)x=shu+b[1];if(zuoxie+b[2]&x)x=zuoxie+b[2];if(youxie+b[3]&x)x=youxie+b[3];}}
0基础电脑培训——变身高富帅!
写的很不错,加个精华~~就是智能程度有待加强~
果然的意思是其实电脑很傻很天真?
我ai感觉不错,竟然没下过电脑。。。
安然是什么意思?
个人认为除了人工智能以外其他都很不错,电脑用随机数也太傻了。
表示Ai不会弄
不明觉厉!
请问能够简单解释一下score函数吗?
为什么我的总是开始了不可以玩
表示点击之后 程序就崩溃了……
为什么会这样
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 人机五子棋 的文章

 

随机推荐