【C语言】用C语言实现三子棋游戏的编写

     用c语言实现三子棋游戏的编写,首先需要了解三子棋游戏的玩法及构架。从进入游戏,创建棋盘,坐标的表示等等,都需要用c语言来实现具体的操作。玩家输入坐标时将横纵坐标的值限定在大于等于1小于等于3之间(代码中是用数组的下标来表示的,所以是0,1,2),使其坐标不会超出棋盘。两个for循环就可以实现这个过程。判断坐标是否被占用,只需判断输入坐标所对应位置是不是空格‘ ’就行了。

      由于电脑的输入坐标是随机的,可能会输入非法坐标,就需要重新输入,所以电脑输入应该是一个循环的过程。在循环里边判断,如果是非法坐标,就得重新输入了。为了保证电脑在输入的随机坐标在棋盘内,可以通过将随机数模3(对3取余)的方法来限定下标为0,1,2的三个数中的一个。最后就是判断输赢了。有四种情况(玩家赢、电脑赢、平局、还没有下完)

这样就会有一下几种情况:


(1)玩家赢:横着、竖着或是斜着连续三个都是玩家的棋子。
(2)电脑赢:横着、竖着或是斜着连续三个都是电脑的棋子。
(3)平局:在棋盘已经满了的情况下不存在有连续三个棋子属于同一个玩家。

(4)还没有下完:任意一个坐标对应的位置存放的是空格‘ ’。

下面为大家提供基本的代码,部分细节请大家自己优化!!!

game.h

#define _CRT_SECURE_NO_WARNINGS 1
#ifndef _GAME_H_
#define _GAME_H_
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define ROWS3
#define COLS3
void start(char arr[ROWS][COLS],int row,int col);
void display(char arr[ROWS][COLS],int row,int,col);
void complay(char arr[ROWS][COLS],int row,int,col);
void check_win(char arr[ROWS][COLS],int row,int,col);

#endif //_GAME_H_

game.c

#define _CRT_SECURE_NO_WARNINGS 1
   #include "game.h"
   void start(char arr[ROWS][COLS],int row, int col)
   {
    int i = 1;
	for(i = 1;i<row;i++)
	{
	 int j = 0;
	 for(;j<col;j++)
	 {
		 arr[i][j] = ' ';

	 }
	}
	for(i = 0;i<row;i++)
	{
		printf("%c| %c| %c\n",arr[i][0],arr[i][1],arr[i][2]);

		if(i==2)
		{
		break;

		}
		printf("---|---|---\n");
	}
   }
   void display(char arr[ROWS][COLS], int row,int col)
   {
   int i =  0;
  printf("请玩家选择坐标");
	  do 
	  {
	  scanf("%d%d",&row,&col);
	  row--;
	  col--;
	  if(arr[row][col]==' ')
	  {
	 arr[row][col] = '0';
	 for(i = 0;i<ROWS,i++)
	 {
	 printf("%c|%c|%c\n",arr[i][0],arr[i][2]);
	 if(i == 2)
	 {
	 break;
	 }
	 printf("--|--|--|\n");
	 }
	  break;
	 }
	  }
   while(1);
   }
      
    void complay(char arr[ROWS][COLS],int row,int col)
	{
	int i = 0;
	printf("电脑选坐标\n");
	do
	{
		row = rand()%3;
		col = rand()%3;
		if(arr[row][col]==' ')
		{
		arr[row][col] = 'x';
		for(i = 0;i<ROWS;i++)
		{
		printf("%c|%c|%C\n",arr[i][0],arr[i][1],arr[i][1]);
		if(i = 2)
		{
		break;
		}
		printf("--|--|--\n");
		}
		break;
		}
	}
	while(1);
	}

	int check_win(char arr[ROWS][COLS],int row,int col)
	{
	int i = 0;
	for(;i<ROWS;i++)
	{
		if((arr[i][0]==arr[i][1])&&arr[i][2] == arr[i][1]&&arr[i][0]!=' ')
		{
		return 1;
		}
	}
		for(;i<COLS;i++)
		{
			if((arr[0][i] ==arr[1][i])&&(arr[2][i] == arr[1][i])&&(arr[1][1]) ==' ')
			{
			return 1;
			}
			if((arr[0][0] ==arr[1][1])&&(arr[1][1] == arr[0][2])&&(arr[1][1]) ==' ')
			{
			return 1;
			}
            if((arr[2][0] ==arr[1][1])&&(arr[1][1] == arr[0][2])&&(arr[1][1]) ==' ')
			{
			return 1;
			}
		
	}
	return 0;
	}
test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void mus(void)
{
printf("********************\n");
printf("**1.game   2.break**\n");
printf("********************\n");
}
void game (void)
{
int tmp = 0;
int i = 0;
char arr[ROWS][COLS] = {0};
start(arr,ROWS,COLS);
do
{
display(arr,ROWS,COLS);
tmp = check_win(arr,ROWS,COLS);
if(tmp ==1)
  {
	tmp = 1;
	break;
 }
i++;
if(i>=9)
  {
break;
   }
complay(arr,ROWS,COLS);
tmp = check_win(arr,ROWS,COLS);
if(tmp ==1)
{
tmp = 0;
break;
    }
i++;
 if(i>=9)
 {
 break;
 }

    }
   while(1);
    if (tmp == 1)
{
    printf("你赢了\n");
     }
   else if (tmp == 0)
{
  printf("你输了\n");
     }
   else if(i ==9)
   {
   printf("平局");
   }

     }
   int main()
  {
  int input = 0;
   do
   {
   mus();
	  printf("请选择");
	   scanf("%d",&input);
   if(input ==1)
   {
   game();
   }
   else if(input == 0)
   {
	   break;
   }
   else
   {
   printf("输入有误\n");
   }
    }
   while(1);
   return 0;
}


基本的代码主要框架以及调用函数就是这些了。部分细节需要用户 自行优化,新手上路,大神勿喷!!!  谢谢大家~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值