欢迎来到天天文库
浏览记录
ID:59830455
大小:13.26 KB
页数:7页
时间:2020-11-24
《C语言编写的五子棋源代码.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、#include#include#include#include#defineMAXIMUS15//定义棋盘大小/*定义全局变量*/intp[MAXIMUS][MAXIMUS];//存储对局信息charbuff[MAXIMUS*2+1][MAXIMUS*4+3];//输出缓冲器intCx,Cy;//当前光标位置intNow;//当前走子的玩家,1代表黑,2代表白intwl,wp;//当前写入缓冲器的列数和行数位置char*sh
2、owText;//在棋盘中央显示的文字信息intcount;//回合数char*Copy(char*strDest,constchar*strSrc)//修改过的字符串复制函数,会忽略末端的 {char*strDestCopy=strDest;while(*strSrc!=' '){*strDest++=*strSrc++;}returnstrDestCopy;}voidInitialize()//初始化一个对局函数{inti,j;//循环变量showText="";//重置显示信息count=0
3、;//回合数归零for(i=0;i4、下为边缘棋盘样式return"┏";elseif(i==MAXIMUS-1&&j==0)return"┓";elseif(i==MAXIMUS-1&&j==MAXIMUS-1)return"┛";elseif(i==0&&j==MAXIMUS-1)return"┗";elseif(i==0)return"┠";elseif(i==MAXIMUS-1)return"┨";elseif(j==0)return"┯";elseif(j==MAXIMUS-1)return"┷";return"┼";//中间的5、空位}char*getCurse(inti,intj){//获得指定坐标交点位置左上格的样式,通过制表符来模拟光标的显示if(i==Cx){if(j==Cy)return"┏";elseif(j==Cy+1)return"┗";}elseif(i==Cx+1){if(j==Cy)return"┓";elseif(j==Cy+1)return"┛";}return" ";//如果不在光标附近则为空}voidwrite(char*c){//向缓冲器写入字符串Copy(buff[wl]+wp,c);wp+=6、strlen(c);}voidln()//缓冲器写入位置提行{wl+=1;wp=0;}voidDisplay()//将缓冲器内容输出到屏幕{inti,l=strlen(showText);//循环变量,中间文字信息的长度intOffset=MAXIMUS*2+2-l/2;//算出中间文字信息居中显示所在的横坐标位置if(Offset%2==1)//如果位置为奇数,则移动到偶数,避免混乱{Offset--;}Copy(buff[MAXIMUS]+Offset,showText);//讲中间文字信息复制到7、缓冲器if(l%2==1)//如果中间文字长度为半角奇数,则补上空格,避免混乱{*(buff[MAXIMUS]+Offset+l)=0x20;}system("cls");//清理屏幕,准备写入for(i=0;i8、变量wl=0;wp=0;for(j=0;j<=MAXIMUS;j++)//写入出交点左上角的字符,因为需要打印棋盘右下角,所以很以横纵各多一次循环{for(i=0;i<=MAXIMUS;i++){write(getCurse(i,j));//写入左上角字符if(j==09、10、j==MAXIMUS)//如果是棋上下盘边缘则没有连接的竖线,用空格填充位置{if(i!=MAXIMUS)write(" ");}else//如果在棋盘中间则用竖线承接上下{if(i=
4、下为边缘棋盘样式return"┏";elseif(i==MAXIMUS-1&&j==0)return"┓";elseif(i==MAXIMUS-1&&j==MAXIMUS-1)return"┛";elseif(i==0&&j==MAXIMUS-1)return"┗";elseif(i==0)return"┠";elseif(i==MAXIMUS-1)return"┨";elseif(j==0)return"┯";elseif(j==MAXIMUS-1)return"┷";return"┼";//中间的
5、空位}char*getCurse(inti,intj){//获得指定坐标交点位置左上格的样式,通过制表符来模拟光标的显示if(i==Cx){if(j==Cy)return"┏";elseif(j==Cy+1)return"┗";}elseif(i==Cx+1){if(j==Cy)return"┓";elseif(j==Cy+1)return"┛";}return" ";//如果不在光标附近则为空}voidwrite(char*c){//向缓冲器写入字符串Copy(buff[wl]+wp,c);wp+=
6、strlen(c);}voidln()//缓冲器写入位置提行{wl+=1;wp=0;}voidDisplay()//将缓冲器内容输出到屏幕{inti,l=strlen(showText);//循环变量,中间文字信息的长度intOffset=MAXIMUS*2+2-l/2;//算出中间文字信息居中显示所在的横坐标位置if(Offset%2==1)//如果位置为奇数,则移动到偶数,避免混乱{Offset--;}Copy(buff[MAXIMUS]+Offset,showText);//讲中间文字信息复制到
7、缓冲器if(l%2==1)//如果中间文字长度为半角奇数,则补上空格,避免混乱{*(buff[MAXIMUS]+Offset+l)=0x20;}system("cls");//清理屏幕,准备写入for(i=0;i8、变量wl=0;wp=0;for(j=0;j<=MAXIMUS;j++)//写入出交点左上角的字符,因为需要打印棋盘右下角,所以很以横纵各多一次循环{for(i=0;i<=MAXIMUS;i++){write(getCurse(i,j));//写入左上角字符if(j==09、10、j==MAXIMUS)//如果是棋上下盘边缘则没有连接的竖线,用空格填充位置{if(i!=MAXIMUS)write(" ");}else//如果在棋盘中间则用竖线承接上下{if(i=
8、变量wl=0;wp=0;for(j=0;j<=MAXIMUS;j++)//写入出交点左上角的字符,因为需要打印棋盘右下角,所以很以横纵各多一次循环{for(i=0;i<=MAXIMUS;i++){write(getCurse(i,j));//写入左上角字符if(j==0
9、
10、j==MAXIMUS)//如果是棋上下盘边缘则没有连接的竖线,用空格填充位置{if(i!=MAXIMUS)write(" ");}else//如果在棋盘中间则用竖线承接上下{if(i=
此文档下载收益归作者所有