Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- org 100h
- jmp start
- LGoToXY: ; Y=DH X=DL
- ;MOV DH, 10
- ;MOV DL, 20
- PUSH AX
- PUSH BX
- MOV BH, 0
- MOV AH, 2
- INT 10H
- POP BX
- POP AX
- RET
- LReadChar: ; AL=Hasil
- MOV AH, 1
- INT 21H
- RET
- LWriteChar: ; Karakter=AL
- MOV AH, 14
- INT 10H
- RET
- LWriteStr: ; DX=Offset VariabelString, harus diakhiri $
- MOV AH, 9
- INT 21H
- RET
- LReadStr: ; DX=Offset Hasil
- MOV AH,10
- INT 21H
- RET
- LWriteNL:
- PUSH AX
- MOV AL,13
- CALL LWriteChar
- MOV AL,10
- CALL LWriteChar
- POP AX
- RET
- LClrScr:
- PUSH DX
- PUSH CX
- PUSH BX
- PUSH AX
- MOV AX, 0600H
- MOV CX, 0
- MOV DX, 184FH
- MOV BH, 7
- INT 10H
- MOV DX, 0
- CALL Lgotoxy
- POP AX
- POP BX
- POP CX
- POP DX
- RET
- LGetCh: ; AL=ASCII, AH=SCAN 72^ 75< 77> 80v
- MOV AH,0
- INT 16h
- RET
- hasilMiss db ' miss $'
- hasilPerf db ' perfect $'
- maxAB db 5
- maxS db 10
- gerakA db '^v<>*$'
- jebakanA db '1111',13,10,'$'
- gerakB db 'v^v^*$'
- jebakanB db '1111',13,10,'$'
- gerakS db '<^v><><><*$'
- jebakanS db '111111111',13,10,'$'
- menu db '1. edit gerakan',13,10,'2. main',13,10,'3. exit',13,10,'pilih : $'
- menu10 db 13,10,'1. gerakA',13,10,'2. gerakB',13,10,'3. gerakS',13,10,'pilih : $'
- menu11 db 13,10,'masukkan gerakan : $'
- menu12 db 13,10,'masukkan jebakan : $'
- gameover db 13,10,'GAME OVER !!!$',13,10
- score db 0
- tempscore db 0
- giliran db 0
- session db 6
- currentchar db 0
- maxchar db 0
- pagarsekarang dw ?
- jebakansekarang dw ?
- menu20 db 13,10,'temp score '
- ts0 db '0'
- ts1 db '0'
- menu21 db 13,10,'score '
- s0 db '0'
- s1 db '0'
- menu22 db 13,10,'---------',13,10,'$'
- buffer db 9,0,'$$$$$$$$$$$'
- salahbenar db 0
- start:
- JMenu:
- CALL LClrScr
- LEA DX,menu
- CALL LWriteStr ; cetak menu utama
- CALL LReadChar ; minta inputan 1-3
- CMP AL,'1'
- JE JMenu1
- CMP AL,'2'
- JE JMain
- CMP AL,'3'
- JE exit
- JMP JMenu
- JMenu1: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- LEA DX,menu10
- CALL LWriteStr ; cetak menu edit
- CALL LReadChar ; minta inputan 1-3
- CMP AL,'1'
- JE JMenu1A
- CMP AL,'2'
- JE JMenu1B
- CMP AL,'3'
- JE JMenu1S
- JMP JMenu
- JMenu1A:
- LEA DX,Menu11
- CALL LWriteStr ; cetak minta input gerakan A
- ; minta inputan dari user masuk ke buffer
- LEA DX,buffer
- LEA BX,buffer
- MOV AL,maxAB
- MOV [BX],AL
- CALL LReadStr
- ; pindahkan dari buffer ke gerakA
- ADD DX,2
- LEA BX,gerakA
- MOV CL,1
- KPindahA:
- PUSH BX
- MOV BX,DX
- MOV AL,[BX]
- POP BX
- MOV [BX],AL
- INC BX
- INC DX
- INC CL
- CMP CL,maxAB
- JNE KPindahA
- LEA DX,Menu12
- CALL LWriteStr ; cetak minta input jebakan A
- ; minta inputan dari user masuk ke buffer
- LEA DX,buffer
- LEA BX,buffer
- MOV AL,maxAB
- MOV [BX],AL
- CALL LReadStr
- ; pindahkan dari buffer ke jebakanA
- ADD DX,2
- LEA BX,jebakanA
- MOV CL,1
- KPindahA2:
- PUSH BX
- MOV BX,DX
- MOV AL,[BX]
- POP BX
- MOV [BX],AL
- INC BX
- INC DX
- INC CL
- CMP CL,maxAB
- JNE KPindahA2
- JMP JMenu
- JMenu1B:
- LEA DX,Menu11
- CALL LWriteStr ; cetak minta input gerakan B
- ; minta inputan dari user masuk ke buffer
- LEA DX,buffer
- LEA BX,buffer
- MOV AL,maxAB
- MOV [BX],AL
- CALL LReadStr
- ; pindahkan dari buffer ke gerakB
- ADD DX,2
- LEA BX,gerakB
- MOV CL,1
- KPindahB:
- PUSH BX
- MOV BX,DX
- MOV AL,[BX]
- POP BX
- MOV [BX],AL
- INC BX
- INC DX
- INC CL
- CMP CL,maxAB
- JNE KPindahB
- LEA DX,Menu12
- CALL LWriteStr ; cetak minta input jebakan B
- ; minta inputan dari user masuk ke buffer
- LEA DX,buffer
- LEA BX,buffer
- MOV AL,maxAB
- MOV [BX],AL
- CALL LReadStr
- ; pindahkan dari buffer ke jebakanB
- ADD DX,2
- LEA BX,jebakanB
- MOV CL,1
- KPindahB2:
- PUSH BX
- MOV BX,DX
- MOV AL,[BX]
- POP BX
- MOV [BX],AL
- INC BX
- INC DX
- INC CL
- CMP CL,maxAB
- JNE KPindahB2
- JMP JMenu
- JMenu1S:
- LEA DX,Menu11
- CALL LWriteStr ; cetak minta input gerakan S
- ; minta inputan dari user masuk ke buffer
- LEA DX,buffer
- LEA BX,buffer
- MOV AL,maxS
- MOV [BX],AL
- CALL LReadStr
- ; pindahkan dari buffer ke gerakS
- ADD DX,2
- LEA BX,gerakS
- MOV CL,1
- KPindahS:
- PUSH BX
- MOV BX,DX
- MOV AL,[BX]
- POP BX
- MOV [BX],AL
- INC BX
- INC DX
- INC CL
- CMP CL,maxS
- JNE KPindahS
- LEA DX,Menu12
- CALL LWriteStr ; cetak minta input jebakan S
- ; minta inputan dari user masuk ke buffer
- LEA DX,buffer
- LEA BX,buffer
- MOV AL,maxS
- MOV [BX],AL
- CALL LReadStr
- ; pindahkan dari buffer ke jebakanS
- ADD DX,2
- LEA BX,jebakanS
- MOV CL,1
- KPindahS2:
- PUSH BX
- MOV BX,DX
- MOV AL,[BX]
- POP BX
- MOV [BX],AL
- INC BX
- INC DX
- INC CL
- CMP CL,maxS
- JNE KPindahS2
- JMP JMenu
- JMain: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- MOV tempscore,0
- MOV score,0
- MOV giliran,0
- MOV session,4
- MOV salahbenar,2
- JSession:
- CALL LClrScr
- LEA DX,menu20
- CALL LWriteStr ; cetak tempscore
- CMP giliran,0
- JE KCetakA
- CMP giliran,1
- JE KCetakB
- CMP giliran,2
- JE KCetakS
- JMP KNotGameOver
- KCetakA:
- LEA DX,jebakanA
- MOV jebakansekarang,DX
- LEA DX,gerakA
- MOV pagarsekarang,DX
- CALL LWriteStr
- CALL LWriteNL
- LEA DX,jebakanA
- MOV AL,maxAB
- JMP KMain
- KCetakB:
- LEA DX,jebakanB
- MOV jebakansekarang,DX
- LEA DX,gerakB
- MOV pagarsekarang,DX
- CALL LWriteStr
- CALL LWriteNL
- LEA DX,jebakanB
- MOV AL,maxAB
- JMP KMain
- KCetakS:
- LEA DX,jebakanS
- MOV jebakansekarang,DX
- LEA DX,gerakS
- MOV pagarsekarang,DX
- CALL LWriteStr
- CALL LWriteNL
- LEA DX,jebakanS
- MOV AL,maxS
- JMP KMain
- MOV currentchar,0
- KMain:
- DEC AL
- MOV maxchar,AL
- CALL LWriteStr ; cetak jebakan
- KMainLoop:
- MOV DH,11
- MOV DL,4
- CALL LGoToXY
- CMP salahbenar,0
- JE KKCetakSalah
- CMP salahbenar,1
- JE KKCetakBenar
- JMP KKCetakBenarSalah
- KKCetakSalah:
- LEA DX,hasilMiss
- CALL LWriteStr
- JMP KKCetakBenarSalah
- KKCetakBenar:
- LEA DX,hasilPerf
- CALL LWriteStr
- KKCetakBenarSalah:
- ; update score dan tempscore
- MOV DL,11
- MOV DH,1
- CALL LGoToXY
- MOV AH,0
- MOV AL,tempscore
- MOV CL,10
- DIV CL
- PUSH AX
- ADD AL,48
- CALL LWriteChar
- POP AX
- MOV AL,AH
- ADD AL,48
- CALL LWriteChar ; cetak tempscore digit ke 2
- MOV DL,6
- MOV DH,2
- CALL LGoToXY
- MOV AH,0
- MOV AL,score
- MOV CL,10
- DIV CL
- PUSH AX
- ADD AL,48
- CALL LWriteChar
- POP AX
- MOV AL,AH
- ADD AL,48
- CALL LWriteChar ; cetak score digit ke 2
- ; cetak pagar di posisi currentchar
- MOV CL,0
- MOV DH,6
- KLoopPager:
- MOV DL,CL
- CALL LGoToXY
- CMP currentchar,CL
- JNE KKCetakSpasi
- MOV AL,'#'
- JMP KKSelesaiCetak
- KKCetakSpasi:
- MOV AL,' '
- KKSelesaiCetak:
- CALL LWriteChar
- INC CL
- CMP CL,maxchar
- JNE KLoopPager
- MOV AL,' '
- CALL LWriteChar
- MOV AL,8
- CALL LWriteChar
- ; minta input, check, benar maju, salah back fromstart
- CALL LGetCh
- MOV BX,jebakansekarang
- MOV DH,0
- MOV DL,currentchar
- ADD BX,DX
- CMP [BX],'0'
- JE KKDibalik
- JMP KKGaDibalik
- KKDibalik: ; kalau jebakan
- MOV BX,pagarsekarang
- MOV DH,0
- MOV DL,currentchar
- ADD BX,DX
- CMP AH,72 ;^
- JNE KNext1Balik
- CMP [BX],'v'
- JNE KKurangiScore
- JMP KTambahScore
- KNext1Balik:
- CMP AH,77 ;>
- JNE KNext2Balik
- CMP [BX],'<'
- JNE KKurangiScore
- JMP KTambahScore
- KNext2Balik:
- CMP AH,80 ;v
- JNE KNext3Balik
- CMP [BX],'^'
- JNE KKurangiScore
- JMP KTambahScore
- KNext3Balik:
- CMP AH,75 ;<
- JNE KNext4
- CMP [BX],'>'
- JNE KKurangiScore
- JMP KTambahScore
- KKGaDibalik: ; kalau bukan jebakan
- MOV BX,pagarsekarang
- MOV DH,0
- MOV DL,currentchar
- ADD BX,DX
- CMP AH,72 ;^
- JNE KNext1
- CMP [BX],'^'
- JNE KKurangiScore
- JMP KTambahScore
- KNext1:
- CMP AH,77 ;>
- JNE KNext2
- CMP [BX],'>'
- JNE KKurangiScore
- JMP KTambahScore
- KNext2:
- CMP AH,80 ;v
- JNE KNext3
- CMP [BX],'v'
- JNE KKurangiScore
- JMP KTambahScore
- KNext3:
- CMP AH,75 ;<
- JNE KNext4
- CMP [BX],'<'
- JNE KKurangiScore
- JMP KTambahScore
- JMP KKurangiScore
- KNext4:
- CMP AL,32 ; spasi (kalau ga jalan ganti AH)
- JNE KKurangiScore
- MOV AL,currentchar
- CMP AL,maxchar
- JE KTambahScore2
- JMP KKurangiScore
- KTambahScore:
- INC tempscore
- INC currentchar
- MOV salahbenar,1
- JMP KNext0
- KTambahScore2:
- MOV AL,score
- ADD AL,tempscore
- ADD AL,10 ; +10score kalau benar
- MOV salahbenar,1
- MOV score,AL
- MOV tempscore,0
- MOV currentchar,0
- INC giliran
- CMP giliran,3
- JNE KGaBaliKe0
- MOV giliran,0
- KGaBaliKe0:
- DEC session
- JMP KNext0
- KKurangiScore:
- MOV tempscore,0
- MOV currentchar,0
- MOV salahbenar,0
- KNext0:
- CMP session,0
- JE KGameOver
- MOV AL,currentchar
- CMP AL,maxchar
- JE KMainLoop
- JMP JSession ; kalau udah panah panah terakhir
- KGameOver:
- ; game over~!
- LEA DX,gameover
- CALL LWriteStr
- ; cetak ulang score dan tempscore
- MOV DL,11
- MOV DH,1
- CALL LGoToXY
- MOV AH,0
- MOV AL,tempscore
- MOV CL,10
- DIV CL
- PUSH AX
- ADD AL,48
- CALL LWriteChar
- POP AX
- MOV AL,AH
- ADD AL,48
- CALL LWriteChar ; cetak tempscore digit ke 2
- MOV DL,6
- MOV DH,2
- CALL LGoToXY
- MOV AH,0
- MOV AL,score
- MOV CL,10
- DIV CL
- PUSH AX
- ADD AL,48
- CALL LWriteChar
- POP AX
- MOV AL,AH
- ADD AL,48
- CALL LWriteChar ; cetak score digit ke 2
- CALL LReadChar ; tahan tampilan
- JMP JMenu
- KNotGameOver:
- JMP JSession
- JMP JMenu
- exit:
- int 20h
- end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement