日后出详解。
完整代码,复制可用:
#define HANG 3
#define LIE 3
#include<stdio.h>
//#include"ojbk.h"
#include<stdlib.h>
#include<time.h>
int caidan()
{
do{
int x=0;
printf("******三子棋******\n");
printf("开始游戏请按1\n");
printf("调节难度请按2\n");
printf("退出游戏请按3\n");
printf("查看游戏说明请按4\n");
printf("******************\n");
scanf("%d",&x);
system("cls");
if(x==1)
return 1;
else if(x==3)
return 3;
else if(x==4)
return 4;
else if(x==2)
return 2;
else
continue;
}while(1);
}
void daying(char x[LIE][HANG])
{
int i,j;
for(i=0;i<HANG;i++)
{
for(j=0;j<LIE;j++)
{
if(j==0)
printf(" %c ",x[i][j]);
else
printf("| %c ",x[i][j]);
}
printf("\n");
if(i!=HANG-1)
printf("-----------\n");
}
}
int panding(char ch[LIE][HANG])
{
int i,j;
//行判定
for(i=0;i<HANG;i++)
{ int x=0,y=0;
for(j=0;j<LIE;j++)
{
if(ch[i][j]=='*')
y++;
else if(ch[i][j]=='#')
x++;
}
if(y==3)
{
printf("你既然赢了,真棒\n");
return 1;
}
else if(x==3)
{
printf("电脑都下不过,小笨蛋~\n");
return 2;
}
}
//列判定
for(i=0;i<HANG;i++)
{
int x=0,y=0;
for(j=0;j<LIE;j++)
{
if(ch[j][i]=='*')
y++;
else if(ch[j][i]=='#')
x++;
}
if(y==3)
{
printf("你赢啦呀6666\n");
return 1;
}
else if(x==3)
{
printf("哎,恭喜你,输了\n");
return 2;
}
}
//斜向判定
if(ch[0][0]==ch[1][1]&&ch[1][1]==ch[2][2]&&ch[0][0]!=' ')
if(ch[0][0]=='#')
{
printf("电脑:你输了下一个\n");
return 2;
}
else if(ch[0][0]=='*')
{
printf("哦吼,你赢啦\n");
return 1;
}
if(ch[0][2]==ch[1][1]&&ch[1][1]==ch[2][0]&&ch[2][0]!=' ')
if(ch[1][1]=='#')
{
printf("你输了,真不行换个难度?别逞强哦\n");
return 2;
}
else if(ch[1][1]=='*')
{
printf("恭喜电脑!!!输给了你\n");
return 1;
}
int q=0;
for(int c=0;c<3;c++)
for(int d=0;d<3;d++)
if(ch[c][d]!=' ')
q++;
if(q==9)
{
printf("不分伯仲,打成平局\n");
return 1;
}
return 0;
}
int fcai()
{
int x=0;
do
{
//daying();
printf("******游戏结束******\n");
printf("重新开始游戏请按1\n");
printf("返回请按2\n");
printf("*******************\n");
scanf("%d",&x);
if(x==1)
return 1;
else if(x==2)
return 2;
}while(x==1||x==2);
}
int shuoming()
{
do
{
int x=0;
printf("***********************三子棋1.0.0版本说明*************************\n");
printf("游戏玩法:\n");
printf(" 落棋采用坐标输入法的方式,即输入位置相对于的坐标,列如3行2列即为\n");
printf("“3 2”,前为行后为列,中间用空格隔开,输入完成后按回车即可。玩家与电\n");
printf("脑任意一方率先完成三个棋子排列在一行或一列或斜向排列的为获胜者。\n");
printf("版本介绍:\n");
printf(" 三子棋1.0.0版本是最原始版本,开始游戏只能由玩家先手,电脑后手,而且\n");
printf("只能玩家与电脑相互对弈...。但是该版本引入了难度调节模式,即有简单与困难\n");
printf("两种模式,如果简单模式玩腻了可以尝试一下困难模式哦\n");
printf("*********************************************************************\n");
printf("**** (阅读完毕请按1+回车) ****\n");
scanf("%d",&x);
if(x==1)
return 1;
}while(1);
}
int tiaojie()
{
do{
system("cls");
printf("*******调节难度***********\n");
printf(" 幺幺幺,就你还调难难度那,下的过吗你?\n");
printf("这可没有普通难度让你选啊,只能选简单和困难,\n");
printf("悠着点啊\n简单模式按1\n困难模式按2\n");
int x=0;
scanf("%d",&x);
if(x==1)
{ do{//11
system("cls");
printf("简单模式我家布丁都能下的过\n");
printf("简单?还是重新选啊?\n");
printf("重新选按1加回车,简单按2加回车\n");
int y=0;
scanf("%d",&y);
if(y==1)
break;
else if(y==2)
{
do//1
{
system("cls");
printf("选简单啊?你是小笨蛋吗,承认是就给你调成简单?yes按1,no按2\n");
int z=0;
scanf("%d",&z);
if(z==1)
return 1;
else if(z==2)
break;
}while(1);//
}
}while(1);//11
}
else if(x==2)
return 2;
}while(1);
}
int main()
{
printf("*********************\n");
printf("* 三子棋小游戏 *\n");
printf("* 作者:xxxxxx *\n");
printf("* 1.0.0 *\n");
printf("*********************\n");
for(int j=0;j<100011100;j++)
for(int j=0;j<10;j++);
int nandu=1,jieguo=0;
while(1){
system("cls");
printf("难度值%d(1位为简单,2为困难)\n",nandu);
int shuru=caidan();
//游戏
if(shuru==1)
{
while(1){
jieguo=0;
char ch[LIE][HANG]={' ',' ',' ',' ',' ',' ',' ',' ',' '};
while(1)//一个回合,玩家一次电脑一次;
{
system("cls");
daying(ch);//棋盘
//玩家输入
do{
printf("请输入你要选择位置的坐标:");
int a=4,b=4;
scanf("%d%d",&a,&b);
if(a>=1&&a<=3&&b>=1&&b<=3)
{
if(ch[a-1][b-1]==' ')
{
ch[a-1][b-1]='*';
break;
}
else if(ch[a-1][b-1]=='#'||ch[a-1][b-1]=='*')
{
printf("睁大你的小眼睛,这个位置不能下了哦,换个位置吧");
continue;
}
}
else
{
printf("这,,这这这,没有这个坐标啊,好好输行吗?重新输!");
continue;
}
}while(1);
//玩家输入
//判定
jieguo=panding(ch);
if(jieguo!=0)
break;
//电脑输入
//简单模式;
if(nandu==1)
{
for(int i=0;i<3;i++)
{
int x=0;
for(int j=2;j>=0;j--)
{
if(ch[j][i]==' ')
{
ch[j][i]='#';
x++;
break;
}
else;
}
if(x==1)
break;
}
}
//电脑输入;
//困难模式;
else if(nandu==2)
{
//
while(1)
{
int x=0,biao=0;
// int m,n;
int i,j;
if(ch[0][0]=='#'&&ch[1][1]=='#')
{
if(ch[2][2]==' ')
{ch[2][2]='#';
break;}
}
if(ch[2][2]=='#'&&ch[1][1]=='#')
{
if(ch[0][0]==' ')
{ch[0][0]='#';
break;}
}
if(ch[0][0]=='#'&&ch[2][2]=='#')
{
if(ch[1][1]==' ')
{
ch[1][1]='#';
break;}
}
if(ch[0][2]=='#'&&ch[1][1]=='#')
{
if(ch[2][0]==' ')
{ch[2][0]='#';
break;}
}
if(ch[0][2]=='#'&&ch[2][0]=='#')
{
if(ch[1][1])
{
ch[1][1]='#';
break;
}
}
if(ch[2][0]=='#'&&ch[1][1]=='#')
{
if(ch[0][2]==' ')
{ch[0][2]='#';
break;}
}
for( i=0;i<3;i++)//列
{
int biao2=0;
x=0;
for(j=0;j<3;j++)//检查一列是否有二个#,
if(ch[j][i]=='#')
x++;
if(x==2)
for(j=0;j<3;j++)
if(ch[j][i]==' ')
{
ch[j][i]='#';
biao=1;
biao2++;
break;
}
if(biao2==1)
break;
}
if(biao==1)
break;
for(i=0;i<3;i++)//行
{
x=0;
int biao2=0;
for(j=0;j<3;j++)//检查一行是否有二个#,
if(ch[i][j]=='#')
x++;
if(x==2)
for(j=0;j<3;j++)
if(ch[i][j]==' ')
{ ch[i][j]='#';
biao++;
biao2++;
break;
}
if(biao2==1)
break;
}
if(biao==1)
break;
for(i=0;i<3;i++)//行
{
x=0;
int biao2=0;
for(j=0;j<3;j++)//检查一行是否有二个*,
if(ch[i][j]=='*')
x++;
if(x==2)
for(j=0;j<3;j++)
if(ch[i][j]==' ')
{ ch[i][j]='#';
biao++;
biao2++;
break;
}
if(biao2==1)
break;
}
if(biao==1)
break;
for( i=0;i<3;i++)//列
{
int biao2=0;
x=0;
for(j=0;j<3;j++)//检查一列是否有二个*,
if(ch[j][i]=='*')
x++;
if(x==2)
for(j=0;j<3;j++)
if(ch[j][i]==' ')
{
ch[j][i]='#';
biao=1;
biao2++;
break;
}
if(biao2==1)
break;
}
if(biao==1)
break;
if(ch[0][0]=='*'&&ch[1][1]=='*')
{
if(ch[2][2]==' ')
{ch[2][2]='#';
break;}
}
if(ch[2][2]=='*'&&ch[1][1]=='*')
{
if(ch[0][0]==' ')
{
ch[0][0]='#';
break;}
}
if(ch[0][0]=='*'&&ch[2][2]=='*')
{
if(ch[1][1]==' ')
{ch[1][1]='#';
break;}
}
if(ch[0][2]=='*'&&ch[1][1]=='*')
{
if(ch[2][0])
{
ch[2][0]='#';
break;}
}
if(ch[0][2]=='*'&&ch[2][0]=='*')
{
if(ch[1][1]==' ')
{
ch[1][1]='#';
break;}
}
if(ch[2][0]=='*'&&ch[1][1]=='*')
{
if(ch[0][2]==' ')
{
ch[0][2]='#';
break;}
}
for(i=2;i>0;i++)
{
int k=0;
for(j=2;j>=0;j--)
{
if(ch[j][i]==' ')
{
ch[j][i]='#';
k++;
break;
}
else;
}
if(k==1)
{ biao++;
break;
}
}
if(biao==1)
break;
}//
}
//判定
jieguo=panding(ch);
if(jieguo!=0)
break;
}
system("cls");
daying(ch);
jieguo=panding(ch);
jieguo=fcai();
if(jieguo==1)
continue;
else if(jieguo==2)
break;
}
}
//结束游戏
else if(shuru==3)
{
system("cls");
printf("不玩拉倒,再见!\n");
break;
}
//游戏说明
else if(shuru==4)
{
jieguo=shuoming();
if(jieguo==1)
{
system("cls");
continue;
}
}
else if(shuru==2)
{
system("cls");
nandu=tiaojie();
continue;
}
system("cls");
}
return 0;
}