# 基于X86编程语言实现的迷宫游戏
# 1. 功能简介与实现效果
一个用X86实现的迷宫游戏,首先,在进入游戏首页之后,玩家可以根据自己的喜好选择自己想要玩的难度,本游戏总共有是三个难度,Easy,Normal,Hard,分别对应三个不同难度的迷宫;
![](http://www.writebug.com/myres/static/uploads/2021/10/19/dcf67ba5ab742b4d261f4692e64e5a1d.writebug)
在选择了迷宫难度之后,将会刷新出一个对应难度的迷宫,在这个游戏中,玩家扮演的是一个想要逃离迷宫的小人,这个人用一个笑脸表示,只有当玩家控制角色到达迷宫的出口,即迷宫中标有 A 的位置时候,才能获得游戏的胜利;玩家将通过键盘上的W,A,S,D 键对角色进行移动,分别对应向上,左,下,右移动;当碰到障碍物的时候,角色将不能往那个方向移动;
![](http://www.writebug.com/myres/static/uploads/2021/10/19/022e99578f58131c5c3fe91d05ffd86a.writebug)
![](http://www.writebug.com/myres/static/uploads/2021/10/19/19a216e15af43c216e600363322968d1.writebug)
在成功走出迷宫之后,玩家可以选择进入下一关或者是离开游戏;如果玩家已经走出最难的迷宫,那么玩家也可以选择继续游戏,重新玩一遍游戏;
![](http://www.writebug.com/myres/static/uploads/2021/10/19/41aa9af42725764cfe0c811fca6055e8.writebug)
# 2. 程序流程图
![](http://www.writebug.com/myres/static/uploads/2021/10/19/97a3b9d4e8b3eae529d45bddba43c479.writebug)
# 3. 实现过程
## 3.1 第一步,我们需要在DATA SEGMENT 中存放一些我们之后要使用的数据
- 首先,是将整个迷宫模型保存在MSG_EASYMAZE(简单难度),MSG_NORMALMAZE(普通难度),MSG_HARDMAZE中(困难难度),分别对应三个难度的迷宫模型(这里限于篇幅值显示了MSG_EASYMAZE,另外两个迷宫是一样的原理,具体内容可以下载最下面的源代码查看)
```
MSG_EASYMAZE DB "---------------------------------------------|", 0AH, 0DH
DB " | | | | | |", 0AH, 0DH
DB "| |------------ |--- | | | | | | | |", 0AH, 0DH
DB "| | | | | | | | | |", 0AH, 0DH
DB "| |--| ---| |--|-----| |------ | |--| |", 0AH, 0DH
DB "| | | | |--| | |", 0AH, 0DH
DB "|--- | |-----| | ------| ------|", 0AH, 0DH
DB "| | | | |--| | | |", 0AH, 0DH
DB "| ------| ------| |--| | |--- |--- | |", 0AH, 0DH
DB "| | | | A", 0AH, 0DH
DB "|--------------------------------------------|$"
```
- 然后,是一些字符串,这些字符串将在游戏引导界面告诉玩家该如何操作:
```
NEW_LINE DB 13,10,"$"
MSG_WON DB "You Have Won!!! $", 0AH, 0DH
MSG_NEXTLEVEL DB 13,10,"Go To The Next Level: Enter Y to the Next Level,Input Others to Exit!$",0AH, 0DH
MSG_CONTINUE DB 13,10,"If Continue: Enter Y to Continue,Input Others to Exit!$",0AH, 0DH
MSG_INSTRUCTION DB "WELCOME !!! $", 0AH, 0DH
MSG_SETLEVEL DB "Enter the level you want to play(0 for easy,1 for normal,2 for difficulty): ",0AH, 0DH
DB "Any Invalid Input Will Be Treat As 0: $",0AH, 0DH
MSG_CONTROL DB "You are about to play the game, remember,you can use the w,a,s,d in the keyboard to move",0AH, 0DH
DB "w for up, a for west, s for down, d for east, enter any key to play the game, have a good time!!!$",0AH, 0DH
```
- 然后是一些我们需要使用的变量:
| 变量名 | 功能 |
| ---------- | ---------------------------------------- |
| x | 玩家当前的x坐标 |
| y | 玩家当前的y坐标 |
| NextX | 玩家下一步的x坐标 |
| NextY | 玩家下一步的y坐标 |
| position | 临时变量,用于取出某个位置的内容(用于判断是不是为空,如果为空,则可以移动到该位置) |
| dirInput | 临时变量,用于保存输入的移动指令,w,s,a,d |
| difficulty | 临时变量,用于保存输入的难度 |
| player | 表示玩家(打印该变量即打印玩家) |
| direction | 输入的指令(如Y表示Yes,用于判断是否继续游戏等函数) |
```
x DB 0H ; the x-coordinate of the player
y DB 0H ; the y-coordinate of the player
NextX DB 0H ; the next x-coordinate of the player
NextY DB 0H ; the next y-coordinate of the player
position DB 0H ; a template variable that we use to contain the character in the position
dirInput DB 0H ; the direction you input that your player will move
difficulty DW 0H
player DB 01H
direction DB 0H
```
## 3.2 之后我们添加进入游戏之前的引导界面代码
```
START:
MOV AX, DATA
MOV DS, AX
MOV ES, AX
INSTRUCTION:
CALL CLEAN_SCREEN
LEA DX, MSG_INSTRUCTION ; print the welcome
CALL SHOW
LEA DX, NEW_LINE
CALL SHOW
LEA DX, MSG_CONTROL ; print how to control the player
CALL SHOW
LEA DX, NEW_LINE
CALL SHOW
LEA DX, MSG_SETLEVEL ; choose the difficulty
CALL SHOW
CALL GET_INPUT
MOV direction, AL
CMP direction,'0'
JE GAME_START ; easy game
CMP direction,'1'
JE GAME_START_NORMAL ; normal game
CMP direction,'2'
JE GAME_START_HART ; hard game
CALL GAME_START ; default : easy game
```
## 3.3 第三步,选择对应难度之后绘制对应难度的地图,下面以easy game为例
- 首先,是绘制迷宫
```
;start the game
GAME_START:
CALL EASYMAZE ;draw the maze
CALL SET_STARTPOS ;set the start position of the character
CALL PRINT_PLAYER
JMP ChangePos
; Draw the easy maze
EASYMAZE:
CALL CLEAN_SCREEN
LEA DX, MSG_EASYMAZE
CALL SHOW
RET
```
- 打印出地图之后,我们需要在起始位置:即迷宫的入口打印玩家
```
;Set the begin position of the player
SET_STARTPOS:
MOV NextX, 0H
MOV NextY, 1H
MOV x, 0H
MOV y, 1H
MOV DL, x
MOV DH, y
MOV BH, 0H
MOV AH, 2H
INT 10H
RET
; Print the player to the console
PRINT_PLAYER:
MOV DL, player
CALL SHOW_CHARACTER
RET
```
## 3.4 第四步,开始监听键盘输入指令,对输入的对应指令进行处理,移动玩家
- 监听键盘输入:w, a, s, d
```
ChangePos:
CALL GET_INPUT ; get the input
MOV dirInput, AL
; case : w/W(up),a/A(left),s/S(down),d/D(right)
CMP dirInput, 'W'
JE MOVE_NORTH
CMP dirInput, 'A'
JE MOVE_WEST
CMP dirInput, 'S'
JE MOVE_SOUTH
CMP dirInput, 'D'
JE MOVE_EAST
CMP dirInput, 'w'
JE MOVE_NORTH
CMP dirInput, 'a'
JE MOVE_WEST
CMP dirInput, 's'
JE MOVE_SOUTH
CMP dirInput, 'd'
JE MOVE_EAST
JMP ChangePos
```
- 根据对应的输入控制角色进行相应的移动,我们以输入了W为例,整个移动过程如下
- 删除原位置的字符
- 更新下一步的位置
- 判断下一步的位置是否合法
- 如果是,移动坐标到该位置,反之,不移动
- 回到ChangePos继续监听键盘输入,进行下一步移动
```
MOVE_NORTH:
CALL REMOVE_OLDPOS ;remove the character in previous position
DEC NextY
CALL I
没有合适的资源?快使用搜索试试~ 我知道了~
精选_基于X86编程语言实现的迷宫游戏_源码打包
共9个文件
png:5个
asm:1个
license:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 118 浏览量
2022-03-12
07:57:14
上传
评论
收藏 822KB ZIP 举报
温馨提示
基于X86编程语言实现的迷宫游戏
资源推荐
资源详情
资源评论
收起资源包目录
8819618928912035.zip (9个子文件)
maze-game
mazeGame.asm 14KB
image
MazeGame4.png 22KB
MazeGame2.png 47KB
MazeGame1.png 92KB
MazeGame3.png 24KB
MazeGame5.png 33KB
LICENSE 1KB
基于X86编程语言实现的迷宫游戏.pdf 687KB
README.md 12KB
共 9 条
- 1
资源评论
工具盒子
- 粉丝: 61
- 资源: 1313
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功