【C语言】小游戏--三子棋(上)

简介: 【C语言】小游戏--三子棋(上)

事先准备:


三子棋的玩法如下:

e902403dbbe3443487dace76e8ce3b85.png

我们在写一些重要的代码时,最好把自定义函数的声明、定义以及整个程序的实现,分别放在不同的文件里面。这样写不仅会让你的逻辑更清晰、更容易调试代码还便于后续对整个代码的保密操作。

游戏的实现逻辑:

test.c      ——   测试游戏

game.h   ——  游戏函数的声明

game.c   ——  游戏函数的实现


头文件的作用:

#include<stdlib.h>

9463d114ea2440ecbda111306997614a.png

#include<time.h>

9ba13c1c231d48c09257509170b561f4.png

#include<stdio.h>

8b5f55e518a54e4eba5bb6bdcc4453b3.png


使用宏定义:

#define ROW 3
#define COL 3

使用宏定义的原因:
1.推高代码可读性,后续代码中直接用变量代替,参数修改量大大减少。
2.提高扩展性,如果将来要修改棋盘尺寸,代码修改会很方便。
 


基本思路:

1.菜单界面选择/退出游戏

2.创建棋盘并初始化(棋盘为全空格)

   char board[ROW][COL];//存放玩家或者电脑的落子情况

   char ret = 0;

3.打印棋盘

循环{

玩家下棋

打印棋盘

判断玩家输赢:*

电脑下棋

打印棋盘

判断电脑输赢:#

}

【平局:Q(特殊情况)游戏继续:C】

以此循环第1条功能


菜单界面

void menu()
{
  printf("********************\n");
  printf("***** 1.play *******\n");
  printf("***** 0.exit *******\n");
  printf("********************\n");
}


8a89fb4224b7499b804d07857df3cc04.png

测试的逻辑部分:

void game()
{
  //存放玩家或者电脑的落子情况
  char board[ROW][COL];
  char ret = 0;
    // 初始化一下棋盘为全空格
  init_board(board, ROW, COL);
  //打印棋盘
  print_board(board, ROW, COL);
  while (1) {
    //玩家下棋
    player_move(board, ROW, COL);
    print_board(board, ROW, COL);
    //判断输赢
    ret = is_win(board, ROW, COL);
    if (ret != 'C')
    {
      break;
    }
    computer_move(board,ROW,COL);
    print_board(board, ROW, COL);
    //判断输赢
    ret = is_win(board, ROW, COL);
    if (ret != 'C')
    {
      break;
    }
  }
  if (ret == '#')
    printf("电脑赢了\n");
  else if (ret == '*')
    printf("玩家赢了\n");
  else if (ret == 'Q')
    printf("平局\n");
        print_board(board, ROW, COL);
}
void test()
{  
  srand((unsigned int)time(NULL));
  int input=0;
  do {
    menu();
    printf("请选择:>");
        scanf("%d", &input);
    switch (input)
    {
    case 1:
      game();
      break;
    case 0:
      printf("退出游戏\n");
      break;
    default:
      printf("选择错误\n");
      break;
    }
  } while (input);
}
int main()
{
  test();
  return 0;
}


c3f281054b924ee296468a75e8d36525.png

这部分代码之所以放外面是为了避免代码冗余

注意:

e263e5f6deb247c9849e260abefd5066.png

srand((unsigned int)time());srand()函数需要一个time函数的返回值作为参数,但time()函数的返回值是time_t,srand又需要unsigned int类型。


1.初始化棋盘为全空格


游戏开始之前要进行初始化,先建立一个空的棋盘雏形,这里用二维数组来替代棋盘上的位置,空格符号来代表此时棋盘上没有棋子落子。此时就是一个空棋盘,每次开始之前都要置空。

使用“InitBoard()”函数来进行棋盘的初始化操作。

char board[ROW][COL];
init_board(board, ROW, COL);
void init_board(char board[ROW][COL], int row, int col);


函数的实现如下 

void init_board(char board[ROW][COL], int row, int col)
{
  int i = 0;
  for (i = 0; i < row; i++)
  {
    int j = 0;
    for (j = 0; j < col; j++)
    {
      board[i][j] = ' ';
    }
  }
}


2.打印棋盘


打印效果:

02b6ab94ec114ae39f2002e71d5f6d14.png

可以看出上面打印的棋盘是有归律的

_ _ _ | _ _ _ | _ _ _

这是它的规律,而第3列是没有|,所以当j<col-1时才打印|

可看到最后一行没有_ _ _可说明当i<row-1时才打印_ _ _


测试和头文件部分:

print_board(board, ROW, COL);
void print_board(char board[ROW][COL],int row, int col);


代码实现:

void print_board(char board[ROW][COL], int row, int col)
{
  int i = 0;
  for (i = 0; i < row; i++)
  {
    //printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);
    int j = 0;
    for (j = 0; j < col; j++)
    {
      printf(" %c ",board[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");
    }
  }
}


相关文章
|
1月前
|
C语言 C++
【C语言】编写“猜数字“小游戏
【C语言】编写“猜数字“小游戏
|
2月前
|
定位技术 API C语言
C语言——实现贪吃蛇小游戏
本文介绍了一个基于Windows控制台的贪吃蛇游戏的实现方法。首先,需调整控制台界面以便更好地显示游戏。接着,文章详细描述了如何使用Win32 API函数如`COORD`、`GetStdHandle`、`GetConsoleCursorInfo`等来控制控制台的光标和窗口属性。此外,还介绍了如何利用`GetAsyncKeyState`函数实现键盘监听功能。文中还涉及了`&lt;locale.h&gt;`库的使用,以支持本地化字符显示。
58 1
C语言——实现贪吃蛇小游戏
|
2月前
|
存储 安全 算法
C 语言——实现扫雷小游戏
本文介绍了使用二维数组创建棋盘并实现扫雷游戏的方法。首先,通过初始化数组创建一个9x9的棋盘,并添加行列标识以便操作。接着,利用随机数在棋盘上布置雷。最后,通过判断玩家输入的坐标来实现扫雷功能,包括显示雷的数量和处理游戏胜利或失败的情况。文中提供了完整的代码实现。
43 1
C 语言——实现扫雷小游戏
|
1月前
|
C语言 定位技术 API
【C语言】实践:贪吃蛇小游戏(附源码)(二)
【C语言】实践:贪吃蛇小游戏(附源码)
【C语言】实践:贪吃蛇小游戏(附源码)(二)
|
1月前
|
C语言 开发者
C语言实现猜数字小游戏(详细教程)
C语言实现猜数字小游戏(详细教程)
|
5月前
|
C语言
C语言实现2048小游戏---粤嵌GE6818嵌入式系统实训
C语言实现2048小游戏---粤嵌GE6818嵌入式系统实训
|
1月前
|
C语言
【C语言】实践:贪吃蛇小游戏(附源码)(三)
【C语言】实践:贪吃蛇小游戏(附源码)
|
1月前
|
存储 API C语言
【C语言】实践:贪吃蛇小游戏(附源码)(一)
【C语言】实践:贪吃蛇小游戏(附源码)
|
1月前
|
C语言
C语言贪吃蛇小游戏来啦!
C语言贪吃蛇小游戏来啦!
30 0
|
4月前
|
存储 编译器 C语言