c语言实现三子棋

日后出详解。

 

完整代码,复制可用:

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪漫收藏猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值