⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wenben.asm

📁 一个五子棋游戏可以图形显示棋盘和网格线然后选择棋子 有一定智能
💻 ASM
字号:
red_chr macro 
    mov ah,0
    int 16h
endm
string macro p1
    mov ah,9
    lea dx,p1
    int 21h
endm
win  macro opr1,opr2,opr3,opr4,opr5,opr6
     mov ah,06h
     mov al,opr1
     mov bh,opr2
     mov ch,opr3
     mov cl,opr4
     mov dh,opr5
     mov dl,opr6
     int 10h
endm
pos_curse macro op1,op2,op3
      mov ah,2
      mov bh,op1
      mov dh,op2
      mov dl,op3
      int 10h
endm
pos_get macro
      mov ah,03h
      mov bh,0
      int 10h
endm
date segment
    manu db 'File  Edit  Option  Search                         Help$'
    filnm db 'Please enter your file name:',13,10,'$'
    mass_1 db 'F1: active manu     F10: active help','$'
    manu_1 db '|New     |',13,10,'$'
    manu_2 db '|Open    |',13,10,'$'
    manu_3 db '|Save    |',13,10,'$'
    manu_4 db '|Save as |',13,10,'$'
    manu_5 db '|Exit    |','$'
    handle  dw ?
    message1 db 'Please input your creat file name:','$'
    message2 db 'Please input your save file name:','$'
    message3 db 'Please input your open file name:','$'
    message4 db '***The file is not save! Save it now? (Y/N)***','$'
    path db 50 dup(0),'$'
    buffer db 2000 dup(?)
    count dw 1
    bak db 3850 dup(0)
    line db ?
    row  db ?
    char db ?
    help_mas db ' Press esc to clear$'
    data db 'Today ??/??/','$'
date ends

code segment
main  proc far
      assume cs:code,ds:date
start:
      push ds
      sub  ax,ax
      push ax
      mov  ax,date
      mov  ds,ax
      call wind
      call edit
     
      ret
main  endp
;****************************** 
wind proc near
    
     win 0,1eh,1,0,24,79
     win 1,30h,0,0,0,79
     win 0,30h,24,0,24,79

show:
     pos_curse 0,0,1
     mov ah,9
     lea dx,manu
     int 21h
show_2:
     pos_curse 0,24,1
     mov ah,9
     lea dx,mass_1
     int 21h

     call win3
     pos_curse  0,1,0
     mov row,dh
     mov line,dl

wind endp
;****************************** 
edit proc near
;******************************
     ;mov cx,80
     ;mov bx,0
 
char_get:
     call com
com proc near
     pos_get
     mov row,dh
     mov line,dl
first:

     pos_curse 0,row,line
j00: mov ah,0
     int 16h
     push ax
     lea dx,buffer
     mov buffer[bx],al
     inc bx

     cmp  ah,1ch
     jz   enter_1
     cmp  ah,48h     ;up 
     jz   up
     cmp  ah,50h     ;down
     jz   down_1
     cmp  ah,4bh     ;left
     jz   left
     cmp  ah,4dh     ;right
     jz   right
     cmp  ah,1ch     ;enter
     jz   enter_1
     call fuc_key
     mov ah,2
     mov dl,al
     int 21h
     pop ax
     call  manu_show
     jmp j6
down_1:
     jmp down
left:
     pos_get
     mov row,dh
     mov dl,line
     cmp line,0
     jnz direct
     mov line,79
     dec row
     jmp first
direct:   
     dec line
     jmp first
right:
     pos_get
     mov row,dh
     mov dl,line
     cmp line,79
     jnz direct2
     mov line,0
     inc row
     jmp first
direct2:
     inc line
     jmp first
enter_1: jmp enter
up:
     pos_get
     mov row,dh
     mov dl,line
     dec row
     jmp first
down:
     pos_get
     mov row,dh
     mov dl,line   
     inc row
     jmp first
enter:
     mov buffer[bx],10
     inc bx
     pos_get
     mov row,dh
     mov line,dl
     inc row
     mov line,0
     jmp first

