中国象棋是起源于中国的一种棋,属于二人对抗性游戏的一种,在中国有着悠久的历史。由于用具简单,趣味性强,成为流行极为广泛的棋艺活动。

它是中国棋文化,也是中华民族的文化瑰宝,它源远流长,趣味浓厚,基本规则简明易懂。中国象棋在中国的群众中基础远远超过围棋,是普及最广的棋类项目,中国象棋已流传到十几个国家和地区。它使用方形格状棋盘,圆形棋子共有32个,红黑二色各有16个棋子,摆放和活动在交叉点上。双方交替行棋,先把对方的将(帅)“将死”的一方获胜。(摘取自百度百科)

那么我们今天,将用C语言来实现我们中国象棋游戏程序的开发,觉得对你有帮助的小伙伴记得先关注一波哦!

实现思路

我们可以用绘图技术绘制棋盘,枚举定义各种棋子,然后结构体数组,用来保存每一个点的信息。

重点是棋盘的绘制以及判断棋子是否可移动到目标位置,移动有两种可能,一是单纯移动,二是吃子移动。主要飞将的特殊规则。废话不多说,贴源码!

源码分享

#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++编程学习交流圈子,【点击进入】微信公众号:C语言编程学习基地

有一些源码和资料分享,欢迎转行也学习编程的伙伴,和大家一起交流成长会比自

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

  1. 安卓android中国象棋chess程序项目源码源代码,C/C++编程笔记:C语言打造中国象棋游戏,项目源代码分享!,c语言笔记大全...

    #include#include #define INTERVAL 50 //前面的间隔 #define CHESS_GRID_SIZE 70 //格子宽度 #define ROW 10 #defin ...

  2. 基于Java的中国象棋游戏的设计与实现

    技术:Java等 摘要: 近些年,Java技术日趋成熟,它的跨平台性,健壮性以及使用人数的增多都表明了它的受欢迎程度不断攀升,因此选用了Java语言作为中国象棋游戏的开发语言.并且中国象棋文化源远流长 ...

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

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

  4. C语言实现中国象棋(Qt实现界面,源码下载,详细注释,易移植)

    前言:中国象棋的规则很多人都懂,用C语言做一个中国象棋游戏,其要点是怎么把抽象的规则变成形象.具体的代码.本项目提供详细的实现思路,源码附带大量的注释说明,源码逐步地实现了每一种棋类的走棋规则.吃棋规 ...

  5. 编程之美 1.2 中国象棋将帅问题

    编程之美 1.2 中国象棋将帅问题 版权所有, 禁止转载, 如有需要, 请站内联系. 本文地址: http://blog.csdn.net/caroline_wendy/article/details ...

  6. Qt终极教程——用Qt编程实现中国象棋游戏(提供源代码和程序编译运行教程)

    Qt终极教程--用Qt编程实现中国象棋游戏 目录 Qt终极教程--用Qt编程实现中国象棋游戏 简介 运行可执行程序体验象棋游戏 Qt 安装 源代码的编译.运行与调试 生成预编译的可执行程序 简介 本文 ...

  7. 基于python的游戏设计与实现-基于Python的网络中国象棋游戏设计与实现

    基于Python的网络中国象棋游戏设计与实现 摘要中国象棋是一种家喻户晓的棋类游戏,随着互联网时代的到来,人们的娱乐方式也逐渐向PC端和移动端上发展.本文将传统的中国象棋游戏和当下的互联网技术结合作为 ...

  8. 基于Java+Swing实现中国象棋游戏

    基于Java+Swing实现中国象棋游戏 一.系统介绍 二.功能展示 三.其他系统 四.获取源码 前言 中国象棋是起源于中国的一种棋,属于二人对抗性游戏的一种,在中国有着悠久的历史.由于用具简单,趣味 ...

  9. 【180616】中国象棋游戏的VC++源码

    在电脑上是不是经常见到这款中国象棋游戏啊?本游戏包括单机版和网络版,今天终于见到它的神秘面纱了,它的源代码文件.超强难度的搜索引擎和算法.估值函数以及开局库,还有大量的开局库资料都将为您展现出来.研究 ...

最新文章

  1. RAID之中的RAID5的创建及示例
  2. 计算机 配置不过4000,台式机4000元以上免谈,非主流配置免谈
  3. 【NLP】 聊聊NLP中的attention机制
  4. SpringBoot v2.2.6版本遇到的坑------Thymeleaf的sec:authorize标签无效
  5. 深度学习笔记第三门课 结构化机器学习项目 第二周 机器学习(ML)策略(2)...
  6. 【平衡规划】Arithmetic Operations(CF1654E)
  7. 云开发0基础训练营第二期热力来袭!
  8. 梯度下降、牛顿法、拟牛顿法详细介绍
  9. .30-浅析webpack源码之doResolve事件流(2)
  10. linux伊甸园论坛,tcsh问题 - Mandrake/Mandriva - Linux伊甸园论坛
  11. 为啥OpenStack厂商要参加双态运维大会?
  12. RabbitMQ下载与安装
  13. beyond compare this license key has been revoked
  14. 菩提本无树,明镜亦非台,本来无一物,何处惹尘埃(学习)
  15. 云服务器部署QQ农场
  16. 软件学报投稿的大致时间线分享
  17. Delphi如何使用最新版本的OpenSSL
  18. 安装GaussView教程-提供GaussView 5.0.9-x64_linux文件
  19. 传真服务器实现全程无纸化应用
  20. 饿了么在即时零售的胜算

热门文章

  1. 【电脑办公软件】万彩办公大师教程丨PDF批量转SWF工具帮助文档
  2. iPod nano 7代转存歌曲
  3. 《网蜂A8实战演练》——1.LED驱动
  4. OpenCv:直方图均衡化(HE),自适应直方图均衡化(AHE),限制对比度自适应直方图均衡化(CLAHE)
  5. 2021-10-22CHCC2021易普森医疗服务机器人矩阵亮相,展会现场强势吸睛
  6. 大数据时代来临 机房精密空调将迎来黄金发展期
  7. Internet of things 译文
  8. win10怎么录制屏幕视频?电脑怎么进行屏幕录制? 电脑有自带的录屏功能吗
  9. Gradle学习第一篇——自定义Gradle插件
  10. 【Minecraft】在我的世界Minecraft服务端上开启第三方认证,并支持皮肤