C语言版井字棋.docx

上传人:b****2 文档编号:2319315 上传时间:2023-05-03 格式:DOCX 页数:15 大小:130.44KB
下载 相关 举报
C语言版井字棋.docx_第1页
第1页 / 共15页
C语言版井字棋.docx_第2页
第2页 / 共15页
C语言版井字棋.docx_第3页
第3页 / 共15页
C语言版井字棋.docx_第4页
第4页 / 共15页
C语言版井字棋.docx_第5页
第5页 / 共15页
C语言版井字棋.docx_第6页
第6页 / 共15页
C语言版井字棋.docx_第7页
第7页 / 共15页
C语言版井字棋.docx_第8页
第8页 / 共15页
C语言版井字棋.docx_第9页
第9页 / 共15页
C语言版井字棋.docx_第10页
第10页 / 共15页
C语言版井字棋.docx_第11页
第11页 / 共15页
C语言版井字棋.docx_第12页
第12页 / 共15页
C语言版井字棋.docx_第13页
第13页 / 共15页
C语言版井字棋.docx_第14页
第14页 / 共15页
C语言版井字棋.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C语言版井字棋.docx

《C语言版井字棋.docx》由会员分享,可在线阅读,更多相关《C语言版井字棋.docx(15页珍藏版)》请在冰点文库上搜索。

C语言版井字棋.docx

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(yFuncy(choice)+14)

a[x][y]='-';

}

elseif(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;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(yFuncy(choice)+14)

a[x][y]='';

}

elseif(xFuncx(choice)+6)

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;

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2