j6:  ret
com endp
fuc_key proc near
     cmp ah,47h        ;home
     jz  home
     cmp ah,4fh        ;end
     jz  _end
     cmp ah,0eh        ;backspace
     jz  bak_sp
     cmp ah,53h
     jz  del
     cmp ah,44h        ;F10
     jz  help_0
     ret
help_0:
     call help
home:
     pos_get
     mov row,dh
     mov line,0
     jmp first    
_end:
     pos_get
     mov row,dh
     mov line,79
_end0:
     dec line
     pos_curse 0,row,line
     mov ah,8
     mov bh,0
     int 10h
     cmp al,20h
     jz  _end0
     jmp first
bak_sp:
     pos_get
     mov row,dh
     mov line,dl
     dec line
     pos_get 0,row,line
     mov ah,2
     mov dl,00
     int 21h
     jmp first
del:
      pos_get
      mov  row,dh
      mov  line,dl
      dec  line
      pos_get 0,row,line
      mov  ah,2
      mov  dl,00
      int  21h
      inc  line
      jmp  first
cm:   cmp  line,00
      jz   pos_cm
pos_cm:
      pos_curse 0,0,0
      jmp  first
help proc near
      call savedisplay
      pos_get
      push dx
      win  0,0fh,9,15,11,60
      pos_curse 0,10,16
      string help_mas
      pop dx
      pos_curse 0,dh,dl
      mov  ah,0
      int  16h
      cmp  ah,36h
      jnz  cls
      call help
cls:  win  0,1eh,9,15,11,60
      call backdisplay
   help endp 
fuc_key endp

;******************************
manu_show proc near
     call savedisplay
     push cx
     cmp ah,3bh
     jz  manu_sh
     jmp char_get
manu_sh:
     pos_get
     push dx
     win  0,07h,2,1,7,11
     win  0,71h,1,0,6,10
     pos_curse 0,1,0
     string manu_1
     string manu_2
     string manu_3
     string manu_4
     string manu_5
     pop  dx
     dec  dl
     pos_curse 0,dh,dl
copmar:    
     red_chr 
     cmp  ah,50h
     jz   manu_n
     jmp  manu_hid
      
manu_hid:
     win  0,1eh,1,1,7,11
     call backdisplay
     jmp  char_get
manu_n:
     win  0,71h,5,1,5,8
     pos_curse 0,5,0
     string manu_5
     win  0,15h,1,1,1,8
     pos_curse 0,1,0
     string manu_1
     red_chr
     cmp  al,0dh
     jz   new_1
     cmp  ah,50h
     je   manu_o
     jmp  manu_hid
manu_n0:  jmp manu_n
manu_o:
     win 0,71h,1,1,1,8
     pos_curse 0,1,0
     string manu_1
     win 0,15h,2,1,2,8
     pos_curse 0,2,0
     string manu_2
     red_chr
     cmp ah,48h
     je  manu_n0
     cmp al,0dh
     jz  open_1
     cmp ah,50h
     je  manu_s
     jmp manu_hid
new_1:   jmp new_2
manu_s:
     win 0,71h,2,1,2,8
     pos_curse 0,2,0
     string manu_2
     win 0,15h,3,1,3,8
     pos_curse 0,3,0
     string manu_3
     red_chr
     cmp al,0dh
     jz  save_1
     cmp ah,48h
     je  manu_s
     cmp ah,50h
     je  manu_a
     jmp manu_hid
open_1:  jmp open_2
manu_n1: jmp manu_n
manu_a:
     win 0,71h,3,1,3,8
     pos_curse 0,3,0
     string manu_3
     win 0,15h,4,1,4,8
     pos_curse 0,4,0
     string manu_4 
     red_chr
     cmp ah,1ch
     jz  save_2
     cmp ah,48h
     je  manu_a
     cmp ah,50h
     je  manu_e
     jmp manu_hid
