猜数字游戏程序设计

温柔似野鬼°
593次浏览
2021年01月01日 02:48
最佳经验
本文由作者推荐

有深意的名字-纪念刘和珍君优秀教案

2021年1月1日发(作者:蔡和森)


课程设计任务书

学生姓名: 专业班级: 自动化1004班
指导教师: 工作单位: 自动化学院
题 目: 猜数字游戏程序设计


要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

1. 猜数字游戏程序设计随机产生一个0至149的数字(不显示),输 入猜测数字,程序提
示和所猜数字大小,直至正确,猜数正确后显示猜数的次数,程序采用汇编语言在P C机上完
成。
2. 画出简要程序流程图,编写程序。
3. 撰写课程设计说明 书。内容包括:摘要、目录、正文、参考文献、附录(程序清
单)。正文部分包括:设计任务及要求、方 案比较及论证、软件设计说明(软件思想,流程,源
程序设计及说明等)、程序调试说明和结果分析、课 程设计收获及心得体会。


时间安排:
2012年12月 30日----- 12月31日 查阅资料及方案设计
2013年01月 01日----- 01月05日
2013年01月06 日----- 01月08日


编程
调试程序
2013年01月09 日----- 01月10日 撰写课程设计报告
指导教师签名: 20 年 01 月 11 日
系主任(或责任教师)签名: 年 月 日





目录

摘 要............. .................................................. .................................................. .............................1
1 汇编语言基础..... .................................................. .................................................. ...................2
1.1汇编语言简介 ............... .................................................. .................................................. 2
1.2汇编语言特点 .................................. .................................................. ...............................2
2 设计原理分析..... .................................................. .................................................. ...................3
2.1随机数的产生 ............... .................................................. .................................................. 3
2.2子模块 ..................................... .................................................. ........................................3
2.3设计流程图 ..................................... .................................................. ................................4
3 子程序分析..... .................................................. .................................................. .......................5
3.1

RAN的主要算法 .................................................. .................................................. ..........5
3.2

INPUT的主要算法 ........... .................................................. .............................................5
3.3

ENTER的主要算法 ....................... .................................................. ................................6
4

源程序 .......................................... .................................................. ............................................7
4.1程序代码 ...................................... .................................................. ...................................7
4.2程序运行截图 .................................................. .................................................. .............13
心得体会.......................... .................................................. .................................................. ........15
参考文献............................... .................................................. .................................................. ...16



摘要
该程序为玩家提供猜数字游戏的基本功能。当用户选择开始游戏时,系统
会在内部产生对应范围内的随机数,以供用户进行猜测,用户每次猜数字后系
统会给出本次猜数字的结 果提示,先比较用户猜测数字是否等于系统产生的随
机数,若相等则提示用户猜数字成功。如果用户猜测 数字不等于系统产生的随
机数,则提示该数字与随机数比较时大了还是小了,并输出比较结果,同时记< br>录当前用户猜测的次数。直至用户成功猜中随机数。
关键词:随机数的产生 余数
3



1 汇编语言基础
1.1汇编语言简介
汇编语言(AssemblyLanguage )是面向机器的程序设计语言。在汇编语合中,
用助记符代替操作码,用地址符号或标号代替地址码。这 样用符号代替机器语言
的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。使< br>用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机
器语言,这种起翻 译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系
统软件。汇编程序把汇编语言翻译成机器语 言的过程称为汇编。
作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。高级的汇编器如MASM,TASM等等为人们
写汇编程序提供了 很多类似于高级语言的特征,比如结构化、抽象等。在这样的
环境中编写的汇编程序,有很大一部分是面 向汇编器的伪指令,已经类同于高级
语言。现在的汇编环境已经如此高级,即使全部用汇编语言来编写w indows的
应用程序也是可行的,但这不是汇编语言的长处。汇编语言的长处在于编写高效
且需要对机器硬件精确控制的程序。
1.2汇编语言特点
1.面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。
2.保持了机器语言的优点,具有直接和简捷的特点。
3.可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、IO端
口等。
4.目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。
5.经常与高级语言配合使用,应用十分广泛。
4



