初次摸索三子棋游戏

#define _CRT_SECURE_NO_WARNINGS 1
#include"stdio.h"
#include"windows.h"
#include"stdlib.h"
#include"time.h"
#define ROW 3
#define COL 3
// warning C4013: “Cptmove”未定义;假设外部返回 int
int Iswin(char a[][COL],int count);
void Show(char a[][COL],int count);
void Cptmove(char a[][COL],int count);
void menu();
void Initboard(char a[][COL],int count)//初始化棋盘
{
int i=0;
for(i=0;i<ROW;i++)
{
int j=0;
for(j=0;j<COL;j++)
a[i][j]=’ ';
//展示初始化后的棋盘
}
Show(a,count);
/printf(“请输入落子坐标1–3\n”);
scanf("%d%d",&x,&y);
Playermove(a,x,y);
/
}
void Playermove(char a[][COL],int x, int y,int count)//玩家落子
{
if(x<=ROW&&y<=COL)
{
int i=0;int j=0;int ret=0;
if(a[x-1][y-1] != ’ ')
{
printf(“老铁,这里不能落子了,请选择其他位置\n”);
Show(a,count);
}
else
{
count+=2;
if(count <=ROW*COL)
{
a[x-1][y-1]= ‘X’;
if(count>=5 && count<=9)
{
ret = Iswin(a,count);
if (ret==‘O’)
{
printf(“电脑胜\n”);
menu();
}
else if(ret==0)
menu();
else if(ret =‘X’)
{

		 printf("玩家胜\n");
	 menu();
	 }
	}
	Cptmove(a,count);
	
	}
	else 
		menu();
}
}

}
void Cptmove(char a[][COL],int count)//电脑落子
{
int ret=0;
int x= 1+ rand() % ROW;
int y= 1+ rand() % COL;
if(a[x][y] == ’ ')
{
count++;
a[x][y]= ‘O’;
Iswin(a,count);
Show(a,count);
}
else Cptmove(a,count);
//printf("%c",a[x][y]);
}
void XX(char a[][ROW],int x,int y,int count)//玩家落子信息
{
Playermove(a,x,y,count);
}
void Show(char a[][COL],int count)
{
int i=0;int j=0;int x=0;int y=0;
for(i=0;i<ROW;i++)
{
for(j=0;j<COL;j++)
{
printf(" %c ",a[i][j]);

		if(j<COL-1)
		{
			printf("|");
		}
	}
		printf("\n");
		if(i<ROW-1)
		{
		   for(j=0;j<COL;j++)
	      {
			printf("---");
		    if(j<COL-1)
		   {
			printf("|");
		    }
		   }
		}
		printf("\n");		
}
  printf("请输入落子坐标\n");
  scanf("%d%d",&x,&y);
  XX( a,x,y,count);

}
int Iswin(char a[][COL],int count)
{
int i=0;int j=0;

for(i=0;i<ROW;i++)
 {
 if(a[i][0]==a[i][1] && a[i][1]==a[i][2] && a[i][0]==a[i][2] && a[i][0]!=' ')
	 return a[i][0];
for(j=0;j<COL;j++)
{
 if(a[i][j]==a[i+1][j] && a[i+1][j]==a[i+2][j] && a[i][j]==a[i+2][j] && a[i][j] !=' ')
	 return a[i][j];
if(a[0][0]==a[1][1] && a[1][1]==a[2][2] && a[0][0]==a[2][2] && a[0][0]!=' ')
	return a[1][1];
 if(a[0][2]==a[1][1] && a[0][2]==a[2][0]  && a[1][1]==a[2][0] && a[1][1]!=' ')
	 return a[1][3];
 else 
   return 0;
}

}
}
void Game(int count)
{
char a[3][3]={‘0’};
Initboard(a,count);//初始化棋盘
}
void menu()
{
srand( (unsigned)time( NULL ) );
printf(“\n");
printf("
1 play \n");
printf("
0 exit *****\n");
printf("
*********\n”);
printf(“请选择输入\n”);
}
int main ()
{
int input =0;
do
{
int count =0;
menu(); //菜单
scanf("%d",&input);
switch(input) //输入的两种情况
{
case 1://开始游戏
printf(“开始游戏\n”);
Game(count);
break;
case 0://退出游戏
printf(“游戏结束\n”);
break;
default :
printf(“退出游戏\n”);
break;
}
}while(input);//do while 先执行一次再判断
system(“pause”);//输入位不为0结束
return 0;
}
本次摸索我觉的思路还是有的,程序虽能写出来,但还有点小瑕疵,同时领略到写的函数的头文件应在文件开头声明,因为C语言在编译时自上向下,在前边函数调用后边函数时 C编译器并不知道 后边存在该方法。
这次持续两天的坚持尝试,感觉很有意义,虽然有瑕疵,但收获真的多,
另外在使用数组名传参时概念还不是很清晰,处理机制还有些生疏,以后应去好好理解指针
最后 我打算接下来的几天好好考虑代码优化,结构优化,方法优化,抽空再写一次。加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值