manu_n2:jmp manu_n1
new_2:  jmp new
save_1: call save
save_2: call saveas
manu_e:
        win 0,71h,4,1,4,8
        pos_curse 0,4,0
        string manu_4
        win 0,15h,5,1,5,8
        pos_curse 0,5,0
        string manu_5
        red_chr
        cmp ah,50h
        je  manu_n2
        cmp ah,1ch
        je  exit 
exit:
       call backdisplay
       win 0,07h,15,10,17,61
       win 0,30h,14,9,16,60
       mov dh,15
       mov dl,9
       mov bh,0
       mov ah,2
       int 10h
       lea dx,message4
       mov ah,9     
       int 21h         
       mov ah,1
       int 21h
       cmp al,79h                                    
       jnz q
       call quitt
q:     cmp al,6eh
       jz quit
quit:  win 0,07h,0,0,24,79
       pos_curse 0,0,0
       mov ah,4ch
       int 21h
       ret     
manu_show endp
;******************************
new     proc near
        pos_get
        push dx
        call backdisplay
        win 0,07h,15,10,17,61
        win 0,30h,14,9,16,60,
        mov dh,15
        mov dl,9
        mov bh,0
        mov ah,2
        int 10h
 
    lea dx,message1
    cmp al,0dh
    mov ah,9
    int 21h
    mov bx,0
all:
    mov ah,1
    int 21h
    cmp al,0dh
    je  alll
    mov path[bx],al
    inc bx
    jmp all
alll:
    win 0,1eh,15,9,17,61
    pop dx
    pos_curse 0,dh,dl
    lea dx,path
    mov ah,3ch
    mov cx,00
    int 21h
    mov handle,ax
    mov bx,ax
    mov ah,3eh
    int 21h
    
    win 0,1eh,1,0,23,79
    mov dh,1
    mov dl,0
    mov bh,0
    mov ah,2
    int 10h
    jmp char_get
new endp
open_2:
    jmp open
;******************************
saveas proc near
     win 0,1eh,1,0,6,10
     call backdisplay
     win 0,07h,15,10,17,61
     win 0,30h,14,9,16,60,
     mov dh,15
     mov dl,9
     mov bh,0
     mov ah,2
     int 10h

     lea dx,message2
     mov ah,9
     int 21h
     mov bx,0
bll: 
     mov ah,1
     int 21h
     cmp al,0dh
     je blll
     mov path[bx],al
     inc bx
     jmp bll
blll:
     pos_get
     push dx
     win 0,1eh,1,0,23,79
     call backdisplay
     pop dx
     pos_curse 0,dh,dl
     lea dx,path
     mov ah,3ch
     mov cx,00
     int 21h
 
     mov handle,ax
     lea dx,buffer
     mov bx,handle
     mov cx,2000
     mov ah,40h
     int 21h

     mov bx,handle
     mov ah,3eh
     int 21h
     call backdisplay

     jmp char_get
saveas endp
;******************************
open proc near     
     call backdisplay 
     win 0,07h,15,10,17,61    
     win 0,30h,14,9,16,60
     mov dh,15
     mov dl,9
     mov bh,0
     mov ah,2
     int 10h

     lea dx,message3
     mov ah,9
     int 21h
     mov bx,0
cll: 
     mov ah,1
     int 21h
     cmp al,13
     je clll
     mov path[bx],al
     inc bx
     jmp cll
clll:
     win 0,1eh,1,0,23,79
     lea dx,path
     mov ah,3dh
     mov al,0
     int 21h
     
     mov handle,ax
     lea dx,buffer
     mov bx,handle
     mov cx,2000
     mov ah,3fh
     int 21h
     
     win 0,1eh,1,23,1,79
     mov dh,1
     mov dl,0
     mov bh,0
     mov ah,2
     int 10h
  
     mov cx,1000
     sub bx,bx
replay:
     mov dl,buffer[bx]
     inc bx
     mov ah,2
     int 21h
     loop replay
     
     mov bx,handle
     mov ah,3eh
     int 21h
  
     mov dh,1
     mov dl,0
     mov bh,0
     mov ah,2
     int 10h

     mov cx,10
     mov bx,0
