汇编语言实现扫雷程序

Talk is cheap,show you the code!

;2018/12/18  AUTHOR : SGC

STACK SEGMENT STACK
	DB 10H DUP (0)
STACK ENDS
	
DATA SEGMENT
	MESSAGE1 DB "Blast! ", 0DH, 0AH, '$'
	MESSAGE2 DB "Game over! ", 0DH, 0AH, '$'
	MESSAGE3 DB "The remain bomb is : $" 
	MESSAGE4 DB "Input error,try again : ", 0DH, 0AH, '$' 
	MESSAGE5 DB "Input the number of bombs:(1-9)" , '$' 
	MESSAGE6 DB "Input the rows :(1-9)" , '$' 
	GameWin db "Win the Game! ", 0DH, 0AH, '$'
	KONG DB  0DH, 0AH, '$'
	ROWS DB '  123456789$'
	ROW1 DB '  ---------$' 
	LINE DW '1'
	; 棋盘
	QIPAN DB 81 DUP ('?')
	REALQIPAN DB 81 DUP(0)
	 
	TEMP DB 0
	ACTION DB 0 ;动作
	X db 0  ;行指针
	Y db 0	;列指针
	HANGLIE DB 0
	NUMB DB 0
	GESHU DB 0
DATA ENDS


CODES SEGMENT
    ASSUME CS:CODES,DS:DATA,SS:STACK
STA:
    MOV AX,DATA
    MOV DS,AX
    
    MOV AX, STACK
	MOV SS, AX
    ;此处输入代码段代码
	
SHOW MACRO  
	;PUSH
	
	MOV DX, OFFSET KONG
	MOV AH, 09H
	INT 21H  
	
	MOV DX, OFFSET ROWS	 
	INT 21H       ;输出字符串
	MOV DX, OFFSET KONG
	INT 21H
	
	MOV DX, OFFSET ROW1	 
 	INT 21H       ;输出字符串
	MOV DX, OFFSET KONG
	INT 21H
	
	MOV SI,OFFSET QIPAN
	MOV BL,HANGLIE
	
 	MOV LINE,'1'
 	PUSH LINE
OUTLINES:
	MOV CH,0
	MOV CL,HANGLIE
	POP LINE
	MOV DX,LINE
	MOV AH,2
	INT 21H			;输出行号
	INC LINE
	PUSH LINE
	MOV DX,'|'
	INT 21H
OUTROWS:

	
	LODSB    ;放入al
ABC:
	MOV DL,AL
	MOV AH,2
	INT 21H				;输出棋盘格子
	
	 
	
	LOOP OUTROWS
	
	MOV DX, OFFSET KONG
	MOV AH, 09H
	INT 21H       ;输出字符串
	
	
	MOV CL,BL
	DEC BL	
	LOOP OUTLINES
	
	;POP   
    
    
ENDM  

    
     
START:

	MOV DX, OFFSET MESSAGE6
	MOV AH, 09H
	INT 21H       ;输出字符串
	
    MOV AH,1
    INT 21H      ;输入大小字符
    
    MOV HANGLIE,AL
	SUB HANGLIE,30H  ;棋盘大小
    
    MOV BL,HANGLIE
    MOV BH,0
    ADD BL,2
    MOV ROWS[BX],'$' 
    MOV ROW1[BX],'$'
    
    MOV DX, OFFSET KONG
	MOV AH, 09H
	INT 21H       ;输出字符串
	
    MOV DX, OFFSET MESSAGE5
	MOV AH, 09H
	INT 21H       ;提示输入雷的个数
	
	MOV AH,1
    INT 21H      ;输入大小字符
    
    MOV NUMB,AL
	SUB NUMB,30H  ;雷的个数
	
	;生成雷阵
	
	MOV CH,0    
	MOV CL,NUMB
	MOV AL,HANGLIE
	MUL AL
	MOV GESHU,AL    
	DIV NUMB
	MOV BX,0
	MOV AH,0
PROLEI:
	 
	ADD BX,AX
 	DEC BX
	MOV REALQIPAN[BX],'*'		
	LOOP PROLEI	
	
	;计算雷阵
	MOV CL,GESHU
 
	MOV CH,0
CALC:
	
	MOV TEMP,0
	MOV AX,CX
	MOV BX,AX
	CMP REALQIPAN[BX],'*'
	JNE NN
	LOOP CALC
NN:	
	PUSH AX
	MOV AX,CX
	DIV HANGLIE
	MOV BX,AX
	POP AX
	PUSH BX
	CMP BH,0
	JE NEXT1
	CMP BL,0
	JE NEXT1
	
	MOV AH,AL  ;ZS
	DEC AH
	SUB AH, HANGLIE
	MOV BL,AH
	MOV BH,0
	CMP REALQIPAN[BX],'*'
	JNE NEXT1
	INC TEMP
NEXT1:

	 
	POP BX
	PUSH BX
	CMP BL,0
	JE NEXT2
	
	MOV AH,AL  ;S
	 
	SUB AH, HANGLIE
	MOV BL,AH
	MOV BH,0
	CMP REALQIPAN[BX],'*'
	JNE NEXT2
	INC TEMP