2 设计原理分析

2.1随机数的产生
真正意义上的随机数(或者随机事 件)在某次产生过程中是按照实验过程中
表现的分布概率随机产生的,其结果是不可预测的,是不可见的 。而计算机中的
随机函数是按照一定算法模拟产生的,其结果是确定的,是可见的,这样可以认
为这个可预见的结果其出现的概率是100%。所以用计算机随机函数所产生的“随
机数”并不随机,是 伪随机数。
此程序的关键问题是如何产生一个1~100之间的随机整数(本程序中所涉及
的 数均指整数,以下不再赘述)。可以调用BIOS的功能调用1AH号中断(MOV
AH,0 INT 1AH)或者调用DOS系统功能调用21H号中断(MOV AH,2CH INT
21 H)取系统时间,DH:DL=秒:1100秒。将DX中的内容赋给AX,并将AX
的高六位清零,然 后AX除以150,则会产生0~149之间的余数。
2.2子模块
本程序共分为六个模块:
MAIN -------程序的入口点,程序运行后在DOS屏幕 上显示主菜单,给出相关的
操作提示,并调用RAN、GUESS、ENTER等子程序。
RAN -------调用相关的中断,取系统时间,产生一个0~149之间的随机数。
GUESS------本程序的重要模块,调用INPUT、PRINT、ENTER等子程序。
INPUT------用于玩家输入其所猜之数,并给出相关的输入提示。
PRINT ------用于游戏结束时输入系统所产生的随机数。
ENTER-------用于回车换行




5



2.3设计流程图
设计流程图如图2-1所示。
开始
定义语句
设置游戏界面
产生随机数
录入猜测值
计数
数值判断
小于 大于
计数
相等


结束
图2-1设计流程图
6



3 子程序分析
3.1 RAN的主要算法
RAN PROC NEAR
PUSH AX
PUSH DX
MOV AH,0 读时钟计数器值
INT 1AH
MOV AX,DX
AND AH,3 将高6位清零
MOV DL,150 ;除以150,产生0~149余数,余数在AH

DIV DL
MOV AL,AH
MOV AH,0
MOV RANDOM,AX 将随机数保存于RANDOM中
MOV AH,09H
LEA DX,MESS2
INT 21H
CALL NEAR PTR ENTER
POP DX
POP AX
RET
RAN ENDP
3.2 INPUT的主要算法
INPUT PROC NEAR
MOV BX,0
INL1:MOV AH,01H
INT 21H
CMP AL,0DH
JZ INEXIT
CMP AL,30H
JAE INL2
CMP AL,08H
JE INL1
CALL NEAR PTR ENTER
MOV AH,09H
LEA DX,MESS9
INT 21H
INL2:CMP AL,39H
JBE INL3
CALL NEAR PTR ENTER
7



MOV AH,09H
LEA DX,MESS9
INT 21H
JMP INL1
INL3:AND AL,0FH
MOV AH,0
XCHG BX,AX
MOV CX,10
MUL CX
ADD BX,AX
JMP INL1
INEXIT:
MOV INNUM,BX
RET
INPUT ENDP
3.3 ENTER的主要算法
ENTER PROC NEAR
PUSH AX
PUSH DX
MOV AH,02H
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
POP DX
POP AX
RET
ENTER ENDP


8



