c++小游戏编程100例_C/C++编程笔记:C语言实现“井字棋”小游戏,零基础项目(含源码)...

在这里我们要写出一个井子棋的小游戏,能够实现所需要的三字连珠的功能,并且可以使得游戏让玩家进行选择是否继续的功能。

本项目为C语言零基础小项目,可供C语言入门者学习。

效果图:

a85317d9a6e13daa0844ea3dcde92866.png

代码:

#define _CRT_SECURE_NO_WARNINGS 1

#include

#include

#include

#define ROW 3

#define COL 3

void init_board(char arr[ROW][COL])

{

  int i=0;

  int j=0;

  for (i = 0; i < ROW; i++)

  {

    for (j = 0; j < COL; j++)

    {

      arr[i][j] = ' ';

    }

  }

}

void display_board(char arr[ROW][COL])

{

  int i = 0;

  for (i = 0; i < ROW; i++)

  {

    printf(" %c|%c |%c\n", arr[i][0], arr[i][1], arr[i][2]);

    if (i < 2)

    {

      printf("--|--|--");

    }

    printf("\n");

  }

}

void player_chess(char arr[ROW][COL])

{

  int x = 0;

  int y = 0;

  while (1)

  {

    printf("请输入你所要下棋的方位:");

    scanf("%d%d", &x, &y);

    x--;

    y--;

    if (arr[x][y] == ' ')

    {

      arr[x][y] = '#';

      break;

    }

    else

    {

      printf("这个位置已经被占,请重新下棋。\n");

      continue;

    }

  }

}

void computer_chess(char arr[ROW][COL])

{

  srand((unsigned)time(NULL));

  while (1)

  {

    int x = 0;

    int y = 0;

    srand((unsigned)time(NULL));

    x = rand() % 3;

    y = rand() % 3;

    if (arr[x][y] == ' ')

    {

      arr[x][y] = '@';

      break;

    }

    else

    {

      if (check_full(arr) == 0)

      {

        continue;

      }

      else

      {

        break;

      }

    }

  }

}

int check_full(char arr[ROW][COL])

{

  int i = 0;

  int j = 0;

  for (i = 0; i < ROW; i++)

  {

    for (j = 0; j < COL; j++)

    {

      if (arr[i][j] == ' ')

      {

        return 0;

      }

    }

  }

  return 1;

}

char check_win(char arr[ROW][COL])

{

  int i = 0;

  int ret = 0;

  for (i = 0; i < ROW; i++)

  {

    if ((arr[i][0] == arr[i][1]) && (arr[i][2] == arr[i][1]))

    {

      return arr[i][0];

    }

  }

  for (i = 0; i < COL; i++)

  {

    if ((arr[0][i] == arr[1][i]) && (arr[2][i] == arr[1][i]))

    {

      return arr[0][i];

    }

  }

  if ((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2]))

  {

    return arr[0][0];

  }

  if ((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0]))

  {

    return arr[2][0];

  }

  ret = check_full(arr);

  if (ret == 1)

  {

    return 'q';

  }

  return ' ';

}

int main()

{

  char arr[ROW][COL] = { 0 };

  int input = 1;

  while (input)

  {

    printf("请选择是否开始游戏:");

    printf("1:继续游戏,0:结束游戏");

    scanf("%d", &input);

    switch (input)

    {

    case 1:{

      char ret = 0;

      init_board(arr);

      do

      {

        display_board(arr);

        player_chess(arr);

        display_board(arr);

        if (check_win(arr) != ' ')

        {

          ret = check_win(arr);

          break;

        }

        computer_chess(arr);

        ret = check_win(arr);

      } while (ret == ' ');

      display_board(arr);

      if (ret == '#')

      {

        printf("玩家赢的游戏\n");

      }

      else if (ret == '@')

      {

        printf("电脑赢的游戏\n");

      }

      else if (ret == 'q')

      {

        printf("游戏平局\n");

      }

    }

      break;

    case 0:

      break;

    }

  }

  system("pause");

  return 0;

}

程序如果有不足之处,希望大家能够多多指出来。

以上就是本文的全部内容,也希望对大家的学习有所帮助!

自学C/C++编程难度很大,不妨和一些志同道合的小伙伴一起学习成长!

C语言C++编程学习交流圈子,QQ群【757874045】有一些源码和资料分享,欢迎转行也学习编程的伙伴,和大家一起交流成长会比自己琢磨更快哦!

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值