C语言五子棋游戏实现(三子棋进阶)

简介: C语言五子棋游戏实现(三子棋进阶)

前言:

往期给大家介绍了用C语言实现三子棋,今天我将在三子棋的基础上升级为五子棋,来跟着阿C看看吧。

注:建议先学会写三子棋,可以看我的往期博客 C语言三子棋游戏实现(基础版)

初学C语言的小伙伴放心食用~~~


目录

❤️1.巧用宏定义

🧡2.打印棋盘

💛3.输赢判断


进阶要求:

自定义棋盘大小

更普遍的输赢判断方法

 

1.巧用宏定义


像这样的就是宏定义:


#define ROW 3

#define COL 3


宏定义最大的好处是“方便程序的修改”,使用宏定义可以用宏代替一个在程序中经常使用的常量

使用宏定义之后,我们就可以一键修改经常使用的常量,如:


char board[ROW][COL];

init_board(board, ROW, COL);

print_board(board, ROW, COL);


这为经常使用的常量的修改提供了便利。


2.打印棋盘


先来回顾下往期是如何打印棋盘的:

void print_board(char board[3][3], 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]);
    if(i<row-1)
      printf("---|---|---\n");
  }
}


因为往期明确是 3*3 的棋盘,所以只对棋盘进行了简单的拆分,与 row , col 变量关系不是很密切,灵活度不高;

而自定义棋盘意味着更高的灵活度,自然要对棋盘进一步拆分并加强与 row , col  变量的关系。

微信图片_20230415215337.png

第一部分:

12 看作整体3 ,最后一个整体没有 2

微信图片_20230415215432.png

第二部分:

与第一部分类似

上代码:

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)
    {
      //printf("---|---|---\n");
      for (j = 0; j < col; j++)
      {
        printf("---");
        if (j < col - 1)
          printf("|");
      }
      printf("\n");
    }
  }
}

这里定义行和列为 9 ,展示:

微信图片_20230415215633.png

是不是妙哉~


3.输赢判断


增加了棋盘的格子数,五子连珠的种类大幅增加,显然不能像三子棋那样穷举,我们需要一种更普遍的判断方式,就是引入函数。

微信图片_20230415215708.png

这里 i >=2 , j >= 2 ;

以 (i , j) 为中心展开,用坐标表示其他相关位置,这样就很轻易得到判断标准:

int i = 2;
for (i = 2; i < row; i++)
{
  int j = 2;
  for (j = 2; j < col; j++)
  {
      if (board[i][j] != ' ' && board[i][j-2] == board[i][j-1] && board[i][j-1] == board[i][j] && board[i][j] == board[i][j+1] && board[i][j+1] == board[i][j+2])
      {
        return board[i][j];
      }
  }
}
for (i = 2; i < row; i++)
{
  int j = 2;
  for (j = 2; j < col; j++)
  {
    if (board[i][j] != ' ' && board[i-2][j] == board[i-1][j] && board[i-1][j] == board[i][j] && board[i][j] == board[i+1][j] && board[i+ 1][j] == board[i+2][j])
      {
        return board[i][j];
      }
  }
}
for (i = 2; i < row; i++)
{
  int j = 2;
  for (j = 2; j < col; j++)
  {
    if (board[i][j] != ' ' && board[i-2][j-2] == board[i-1][j-1] && board[i-1][j-1] == board[i][j] && board[i][j] == board[i+1][j+1] && board[i+1][j+1] == board[i+2][j+2])
      {
        return board[i][j];
      }
  }
}
for (i = 2; i < row; i++)
{
  int j = 2;
  for (j = 2; j < col; j++)
  {
    if (board[i][j] != ' ' && board[i-2][j+2] == board[i-1][j+1] && board[i-1][j+1] == board[i][j] && board[i][j] == board[i+1][j-1] && board[i+1][j-1] == board[i+2][j-2])
          {
        return board[i][j];
      }
  }
}



总结:

这篇博客内容比较简单,算是对往期三子棋游戏实现的补充, 其中巧用宏定义是重要知识点,掌握了它,以后写代码就可以事半功倍哦。

目录
相关文章
|
1月前
|
C语言
C语言之斗地主游戏
该代码实现了一个简单的斗地主游戏,包括头文件引入、宏定义、颜色枚举、卡牌类、卡牌类型类、卡牌组合类、玩家类、游戏主类以及辅助函数等,涵盖了从牌的生成、分配、玩家操作到游戏流程控制的完整逻辑。
77 8
|
2月前
|
C语言
扫雷游戏(用C语言实现)
扫雷游戏(用C语言实现)
128 0
|
28天前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
45 2
|
1月前
|
C语言 Windows
C语言课设项目之2048游戏源码
C语言课设项目之2048游戏源码,可作为课程设计项目参考,代码有详细的注释,另外编译可运行文件也已经打包,windows电脑双击即可运行效果
34 1
|
2月前
|
编译器 C语言
猜数字游戏实现#C语言
猜数字游戏实现#C语言
99 1
|
2月前
|
存储 C语言
揭秘C语言:泊舟的猜数字游戏
揭秘C语言:泊舟的猜数字游戏
100 2
|
2月前
|
C语言
初学者指南:使用C语言实现简易版扫雷游戏
初学者指南:使用C语言实现简易版扫雷游戏
47 0
|
2月前
|
C语言
C语言扫雷游戏(详解)
C语言扫雷游戏(详解)
45 0
|
2月前
|
程序员 C语言
初识C语言之三子棋游戏
初识C语言之三子棋游戏
39 0
|
2月前
|
C语言
初识C语言3——函数(以猜数字游戏为例)
初识C语言3——函数(以猜数字游戏为例)
76 0

相关实验场景

更多