4 源程序
4.1程序代码
DATA SEGMENT
RANDOM DW ? 用于保存产生的随机数
INNUM DW ? ;用于保存玩家输入的数
JISHU DW 0 ;用于保存玩家猜数的次数
MENU DW 0
DB 0DH,0AH,
DB 0DH,0AH,
*
DB 0DH,0AH, MAIN MENU
*
DB 0DH,0AH,
*
DB 0DH,0AH, S. START THE GAME
*
DB 0DH,0AH,
*
DB 0DH,0AH, E. EXIT THE GAME
*
DB 0DH,0AH,
*
DB 0DH,0AH,
DB 0DH,0AH,
TITLE1 DB 0DH,0AH, NUMBER-GUESSING GAME,
0DH,0AH,
MESS1 DB 0DH,0AH,.$$
MESS2 DB 0DH,0AH,RANDOM NUMBER HAS BEEN
GENERATED.$$
MESS3 DB 0DH,0AH,INPUT THE NUMBER YOU
GUESS(DECIMAL,BETWEEM 0 AND 149):$$
MESS4 DB 0DH,0AH,,PLEASE REGUESS:$$:
MESS5 DB 0DH,0AH,,PLEASE REGUESS:$$
MESS6 DB 0DH,0AH,,YOU GUESSED!$$
MESS7 DB 0DH,0AH,
MESS8 DB 0DH,0AH,
DATA ENDS

CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA
BEGIN:
9



PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
CALL NEAR PTR ENTER
MOV AH,09H
LEA DX,TITLE1
INT 21H
MOV DX,OFFSET MENU
INT 21H
LEA DX,MESS8
INT 21H
MOV AH,01H
INT 21H
CALL NEAR PTR ENTER
ML1: CMP AL,'S'
JE ML2
ML2: MOV JISHU,0
MOV AH,09H
LEA DX,MESS1
INT 21H
CALL NEAR PTR ENTER
CALL NEAR PTR RAN
CALL NEAR PTR GUESS
MOV AH,09H
LEA DX,MESS8
INT 21H
MOV AH,01H
INT 21H
CALL NEAR PTR ENTER
ML3:CMP AL,'E'
JE EXIT
ML4:MOV AH,09H
MOV AH,01H
INT 21H
CALL NEAR PTR ENTER
JMP ML1
EXIT:CALL NEAR PTR ENTER
MOV AH,4CH
INT 21H
RET
MAIN ENDP





10




RAN PROC NEAR
PUSH AX
PUSH DX
MOV AH,0 读时钟计数器值
INT 1AH
MOV AX,DX 将高6位清零
AND AH,3
MOV DL,150 ;除以150,产生0~149余数,余数在AH中
DIV DL
MOV AL,AH
MOV AH,0
MOV RANDOM,AX
MOV AH,09H
LEA DX,MESS2
INT 21H
CALL NEAR PTR ENTER
POP DX
POP AX
RET
RAN ENDP

GUESS PROC NEAR
MOV AH,09H
LEA DX,MESS3
INT 21H
ADD JISHU,1
GL:CALL NEAR PTR INPUT
MOV AX,INNUM
MOV BX,RANDOM
CMP AX,BX
JA GL1
JB GL2
CALL NEAR PTR ENTER
MOV AH,09H
LEA DX,MESS6
INT 21H
CALL NEAR PTR ENTER
LEA DX,MESS7
INT 21H
CALL NEAR PTR PRINT
JMP GEXIT1
GL1:CALL NEAR PTR ENTER
MOV AH,09H
LEA DX,MESS4

;将随机数保存于RANDOM中
11



INT 21H
ADD JISHU,1
JMP GL
GL2:CALL NEAR PTR ENTER
MOV AH,09H
LEA DX,MESS5
INT 21H
ADD JISHU,1
JMP GL
GEXIT1:
CALL NEAR PTR ENTER
CALL NEAR PTR ENTER
RET
GEXIT2:
CALL NEAR PTR ENTER
MOV AH,09H
CALL NEAR PTR ENTER
LEA DX,MESS7
INT 21H
CALL NEAR PTR PRINT
CALL NEAR PTR ENTER
CALL NEAR PTR ENTER
RET
GUESS ENDP