NEXT2:
	POP BX
	PUSH BX
	CMP BL,0
	JE NEXT3
	MOV AH,HANGLIE
	DEC AH
	CMP AH,BH
	JE NEXT3
	
	MOV AH,AL  ;YS
	INC AH
	SUB AH, HANGLIE
	MOV BL,AH
	MOV BH,0
	CMP REALQIPAN[BX],'*'
	JNE NEXT3
	INC TEMP		
NEXT3:
	POP BX
	PUSH BX
	CMP BH,0
	JE NEXT4
	
	MOV AH,AL  ;Z
	DEC AH
	MOV BL,AH
	MOV BH,0
	CMP REALQIPAN[BX],'*'
	JNE NEXT4
	INC TEMP		
NEXT4:
	POP BX
	PUSH BX
	 
	MOV AH,HANGLIE
	DEC AH
	CMP AH,BH
	JE NEXT5
	
	
	MOV AH,AL  ;Y
	INC AH
	MOV BL,AH
	MOV BH,0
	CMP REALQIPAN[BX],'*'
	JNE NEXT5
	INC TEMP		
NEXT5:
	POP BX
	PUSH BX
	CMP BH,0
	JE NEXT6
	MOV AH,HANGLIE
	DEC AH
	CMP AH,BL
	JE NEXT6
	
	MOV AH,AL  ;ZX
	DEC AH
	ADD AH, HANGLIE
	MOV BL,AH
	MOV BH,0
	CMP REALQIPAN[BX],'*'
	JNE NEXT6
	INC TEMP
	JNE NEXT6
C1:
	JMP CALC			
NEXT6:
	POP BX
	PUSH BX
	 
	MOV AH,HANGLIE
	DEC AH
	CMP AH,BL
	JE NEXT7
	
	MOV AH,AL  ;X
	ADD AH, HANGLIE
	MOV BL,AH
	MOV BH,0
	CMP REALQIPAN[BX],'*'
	JNE NEXT7
	INC TEMP		
NEXT7:
	POP BX
	PUSH BX
	
	MOV AH,HANGLIE
	DEC AH
	CMP AH,BH
	JE NEXT8
	CMP AH,BL
	JE NEXT8
	
	MOV AH,AL  ;YX
	INC AH
	ADD AH, HANGLIE
	MOV BL,AH
	MOV BH,0
	CMP REALQIPAN[BX],'*'
	JNE NEXT8
	INC TEMP		
NEXT8:
	MOV BL,AL
	MOV BH,0
	MOV AL,TEMP
	MOV REALQIPAN[BX],AL								
	LOOP C1
	
	MOV TEMP,0
	MOV BX,0
	CMP REALQIPAN[BX+1],'*'
	JNE N1
	INC TEMP
N1:	ADD BL,HANGLIE
	CMP REALQIPAN[BX],'*'
	JNE N2
	INC TEMP
N2:	CMP REALQIPAN[BX+1],'*'
	JNE N3
	INC TEMP
N3: MOV AL,TEMP
	MOV REALQIPAN,AL	

SH:	
	 SHOW  
	 JMP INPUTT
RETRY:
	MOV DX,OFFSET MESSAGE4
	MOV AH,09H
	INT 21H
	
INPUTT:
	 
	MOV AH,1
	INT 21H
	MOV ACTION ,AL
	 
	INT 21H
	MOV X ,AL
	INT 21H
	MOV Y ,AL
	
	MOV DX,OFFSET KONG
	MOV AH,09H
	INT 21H
 
	
	SUB X,30H
	SUB Y,30H
	CMP X,10
	JA RETRY
	CMP Y,10
	JA RETRY
	
	CMP ACTION,'M'
	JNE ACLEI
	
	DEC X
	DEC Y
	MOV AL,HANGLIE
	MUL X 
	ADD AL,Y
	MOV BX,AX
	CMP REALQIPAN[BX],'*'
	JNE NOTEQ
	DEC NUMB
	CMP NUMB,0
	JE WIN
NOTEQ:
	MOV QIPAN[BX] ,'M'

	JMP SH
	
ACLEI:
	CMP ACTION,'A'
	JNE RETRY
		
	DEC X
	DEC Y
	MOV AL,HANGLIE
	MUL X 
	ADD AL,Y
	MOV BX,AX
	CMP REALQIPAN[BX],'*'
	JE BLEAST

	MOV AL,REALQIPAN[BX]
	ADD AL,30H
	MOV QIPAN[BX],AL
	JMP SH


WIN:
	MOV DX,OFFSET GameWin
	MOV AH,09H
	INT 21H
	JMP EN

BLEAST:
	MOV DX,OFFSET MESSAGE1
	MOV AH,09H
	INT 21H
	MOV DX,OFFSET MESSAGE2
	INT 21H
 
	
	JMP EN
     
EN:   
    
    MOV AH,4CH
    INT 21H
CODES ENDS
    END STA 

使用说明

首先输入棋盘行数和地雷个数。
输入完成后,会生成棋盘。
在这里插入图片描述

’A’代表挖雷操作(可能会被雷炸死),'M’代表标记雷操作。然后输入行数和列数。这三个数构成一组输入。
在这里插入图片描述
微机课设小心查重吆 *O_O*

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

师大先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值