cleapath_3:
     mov bl,0
     mov path[bx],bl
     loop cleapath_3
     jmp char_get
open endp

save proc near
     pos_get
     push dx
     win 0,1eh,1,0,6,10
     call backdisplay
     mov ah,path
     cmp ah,21h
     jl  j_3
     jmp j_4
 j_3: 
     win 0,07h,15,10,17,61
     win 0,30h,14,9,16,60,
     mov dh,15
     mov dl,9
     mov bh,0
     mov ah,2
     int 10h

     lea dx,message2
     mov ah,9
     int 21h
     mov bx,0
dll: 
     mov ah,1
     int 21h
     cmp al,0dh
     je  dlll
     mov path[bx],al
     inc bx
     jmp dll
dlll:
     win 0,1eh,1,0,23,79
     pop dx
     pos_curse 0,dh,dl 
j_4: lea dx,path
     mov ah,3ch
     mov cx,00
     int 21h
 
     mov handle,ax
     lea dx,buffer
     mov bx,handle
     mov cx,2000
     mov ah,40h
     int 21h

     mov bx,handle
     mov ah,3eh
     int 21h
     call backdisplay

     jmp char_get
save endp                      
;******************************
savedisplay proc near
      push ax
      push bx
      push cx
      push dx
      push ds
      
      mov ax,0002h
      int 33h
      mov bx,0d
      mov cx,3840d
loop1:
      mov ax,0b800h
      mov ds,ax
      mov dl,ds:[bx]
      mov ax,date
      mov ds,ax
      mov bak[bx],dl
      inc bx
      loop loop1
      mov ax,0001h
      int 33h
      
      pop ds
      pop dx
      pop cx
      pop bx
      pop ax
      ;ret
savedisplay endp
backdisplay proc near
      push ax
      push bx
      push cx
      push dx
      push ds
      
      mov bx,0d
      mov cx,3840d

loop11:
      mov ax,date
      mov ds,ax
      mov dl,bak[bx]
      mov ax,0b800h
      mov ds,ax
      mov ds:[bx],dl
      inc bx
      loop loop11
      
      pop ds
      pop dx
      pop cx
      pop bx
      pop ax
      ret
backdisplay endp
;******************************
quitt proc near
     ;win 0,1eh,1,0,6,10
     call backdisplay
     win 0,07h,15,10,17,61
     win 0,30h,14,9,16,60,
     mov dh,15
     mov dl,9
     mov bh,0
     mov ah,2
     int 10h

     lea dx,message2
     mov ah,9
     int 21h
     mov bx,0
 qll: 
     mov ah,1
     int 21h
     cmp al,0dh
     je qlll
     mov path[bx],al
     inc bx
     jmp qll
qlll:
     win 0,07h,15,10,17,61
     win 0,1eh,14,9,16,60
     call backdisplay
     lea dx,path
     mov ah,3ch
     mov cx,00
     int 21h                   
     mov handle,ax
     lea dx,buffer
     mov bx,handle
     mov cx,2000
     mov ah,40h
     int 21h                 
     mov bx,handle
     mov ah,3eh
     int 21h
     call backdisplay        
     win 0,07h,0,0,24,79
     mov ah,4ch
     int 21h
     ret
quitt endp
;******************************
edit endp
;******************************
win3 proc near
       mov  ah,2ah
       int  21h
       mov  bl,10d
       mov  ax,0
       mov  al,dh
       div  bl 
       add  ax,3030h
       mov  [data+6],al
       mov  [data+7],ah
       mov  ax,0
       mov  al,dl
       div  bl
       add  ax,3030h
       mov  [data+9],al
       mov  [data+10],ah
       win 0,0fh,0,67,0,79
       pos_curse 0,0,67
       mov  dx,offset data
       mov  ah,09h
       int  21h 
       ret
win3   endp
;****************************
code   ends
       end  start
      

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -