#include "windows.h"
#include "stdio.h"
#define up 'w'
#define left 'a'
#define down 's'
#define right 'd'
#define lz 'p'
#define cls 'q'
struct stu //定义位置记录结构体
{
int x;
int y;
}weizhi;
int player=1;
int Q[20][20]={0}; //定义数组以记录落子情况
void gotoxy(int x, int y) //建立坐标函数
{
COORD c;
c.X=2*x;
c.Y=y;
SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c); //修改当前光标的位置
}
void drawqipan() //绘制棋盘及数据初始化
{
int i,j;
system("cls"); //清除屏幕
for(i=0;i<20;i++)
{
for(j=0;j<20;j++)
{
Q[i][j]=0;
printf("十");
}
printf("\n");
}
weizhi.x=0;weizhi.y=0; //程序数据初始化
gotoxy(0,0);
}
void jilu() //记录落子情况
{
Q[weizhi.x][weizhi.y]=player+1;
if(player)
{
player=0; //玩家变换
return;
}
player=1;
}
int cluozi(int x,int y) //由电脑落子时调用
{
weizhi.x=x;weizhi.y=y;
gotoxy(weizhi.x,weizhi.y);
if(Q[weizhi.x][weizhi.y]==0) //判断当前位置是否已经落子
{
jilu();
printf("○");
gotoxy(weizhi.x,weizhi.y);
}
}
void luozi() //玩家落子
{
if(Q[weizhi.x][weizhi.y]==0) //判断当前位置是否已经落子
{
if(player)
{
jilu();
printf("●");
}
else
{
jilu();
printf("○");
}
gotoxy(weizhi.x,weizhi.y);
}
}
int checkWin() //检查游戏是否有输赢
{
int p;
int r,c,rr,cc,count=0;
p=player==0?2:1;
for(c=0;c<20;c++)
{
for(r=0;r<20;r++)
{
if(Q[r][c]!=p)
continue;
//检查列
rr=r;cc=c;
while(--cc>=0 &&Q[rr][cc]==p)count++; cc=c;
while(++cc<20 &&Q[rr][cc]==p)count++; cc=c;
if(count+1>=5)
return p;
//检查行
count=0;
while(--rr>=0 &&Q[rr][cc]==p)count++; rr=r;
while(++rr<20 &&Q[rr][cc]==p)count++; rr=r;
if(count+1>=5)
return p;
//检查反斜边
count=0;
cc--;rr--;
while((cc>=0||rr>=0) &&Q[rr][cc]==p){count++;cc--;rr--;} rr=r;cc=c;
cc++;rr++;
while((cc<20||rr<20) &&Q[rr][cc]==p){count++;cc++;rr++;} rr=r;cc=c;
if(count+1>=5)
return p;
count=0;
//检查正斜边
count=0;
cc++;rr--;
while((cc<20||rr>=0) &&Q[rr][cc]==p){count++;cc++;rr--;} rr=r;cc=c;
cc--;rr++;
while((cc>=0||rr<20) &&Q[rr][cc]==p){count++;cc--;rr++;} rr=r;cc=c;
if(count+1>=5)
return p;
count=0;
}
}
return 0;
}
void Keypress(char n) //光标位置移动
{
switch(n)
{
case up:if(weizhi.y<=0)weizhi.y=19;else weizhi.y--;gotoxy(weizhi.x,weizhi.y);break;
//向上移动光标
case left:if(weizhi.x<=0)weizhi.x=19;else weizhi.x--;gotoxy(weizhi.x,weizhi.y);break;
//向左移动光标
case right:if(weizhi.x>=19)weizhi.x=0;else weizhi.x++;gotoxy(weizhi.x,weizhi.y);break;
//向右移动光标
case down:if(weizhi.y>=19)weizhi.y=0;else weizhi.y++;gotoxy(weizhi.x,weizhi.y);break;
//向下移动光标
case lz:luozi();break;
//开始落子操作
case cls:drawqipan();break;
//重新开始
}
}
main()
{
char press;
int winer=0;
system("color 2f");
l: drawqipan();
press=getch();
while(1)
{
Keypress(press);
if(press=='p')
winer=checkWin();
if(winer!=0)
gotoxy(0,20);
if(winer==2)
printf("the side of ● wins\n");
else if(winer==1)
printf("the side of ○ wins\n");
else
{
// if(player==0)
// {
// //cluozi(1,2); //此处落子由电脑控制
// }
press=getch();
continue;
}
printf("do you want to play again?(y/n):");
p: press=getch();
if(press=='n')
break;
else if(press=='y')
{
winer=0;
goto l;
}
else
goto p;
}
}
枫蜜柚子茶
- 粉丝: 9019
- 资源: 5351
最新资源
- 带载流子密度的双温模型matlab,电子晶格温度,电子密度,飞秒激光源模拟,有限元法解偏微分方程 德鲁德模型,带载流子密度变化
- GP026-仓库系统.zip
- HttpCanary_3.3.6.apk
- 线控制动系统仿真 Carsim和Simulink联合仿真线控制动系统BBW-EMB系统 包含简单的制动力分配和四个车轮的线控制动机构 四个车轮独立BLDCM三环PID闭环制动控制,最大真实还原线
- Comsol脉冲涡流无损检测仿真 图一:脉冲涡流仿真,检出电压信号 图二:脉冲涡流模型 图三:磁通密度模 图四:磁通密度模
- CC2530无线zigbee裸机代码实现光敏和热敏传感器数值读取.zip
- CC2530无线zigbee裸机代码实现继电器的控制.zip
- CC2530无线zigbee裸机代码实现看门口狗Watch Dog使用.zip
- CC2530无线zigbee裸机代码实现控制步进电机正反转.zip
- CC2530无线zigbee裸机代码实现人体红外传感器数值读取.zip
- CC2530无线zigbee裸机代码实现睡眠定时器唤醒系统.zip
- CC2530无线zigbee裸机代码实现外部中断控制LED开关.zip
- CC2530无线zigbee裸机代码实现外部中断控制流水灯.zip
- 基于51单片机的污水处理厂气体检测报警系统(protues仿真)-毕业设计
- CC2530无线zigbee裸机代码实现温度传感器DS18B20数值读取.zip
- CC2530无线zigbee裸机代码实现温湿度传感器DHT11数值读取.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