C语言二维数组----写井字棋

目录

1.内容展示

 2.思考

3.代码实现


1.内容展示

C语言二维数组----写井字棋_第1张图片

 2.思考

由图可知我们需要构建多个函数分别表示主菜单,棋盘,玩家输入,电脑输入(随机输入)

1.主菜单的编写

void menu()
{
  printf("\n\t*******MADE-HZKK********\n");
  printf("\t*Welcome to N-word game*\n");
  printf("\t***----- 1.Paly -----***\n");
  printf("\t***----- 0.Exit -----***\n");
  printf("\t************************\n\n");
}

2棋盘的编写

  在这里我们通过一个3*3的二维数组,将内容全部初始化位空格。

void intboard(char board[ROW][COL],int row,int col)  
{
 int i,j;
 for(i=0;i

3棋盘的打印

通过观察下方棋盘我们看见除了空格还有'|'和'-',把棋盘拆分来看一共有五行,

第一行是'   ',' | ','   ',' | ','   ';

第二行是     ---|---|---       ;

第三行是'   ',' | ','   ',' | ','   ';

第四行是     ---|---|---       ;

第五行是'   ',' | ','   ',' | ','   ';

C语言二维数组----写井字棋_第2张图片

 下面是代码实现

void print_board(char board[ROW][COL],int row,int col)  
{
 int i,j;
 for(i=0;i

4.玩家输入坐标

首先要判断坐标是否出界,若不出界则要判断是否被占用,否则重新输入直到成功

void player(char board[ROW][COL],int row,int col)  
{
	int x,y,t=1;
	while(t)
	{
		scanf("%d,%d",&x,&y);	
		if(x>0&&x<=row&&y>=0&&y<=col)  
		{
			if(board[x-1][y-1]==' ')board[x-1][y-1]='*',t=0;  
			else printf("Occupied!\nReebter-->");
		}
		else printf("Out-Of-Range!\nReenter-->");
	}
}

5.电脑输入坐标

电脑需要随机生成坐标,这里需要调用,并且在主函数中输入srand((unsigned int)time(NULL));注意电脑生成的坐标也要判断是否以被占用

void computer(char board[ROW][COL],int row,int col)
{
	int x,y,t=1;
	while(t)
	{
		x=rand()%row,y=rand()%col;	
		if(x>0&&x<=row&&y>=0&&y<=col)
		if(board[x][y]==' ')board[x][y]='#',t=0;
	}
	printf("Computer-->%d,%d\n",x+1,y+1);
}

6判断游戏是否继续

由于游戏的随机,所以无论是玩家还是电脑,每走一步,我们都需要判断游戏是否继续,游戏一共有四种状态,第一是玩家胜利,第二是电脑胜利,第三是平局,第四是继续游戏。在这里我用' * '表示玩家的棋子,用' # '表示电脑的棋子,所以我们可以定义一个char型的函数用return的字符表示游戏状态,' * ' # ' Q ' C '分别表示玩家胜利,电脑胜利,平局,继续游戏。

井字棋的胜利条件是行或列或对角线相同,于是我们可以通过for循环判断。

char judge(char board[ROW][COL],int row,int col)   
{
	int i,j,t;
	for(i=0;i0;i++,j--)  
	{
		if(board[i][j]==board[i+1][j-1]&&board[i][j]!=' ')t+=1;
		if(t==col-1)return board[i][j];
	}
	for(i=0;i

3.代码实现

我们通过项目来实现,分别是game1.h(头文件)、game.cpp(编写函数)、test.cpp(主函数)。

                                                            game1.h

#include
#include
#include
#define ROW 3
#define COL 3
void menu();
char board[ROW][ROW];
void intboard(char board[ROW][ROW],int row,int col); 
void print_board(char board[ROW][ROW],int row,int col);
void player(char board[ROW][COL],int row,int col);
void computer(char board[ROW][COL],int row,int col);
char judge(char board[ROW][COL],int row,int col);

                                                           game.cpp

#include "game1.h"
void menu()
{
  printf("\n\t*******MADE-HZKK********\n");
  printf("\t*Welcome to N-word game*\n");
  printf("\t***----- 1.Paly -----***\n");
  printf("\t***----- 0.Exit -----***\n");
  printf("\t************************\n\n");
}
void intboard(char board[ROW][COL],int row,int col)  //初始化棋盘
{
 int i,j;
 for(i=0;i0&&x<=row&&y>=0&&y<=col)  //判断是否出界
		{
			if(board[x-1][y-1]==' ')board[x-1][y-1]='*',t=0;  //判断是否被占用
			else printf("Occupied!\nReebter-->");
		}
		else printf("Out-Of-Range!\nReenter-->");
	}
}
void computer(char board[ROW][COL],int row,int col)
{
	int x,y,t=1;
	while(t)
	{
		x=rand()%row,y=rand()%col;	//随机生成坐标
		if(x>0&&x<=row&&y>=0&&y<=col)
		if(board[x][y]==' ')board[x][y]='#',t=0;
	}
	printf("Computer-->%d,%d\n",x+1,y+1);
}
char judge(char board[ROW][COL],int row,int col)   //判定游戏是否继续
{
	int i,j,t;
	for(i=0;i0;i++,j--)  //判断对角线是否相同
	{
		if(board[i][j]==board[i+1][j-1]&&board[i][j]!=' ')t+=1;
		if(t==col-1)return board[i][j];
	}
	for(i=0;i

                                                              test.cpp

#include "game1.h"

int main()
{
 int input;char flag='C';
 srand((unsigned int)time(NULL));
 do
 {
  menu();
  printf("Please Chooes:");
  scanf("%d",&input);
  switch(input)
  {
   case 1:printf("Game Start\n");
    intboard(board,ROW,COL) ;
    print_board(board,ROW,COL);
    while(1)
    {
    	printf("You Input-->");
    	player(board,ROW,COL);
    	flag=judge(board,ROW,COL);
    	if(flag!='C')break;
    	print_board(board,ROW,COL);
    	computer(board,ROW,COL);
    	flag=judge(board,ROW,COL);
    	if(flag!='C')break;
    	print_board(board,ROW,COL);
    	
	}
	print_board(board,ROW,COL);
	if(flag=='*')printf("\t\tYou Win!\n");
	else if(flag=='#')printf("\t\tYou Lose!\nLet HZKK hug you\n");
	else if(flag=='Q')printf("\tDraw!This is the most difficult thing to achieve!\n");
   break;
   case 0:printf("\t\tGood-Bye\n");break;
   default:break;
 }  
 }while(input);
 return 0;
}

你可能感兴趣的:(c语言,算法,开发语言)