这篇文章主要为大家详细介绍了C语言实现——《中国象棋项目》,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下!

游戏介绍:

中国象棋是由两人轮流走子,在战法上遵循古代孙子兵法中的“不战而屈人之兵,善之善者也”的作战思想,以“将死”或“困毙”对方将(帅)为胜的一种二人对抗性游戏。对局时,由执红棋的一方先走,双方轮流各走一招,直至分出胜、负、和,对局即终了。在棋战中,人们可以从攻与防、虚与实、整体与局部等复杂关系的变化中提升思维能力。

每种棋子的行棋规则大家如果有不懂的地方,可以去了解一下,都很简单。你想要做出本项目,了解规则是必不可少的。

本项目编译环境:VS2019/VS2013;

插件:图形库插件easyX,涉及图片素材可以自行百度找也可以关注文末领取;

效果图展示

配套讲解教程:中国象棋游戏教程——哔哩哔哩https://www.bilibili.com/video/BV1DC4y1H7xo?from=search&seid=7193207657102750553&spm_id_from=333.337.0.0

源代码示例:

#include<stdio.h>
#include<graphics.h>
#define INTERVAL 50  //前面的间隔
#define CHESS_GRID_SIZE 70  //格子宽度
#define ROW  10
#define COL  9
enum PIECES//枚举棋子
{車,馬,象,士,将,砲,卒,俥,马,相,仕,帥,炮,兵,SPACE,BEGIN,END
};
//红黑方棋子、
int redChess[] = { 車, 馬, 象, 士, 将, 砲, 卒};
int blackChess[] = { 俥, 马, 相, 仕, 帥, 炮, 兵 };
const char*chessName[] = { "車", "馬", "象", "士", "将", "砲", "卒", "俥", "马", "相", "仕", "帥", "炮", "兵" };
struct Chess//棋子属性
{int x;int y;int id;//哪个棋子int type;//是哪一方的棋子 红,黑?bool river;//判断小兵是否过了河
};
struct Chess  map[ROW][COL];//结构体数组,用来保存每一个点的信息
POINT begin = { -1, -1 }, end = { -1, -1 };//保存前后两次点击的数组下标
int state = BEGIN;
//初始化游戏数据
void GameInit()
{for (int i = 0; i < ROW; i++){for (int k = 0; k < COL; k++){int chessname = SPACE;int mcolor = BLACK;//黑棋if (i <= 4){mcolor = BLACK;//初始化第一行的棋子,if (i == 0){if (k <= 4){chessname = blackChess[k];}else{chessname = blackChess[8-k];}}//设置炮if (i == 2 && (k == 1 || k == 7)){chessname = blackChess[砲];}//设置小兵if (i == 3 && k % 2 == 0){chessname = blackChess[卒];}}//紅棋else {mcolor = RED;//初始化第一行的棋子,if (i == 9){if (k <= 4){chessname = redChess[k];}else{chessname = redChess[8 - k];}}//设置炮if (i == 7 && (k == 1 || k == 7)){chessname = redChess[炮];}//设置小兵if (i == 6 && k % 2 == 0){chessname = redChess[兵];}}map[i][k].id = chessname;map[i][k].river = false;map[i][k].type = mcolor;map[i][k].x = k*CHESS_GRID_SIZE + INTERVAL;map[i][k].y = i*CHESS_GRID_SIZE + INTERVAL;}}
}
//游戏的绘制函数
void GameDraw()
{//设置背景颜色 red black setbkcolor(RGB(252, 215, 162));cleardevice();//绘制棋盘setlinecolor(BLACK);setlinestyle(PS_SOLID, 2);for (int i = 0; i < 10; i++){//画横线line(INTERVAL, i*CHESS_GRID_SIZE + INTERVAL, 8 * CHESS_GRID_SIZE + INTERVAL, i*CHESS_GRID_SIZE + INTERVAL);//画竖线if (i < 9){line(i*CHESS_GRID_SIZE + INTERVAL, INTERVAL, i*CHESS_GRID_SIZE + INTERVAL, 9 * CHESS_GRID_SIZE + INTERVAL);}}rectangle(INTERVAL - 5, INTERVAL - 5, 8 * CHESS_GRID_SIZE + INTERVAL+5, 5+9 * CHESS_GRID_SIZE + INTERVAL);//楚河汉界显示setfillcolor(RGB(252, 215, 162));fillrectangle(INTERVAL, 4 * CHESS_GRID_SIZE + INTERVAL, 8 * CHESS_GRID_SIZE + INTERVAL, 5 * CHESS_GRID_SIZE + INTERVAL);//显示文字char river[20] = "楚河        汉界";settextstyle(50, 0, "楷体");settextcolor(BLACK);setbkmode(TRANSPARENT);outtextxy(INTERVAL+100, 4 * CHESS_GRID_SIZE + INTERVAL+10, river);//画九宫格//画上面line(3 * CHESS_GRID_SIZE + INTERVAL, INTERVAL, 5 * CHESS_GRID_SIZE + INTERVAL, 2 * CHESS_GRID_SIZE + INTERVAL);line(3 * CHESS_GRID_SIZE + INTERVAL, 2 * CHESS_GRID_SIZE + INTERVAL, 5 * CHESS_GRID_SIZE + INTERVAL, INTERVAL);//画下面line(3 * CHESS_GRID_SIZE + INTERVAL, 7 * CHESS_GRID_SIZE + INTERVAL, 5 * CHESS_GRID_SIZE + INTERVAL, 9 * CHESS_GRID_SIZE + INTERVAL);line(3 * CHESS_GRID_SIZE + INTERVAL, 9 * CHESS_GRID_SIZE+INTERVAL,5*CHESS_GRID_SIZE+INTERVAL,7*CHESS_GRID_SIZE+INTERVAL);//画棋子settextstyle(30, 0, "楷体");for (int i = 0; i < ROW; i++){for (int k = 0; k < COL; k++){if (map[i][k].id != SPACE){setlinecolor(map[i][k].type);fillcircle(map[i][k].x, map[i][k].y, 30);fillcircle(map[i][k].x, map[i][k].y, 25);settextcolor(map[i][k].type);outtextxy(map[i][k].x-10, map[i][k].y-10, chessName[map[i][k].id]);}}}
}
void MouseControl()
{if (MouseHit()){MOUSEMSG msg = GetMouseMsg();if (msg.uMsg == WM_LBUTTONDOWN){//获取鼠标点击的数组的下标int row = (msg.y-INTERVAL)/CHESS_GRID_SIZE;int col = (msg.x-INTERVAL)/CHESS_GRID_SIZE;if (state == BEGIN){state = END;begin.x = row;begin.y = col;}else if (state == END){state = BEGIN;begin.x = row;begin.y = col;}printf("%d,%d  %d\n", row, col, state);}}
}
void chessMove()
{if (begin.x != -1 && end.x != -1 && !(begin.x == end.x &&begin.y == end.y)){map[end.x][end.y].id = map[begin.x][begin.y].id;map[end.x][end.y].type = map[begin.x][begin.y].type;map[end.x][end.y].river = map[begin.x][begin.y].river;map[begin.x][begin.y].id = SPACE;}}
int main555()
{   //创建一个图形窗口initgraph(800,800,SHOWCONSOLE);GameInit();printf("欢迎来到顽石老师课堂,中国象棋");BeginBatchDraw();while (1){GameDraw();FlushBatchDraw();MouseControl();chessMove();}return 0;
}

写在最后:对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

C语言C++编程学习交流圈子,QQ群:829164294点击进入】微信公众号:C语言编程学习基地

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

编程学习视频分享:

C语言项目实战:《中国象棋》零基础项目,210 行源代码示例相关推荐

  1. C/C++编程笔记:C语言打造中国象棋游戏,项目源代码分享!

    中国象棋是起源于中国的一种棋,属于二人对抗性游戏的一种,在中国有着悠久的历史.由于用具简单,趣味性强,成为流行极为广泛的棋艺活动. 它是中国棋文化,也是中华民族的文化瑰宝,它源远流长,趣味浓厚,基本规 ...

  2. yolov5使用2080ti显卡训练是一种什么样的体验我通过vscode搭建linux服务器对python-yolov5-4.0项目进行训练,零基础小白都能看得懂的教程。>>>>>>>>>第二章番外篇

    第二章番外篇:yolov5通过vscode搭建linux服务器对python-yolov5-4.0项目进行训练,零基础小白都能看得懂的教程.YOLOv5搭建的最快搭建方式,踩坑经历详谈 前期准备: 2 ...

  3. 【项目】基于SaaS的餐掌柜项目实战 阶段一 基于SaaS的餐掌柜项目实战 第1章 基础架构搭建 1 餐掌柜需求分析

    [项目]基于SaaS的餐掌柜项目实战 文章目录 [项目]基于SaaS的餐掌柜项目实战 阶段一 基于SaaS的餐掌柜项目实战 第1章 基础架构搭建 1 餐掌柜需求分析 1.1 餐饮行业分析 1.2 餐饮 ...

  4. c语言编程一个象棋游戏,急求:C语言编写的中国象棋游戏一个

    急求:C语言编写的中国象棋游戏一个 來源:互聯網  2009-09-08 12:30:35  評論 分類: 電腦/網絡 >> 程序設計 >> 其他編程語言 問題描述: 由于学习 ...

  5. C语言入门知识1(零基础新手适用)

    C语言入门知识1(零基础新手适用) #程序语言 1.机器语言 机器语言是低级语言,是用01码来编写的二进制代码语言 2.汇编语言 汇编语言也是低级语言,是用英文字母和符号串编写的 3.高级语言 由于汇 ...

  6. 新书推荐:《Android Studio开发实战:从零基础到App上线》终章

    <Android Studio开发实战:从零基础到App上线>是一部Android开发的实战教程,由浅入深.由基础到高级,带领读者一步一步走进App开发的神奇世界. 全书共分为16章.其中 ...

  7. Pytorch项目实战聊天机器人(02.项目的准备阶段)

    Pytorch项目实战聊天机器人(02.项目的准备阶段) 02.项目的准备阶段 二.2-2 NLP涉及知识 三.2-3 NLTK库 四 ,2-4 语料和词性标注 五 ,2-5 分词 六 , 2-6 T ...

  8. Spring Boot + vue-element 开发个人博客项目实战教程(一、项目介绍和规划)

    ⭐ 作者简介:码上言 ⭐ 代表教程:Spring Boot + vue-element 开发个人博客项目实战教程 ⭐专栏内容:零基础学Java.个人博客系统 ⭐我的文档网站:http://xyhwh- ...

  9. 【PBL项目实战】户外智慧农场项目实战系列——5.天气预报API接口对接

    [PBL项目实战]户外智慧农场项目实战系列--5.天气预报API接口对接 原文链接  https://mp.weixin.qq.com/s/jditkIEd-UK6cSQyCC_-Eg 本系列以户外智 ...

最新文章

  1. python中字典格式_如何在Python中使用带有字典的格式函数和整数键
  2. 读书笔记_大话数据结构第九章_排序
  3. IOS客户端Coding项目记录(二)
  4. axure9数据统计插件_WMDA:大数据技术栈的综合实践
  5. 哈夫曼编解码器C语言可运行
  6. SQL SERVER占用CPU过高排查和优化
  7. python plot linestyle 线型颜色及线条控制(linestyle、marker、color)
  8. html制作炸金花,如何在微信小程序上制作炸金花?
  9. java form上传图片_js formData图片上传(单图上传、多图上传)后台java
  10. 优麒麟桌面闪烁_优麒麟 19.10 正式发布—百尺竿头,更进一步
  11. java开发mdm平台_Apple iOS MDM开发流程
  12. fiddler限速_基于fiddler来模拟限速
  13. matlab两条曲线方程求交点_帮忙matlab求两条曲线交点程序,不知问题出在哪里。...
  14. Tycho build 3: 创建一个全局构建项目
  15. C++模拟手机调查问卷
  16. linux系统安装nacos(减少踩坑)并设置开机自动
  17. 每日10行代码57: appium测试坚果手机出现socket hang up报错的解决
  18. 【Centos7 NTP 服务器和客户端配置(含离线状态) 附赠手动配置系统时间】
  19. JSP | 简易购物车的实现
  20. Win32绘图总结篇(点、直线、折线、贝塞尔曲线、矩形、椭圆、圆弧、弓形、扇形、多边形等)

热门文章

  1. 国外发中国互联网报告:老人及农村将成关键
  2. 从数据处理到人工智能(常用库的介绍)
  3. word页眉横线去除方法
  4. oracle数据库监听问题,Oracle数据库监听器的问题
  5. 【你足够努力了吗?】
  6. linux操作系统论文可复制,linux操作系统课程论文
  7. JTAG 基础和svf specification介绍
  8. SSD对HADOOP集群性能提升 调研及测试计划
  9. 面向对象以及运用最大最小搜索的井字棋设计(附源码)
  10. 能够替换SS495A 、A1324/A1325 /A1326/、MLX90242 的国产线性霍尔传感器介绍