C语言编写的五子棋源代码(共7页).docx

上传人:飞****2 文档编号:13935048 上传时间:2022-05-02 格式:DOCX 页数:7 大小:17.60KB
返回 下载 相关 举报
C语言编写的五子棋源代码(共7页).docx_第1页
第1页 / 共7页
C语言编写的五子棋源代码(共7页).docx_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《C语言编写的五子棋源代码(共7页).docx》由会员分享,可在线阅读,更多相关《C语言编写的五子棋源代码(共7页).docx(7页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、精选优质文档-倾情为你奉上#include #include #include #include #define MAXIMUS 15 /定义棋盘大小/*定义全局变量*/int pMAXIMUSMAXIMUS;/存储对局信息char buffMAXIMUS*2+1MAXIMUS*4+3;/输出缓冲器int Cx,Cy;/当前光标位置int Now;/当前走子的玩家,1代表黑,2代表白int wl,wp;/当前写入缓冲器的列数和行数位置char* showText;/在棋盘中央显示的文字信息int count;/回合数char* Copy(char* strDest,const char* st

2、rSrc)/修改过的字符串复制函数,会忽略末端的0char* strDestCopy = strDest;while (*strSrc!=0)*strDest+=*strSrc+;return strDestCopy;void Initialize()/初始化一个对局函数int i,j;/循环变量showText=;/重置显示信息count=0;/回合数归零for(i=0;iMAXIMUS;i+)/重置对局数据for(j=0;jMAXIMUS;j+)pij=0;Cx=Cy=MAXIMUS/2;/重置光标到中央Now=1;/重置当前为黑方char* getStyle(int i,int j)/获

3、得棋盘中指定坐标交点位置的字符,通过制表符拼成棋盘if(pij=1)/1为黑子return ;else if(pij=2)/2为白子return ;else if(i=0&j=0)/以下为边缘棋盘样式return ; else if(i=MAXIMUS-1&j=0)return ; else if(i=MAXIMUS-1&j=MAXIMUS-1)return ;else if(i=0&j=MAXIMUS-1)return ;else if(i=0)return ;else if(i=MAXIMUS-1)return ;else if(j=0)return ;else if(j=MAXIMUS-

4、1)return ;return ;/中间的空位char* getCurse(int i,int j)/获得指定坐标交点位置左上格的样式,通过制表符来模拟光标的显示if(i=Cx)if(j=Cy)return ;else if (j=Cy+1)return ;else if(i=Cx+1)if(j=Cy)return ;else if (j=Cy+1) return ;return ;/如果不在光标附近则为空void write(char* c)/向缓冲器写入字符串Copy(buffwl+wp,c);wp+=strlen(c);void ln()/缓冲器写入位置提行wl+=1;wp=0;voi

