猜数字游戏程序设计

更新时间:2023-11-01 01:58:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

课程设计任务书

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

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

1. 猜数字游戏程序设计随机产生一个0至149的数字(不显示),输入猜测数字,程序提示和所猜数字大小,直至正确,猜数正确后显示猜数的次数,程序采用汇编语言在PC机上完成。

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

摘要

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

关键词:随机数的产生 余数

3

1 汇编语言基础

1.1汇编语言简介

汇编语言(AssemblyLanguage)是面向机器的程序设计语言。在汇编语合中,用助记符代替操作码,用地址符号或标号代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编程序把汇编语言翻译成机器语言的过程称为汇编。

作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。高级的汇编器如MASM,TASM等等为人们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。现在的汇编环境已经如此高级,即使全部用汇编语言来编写windows的应用程序也是可行的,但这不是汇编语言的长处。汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。

1.2汇编语言特点

1.面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。 2.保持了机器语言的优点,具有直接和简捷的特点。

3.可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。

4.目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。 5.经常与高级语言配合使用,应用十分广泛。

4

2 设计原理分析

2.1随机数的产生

真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是不可见的。而计算机中的随机函数是按照一定算法模拟产生的,其结果是确定的,是可见的,这样可以认为这个可预见的结果其出现的概率是100%。所以用计算机随机函数所产生的“随机数”并不随机,是伪随机数。

此程序的关键问题是如何产生一个1~100之间的随机整数(本程序中所涉及的数均指整数,以下不再赘述)。可以调用BIOS的功能调用1AH号中断(MOV AH,0 INT 1AH)或者调用DOS系统功能调用21H号中断(MOV AH,2CH INT 21H)取系统时间,DH:DL=秒:1/100秒。将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

本文来源:https://www.bwwdw.com/article/g2f2.html

Top