很久没有写东西了。
昨天看到一个题目,以为有些意思,就动手编了一个程序。
题目的内容以下:
汇编实现猜数字游戏
游戏程序首先接收游戏者输入的猜数次数。
而后随机生成四个不相同的数字(范围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
本程序,只是容许猜想三次。
作而论道试验了一下,若是容许猜想八次,几乎就确定能够猜中。
因此,题目中,容许游戏者自行肯定猜想次数,就是一个漏洞。
容许猜想三次,猜对可能性,稍小一些,这就有必定的难度。
玩这样的游戏,才能有兴致。
题目连接: