马踏棋盘图形界面版

这是一个使用VC++和EasyX库实现的马踏棋盘问题的图形界面版本。程序通过回溯算法随机寻找可行路径,并在棋盘上实时更新马的行走状态,同时配有音效。用户可以点击棋盘开始游戏,当马走遍所有格子时,程序会显示完整的行走路线并结束游戏。
摘要由CSDN通过智能技术生成

算法思想:每次随机选一个初始位置,按照逆时针的方向每次向下试探,在试探到走不通的格子后,就退回上一个格子,偏转到下一个方向继续试探,直至所有的格子被走遍;

界面编程:利用vc++的easyx插件进行绘图;


#include <graphics.h>//设计图形界面所必须的头文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <windows.h>
#include <time.h>//显示时间的头文件
#include <mmsystem.h>//播放音效所需的头文件
#pragma comment(lib, "WINMM.LIB")//播放音效所需的头文件


#define N 20




typedef struct location {
int x;
int y;
}LOC;//记录马的当前位置


typedef struct node {
LOC loc;//当前坐标
    int num;//存储该坐标当前已经试探过的方向! 
struct node * pNext;
}NODE,*PNODE;


typedef struct stack {
struct node * top;//栈顶指针
struct node * bottom;//栈底指针
}STACK,*PSTACK;




void init(); //初始化栈 
void push(LOC loc); //进栈 
void pop(); // 出栈,注意要判空
int empty(); //判空栈 
void trave(); //输出马的行走路线
void clear(); //置空栈 
PNODE GetTop(); //取栈顶元素
LOC check(); //寻找试探下一个有效的格子
int  check1(LOC n); //判断该格子当前是否已经走过
void jiemian();             //
void Time();
LOC beforegame();


STACK sp;
PSTACK s = &sp;//s表示马的行进路径,全局变量必须在定义的同时初始化,否则会报错
LOC size[64];//存储马的坐标
int f = 0,k,size1[64] = {0};          
int  curpos=0;       //总共走了多少步。 
int qipanjud[8][8] = { {0}};//标记该格子是否已经走过,1表示走过,0表示没走








int main(void) {
LOC loc,n;//坐标
int flag;
char a[N];
flag = 1;
jiemian();
loc = beforegame();
init();//初始化栈


size[f] = loc;//记录已经走过的坐标
    qipanjud[loc.x][loc.y]=1;   //已经走过增加棋盘标识 
        settextcolor(BLACK);        //设置文字的颜色
        settextstyle(40, 0, _T("宋体"));//设置字体
RECT r = {0+(size[f].x-1)*80,0+(size[f].y-1)*80,80+size[f].x*80,80+size[f].y*80};//定义一个矩形绘图区域
setfillcolor(DARKGRAY);//设置填充颜色为灰色
fillrectangle(0+(size[f].x-1)*80,0+(size[f].y-1)*80,size[f].x*80,size[f].y*80);//用灰色填充指定矩形区域
        sprintf(a, "%d", curpo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值