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

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

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

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

游戏介绍:

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

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

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

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

效果图展示

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

配套讲解教程:「链接」

源代码示例:

#include<stdio.h>#include<graphics.h>#define INTERVAL 50  //前面的间隔#define CHESS_GRID_SIZE 70  //格子宽度#define ROW  10#define COL  9enum 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[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语言项目实战:《中国象棋》零基础项目!210 行源代码示例

编程学习视频分享:

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

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

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

对于C/C++感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/89226.html

(0)

相关推荐

  • 老年人如何养生才健康,老年人如何保持健康

    #养老知识大赛#人们常说:“世上难逢百岁人”,我认为已经过时,现在活到八九十岁是常事,关键是我们自己做自己健康的第一责任人拿出什么样的态度和状态。现在国家提倡“健康老龄化”,我们必须亲身参与,探寻好的养生之道。要记住健康长寿的几大密钥。

    生活 2021年12月11日
  • 光刻机芯片概念股的龙头股,半导体光刻胶概念的龙头股

    半导体行业市场现状及竞争分析:

    生活 2021年10月29日
  • 为啥中国手机在海外卖得好?这下真相了:原来国外手机能这么贵

    500美元能买到什么手机?这个价格超过3000元人民币,在国内市场能够直接从旗舰款里挑手机了。不过这也是国内手机市场特有的现象,因为放在全球其他任何一个市场,都不可能有这么多手机可选。最近The Verge就列出了在国外500美元能够买到的手机,看了这些可选机型之后,也许就明白为什么国产的小米、OPPO、vivo在海外市场能够攻城略地了。

    科技 2021年11月26日
  • 公司监事是什么职位,享受什么待遇,物业公司监事是什么职位

    公司监事是公司治理结构的重要组成部分,也是公司“三会一层”的重要组织机构,监事作为公司监事会的成员,属于公司的高级管理职位。在公司治理中,分为公司股东会、董事会、监事会等“三会”和经理层。下面和大家分享相关的知识要点:

    生活 2021年11月20日
  • 天冷了,困了,就没精神了。你应该多吃6种食物,有高含量的“镁”,精神好。

    进入冬至节气以后,数九寒天正式开始了,气温明显下降了不少,不少地区又迎来了降雪,天气阴沉沉的,而且这种天气在冬日里很常见。很多人在这样的气候中容易犯困,感觉总是睡不醒的样子,昏昏欲睡,无论是工作还是学习都很影响效率。这时候我们可以多吃些新鲜的蔬菜水果来补充维生素,当然我们也可以多吃些富含“镁”的食物,因为镁是我们人体必需的一种成分,参与多项生命活动。今天就来跟大家分享6种生活中常见的高“镁”食物,不妨给家人常吃些,精神好状态佳,一起来看看吧~

    生活 2021年12月23日
  • 孩子熟悉自己不一定是好事。做好三件事,让孩子的性格更受欢迎。

    “自来熟”的孩子,好像不管走到哪里,都能跟周边人打成一片。在大多数父母眼中,自来熟是好事,说明孩子不畏惧陌生环境,而且自带交际能力。完全不用家长提醒,他们的社交能力就已经完全打开,完全就是其他家长口中“别人家的孩子”。

    生活 2021年10月30日