C语言版井字棋.docx
- 文档编号:12711612
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:15
- 大小:130.44KB
C语言版井字棋.docx
《C语言版井字棋.docx》由会员分享,可在线阅读,更多相关《C语言版井字棋.docx(15页珍藏版)》请在冰豆网上搜索。
C语言版井字棋
十五、井字棋
【问题描述】
设计一个井字棋的游戏程序
【基本要求】
游戏规则是:
从一个空的棋盘开始,人为x一方,计算机为o一方,人机双方轮流放置棋子,人下的时候,字符x将被放入棋盘中指定的位置,轮到计算机下时,程序将扫描棋盘,并将字符o放入扫描到的第一个空格,某一方有3枚棋子占据了一横行、一竖行或一对角线则获胜,若整个棋盘被占满还没有一方获胜则为和局。
截图:
代码:
//@authorGXU-pengcheng
#include
#include
#include
voidHelp();//帮助
intPlay(charplayer,intchoice);//对弈
voidInit();//初始化棋盘
voidDisplay();//打印棋盘
voidBlack(intchoice);//黑棋
voidWhite(intchoice);//白棋
voidBlock(intchoice);//添加选择框
voidClear(intchoice);//清空之前的选择框
intJudge(intchoice,charsymbol);//判断输赢返回值0为无结果,1为获胜,2为平局
intFuncx(intchoice);//将标号转换为行号
intFuncy(intchoice);//将标号转换为列号
voidEnd(charsymbol);//结束
intFound();//返回第一个没有棋子的位置的编号
chara[31][64];//用数组存放棋盘和棋子,a[行][列]
intb=0;//棋子个数
intmain(){
charplayer;
intchoice;
system("title井字棋");//设置标题
system("modeconcols=64lines=35");//设置窗口大小
system("color70");//设置颜色
while
(1){
printf("\n\n\n\n\n\n\t\t\t井\t字\t棋");
printf("\n\n\n\n\n\n\n\n\t\t\t1.玩家先手\n\n\t\t\t2.电脑先手\n\n\t\t\t3.帮助\n\n\t\t\t4.退出\n\n\n\n\n\t\t请输入:
");
player=getch();
if(player=='1'){
Init();
Block(5);
choice=5;
Play(player,choice);
}elseif(player=='2'){
Init();
Play(player,choice);
}elseif(player=='3'){
Help();
getch();
system("cls");
continue;
}elseif(player=='4'){
return0;
}else{
printf("\n\n\t\t输入错误请重新输入!
");
Sleep(1000);
system("cls");
continue;
}
}
return0;
}
voidHelp(){
system("cls");
printf("\n\n\n\n\n\n\n\n\n\t\t\t帮助\n\n\n");
printf("\t'W'上移,'S'下移,'A'左移,'D'右移\n\n");
printf("\t\t游戏中按'4'退出");
printf("\n\n\n\n\t\t按任意键退出");
}
intPlay(charplayer,intchoice){//对弈
charget;
charsymbol;
intc=0;//Judge得出的结果
while
(1){
system("cls");//每次循环清屏一次
Display();
if(player=='1'){//玩家下棋
while
(1){//确定要下的位置
if((get=getch())!
=''){
if(get=='4'){
system("cls");
return0;
}elseif((get=='w'||get=='W')&&choice-3>=1){
Clear(choice);
choice=choice-3;
}elseif((get=='s'||get=='S')&&choice+3<=9){
Clear(choice);
choice=choice+3;
}elseif((get=='a'||get=='A')&&(choice+2)/3==(choice+1)/3){
Clear(choice);
choice-=1;
}elseif((get=='d'||get=='D')&&(choice-1)/3==choice/3){
Clear(choice);
choice+=1;
}else{
continue;
}
Block(choice);
system("cls");
Display();
}
else{
if(a[((choice-1)/3)*10+2][((choice-1)%3)*21+4]!
=''){
printf("该位置已有其他棋子!
");
continue;
}else{
Clear(choice);
break;
}
}
}//while结束
b++;
Black(choice);
player='0';
symbol='#';
}//if结束
else{//电脑下棋
choice=Found();
Block(choice);
b++;
White(choice);
player='1';
symbol='*';
}
if((c=Judge(choice,symbol))!
=0){//判断输赢
if(c==2)
symbol='=';
c=0;
End(symbol);
break;
}
}
return0;
}
voidInit(){//初始化棋盘
intx=0,y=0;
inti='1';
for(x=0;x<31;x++)
{
for(y=0;y<64;y++)
{
if((y==Funcy
(1)||y==Funcy
(2)||y==Funcy(3)||y==Funcy
(2)+Funcy(3)))
{
if(x==Funcx
(1)||x==Funcx(4)||x==Funcx(7)||x==Funcx(4)+Funcx(7))
a[x][y]='+';
else
a[x][y]='|';
}
elseif(x==Funcx
(1)||x==Funcx(4)||x==Funcx(7)||x==Funcx(4)+Funcx(7))
a[x][y]='-';
else
a[x][y]='';
}
}
//for(x=1;x<=7;x=x+3)//在每个格子的左上角添加序号,范围1~9
//{
//for(y=1;y<=3;y++)
//{
//a[(Funcx(x)+1)][(Funcy(y)+1)]=i;
//i++;
//}
//}
}
voidDisplay(){//打印棋盘
intx=0,y=0;
for(x=0;x<31;x++)
{
for(y=0;y<64;y++)
{
printf("%c",a[x][y]);
}
}
}
voidBlock(intchoice){//添加选择框
intx,y;
for(x=Funcx(choice)+1;x { for(y=Funcy(choice)+2;y if(x==Funcx(choice)+1||x==Funcx(choice)+9) { if(y==Funcy(choice)+2||y==Funcy(choice)+19) a[x][y]='+'; elseif(y a[x][y]='-'; } elseif(x if(y==Funcy(choice)+2||y==Funcy(choice)+19) a[x][y]='|'; } } voidClear(intchoice){//清空选择框 intx,y,i; for(i=1;i<=9;i++){ if(a[Funcx(choice)+1][Funcy(choice)+2]=='+'&&i! =choice){ for(x=Funcx(choice)+1;x { for(y=Funcy(choice)+2;y if(x==Funcx(choice)+1||x==Funcx(choice)+9) { if(y==Funcy(choice)+2||y==Funcy(choice)+19) a[x][y]=''; elseif(y a[x][y]=''; } elseif(x if(y==Funcy(choice)+2||y==Funcy(choice)+19) a[x][y]=''; } } } } voidBlack(choice){//添加黑棋 intx,y; for(x=Funcx(choice)+2;x { for(y=Funcy(choice)+4;y if(x==Funcx(choice)+2||x==Funcx(choice)+8) a[x][y]='#'; elseif(y==Funcy(choice)+4||y==Funcy(choice)+17) a[x][y]='#'; } } voidWhite(choice){//添加白棋 intx; intd=4; for(x=Funcx(choice)+2;x<=Funcx(choice)+8;x++) { a[x][Funcy(choice)+d]='*'; a[x][Funcy(choice)+20-d]='*'; d=d+2; } } intJudge(intchoice,charsymbol){//判断输赢返回值0为无结果,1为获胜,2为平局 if( ( (a[Funcx(choice)+2][Funcy(choice)+4]==a[Funcx(choice+3)+2][Funcy(choice)+4] &&a[Funcx(choice+3)+2][Funcy(choice)+4]==a[Funcx(choice+6)+2][Funcy(choice)+4]) || (a[Funcx(choice)+2][Funcy(choice)+4]==a[Funcx(choice)+2][Funcy(choice+1)+4] &&a[Funcx(choice)+2][Funcy(choice+1)+4]==a[Funcx(choice)+2][Funcy(choice+2)+4]) ) || a[Funcx(5)+2][Funcy(5)+4]==symbol && ( (a[Funcx (1)+2][Funcy (1)+4]==a[Funcx(5)+2][Funcy(5)+4] &&a[Funcx(5)+2][Funcy(5)+4]==a[Funcx(9)+2][Funcy(9)+4]) || (a[Funcx(3)+2][Funcy(3)+4]==a[Funcx(5)+2][Funcy(5)+4] &&a[Funcx(5)+2][Funcy(5)+4]==a[Funcx(7)+2][Funcy(7)+4]) ) ) return1; if(b==9) return2; return0; } intFuncx(intchoice){//将标号转换为行号 return(((choice-1)/3)%3)*10; } intFuncy(intchoice){//将标号转换为列号 return((choice-1)%3)*21; } voidEnd(charsymbol){//结束 system("cls"); Display(); if(symbol=='*') printf("\t\t\t电脑胜利! \n\n"); elseif(symbol=='#') printf("\t\t\t玩家胜利! \n\n"); else printf("\t\t\t平局! \n\n"); b=0; printf("\t\t\t按任意键返回菜单"); getch(); system("cls"); } intFound(){//返回第一个没有棋子的位置的编号 inti; for(i=1;i<=9;i++) { if(a[Funcx(i)+2][Funcy(i)+4]=='') returni; } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言版 井字棋
![提示](https://static.bdocx.com/images/bang_tan.gif)