用easy-x可视化窗口实现马踏棋盘

该博客介绍了如何利用Easy-X图形库在VS2019中创建一个马踏棋盘的动画效果。作者首先指导读者从官网下载并安装Easy-X插件,然后提供了一个C++源码示例,该示例通过结构体和栈来模拟马在棋盘上的移动,并使用不同的颜色和数字来可视化每一步。程序会根据马的当前位置动态更新棋盘,并在每步之间暂停以便观察。最终,当马无法再移动时,程序显示‘马踏棋盘完成!’的消息框。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • easy-x插件需要自己在官网下载(附上链接)
    https://easyx.cn/
  • 安装好插件后用vs2019打开
  • 然后话不多说,附上源码
#include <stack>
#include <iostream>
#include<time.h>
#include<graphics.h>
using namespace std;
struct node
{
	int x;
	int y;
};
IMAGE img1, img2;
int map[8][8] = { 0 };
int step[8][2] = { {-2,-1} ,{-2,1},{2,-1},{2,1},{-1,-2},{-1,2},{1,-2},{1,2} };
int visit[8][8] = { 0 };
bool bound(int x, int y) {
	if (x < 8 && x>=0 && y < 8 && y>=0 ) {
		return true;
	}
	return false;
}
void draw_number() {
	for (int i = 0; i < 8; i++) {
		for (int j = 0; j < 8; j++) {
			if (map[i][j] != 0) {
				//设置字体的颜色
				//当它行数加上列数为奇数的时候
				if ((i + j) % 2 == 1) {
					setbkcolor(RGB(143,89,45));
				}
				//当它行数加上列数为偶数的时候
				else {
					setbkcolor(RGB(224,204,171));
				}
				//把字体进行可视化
				char ch[10] = " ";
				sprintf_s(ch, "%d", map[i][j]);
				settextstyle(35, 20, "楷体");
				settextcolor(RGB(rand() % 256, rand() % 256, rand() % 256, ));
				outtextxy( 60+ 64.5 * j, 60 + 64.5 * i, ch);
			}
		}
	}
}
int find_path(int x,int y) {
	//设置随机数种子
	srand((unsigned)time(NULL));
	//用栈来储存结构体
	stack<node>s;
	node p;
	p.x = x;
	p.y = y;//初始化马的位置(x=1,y=0)
	s.push(p);
	visit[p.x][p.y] = 1;
	int num = 1;		//进行初始化
	map[p.x][p.y] = num;
	putimage(0, 0, &img1);
	draw_number();
	putimage(42 + 64.5 * p.y, 42 + 64.5 * p.x, &img2);
	Sleep(1000);
	while (!s.empty()) {
		int t = 0;	//逻辑判断,无路可走情况
		for (int i = 0; i < 8; i++) {
			p = s.top();
			node h = p;
			h.x = p.x + step[i][0];
			h.y = p.y + step[i][1];
			if (visit[h.x][h.y] == 0 && bound(h.x, h.y)) {//判断位置是否有效
				//可视化棋盘
				putimage(0, 0, &img1);
				draw_number();
				putimage(42 + 64.5 * h.y, 42 + 64.5 * h.x, &img2);
				s.push(h);
				//当马每踏过一个网格就把数字num+1
				num++;
				map[h.x][h.y] = num;
				visit[h.x][h.y] = 1;
				t = 1;
				//间隔一秒便于观察
				Sleep(500);
			}
		}
		if (t == 0) {
			s.pop();//走到尽头回溯
		}
	}
	return 0;
}
int main()
{
	//创建可视化窗户
	
	loadimage(&img1, "1.jpg");
	loadimage(&img2, "2.png");
	//开始马踏棋盘
	int x;
	int y;
	cout << "请输出马的初始位置:"<<endl;
	cin >> x;
	cin >> y;
	initgraph(600, 600);
	find_path(2,3);
	//结束时候的标志
	MessageBox(NULL, "马踏棋盘完成!", "消息", MB_OK);
	closegraph();
}

  • 资源文件是放到这个文件夹里的:
    在这里插入图片描述
  • 运行后结果是这样子的:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值