简单的五子棋程序(可悔棋版和普通版)
//普通版
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#define N 8
void display(char (* p)[N])
{
system("cls");
int i,j;
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
{
printf("%c\t",p[i][j]);
}
printf("\n\n\n");
}
}
void downchess(char (* p)[N])
{
char black='#';
char white='@';
char h;
int i,j,num=0;
do
{
if(num%2==0)
{
h=black;
}
else
{
h=white;
}
printf("%c方请输入落子坐标的行和列:",h);
scanf("%d%d",&i,&j);
if (p[i][j]!='.')continue;
p[i][j]=h;
display(p);
// if(judje(p,i,j)==1)
// {
//
// break;
// }
num++;
}
while(judje(p,i,j)==0);
printf("%c方胜利\n",h);
}
int judje(char (* p)[N],int a,int b)
{
int sum=0;
int j=0,i=1;
//判断行向
for(;;)
{
if(p[a][b-j]==p[a][b])
{
sum++;
j++;
}
else if(p[a][b+i]==p[a][b])
{
sum++;
i++;
}
else
break;
}
if(sum==5)
return 1;
//判断纵向
sum=0;j=0;i=1;
for(;;)
{
if(p[a-j][b]==p[a][b])
{
sum++;
j++;
}
else
if(p[a+i][b]==p[a][b])
{
sum++;
i++;
}
else break;
}
if(sum==5)
return 1;
//判断右对角
sum=0;j=0;i=1;
for(;;)
{
if(p[a-j][b+j]==p[a][b])
{
sum++;
j++;
}
else
if(p[a+i][b-i]==p[a][b])
{
sum++;
i++;
}
else break;
}
if(sum==5)
return 1;
sum=0;j=0;i=1;
// 判断左对角
for(;;)
{
if(p[a+j][b+j]==p[a][b])
{
sum++;
j++;
}
else
if(p[a-i][b-i]==p[a][b])
{
sum++;
i++;
}
else break;
}
if(sum==5)
return 1;
else return 0;
}
int main()
{
int i,j;
char chess[N][N];
int n=48,k=49;
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
{
if(i==0)
{
chess[i][j]=n;
n++;
}
else if(j==0)
{
chess[i][j]=k;
k++;
}
else
chess[i][j]='.';
}
}
display(chess);
downchess(chess);
return 0;
}
//可悔棋版
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#define N 8
void display(int (* p)[N])
{
system("cls");
int i,j;
char qipan[N][N];
char black='#';
char white='@';
char null='.';
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
{
if(p[i][j]%2==0)
qipan[i][j]=black;
else if(p[i][j]%2==1)
qipan[i][j]=white;
else qipan[i][j]=null;
}
}
for(i=-1; i<N; i++)
{
printf("%d\t",i);
} printf("\n\n\n");
for(i=0; i<N; i++)
{
printf("%d\t",i);
for(j=0; j<N; j++)
{
printf("%c\t",qipan[i][j]);
}
printf("\n\n\n");
}
}
void downchess(int (* p)[N])
{
char h;
char black='#';
char white='@';
int i,j,num=0;
do
{
if(num%2==0)
{
h=black;
}
else
{
h=white;
}
printf("%c方请输入落子坐标的行和列:",h);
scanf("%d%d",&i,&j);
if (p[i][j]!=-1)continue;
p[i][j]=num;
display(p);
int choose;
do
{
printf("悔棋请按2,继续请按1:");
scanf("%d",&choose);
switch(choose)
{
case 1: break;
case 2:
huiqi(p,num);
num--;
display(p);
default : break;
}
}while(choose!=1);
num++;
}
while(judje(p,i,j,num-1)==0);
printf("%c方胜利\n",h);
}
void huiqi(int (* p)[N],int num)
{
int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if(p[i][j]==num)
p[i][j]=-1;
}
}
}
int judje(int (* p)[N],int a,int b,int num)
{
int sum=0;
int j=0,i=1;
//判断行向
for(;;)
{
if(p[a][b-j]%2==num%2&&p[a][b-j]!=-1)
{
sum++;
j++;
}
else if(p[a][b+i]%2==num%2&&p[a][b+i]!=-1)
{
sum++;
i++;
}
else
break;
}
if(sum==5)
return 1;
//判断纵向
sum=0;j=0;i=1;
for(;;)
{
if(p[a-j][b]%2==num%2&&p[a-j][b]!=-1)
{
sum++;
j++;
}
else
if(p[a+i][b]%2==p[a][b]%2&&p[a+i][b]!=-1)
{
sum++;
i++;
}
else break;
}
if(sum==5)
return 1;
//判断右对角
sum=0;j=0;i=1;
for(;;)
{
if(p[a-j][b+j]%2==num%2&&p[a-j][b+j]!=-1)
{
sum++;
j++;
}
else
if(p[a+i][b-i]%2==num%2&&p[a+i][b-i]!=-1)
{
sum++;
i++;
}
else break;
}
if(sum==5)
return 1;
sum=0;j=0;i=1;
// 判断左对角
for(;;)
{
if(p[a+j][b+j]%2==num%2&&p[a+j][b+j]!=-1)
{
sum++;
j++;
}
else
if(p[a-i][b-i]%2==num%2&&p[a-i][b-i]!=-1)
{
sum++;
i++;
}
else break;
}
if(sum==5)
return 1;
else return 0;
}
int main()
{
int i,j;
int chess[N][N];
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
{
chess[i][j]=-1;
}
}
display(chess);
downchess(chess);
return 0;
}
简单的五子棋程序(可悔棋版和普通版)相关推荐
- 人工智能实现简单的五子棋程序
我这个程序在QQ五子棋上实验了一下,结果是黑棋先手全胜,白棋后手的胜率却惨不忍睹,原因有下: 1.五子棋的先手是有优势的,所以职业比赛里都会有禁手来实现公平 2.水平有限,对局面的评估只有一小部分 主 ...
- C++实现简单的五子棋程序
//全部代码12 .26.2017 #include<iostream> #include<stdlib.h> #include<iomanip> //格式 ...
- vc6.0c语言五子棋程序,哪位大虾可以给我个VC6.0下用C语言编的五子棋,要有流程图...
五子棋 代码 VC6.0 qq_29018467112015-06-14 五子棋 (用C语言编写五子棋游戏) rannianzhixia170392017-04-20 基于easyx图形的五子棋游戏 ...
- java人际对战五子棋_系统框图如下 java实现五子棋程序 可以实现人人对战 人机对战 简单功能 悔棋 认输...
展开全部 一.实验题目 五子棋游戏e69da5e6ba9062616964757a686964616f31333365633835. 二.问题分析 五子棋是双人博弈棋类益智游戏,由围棋演变而来,属纯策 ...
- 五子棋对弈程序c语言,五子棋程序纯C语言版.doc
五子棋程序纯C语言版 五子棋程序纯C语言版 //以前发的代码里因为有C++的一点点代码,现在我把那C++的代码改掉.重发出来.//但是这些代码由于编译器的原因,在TC下仍无法运行.请使用VC.#inc ...
- Java版五子棋程序
一.实验题目 五子棋游戏. 二.问题分析 五子棋是双人博弈棋类益智游戏,由围棋演变而来,属纯策略型.棋盘通常15*15,即15行,15列,共225个交叉点,即棋子落点:棋子由黑白两色组成,黑棋123颗 ...
- 小程序源码:大红喜庆版UI猜灯谜又叫猜字谜-多玩法安装简单
大家好给大家带来一款UI比较喜庆的猜灯谜小程序 大家看演示图的时候当然也是可以看得到那界面是多么的喜庆 而且新的一年也很快就来了,所以种种的界面可能都比较往喜庆方面去变吧 这款小程序搭建是免服务器和域 ...
- 用c语言做一个五子棋程序,C语言制作简单五子棋游戏
原标题:C语言制作简单五子棋游戏 C语言制作简单的五子棋游戏 学习C语言的人很多,但是用C语言很少,而用来为自己所用,来做游戏的人就更少了,很多人都是跟着学校学习,学校讲到哪就坐到哪,但是以后却还是不 ...
- C#版及nodejs版的com端口监听程序
感受: 写监听程序的感受:原来有些事情并不是想象的那么难,难和简单就只在一个点上,一个点突破了,后面就豁然开朗了.所以有些问题,不能死闷,要先思考,然后查资料,然后问有经验的人. 最近写一个com端口 ...
最新文章
- android 融云会话列表,为什么切换账号之后会话列表不刷新,还显示上一个帐号的内容?...
- Spring Boot 多模块与 Maven 私有仓库
- CentOS下的rm命令改造成移动文件至回收站
- 顺序队列,循环队列,链队列
- 燕山大学数字通信计算机仿真代码,燕山大学数字通信计算机仿真课程设计模板.doc...
- 配置openldap_openldap环境搭建+集成JIRA服务
- 《Javascript高级程序设计》读书笔记(1-3章)
- 程序员如何避免身体被掏空?
- MediaBuffer使用要点
- 曲线救国:提高github下载速度到2MB/s
- UG软件模具设计时常用命令以及UG软件默认的快捷键
- 盖世无双之国产数据库风云榜-2022年02月
- win10服务器网页打不开怎么办,win10系统ie浏览器有些网页打不开怎么回事
- 摩尔庄园服务器显示不出,摩尔庄园电脑为什么玩不了 摩尔庄园电脑玩不了解决方案...
- py实战绘制人口金字塔图
- 2001-2022年全国各城市风速数据(逐日、逐月、逐年)
- 网格平滑基础算法总结
- 人类简史 10 金钱的味道
- 使用vue,实现前端导入excel数据
- letswave教程:脑电数据图形绘制、批处理以及脚本生成