5、d Display()/将缓冲器内容输出到屏幕int i,l=strlen(showText);/循环变量,中间文字信息的长度int Offset=MAXIMUS*2+2-l/2;/算出中间文字信息居中显示所在的横坐标位置if(Offset%2=1)/如果位置为奇数,则移动到偶数,避免混乱Offset-;Copy(buffMAXIMUS+Offset,showText);/讲中间文字信息复制到缓冲器if(l%2=1)/如果中间文字长度为半角奇数,则补上空格,避免混乱*(buffMAXIMUS+Offset+l)=0x20;system(cls);/清理屏幕,准备写入for(i=0;iMAXIM

6、US*2+1;i+)/循环写入每一行printf(%s,buffi);if(iMAXIMUS*2)/写入完每一行需要换行printf(n);void Print()/将整个棋盘算出并储存到缓冲器,然后调用Display函数显示出来int i,j;/循环变量wl=0;wp=0;for(j=0;j=MAXIMUS;j+)/写入出交点左上角的字符,因为需要打印棋盘右下角,所以很以横纵各多一次循环for(i=0;i=MAXIMUS;i+)write(getCurse(i,j);/写入左上角字符if(j=0|j=MAXIMUS)/如果是棋上下盘边缘则没有连接的竖线,用空格填充位置if(i!=MAXIMU

7、S)write();else/如果在棋盘中间则用竖线承接上下if(i=0|i=MAXIMUS-1)/左右边缘的竖线更粗write();else if(i!=MAXIMUS)/中间的竖线write();if(j=MAXIMUS)/如果是最后一次循环,则只需要处理边侧字符,交点要少一排break;ln();/提行开始打印交点内容write();/用空位补齐位置for(i=0;iMAXIMUS;i+)/按横坐标循环正常的次数write(getStyle(i,j);/写入交点字符if(i!=MAXIMUS-1)/如果不在最右侧则补充一个横线承接左右if(j=0|j=MAXIMUS-1)write();

8、/上下边缘的横线更粗elsewrite();/中间的横线ln();/写完一行后提行Display();/将缓冲器内容输出到屏幕int Put()/在当前光标位置走子,如果非空,则返回0表示失败if(pCxCy=0)pCxCy=Now;/改变该位置数据return 1;/返回1表示成功elsereturn 0;int Check()/胜负检查,即判断当前走子位置有没有造成五连珠的情况int w=1,x=1,y=1,z=1,i;/累计横竖正斜反邪四个方向的连续相同棋子数目for(i=1;i5;i+)if(Cy+iMAXIMUS&pCxCy+i=Now)w+;else break;/向下检查for(

9、i=1;i0&pCxCy-i=Now)w+;else break;/向上检查if(w=5)return Now;/若果达到5个则判断当前走子玩家为赢家for(i=1;i5;i+)if(Cx+iMAXIMUS&pCx+iCy=Now)x+;else break;/向右检查for(i=1;i0&pCx-iCy=Now)x+;else break;/向左检查if(x=5)return Now;/若果达到5个则判断当前走子玩家为赢家for(i=1;i5;i+)if(Cx+iMAXIMUS&Cy+iMAXIMUS&pCx+iCy+i=Now)y+;else break;/向右下检查for(i=1;i0&

10、Cy-i0&pCx-iCy-i=Now)y+;else break;/向左上检查if(y=5)return Now;/若果达到5个则判断当前走子玩家为赢家for(i=1;i5;i+)if(Cx+i0&pCx+iCy-i=Now)z+;else break;/向右上检查for(i=1;i0&Cy+i=5)return Now;/若果达到5个则判断当前走子玩家为赢家return 0;/若没有检查到五连珠,则返回0表示还没有玩家达成胜利int RunGame()/进行整个对局,返回赢家信息(虽然有用上)int input;/输入变量int victor;/赢家信息Initialize();/初始化对

11、局while(1)/开始无限回合的死循环,直到出现胜利跳出Print();/打印棋盘input=getch();/等待键盘按下一个字符if(input=27)/如果是ESC则退出程序exit(0);else if(input=0x20)/如果是空格则开始走子if(Put()/如果走子成功则判断胜负victor=Check();Now=3-Now;/轮换当前走子玩家count+;if(victor=1)/如果黑方达到胜利,显示提示文字并等待一次按键,返回胜利信息showText=黑方获得了胜利!;Print();if(getch()=0xE0)getch();return Now;else if

12、(victor=2)/如果白方达到胜利,显示提示文字并等待一次按键,返回胜利信息showText=白方获得了胜利!;Display();if(getch()=0xE0)getch();return Now;else if(count=MAXIMUS*MAXIMUS)/如果回合数达到了棋盘总量,即棋盘充满,即为平局showText=平局!;Display();if(getch()=0xE0)getch();return 0;else if(input=0xE0)/如果按下的是方向键,会填充两次输入,第一次为0xE0表示按下的是控制键input=getch();/获得第二次输入信息switch(i

13、nput)/判断方向键方向并移动光标位置case 0x4B:/Cx-;break;case 0x48:Cy-;break;case 0x4D:Cx+;break;case 0x50:Cy+;break;if(Cx0)Cx=MAXIMUS-1;/如果光标位置越界则移动到对侧if(CyMAXIMUS-1)Cx=0;if(CyMAXIMUS-1)Cy=0;int main()/主函数system(title 简易五子棋 WY制作);/设置标题system(mode con cols=63 lines=32);/设置窗口大小system(color F0);/设置颜色while(1)/循环执行游戏RunGame();专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com