C语言实现小游戏(三) 3*3棋盘游戏

实现3*3棋盘游戏主要流程:

一、定义一些所需要的函数

1.定义初始化棋盘函数:void init(char arr[3][3],int i,int j );
2.定义打印棋盘函数:int prit(char arr[3][3], int i, int j);
3.定义玩家下棋函数:void play(char arr[3][3], int x, int y);
4.定义电脑下棋函数:void computer(char arr[3][3]);
5.定义判断三个同样字符是否连成一线的函数:int check(char arr[3][3], int i, int j);

二、主函数

  1. 打印游戏说明

  2. 选择是否开始游戏,选择‘1’则开始游戏,选择其他则退出游戏。

  3. 选择下棋次序,选择‘1’玩家先下棋,选择‘2’电脑先下棋。

  4. 若玩家开始下棋,输入下棋坐标位置。并且判断是否有三个同样字符连成一线;若没有则你电脑继续下棋并判断。若电脑先下棋,判断是否有三个同样字符连成一线,若没有则输入下棋坐标位置继续下棋。知道判断出三字符连成一线,则判断出输赢。当所有的地方都有字符时,此时若还没有判断出输赢那么这局是平局。

  5. 下棋是应该判断玩家输入的坐标是否是合法下标,若不是合法下标那么应该提示并且重新输入坐标。

三、代码如下:

#include<stdio.h>
#include<stdlib.h>
void init(char arr[3][3],int i,int j )
{
 for (i = 0; i < 3; i++)
 {
  for (j = 0; j < 3; j++)
  {
   arr[i][j] = ' ';
  }
 }

}
int prit(char arr[3][3], int i, int j)
{
 for (i = 0; i < 3; i++)
 {
  printf(" %c | %c | %c ", arr[i][0],arr[i][1],arr[i][2]);
  if (i != 2)
   printf("\n---|---|---\n");
  
 }
 return 0;
}
void computer(char arr[3][3])
{
 int i = 0;
 int j = 0;
 int flag = 0;
 for (i = 0; i < 3; i++)
 {
  if (flag == 1)
   break;
  for (j = 0; j < 3; j++)
  {
   if ((arr[i][j] == ' '))
   {
    arr[i][j] = 'O';
    flag = 1;
    break;
   }
  }

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

 }
}
void play(char arr[3][3], int x, int y)
{
 int i=0;
 int j = 0;
 int flag = 0;
 arr[x - 1][y - 1] = 'X';
 for (i = 0; i < 3; i++)
 {
  if (flag == 1)
   break;
  for (j = 0; j < 3; j++)
  {
   if ((arr[i][j] == ' '))
   {
    arr[i][j] = 'O';
    flag = 1;
    break;
   }
  }

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

 }
}

int check(char arr[3][3], int i, int j)
{
 int ret = -1;
 int k = 0;//判断对角线X
 int n = 0;//判断对角线O
 int a = 0;//判断反对角线X
 int b = 0;//判断反对角线O
 int count = 0;
 for (i = 0; i < 3; i++)
 {  
   if (arr[i][i] == 'X')
   k++;
      if (arr[i][2-i] == 'X')
   a++;
   if (arr[i][i] == 'O')
   n++;
   if (arr[i][2-i] == 'O')
   b++;
 }
 for (i = 0; i < 3; i++)
 {
  for (j = 0; j < 3; j++)
  {
   if (arr[i][j] != ' ')
    count++;
  }
 }
 if ((k == 3)||(a == 3))
 {
  ret=1;
 }
 if ((n == 3)||(b == 3))
 {
  ret=0;
 }
 if (count == 9)
  ret = 3;
 for (i = 0; i < 3; i++)
 {
  if (((arr[i][0] == 'X') && (arr[i][1] == 'X') && (arr[i][2] == 'X'))||
   ((arr[0][i] == 'X') && (arr[1][i] == 'X') && (arr[2][i] == 'X')))
  {
   ret=1;
   break;
  }
  else if (((arr[i][0] == 'O') && (arr[i][1] == 'O') && (arr[i][2] == 'O')) ||
   ((arr[0][i] == 'O') && (arr[1][i] == 'O') && (arr[2][i] == 'O')))
   
  {
   ret=0;
   break;
  }
  
  
 }
 return ret;
}
void manu()
{
 printf("****************************************\n");
 printf("**************欢迎进入游戏**************\n");
 printf("*************1.开始游戏*****************\n");
 printf("*************0.退出游戏*****************\n");
 printf("****************************************\n");

}
void order()
{
 printf("**********请选择下棋先后次序************\n");
 printf("*************1.玩家先下*****************\n");
 printf("*************0.本机先下*****************\n");
}
int main()
{
 char arr[3][3];
 int i = 0;
 int j = 0;
 int x = 0;
 int y = 0;
 int input = 1;
 int ret = 0;
 int c = 0;
 while (1)
 {
  manu();
  printf("请选择>");
  scanf("%d", &input);
  switch (input)
  {
  case 1:
  {
      while (1)
      {
     
       order();
       printf("请选择>");
       scanf("%d", &c);
       switch (c)
       {
       case 1:
       {init(&arr[0], i, j);
       prit(&arr[0], i, j);
       while (1)
       {
  lop:        printf("\n请输入要下棋的位置坐标:");
        scanf("%d%d", &x, &y);
        while (1)
        {

         if ((arr[x - 1][y - 1] != ' ') || (x > 3) || y > 3)
         {
          printf("坐标不合法,请重新输入:");
          scanf("%d%d", &x, &y);
         }
         else
         {
          play(&arr[0], x, y);
          break;
         }
        }
        ret = check(&arr[0], i, j);
        if (ret == 1)
        {
         printf("\n恭喜你赢了!\n");
         break;
        }
        if (ret == 0)
        {
         printf("\n很遗憾你输了!\n");
         break;
        }
        if (ret == 3)
        {
         printf("\n这局是平局\n");
         break;
        }
       }
       break;
       }
       case 0:
       {
        init(&arr[0], i, j);
        prit(&arr[0], i, j);
        printf("\n本机下棋为:\n");
        computer(&arr[0]);
        goto  lop;
        break;
       }

       }
       break;
      }
      break;
  }
  default:
  {      printf("退出游戏\n");
  system("pause");
  exit(0);
  break;
  }
  

  }
 }
  system("pause");
  return 0;
 
}

游戏可能有不完善的地方,后续发现问题会及时修改。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值