80x86 汇编语言:猜数游戏
来源:互联网 发布:多瑞科舆情数据分析站 编辑:程序博客网 时间:2024/06/06 05:55
好久没有写东西了。
昨天看到一个题目,觉得有些意思,就动手编了一个程序。
题目的内容如下:
汇编实现猜数字游戏
游戏程序首先接收游戏者输入的猜数次数。
然后随机生成四个不相同的数字(范围0~9)供游戏者猜测。
每当游戏者键入四位数,即为猜了一次。
游戏者每猜一次,程序都显示四个字符,进行提示。
提示字符共有三种:
? 表示猜错了。
X 表示猜出了这个数,但是位置不对。
Y 表示猜对了。
比如:
设随机数是 4321;
游戏者输入 5678,提示则为 ????;
游戏者输入 5674,提示则为 ???X;
游戏者输入 1234,提示则为 XXXX;
游戏者输入 4321,提示则为 YYYY。
如果提示为 YYYY,就说明游戏者不仅猜测对了这四个数,而且排列位置也都正确。
此时,游戏程序就提前结束。
如果在预定的次数中,游戏者都没有猜到数字,程序最后则显示出来内定随机数。
做而论道编程如下:
ASSUME CS:CC, DS:QQ
QQ SEGMENT
MSG1 DB 13, 10, 'You have three time opportunity :'
DB 13, 10, 13, 10, 36
NNN DW 3 ;默认猜数次数
MSG2 DB 'The random is : ', 13, 10
XXX DB 0, 0, 0, 0 ;存放随机数
DB 13, 10, 36
YYY DB 13, 10, '????', 13, 10, 13, 10, 36
QQ ENDS
CC SEGMENT
;------------------------------
BG:
MOV AX, QQ
MOV DS, AX
LEA DX, MSG1
MOV AH, 9
INT 21H
CALL RANDOM_4 ;生成四个互不相同的数字符号
;------------------------------
IN_LOOP: ;循环输入四个字符
MOV SI, 0 ;分别和四个随机符号比较
IN_X: ;根据比较结果写入?XY
MOV DI, 0
MOV AH, 1
INT 21H ;键入一个字符
IN_1:
CMP AL, XXX[DI]
JZ IN_2
INC DI
CMP DI, 4
JNZ IN_1
MOV YYY[SI + 2], '?'
JMP IN_NEXT
IN_2:
CMP SI, DI
JNZ IN_3
MOV YYY[SI + 2], 'Y'
JMP IN_NEXT
IN_3:
MOV YYY[SI + 2], 'X'
IN_NEXT:
INC SI
CMP SI, 4
JNZ IN_X
;------------------------------
DISP:
LEA DX, YYY ;显示提示
MOV AH, 9
INT 21H
CMP YYY + 2, 'Y'
JNZ NEXT
CMP YYY + 3, 'Y'
JNZ NEXT
CMP YYY + 4, 'Y'
JNZ NEXT
CMP YYY + 5, 'Y'
JNZ NEXT
JMP EXIT ;四个都是Y就提前结束
NEXT:
DEC NNN
CMP NNN, 0
JNZ IN_LOOP ;不到次数就再次输入
LEA DX, MSG2 ;显示内定
MOV AH, 9
INT 21H
EXIT:
MOV AH, 4CH ;程序结束
INT 21H
;------------------------------
RANDOM_4:
MOV DL, '8'
MOV DI, 0
RDM:
MOV CL, DL
ADD CL, 17
MOV CH, DH
AND CH, 1
LOOP $
CALL GET_RANDOM ;AL=0~9
MOV DL, AH
ADD DL, '0'
MOV SI, 0
CHK:
CMP DL, XXX[SI]
JZ RDM
INC SI
CMP SI, 4
JNZ CHK
MOV XXX[DI], DL
INC DI
CMP DI, 4
JNZ RDM
RET
;------------------------------
GET_RANDOM:
MOV AH, 2CH
INT 21H
MOV AL, DL
MOV AH, 0
MOV BL, 10
DIV BL
RET ;AL=0~9
;---------------------------------
CC ENDS
END BG
;====================================
本程序执行,有如下的显示:
c:\masm510>RDM_4
You have three time opportunity :
1357
X?X?
5126
XX?Y
4516
?YYY
The random is :
0516
本程序,只是允许猜测三次。
做而论道试验了一下,如果允许猜测八次,几乎就肯定可以猜中。
所以,题目中,允许游戏者自行确定猜测次数,就是一个漏洞。
允许猜测三次,猜对可能性,稍小一些,这就有一定的难度。
玩这样的游戏,才能有兴致。
题目链接:
http://zhidao.baidu.com/question/1240492546408601299
http://zhidao.baidu.com/question/1948592962251911948
1 0
- 80x86 汇编语言:猜数游戏
- 80x86 汇编语言编程:寻找水仙花数
- 八进制数转换为二进制数 -80x86汇编语言
- 80x86汇编语言编程:求 10000 以内的《完数》
- 80x86 汇编语言:正负数分别存放、统计个数
- 80x86 汇编语言编程:有符号数输出
- 80x86 汇编语言基础教程
- 80x86 汇编语言:键入0~255之间的数,显示对应的二进制和十六进制数
- 80x86汇编语言程序设计P50
- 80x86 汇编语言编程:求和
- 80x86汇编语言:福到了
- 80x86汇编语言:字符串移动
- 80x86汇编语言:分类统计
- 80x86 汇编语言:查找字符串
- 80x86 汇编语言编程:EXE2COM
- 用80x86汇编语言:键入十个数,算出正数之和,并统计负数的个数
- 80x86 汇编语言编程:输入数字串,排序、并求最大和最小
- X86 汇编语言
- 数字电子技术--60秒倒计时电路
- 锁相环 CD4046 的应用
- Android程序打包过程
- 一个需要英雄的时代
- 很令人惊奇的单片机程序
- 80x86 汇编语言:猜数游戏
- 将博客搬至CSDN
- HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求。
- Spring实现AOP的4种方式
- SVN操作简介
- Leetcode 225. Implement Stack using Queues
- Delaunay Triangulation, Divide And Conquer Method
- 变量.ToString()
- 在U8菜单中增加自定义项