C语言编写的五子棋源代码_第1页
C语言编写的五子棋源代码_第2页
C语言编写的五子棋源代码_第3页
C语言编写的五子棋源代码_第4页
C语言编写的五子棋源代码_第5页
已阅读5页,还剩2页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论