龙空技术网

2023年12月11,每天一分钟练习C语言: 用C语言输出中国象棋的棋盘

工控小新 174

前言:

眼前咱们对“象棋算法c”可能比较讲究,小伙伴们都想要知道一些“象棋算法c”的相关资讯。那么小编也在网上搜集了一些对于“象棋算法c””的相关文章,希望我们能喜欢,小伙伴们一起来学习一下吧!

学习工控知识,就来工控小新

农历十月二十九

2023/12/ 11

往期推荐

2023年12月10日,每天花费一分钟练习C语言:寻找两个正序数组的中位数

2023年12月9日,每天花费一分钟练习C语言:判断这一天是这一年的第几天

每日一练

/ Daily Exercises

题目:利用C语言输出一个中国象棋棋盘

题目分析

中国象棋是一种古老而有趣的棋类游戏,它的棋盘由10行9列的格子组成,中间有一条河界分隔两方的阵营。每一方有16个棋子,分别是帅(或将)、仕(或士)、相(或象)、马、车、炮和兵(或卒)。每种棋子有不同的走法和规则,目的是将对方的帅(或将)吃掉,即将军。

如果我们想用C语言来输出一个中国象棋棋盘,我们需要考虑以下几个问题:

如何表示棋盘的格子和河界?如何表示棋子的种类和颜色?如何打印棋盘和棋子?

程序展示

#include <stdio.h>

// 定义棋盘的行数和列数

#define ROWS 10

#define COLS 9

// 定义棋子的类型

#define EMPTY '.'

#define RED_KING 'R'

#define BLACK_KING 'B'

#define RED_GUARD 'G'

#define BLACK_GUARD 'g'

#define RED_ELEPHANT 'E'

#define BLACK_ELEPHANT 'e'

#define RED_HORSE 'H'

#define BLACK_HORSE 'h'

#define RED_ROOK 'C'

#define BLACK_ROOK 'c'

#define RED_CANNON 'A'

#define BLACK_CANNON 'a'

#define RED_PAWN 'P'

#define BLACK_PAWN 'p'

// 定义一个函数,根据棋子的类型,返回对应的中文的字

char *get_chinese_char(char type)

{

switch (type)

{

case RED_KING: return "帥";

case BLACK_KING: return "將";

case RED_GUARD: return "仕";

case BLACK_GUARD: return "士";

case RED_ELEPHANT: return "相";

case BLACK_ELEPHANT: return "象";

case RED_HORSE: return "馬";

case BLACK_HORSE: return "馬";

case RED_ROOK: return "車";

case BLACK_ROOK: return "車";

case RED_CANNON: return "炮";

case BLACK_CANNON: return "炮";

case RED_PAWN: return "兵";

case BLACK_PAWN: return "卒";

default: return " ";

}

}

// 定义一个函数,打印出棋盘

void print_board(char board[ROWS][COLS])

{

// 打印出第一行的边框

printf("+");

for (int j = 0; j < COLS; j++)

{

printf("----+");

}

printf("\n");

// 遍历棋盘的每一行

for (int i = 0; i < ROWS; i++)

{

// 打印出每一行的棋子和竖线

printf("| ");

for (int j = 0; j < COLS; j++)

{

printf(" %s ", get_chinese_char(board[i][j]));

printf("|");

}

printf("\n");

// 打印出每一行的边框或河界

printf("+");

for (int K = 0; K < COLS; K++)

{

if (i == 4)

{

printf("====+");

}

else

{

printf("----+");

}

}

printf("\n");

}

}

// 定义一个函数,初始化棋盘

void init_board(char board[ROWS][COLS]) {

// 将棋盘的所有格子设为空

for (int i = 0; i < ROWS; i++) {

for (int j = 0; j < COLS; j++) {

board[i][j] = EMPTY;

}

}

// 将棋子放在对应的位置

board[0][0] = board[0][8] = BLACK_ROOK;

board[0][1] = board[0][7] = BLACK_HORSE;

board[0][2] = board[0][6] = BLACK_ELEPHANT;

board[0][3] = board[0][5] = BLACK_GUARD;

board[0][4] = BLACK_KING;

board[2][1] = board[2][7] = BLACK_CANNON;

board[3][0] = board[3][2] = board[3][4] = board[3][6] = board[3][8] = BLACK_PAWN;

board[9][0] = board[9][8] = RED_ROOK;

board[9][1] = board[9][7] = RED_HORSE;

board[9][2] = board[9][6] = RED_ELEPHANT;

board[9][3] = board[9][5] = RED_GUARD;

board[9][4] = RED_KING;

board[7][1] = board[7][7] = RED_CANNON;

board[6][0] = board[6][2] = board[6][4] = board[6][6] = board[6][8] = RED_PAWN;

}

// 主函数

int main() {

// 定义一个二维数组,表示棋盘

char board[ROWS][COLS];

// 初始化棋盘

init_board(board);

// 打印出棋盘

print_board(board);

return 0;

}

程序测试

不适用素材的话只能做到下面这种程序了。

源代码获取

#软件下载通道#

我用夸克网盘分享了「20231211」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。

链接:

(链接和提取码建议复制粘贴,手动输入容易出现错误)

#支持一下#

分享整理,测试发布不易 如果您方便的话可以帮忙点一下↓↓

谢谢大家!

下期题目

编写一个高效的算法来判断m x n矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列;每行的第一个整数大于前一行的最后一个整数

点赞加关注,学习不迷路

微信公众号|工控小新

EPLAN电气绘图、TIA博图基础 、CAD、C语言教学、单片机基础、三菱PLC ... 每日持续更新中

#头条创作挑战赛#

标签: #象棋算法c #c语言下象棋 #c语言判断某一天是这一年的第几天 #输出矩阵c语言 #用c语言编写国际象棋棋盘