废话不多说,直接上代码
[org 0x7c00]
; 定义游戏板数组
board1 db ' ', ' ', ' '
board2 db ' ', ' ', ' '
board3 db ' ', ' ', ' '
player_turn db 'X' ; 玩家 'X' 的回合
start:
mov bp, 0x8000
mov sp, bp
; 清屏
mov ax, 0x0600
mov bx, 0x0700
mov cx, 0
mov dx, 0x184f
int 0x10
; 打印欢迎信息
mov ah, 0x0E
mov al, 'T'
int 0x10
mov al, 'i'
int 0x10
mov al, 'c'
int 0x10
mov al, '-'
int 0x10
mov al, 'T'
int 0x10
mov al, 'a'
int 0x10
mov al, 'c'
int 0x10
mov al, 't'
int 0x10
mov al, 'a'
int 0x10
mov al, 'c'
int 0x10
mov al, 'e'
int 0x10
mov al, ' '
int 0x10
mov al, 'G'
int 0x10
mov al, 'a'
int 0x10
mov al, 'm'
int 0x10
mov al, 'e'
int 0x10
mov al, '!'
int 0x10
.wait_input:
mov ah, 0x00
int 0x16
cmp al, '1'
je .play_move_1
cmp al, '2'
je .play_move_2
cmp al, '3'
je .play_move_3
cmp al, '4'
je .play_move_4
cmp al, '5'
je .play_move_5
cmp al, '6'
je .play_move_6
cmp al, '7'
je .play_move_7
cmp al, '8'
je .play_move_8
cmp al, '9'
je .play_move_9
jmp .wait_input
.play_move_1:
mov byte [board1], player_turn
jmp .update_screen
.play_move_2:
mov byte [board1 + 1], player_turn
jmp .update_screen
.play_move_3:
mov byte [board1 + 2], player_turn
jmp .update_screen
.play_move_4:
mov byte [board2], player_turn
jmp .update_screen
.play_move_5:
mov byte [board2 + 1], player_turn
jmp .update_screen
.play_move_6:
mov byte [board2 + 2], player_turn
jmp .update_screen
.play_move_7:
mov byte [board3], player_turn
jmp .update_screen
.play_move_8:
mov byte [board3 + 1], player_turn
jmp .update_screen
.play_move_9:
mov byte [board3 + 2], player_turn
jmp .update_screen
.update_screen:
; 更新屏幕显示
mov bp, 0x8000
mov sp, bp
mov ax, 0x0600
mov bx, 0x0700
mov cx, 0
mov dx, 0x184f
int 0x10
mov ah, 02h
xor bh, bh
mov dh, 0
mov dl, 0
int 10h
.update_screen1:
mov ah, 0x0E
mov si, board1
mov cx, 3
.print_loop1:
lodsb
mov al, '|'
int 0x10
mov al, [si]
int 0x10
mov al, '|'
int 0x10
inc si
loop .print_loop1
.update_screen2:
mov ah, 0x0E
mov al, 0x0D
int 0x10
mov al, 0x0A
int 0x10
mov al, '-'
int 0x10
mov al, '-'
int 0x10
mov al, '|'
int 0x10
mov al, '|'
int 0x10
mov al, '-'
int 0x10
mov al, '|'
int 0x10
mov al, '|'
int 0x10
mov al, '-'
int 0x10
mov al, '-'
int 0x10
mov al, 0x0D
int 0x10
mov al, 0x0A
int 0x10
mov si, board2
mov cx, 3
.print_loop2:
lodsb
mov al, '|'
int 0x10
mov al, [si]
int 0x10
mov al, '|'
int 0x10
inc si
loop .print_loop2
.update_screen3:
mov ah, 0x0E
mov al, 0x0D
int 0x10
mov al, 0x0A
int 0x10
mov al, '-'
int 0x10
mov al, '-'
int 0x10
mov al, '|'
int 0x10
mov al, '|'
int 0x10
mov al, '-'
int 0x10
mov al, '|'
int 0x10
mov al, '|'
int 0x10
mov al, '-'
int 0x10
mov al, '-'
int 0x10
mov al, 0x0D
int 0x10
mov al, 0x0A
int 0x10
mov si, board3
mov cx, 3
.print_loop3:
lodsb
mov al, '|'
int 0x10
mov al, [si]
int 0x10
mov al, '|'
int 0x10
inc si
loop .print_loop3
; 检查游戏是否结束
; ...
; 切换玩家
mov al, player_turn
cmp al, 'X'
je .switch_to_O
cmp al, 'O'
je .switch_to_X
.switch_to_X:
mov byte [player_turn], 'X'
jmp .wait_input
.switch_to_O:
mov byte [player_turn], 'O'
jmp .wait_input
; 游戏结束逻辑
; ...
times 510-($-$$) db 0
dw 0xAA55
这里没有添加游戏结束逻辑
能看到这里的读者已经非常厉害了
读者可以自行添加代码逻辑
运行试试
图片暂时无法上传,可能是csdn出了问题,深感歉意
好的,非常成功。等一下......咦?
图片暂时无法上传,可能是csdn出了问题,深感歉意
什么鬼!
代码的逻辑完全没有问题,但是虚拟机运行出了问题
按键根本匹配不上 ,一直是o,我的代码里没有这个字符,只有O和X
看来可能是虚拟机或者bios的问题,真机运行应该可以
这就当是大家的课后作业了
标签:play,操作系统,int,自制,move,al,mov,0x10,玩游戏 From: https://blog.csdn.net/linhhanpy/article/details/141242013