C语言版井字棋

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

十五、井字棋【问题描述】设计一个井字棋的游戏程序【基本要求】游戏规则是:从一个空的棋盘开始,人为x一方,计算机为o一方,人机双方轮流放置棋子,人下的时候,字符x将被放入棋盘中指定的位置,轮到计算机下时,程序将扫描棋盘,并将字符o放入扫描到的第一个空格,某一方有3枚棋子占据了一横行、一竖行或一对角线则获胜,若整个棋盘被占满还没有一方获胜则为和局。截图:代码://@authorGXU-pengcheng#includestdio.h#includewindows.h#includeconio.hvoidHelp();//帮助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;x31;x++){for(y=0;y64;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]='+';elsea[x][y]='|';}elseif(x==Funcx(1)||x==Funcx(4)||x==Funcx(7)||x==Funcx(4)+Funcx(7))a[x][y]='-';elsea[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;x31;x++){for(y=0;y64;y++){printf(%c,a[x][y]);}}}voidBlock(intchoice){//添加选择框intx,y;for(x=Funcx(choice)+1;xFuncx(choice)+10;x++){for(y=Funcy(choice)+2;yFuncy(choice)+20;y++)if(x==Funcx(choice)+1||x==Funcx(choice)+9){if(y==Funcy(choice)+2||y==Funcy(choice)+19)a[x][y]='+';elseif(yFuncy(choice)+7||yFuncy(choice)+14)a[x][y]='-';}elseif(xFuncx(choice)+4||xFuncx(choice)+6)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;xFuncx(choice)+10;x++){for(y=Funcy(choice)+2;yFuncy(choice)+20;y++)if(x==Funcx(choice)+1||x==Funcx(choice)+9){if(y==Funcy(choice)+2||y==Funcy(choice)+19)a[x][y]='';elseif(yFuncy(choice)+7||yFuncy(choice)+14)a[x][y]='';}elseif(xFuncx(choice)+4||xFuncx(choice)+6)if(y==Funcy(choice)+2||y==Funcy(choice)+19)a[x][y]='';}}}}voidBlack(choice){//添加黑棋intx,y;for(x=Funcx(choice)+2;xFuncx(choice)+9;x++){for(y=Funcy(choice)+4;yFuncy(choice)+18;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);elseprintf(\t\t\t平局!\n\n);b=0;printf(\t\t\t按任意键返回菜单);getch();system(cls);}in

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功