PRINT PROC NEAR
MOV AX,RANDOM
MOV BL,100
DIV BL
MOV BL,AH
CMP AL,0
JE PL1
MOV DL,AL
OR DL,30H
MOV AH,02H
INT 21H
PL1:MOV AL,BL
MOV AH,0
MOV BL,10
DIV BL
MOV BL,AH
CMP AL,0
JE PL2
MOV DL,AL


12



OR DL,30H
MOV AH,02H
INT 21H
PL2:MOV DL,BL
OR DL,30H
MOV AH,02H
INT 21H
RET
PRINT ENDP

INPUT PROC NEAR
MOV BX,0
INL1:MOV AH,01H
INT 21H
CMP AL,0DH
JZ INEXIT
CMP AL,30H
JAE INL2
CMP AL,08H
JE INL1
CALL NEAR PTR ENTER
MOV AH,09H
INL2:CMP AL,39H
JBE INL3
CALL NEAR PTR ENTER
MOV AH,09H
JMP INL1
INL3:AND AL,0FH
MOV AH,0
XCHG BX,AX
MOV CX,10
MUL CX
ADD BX,AX
JMP INL1
INEXIT:
MOV INNUM,BX
RET
INPUT ENDP
ENTER PROC NEAR
PUSH AX
PUSH DX
MOV AH,02H
MOV DL,0DH
INT 21H


13



MOV DL,0AH
INT 21H
POP DX
POP AX
RET
ENTER ENDP
CODE ENDS
END BEGIN
14



4.2程序运行截图:
利用16位编译系统调试程序如图4-1所示






图4-1 利用16位编译系统调试程序

游戏开始界面如图4-2所示






图4-2 游戏开始界面
15




摁S后开始游戏如图4-3所示














图4-3 摁S后开始游戏

猜测直到数字正确如图4-4所示


图4-4 猜测直到数字正确

16



5心得体会
这次的课设算是最为艰难的一次了吧,甚至最后还换了一个题目,实在是觉
得挺不好过的,最后没有做出 最开始的题目,在网上和书上寻找资料的时候,实
在是找不到相关的资料,去向大四的学长门请教,他们 也都说帮不上忙。在苦恼
了很久之后最终还是换了一个题目,这个题目十分有趣,和以前玩的一个游戏特
别类似,而现在可以在程序上把它表达出来让我感到十分兴奋,这让没有做出先
前题目的郁闷也 消了一些。这个课题的难点主要是在随机数的产生,有用函数产
生的伪随机数和随机调用计算机相关信息 产生随机数的方法,最终是通过DOS
调用产生随机数并存在RAM中,在查找了许多资料并重新温习了 一遍课本的有
关知识之后,最终完成了这个程序,并发现了以前知识学习中的很多不足,巩固
了 所学习的知识,并且让人对或许有些死板的汇编语言产生了新的热情。这次的
课程设计收获颇多,希望寒 假自己能在家找到资料,争取在把倍频信号发生器做
出来。








17



参考文献
[1] 彭虎、周佩玲、傅忠谦.微机原理与接口技术(第3版)[M].电子工业出版社,
2011
[2] 宋杰、汪志宏、江敏.微机原理与接口技术课程设计[M].机械工业出版社,2005
[3] 李现国、张艳. Proteus仿真在微机原理及接口技术教学中的应用. 实验技术与
管理 , 2010年12月第27卷第12期
[4] 黄明,梁旭,常征著.汇编语言程序设计习题详解[M].北京:机械工业出版社,
2004
[5] 李群芳,张士军,黄建编著.单片机微型计算机与接口技术[M].电子工业出版
社,2005
[6] 周明德.微型计算机系统原理及应用[M].北京:清华大学出版社,2007年



18

qq等级加速-51活动


手机令牌有什么用-创业策划书


五台山简介-读昆虫记有感


取网名大全-德育论文题目


office2007激活密钥-教训的反义词


清明上河图歌词-签名档


香水瓶-深圳中学自主招生


亚伯拉罕诸教-网络妈妈电影