已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include stdafx.h#includeusing namespace std;void check(int i,int j); /检查每条直线上的各方棋子的数量int other(int b,int c);void check_win(); /检查是否胜利void begin(char ch);void computer(); /电脑下棋void user(); /用户下棋int a44,deep;int line332; /全局变量,用来存放每条直线上的各方棋子数! /第一维下标表示是行列还是对角线,第二维下标表示第几条直线 /第三维下标表示各方的棋子数!void main() char ch;cout欢迎与本机下#字棋!您的棋子将用#表示,电脑的棋子用X表示n请选择先后手,输入u则您先手,输入c则电脑先手!(小写)nch; if(ch!=u&ch!=c)cout您输入的数据不合法,请重新输入!endl;while(ch!=u&ch!=c); /非法处理if(ch=u) cout您选择了您先手!nendl;else if(ch=c) cout您选择了电脑先手nendl;begin(ch);void begin(char ch) int i,j,k;a11=1;coutn 1 | 2 | 3 n n 4 | 5 | 6 n n 7 | 8 | 9 nendl;for(i=1;i4;i+) for(j=1;j4;j+) if(j=1) if(i=1); else aij=ai-13+1; else aij=aij-1+1; /初始化棋盘 for(i=0;i3;i+) for(j=0;j3;j+) for(k=0;k3;k+) lineijk=0;deep=0;if(ch=u) user();else computer();void computer() int i,j,flag=0,m; /flag判断是否落子for(i=0;i3;i+) for(j=0;j3;j+) if (lineij0=2&lineij1=0&flag=0) m=other(i,j); if(m%3=0) am/33=40;check(m/3,3); else am/3+1m%3=40; check(m/3+1,m%3); /40是#的ASCII码减48 flag=1; /当某条直线上用户有两棋子而我方无棋子时,在该直线的另一点落子 if (lineij1=2&lineij0=0&flag=0) m=other(i,j); if(m%3=0) am/33=40;check(m/3,3); else am/3+1m%3=40; check(m/3+1,m%3); /当某条直线上我方有两棋子而对方无棋子时,在该直线的另一点落子 flag=1; if (lineij1=1&lineij0=0&flag=0) m=other(i,j); if(m%3=0) am/33=40;check(m/3,3); else am/3+1m%3=40; check(m/3+1,m%3); /当某条直线上我方有一棋子而对方无棋子时,在该直线的另一点落子 flag=1; if(flag=0)if (a22=5) a22=72; flag=1; check(2,2); /优先下第5个位置else for(i=2;i9&flag=0&aij=(i-1)*3+j;i+=2) if(i%3=0) ai/33=40;check(i/3,3); else ai/3+1i%3=40; check(i/3+1,i%3); flag=1; /2,4,6,8其次 for(i=1;i9&flag=0&aij=(i-1)*3+j;i+=2) if(i%3=0) ai/33=40;check(i/3,3); else ai/3+1i%3=40; check(i/3+1,i%3); flag=1; /1,3,7,9再次for(i=1;i=3;i+) cout ; for(j=1;j=3;j+) cout char(aij+48) |; coutn endl;deep+;if(flag=1) user();else check_win();void user() int down;coutn轮到您下了,请输入您要下的棋子位置:down; if(down9) cout数字不合法,请重新输入nendl; if (down%3=0&adown/33!=down)|(down%3!=0&adown/3+1down%3!=down) cout您所输入的位置已经有棋子了,请重新输入nendl;while(down9|(down%3=0&adown/33!=down)|(down%3!=0&adown/3+1down%3!=down);/判断输入是否异常if(down%3=0) adown/33=-13;check(down/3,3);else adown/3+1down%3=-13;check(down/3+1,down%3); /-13是X的ASCII码减48deep+;computer(); int other(int b,int c)int i,m;if(b2) if (b=0) m=3*c+1; if (b=1) m=c+1; for(i=m;im+3;i+) if(i%3=0) if(ai/33=i) return i; else; else if(ai/3+1i%3) return i; /水平与垂直直线的情况if(b=2) if(c=0) if(a11=1) return 1; if(a22=5) return 5; if(a33=9) return 9; if(c=1) if(a13=3) return 3; if(a22=5) return 5; if(a31=7) return 7; /对角线的情况void check(int i,int j) if(aij=-13) line0i-10+; line1j-10+; if(i=1&j=1)|(i=3&j=3)|(i=2&j=2) line200+; if(i=1&j=3)|(i=3&j=1)|(i=2&j=2) line210+; if(aij=40) line0i-11+; line1j-11+; if(i=1&j=1)|(i=3&j=3)|(i=2&j=2) line201+; if(i=1&j=3)|(i=3&j=1)|(i=2&j=2) line211+; check_win();void check_win()int i,j,k;bool end=false;char ch;for(i=0;i3;i+) for(j=0;j3;j+) for(k=0;k2;k+) if(lineijk=3) if(k=1) cout您失败了,电脑获得了胜利endl; if(k=0) cout恭喜您,您获得了胜利=9)cout和棋!endl;end=true; if(end) coutn您是否继续?是输入Y,按其余任意键结束本游戏!:ch; if(ch!=y) exit(0); else coutn请选择先后手,输入U
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 47661-2026温室气体产品碳足迹量化方法与要求风力发电
- 某家电厂电路设计安全
- 塑料厂注塑生产安全制度
- 中小学 2026 年暑期预防未成年人网络沉迷专项工作方案
- 汽车试验技术(微课版) 课件 模块三
- 艺术设计职业规划书
- 门窗安全认证指南讲解
- 消化科饮食指导
- 汽车制造厂售后服务制度
- 某汽车厂零部件管控
- 2026云南昆明滇池国家旅游度假区政务服务局政务服务中心聘综合窗口辅助性人员1人考试备考题库及答案详解
- 2026年通信安全员(ABC证)考试题库(含答案)
- 2026世界无烟日:揭开烟草成瘾面纱
- 修订一单一库质量手册和程序文件参考文件
- 2026年小学二年级升三年级数学暑假衔接作业(纯作业打印版)
- 空调器装配工班组考核水平考核试卷含答案
- 2026年农商行面试题及答案
- 2026年呼和浩特市政府采购评审专家考试真题含答案
- 2026年加油站员工上岗考试题库及答案
- 更换消火栓的施工方案(3篇)
- 虚拟电厂运营速成
评论
0/150
提交评论