版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include itinclude itinclude itinclude itdefine MAXIMUS 15 /定义棋盘大小/*定义全局变量*/int pMAXIMUS MAXIMUS ; /存储对局信息char buff MAXINfUS*2+l MAXIMUS*4+3:/输出缓冲器int Cx.Cy;/当前光标位置int Now;/当前走子的玩家,1代表黑,2代表白 int wl.wp;/当前写入缓冲器的列数和行数位置 char* showText; /在棋盘中央显示的文字信息 int count;/回合数 char* Copy (char* strDest, const char
2、* strSrc)/修改过的字符串复制函数,会忽略末 端的0char* strDestCopy = strDest;while (*strSrc! =,0r) *strDest+=*strSrc+;return strDestCopy;void InitializeO/初始化一个对局函数(int i,j;/循环变量showText=n H;/重置显示信息count二0;/回合数归零for(i=0;iMAXIMUS; i +) /重置对局数据for (j二0; MAXIMUS; j+) pij=O;Cx=Cy=MAXIMUS/2;/重置光标到中央Now=l;/重置当前为黑方char* getSt
3、yle(int i, int j)/获得棋盘中指定坐标交点位置的字符,通过制表符拼成棋 盘if (pi jl=l)/l 为黑子return ”;else if (pi j=2)/2 为白子return wOM;else if(i=O&j=O)/以下为边缘棋盘样式II Wreturn 厂:else if(i=MAXIMUS-l&j=O)return n ;else if(i =MAXIMUS-l&j=MAXIMUS-1)return ”;else if(i=O&j=MAXIMUS-l)return else if(i=0)return ” 卜;else if(i=MAXIMUS-l)return
4、 ”T ”;else if(j=0)return -y ;else if(j=MAXIMUS-l)return 丄;return +;/中间的空位char* getCurse(int i, int j) /获得指定坐标交点位置左上格的样式,通过制表符来模 拟光标的显不if(i=Cx)if(j=Cy)n itreturn 厂;else if (j=Cy+l)return ” L*;else if(i=Cx+l) if(j=Cy) nreturn -| ;else if (j=Cy+l)returnreturn ” J/如果不在光标附近则为空void write (char* c) /向缓冲器写入
5、字符串Copy(buffwl+wp.c); wp+=strlen(c);void ln()缓冲器写入位置提行(wl+=l;wp 二0;void Display()/将缓冲器内容输出到屏慕int i, l=strlen(showText) ;/循环变量,中间文字信息的长度int Offset=MAXIMUS*2+2-l/2;/算出中间文字信息居中显示所在的横坐标位置 if(0ffset%2=l)/如果位置为奇数,则移动到偶数,避免混乱Offset;Copy (buff MAXIMUS+Offset, showText) ; /讲中间文字信息复制到缓冲器 if(l%2=l)/如果中间文字长度为半角
6、奇数,则补上空格,避免混乱*(buff MAXIMUS Pffset+l)二 0x20;system(,clsrr) ;/清理屏幕,准备写入for(i=0; iMAXIMUS*2+l;i+) /循环写入每一行printf (%s,buff i);if(iMXIMLiS*2)/写入完每一行需要换行printf Cn);void PrintO/将整个棋盘算出并储存到缓冲器,然后调用Display函数显示出来 int ij;/循环变量wl=0;wp二0;for(j=0;j=MAXnfLlS; j+)/写入出交点左上角的字符,因为需要打印棋盘右下角,所以很 以横纵各多一次循环for(i=0;i=MAX
7、IMUS;i+) write(getCurse(i, j);/写入左上角字符if(j=O | j=MAXIMUS)/如果是棋上下盘边缘则没有连接的竖线,用空格填充位置 if(i!=MAXIMUS)wr i te ();else/如果在棋盘中间则用竖线承接上下(if(i=O | i=MAXIMUS-l)/左右边缘的竖线更粗write( | );else if(i!=MAXIMUS)/中间的竖线write( | );if(j=MAXIMUS)/如果是最后一次循环,则只需要处理边侧字符,交点要少一排break;ln();/提行开始打印交点内容writeC -);/用空位补齐位置for(i=0;iMA
8、XIMUS; i+)按横坐标循环正常的次数write(getStyle(i, j) ;/写入交点字符if(i!=MAXIMUS-l)/如果不在最右侧则补充一个横线承接左右 if(j=O j=MAXIMUS-l)(writeC-) ;/上下边缘的横线更粗elsewriteC-);/中间的横线ln();/写完一行后提行IDisplay ();/将缓冲器内容输出到屏幕int Put()/在当前光标位置走子,如果非空,则返回0表示失败 if(pCxCy=O)pCx Cy=Now;/改变该位置数据 return 1;/返回1表示成功else return 0;int Check()/胜负检查,即判断当前
9、走子位置有没有造成五连珠的情况(int w=l,x=l,y=l,Z=l,i;/累计横竖正斜反邪四个方向的连续相同棋子数目for (i=l: i5; i+) if (Cy+iMAXIMUS&pCx Cy+i=Now)w+;else break: /向下检查for (i=l: i0&pCx Cy-i=Now)w+; else break;/向上检查 if (w=5)return Now;/若果达到5个则判断当前走子玩家为赢家for(i=l; i5; i+) if (Cx+iMAXIMUS&pCx+i Cy=Now)x+;else break; /向右检查 for(i=l: i0&pCx-i CyN
10、ow)x+;else break;/向左检查if(x=5)return Now;/若果达到5个则判断当前走子玩家为赢家for(i=l;i5;i+)if(Cx+iMAXIMUS&Cy+iMAXIMUS&pCx+iCy+i=Now)y+;else break; /向右下检查for (i=l: i0&Cy-i0&pCx-i Cy-i =Now)y+ ; else break; /向左上检 查if (y=5)return Now;/若果达到5个则判断当前走子玩家为赢家for(i=l:i5;i+)if(Cx+i0&pCx+iCy-i=Now)z+;e1se break;/向 右上检查for(i=l:i0
11、&Cy+i=5)return Now;/若果达到5个则判断当前走子玩家为赢家 return 0;/若没有检查到五连珠,则返回0表示还没有玩家达成胜利int RunGameO/进行整个对局,返回赢家信息(虽然有用上) int input;/输入变量int victor;/贏家信息Initial ize();/初始化对局血订e(l)开始无限回合的死循环,直到出现胜利跳出Print ();/打印棋盘input=getch();/等待键盘按下一个字符if(input=27)/如果是ESC则退出程序exit (0);else if (input =-0x20)/如果是空格则开始走子 if(Put()/如
12、果走子成功则判断胜负(victor=Check();Now=3-Now;/轮换当前走子玩家count+;if(victor=l)/如果黑方达到胜利,显示提示文字并等待一次按键,返回胜利信息 (showText=黑方获得了胜利! ;Print ();if(getch()=0xE0) getchO ;return Now;else if(victor=2)/如果白方达到胜利,显示提示文字并等待一次按键,返回胜利信息(showText=白方获得了胜利! ;Display ();if(getch()=0xE0)getchO ;return Now;else if (count=MAXIMUS*MAXIMUS)/如果回合数达到了棋盘总量,即棋盘充满,即为平局(showText=平局!Display ();if(getch()=0xE0)getchO ;return 0;else if (input=OxEO)/如果按下的是方向键,会填充两次输入,第一次为OxEO表示按下 的是控制键input=getch();/获得第二次输入信息switch (input)/判断方向键方向并移动光标位置(case 0x4;break;scase 0x48:Cy-:break;case Ox4D:Cx+;break;case 0x50:Cy+;break;if(Cx0) Cx=M
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 济宁市泗水县2025届四下数学期末考试试题(含解析)
- 济宁市微山县2025届三年级数学下学期期末监测模拟试题含答案解析
- 泸州市龙马潭区2025届数学三年级第二学期期末检测试题(含答案)
- 汽车美容装潢工安全意识强化能力考核试卷含答案
- 螺旋桨钳工岗前合规考核试卷含答案
- 无线电计量员岗前安全生产意识考核试卷含答案
- 涡轮发动机修理工岗位业务考核试卷含答案
- 纺粘熔喷热轧非织造布制作工技能安全知识考核试卷含答案
- 合成碳膜电位器制造工班组安全模拟考核试卷含答案
- 桩工机械装配调试工安全生产知识测试考核试卷含答案
- 2026年项目试生产安全管控试题(含答案)
- 2025 年党员发展对象培训核心考点速记手册
- 病理科免疫组化染色标准化操作指南(2025版)
- 2026年部编版新教材道德与法治八年级上册全套单元、期中、期末检测题及答案(共6套)
- 中国临床肿瘤学会(CSCO)抗肿瘤治疗相关恶心呕吐诊疗指南2025
- 2027年湖南省常规选调600人笔试备考题库及答案解析
- 宜昌远安县航远产业投资有限公司招聘笔试题库2026
- GB 20815-2026视频安防监控数字录像设备
- 2026-2027学年七年级语文上册期中综合冲刺模拟测试试卷
- 2026年研发人员薪酬考核方案
- 食品检验检测机构授权签字人考核通关指南
评论
0/150
提交评论