C++小游戏——井字棋
#include<cstdio>
#include<windows.h>
#include<ctime>
int main()
{
srand(time(NULL));HANDLE hOut; hOut=GetStdHandle(STD_OUTPUT_HANDLE);
int a[7][7],b[7][7],i,j,n=9,xa,ya,xb,yb,c=0,d=0,k,l,m;
printf("请输入两个数字,中间用空格隔开,表示第几行第几列 ");Sleep(3500);
COORD pos={0,0}; SetConsoleCursorPosition(hOut,pos); printf(" ");
SetConsoleCursorPosition(hOut,pos);
printf("人机对战按1,人人对战按2 "); scanf("%d",&k);
SetConsoleCursorPosition(hOut,pos); printf(" ");
SetConsoleCursorPosition(hOut,pos);
if(k==1) {printf("你先手按1,电脑先手按2 "); scanf("%d",&l);
if(k==2) l=2;
SetConsoleCursorPosition(hOut,pos); printf(" ");
SetConsoleCursorPosition(hOut,pos); }
printf("\n┌─┬─┬─┐\n\n");
printf("├─┼─┼─┤\n\n");
printf("├─┼─┼─┤\n\n");
printf("└─┴─┴─┘\n\n");
for(i=0;i<=6;i++) for(j=0;j<=6;j++) {a[i][j]=b[i][j]=0;}
while(n>=1)
{
while(l!=2)
{
AA:COORD posA={0,9}; SetConsoleCursorPosition(hOut,posA); printf(" ");
SetConsoleCursorPosition(hOut,posA);SetConsoleTextAttribute(hOut,0x02|0x05);
if(k==1) printf("请你下子:"); if(k==2) printf("1号下子:"); scanf("%d %d",&xa,&ya);
if(a[xa+1][ya+1]!=0||b[xa+1][ya+1]!=0||(xa>3)||(ya>3))
{COORD posa={0,11}; SetConsoleCursorPosition(hOut,posa); printf("不存在此格或此格已有棋子\n"); goto AA; }
COORD posa={0,11}; SetConsoleCursorPosition(hOut,posa); printf(" ");
COORD pos1={3*ya,2*xa}; SetConsoleCursorPosition(hOut,pos1);
SetConsoleTextAttribute(hOut,0x02|0x09);printf("#");
if(xa<=3) a[xa+4][ya+1]=1;
if(ya<=3) a[xa+1][ya+4]=1;
if(xa<=3&&ya<=3) a[xa+4][ya+4]=1;
if(xa+ya==4&&ya>=2) a[xa+4][ya-2]=1;
a[xa+1][ya+1]=1;b[xa+1][ya+1]=0;n--;
for(i=2;i<=4;i++) for(j=2;j<=4;j++)
{
if((a[i][j]+a[i][j+1]+a[i][j+2]==3)||(a[i][j]+a[i+1][j]+a[i+2][j]==3)||(a[4][4]+a[2][2]+a[3][3]==3)||a[2][4]+a[3][3]+a[4][2]==3)
{c++; break;}
}
l=2;
}
if(c!=0||d!=0||n==0) break;
BB:COORD posB={0,10};SetConsoleCursorPosition(hOut,posB);printf(" ");
SetConsoleCursorPosition(hOut,posB);SetConsoleTextAttribute(hOut,0x02|0x05);
if(k==1)
{ printf("电脑下子:");m=2;
for(i=2;i<=4;i++)
{
if((b[i][6-i]+b[i+1][5-i]+b[i+2][4-i]==2)&&a[i][6-i]==0&&b[i][6-i]==0) {xb=i-1; yb=5-i; m=1; break;} else m=0;
if((b[i][i]+b[i+1][i+1]+b[i+2][i+2]==2)&&a[i][i]==0&&b[i][i]==0) {xb=i-1; yb=i-1; m=1; break;} else m=2;
for(j=2;j<=4;j++)
{
if((b[i][j]+b[i][j+1]+b[i][j+2]==2)&&a[i][j]==0&&b[i][j]==0) {xb=i-1; yb=i-1; m=1; break;} else
{
if((b[i][j]+b[i+1][j]+b[i+2][j]==2)&&a[i][j]==0&&b[i][j]==0) {xb=i-1; yb=i-1; m=1; break;} else m=2;
}
}
}
if(m==2)
{
for(i=2;i<=4;i++)
{
if((a[i][6-i]+a[i+1][5-i]+a[i+2][4-i]==2)&&a[i][6-i]==0&&b[i][6-i]==0) {xb=i-1; yb=5-i; m=1; break;} else m=0;
if((a[i][i]+a[i+1][i+1]+a[i+2][i+2]==2)&&a[i][i]==0&&b[i][i]==0) {xb=i-1; yb=i-1; m=1; break;} else m=0;
for(j=2;j<=4;j++)
{
if((a[i][j]+a[i][j+1]+a[i][j+2]==2)&&a[i][j]==0&&b[i][j]==0) {xb=i-1; yb=i-1; m=1; break;} else
{
if((a[i][j]+a[i+1][j]+a[i+2][j]==2)&&a[i][j]==0&&b[i][j]==0) {xb=i-1; yb=i-1; m=1; break;} else m=0;
}
}
}
}
if(m==0)
{
do {xb=rand()%4+1; yb=rand()%4+1;} while(a[xb+1][yb+1]!=0||b[xb+1][yb+1]!=0);
}
printf("%d %d",xb,yb);
}
if(k==2){printf("2号下子:"); scanf("%d %d",&xb,&yb);}
if(a[xb+1][yb+1]!=0||b[xb+1][yb+1]!=0||(xb>3)||(yb>3))
{COORD posb={0,11}; SetConsoleCursorPosition(hOut,posb); printf("不存在此格或此格已有棋子\n"); goto BB; }
COORD posa={0,11}; SetConsoleCursorPosition(hOut,posa); printf(" ");
COORD pos2={3*yb,2*xb}; SetConsoleCursorPosition(hOut,pos2);
SetConsoleTextAttribute(hOut,0x02|0x07);printf("#");
b[xb+1][yb+1]=1;a[xb+1][yb+1]=0;n--;
if(xb<=3) b[xb+4][yb+1]=1;
if(yb<=3) b[xb+1][yb+4]=1;
if(xb<=3&&yb<=3) b[xb+4][yb+4]=1;
if(xb+yb==4&&yb>=2) a[xb+4][yb-2]=1;
for(i=2;i<=4;i++) for(j=1;j<=4;j++)
{
if((b[i][j]+b[i][j+1]+b[i][j+2]==3)||(b[i][j]+b[i+1][j]+b[i+2][j]==3)||(b[4][4]+b[2][2]+b[3][3]==3)||b[3][3]+b[2][4]+b[4][2]==3)
{d++; break;}
}
l=3;
if(c!=0||d!=0||n==0) break;
}
COORD poss={0,12}; SetConsoleCursorPosition(hOut,poss);SetConsoleTextAttribute(hOut,0x02|0x05);
if(c!=0&&k==2) printf("1号赢了!");
else {if(d!=0&&k==2) printf("2号赢了!");
else {if(d!=0&&k==1) printf("你输了!");
else {if(c!=0&&k==1) printf("你赢了!");
else printf("平局!");
}
}
}
return 0;
}
C++小游戏——井字棋的更多相关文章
- Pascal小游戏 井字棋
一个很经典的井字棋游戏 Pascal源码Chaobs奉上 注意:1.有的FP版本不支持汉语,将会出现乱码.2.别想赢电脑了,平手不错了. 井字过三关: program TicTacToe; uses ...
- Java 小游戏 - 井字棋 v1.0 (初步完成) (2018.4.16更新)
井字棋游戏初步完成 实现功能:输入位置数据->打印棋盘->判断是否胜利->继续游戏/退出游戏 缺点:没有清屏函数 判断胜利方法太过无脑 package MYGAME; ...
- python 游戏(井字棋)
1. 游戏思路和流程图 实现功能,现实生活中的井字棋玩法 游戏流程图 2. 使用模块和游戏提示 import random def game_info(): print('欢迎来到井字棋游戏') pr ...
- [HTML5实现人工智能]小游戏《井字棋》发布,据说IQ上200才能赢
一,什么是TicTacToe(井字棋) 本 游戏 为在下用lufylegend开发的第二款小游戏.此游戏是大家想必大家小时候都玩过,因为玩它很简单,只需要一张草稿纸和一只笔就能开始游戏,所以广受儿 ...
- 『HTML5实现人工智能』小游戏《井字棋》发布,据说IQ上200才能赢【算法&代码讲解+资源打包下载】
一,什么是TicTacToe(井字棋) 本游戏为在下用lufylegend开发的第二款小游戏.此游戏是大家想必大家小时候都玩过,因为玩它很简单,只需要一张草稿纸和一只笔就能开始游戏,所以广受儿童欢迎. ...
- 井字棋小游戏(C语言)
最近沉迷于<NetHack>.<DCSS>等字符游戏,对其很感兴趣,于是用C语言写了个字符界面的井字棋小游戏.欢迎大家指教. 编写时遇到了一些问题,我原先准备用循环,直到读取到 ...
- 井字棋游戏升级版 - TopTicTacToe项目 简介
一.游戏简介 井字棋是一款世界闻名的游戏,不用我说,你一定知道它的游戏规则. 这款游戏简单易学,玩起来很有意思,不过已经证明出这款游戏如果两个玩家都足够聪明的话, 是很容易无法分出胜负的,即我们得到的 ...
- [CareerCup] 17.2 Tic Tac Toe 井字棋游戏
17.2 Design an algorithm to figure out if someone has won a game oftic-tac-toe. 这道题让我们判断玩家是否能赢井字棋游戏, ...
- [C++] 井字棋游戏源码
TicTac.h #define EX 1 //该点左鼠标 #define OH 2 //该点右鼠标 class CMyApp : public CWinApp { public: virtual B ...
随机推荐
- UWP-动态磁贴
原文:UWP-动态磁贴 来自:IT追梦园 (http://www.zmy123.cn/?p=1172) UWP应用的一大特色就是动态磁贴,所以,你的应用如果还没有设置动态磁贴,那么,和我一起来为应用加 ...
- 简单的Windows Webcam应用:Barcode Reader
原文:简单的Windows Webcam应用:Barcode Reader 在Windows上用WinForm创建一个Webcam应用需要用到DirectShow.DirectShow没有提供C#的接 ...
- webform的图片防盗链
最近用到域的问题,不是同一主机的请求将不允许请求此页面. 这其实和图片防盗链的本质是一样的. 通过两个属性:由于当时用的aspx视图引擎,所以需要通过HttpContext.Current才能拿到ht ...
- Tomcat Java SSL
转自 - http://blog.csdn.net/szzt_lingpeng/article/details/51247980 转载自:http://my.oschina.net/cimu/blog ...
- Westciv Tools主要为CSS3提供了渐变gradients、盒子阴影box-shadow、变形transform和文字描边四种在线生成效果的工具
Westciv Tools主要为CSS3提供了渐变gradients.盒子阴影box-shadow.变形transform和文字描边四种在线生成效果的工具 1.Westciv Tools 彩蛋爆料直击 ...
- 初涉Delphi Socket编程
不是第一次接触socket编程了,但以前都是看别人的依葫芦画瓢,也不知道具体的原理. 新的项目,有了新的开始,同时也需要有新的认识. Delphi 中带有两套TCP Socket组件: Indy So ...
- VS2010使用c++、gSOAP创建WebService 图文教程
VS2010使用c++.gSOAP创建的WebService 图文教程 环境 操作系统:Windows 7gsoap版本:2.8.32C++编译器/开发环境:Visual Studio 2010 gS ...
- MongoDB自学日记1——基本操作
作为一个做底层及后台研发的,最近对NoSQL却产生了浓厚的兴趣,加入了一个DBA群,据说北京排的上号的DBA都在里面,然而里面基本都是Oracle系的,MySQL和MongoDB系的少之又少.学习靠不 ...
- JavaScript规定了几种语言类型?
JavaScript中的每一个值都有它自己的类型,JavaScript规定了七种语言类型: 1.Undefined 2.Null 3.Boolean 4.String 5.Number 6.Symbo ...
- 如何使用Vue.js来搭建一个后台管理系统
目录 使用的技术 基础但不好版 1.初始化项目 2.实现初始页内容自定义 3.使用路由 原始代码 自建页面 修改路由 4.测试路由跳转 补充 子路由版 嵌套router-view 定义子路由 修改菜单 ...