Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.10 KB | None | 0 0
  1. org 100h
  2.  
  3. jmp start
  4.  
  5. LGoToXY: ; Y=DH X=DL
  6. ;MOV DH, 10
  7. ;MOV DL, 20
  8. PUSH AX
  9. PUSH BX
  10. MOV BH, 0
  11. MOV AH, 2
  12. INT 10H
  13. POP BX
  14. POP AX
  15. RET
  16.  
  17. LReadChar: ; AL=Hasil
  18. MOV AH, 1
  19. INT 21H
  20. RET
  21.  
  22. LWriteChar: ; Karakter=AL
  23. MOV AH, 14
  24. INT 10H
  25. RET
  26.  
  27. LWriteStr: ; DX=Offset VariabelString, harus diakhiri $
  28. MOV AH, 9
  29. INT 21H
  30. RET
  31.  
  32. LReadStr: ; DX=Offset Hasil
  33. MOV AH,10
  34. INT 21H
  35. RET
  36.  
  37. LWriteNL:
  38. PUSH AX
  39. MOV AL,13
  40. CALL LWriteChar
  41. MOV AL,10
  42. CALL LWriteChar
  43. POP AX
  44. RET
  45.  
  46. LClrScr:
  47. PUSH DX
  48. PUSH CX
  49. PUSH BX
  50. PUSH AX
  51. MOV AX, 0600H
  52. MOV CX, 0
  53. MOV DX, 184FH
  54. MOV BH, 7
  55. INT 10H
  56. MOV DX, 0
  57. CALL Lgotoxy
  58. POP AX
  59. POP BX
  60. POP CX
  61. POP DX
  62. RET
  63.  
  64. LGetCh: ; AL=ASCII, AH=SCAN 72^ 75< 77> 80v
  65. MOV AH,0
  66. INT 16h
  67. RET
  68.  
  69. hasilMiss db ' miss $'
  70. hasilPerf db ' perfect $'
  71.  
  72. maxAB db 5
  73. maxS db 10
  74.  
  75. gerakA db '^v<>*$'
  76. jebakanA db '1111',13,10,'$'
  77. gerakB db 'v^v^*$'
  78. jebakanB db '1111',13,10,'$'
  79. gerakS db '<^v><><><*$'
  80. jebakanS db '111111111',13,10,'$'
  81.  
  82. menu db '1. edit gerakan',13,10,'2. main',13,10,'3. exit',13,10,'pilih : $'
  83. menu10 db 13,10,'1. gerakA',13,10,'2. gerakB',13,10,'3. gerakS',13,10,'pilih : $'
  84. menu11 db 13,10,'masukkan gerakan : $'
  85. menu12 db 13,10,'masukkan jebakan : $'
  86.  
  87. gameover db 13,10,'GAME OVER !!!$',13,10
  88.  
  89. score db 0
  90. tempscore db 0
  91. giliran db 0
  92. session db 6
  93. currentchar db 0
  94. maxchar db 0
  95. pagarsekarang dw ?
  96. jebakansekarang dw ?
  97.  
  98. menu20 db 13,10,'temp score '
  99. ts0 db '0'
  100. ts1 db '0'
  101. menu21 db 13,10,'score '
  102. s0 db '0'
  103. s1 db '0'
  104. menu22 db 13,10,'---------',13,10,'$'
  105.  
  106.  
  107. buffer db 9,0,'$$$$$$$$$$$'
  108. salahbenar db 0
  109.  
  110. start:
  111.  
  112. JMenu:
  113.  
  114. CALL LClrScr
  115.  
  116. LEA DX,menu
  117. CALL LWriteStr ; cetak menu utama
  118.  
  119. CALL LReadChar ; minta inputan 1-3
  120. CMP AL,'1'
  121. JE JMenu1
  122. CMP AL,'2'
  123. JE JMain
  124. CMP AL,'3'
  125. JE exit
  126. JMP JMenu
  127.  
  128. JMenu1: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  129.  
  130. LEA DX,menu10
  131. CALL LWriteStr ; cetak menu edit
  132.  
  133. CALL LReadChar ; minta inputan 1-3
  134. CMP AL,'1'
  135. JE JMenu1A
  136. CMP AL,'2'
  137. JE JMenu1B
  138. CMP AL,'3'
  139. JE JMenu1S
  140. JMP JMenu
  141.  
  142. JMenu1A:
  143.  
  144. LEA DX,Menu11
  145. CALL LWriteStr ; cetak minta input gerakan A
  146.  
  147. ; minta inputan dari user masuk ke buffer
  148. LEA DX,buffer
  149. LEA BX,buffer
  150. MOV AL,maxAB
  151. MOV [BX],AL
  152. CALL LReadStr
  153. ; pindahkan dari buffer ke gerakA
  154. ADD DX,2
  155. LEA BX,gerakA
  156. MOV CL,1
  157. KPindahA:
  158. PUSH BX
  159. MOV BX,DX
  160. MOV AL,[BX]
  161. POP BX
  162. MOV [BX],AL
  163. INC BX
  164. INC DX
  165. INC CL
  166. CMP CL,maxAB
  167. JNE KPindahA
  168.  
  169. LEA DX,Menu12
  170. CALL LWriteStr ; cetak minta input jebakan A
  171.  
  172. ; minta inputan dari user masuk ke buffer
  173. LEA DX,buffer
  174. LEA BX,buffer
  175. MOV AL,maxAB
  176. MOV [BX],AL
  177. CALL LReadStr
  178. ; pindahkan dari buffer ke jebakanA
  179. ADD DX,2
  180. LEA BX,jebakanA
  181. MOV CL,1
  182. KPindahA2:
  183. PUSH BX
  184. MOV BX,DX
  185. MOV AL,[BX]
  186. POP BX
  187. MOV [BX],AL
  188. INC BX
  189. INC DX
  190. INC CL
  191. CMP CL,maxAB
  192. JNE KPindahA2
  193.  
  194. JMP JMenu
  195.  
  196. JMenu1B:
  197.  
  198. LEA DX,Menu11
  199. CALL LWriteStr ; cetak minta input gerakan B
  200.  
  201. ; minta inputan dari user masuk ke buffer
  202. LEA DX,buffer
  203. LEA BX,buffer
  204. MOV AL,maxAB
  205. MOV [BX],AL
  206. CALL LReadStr
  207. ; pindahkan dari buffer ke gerakB
  208. ADD DX,2
  209. LEA BX,gerakB
  210. MOV CL,1
  211. KPindahB:
  212. PUSH BX
  213. MOV BX,DX
  214. MOV AL,[BX]
  215. POP BX
  216. MOV [BX],AL
  217. INC BX
  218. INC DX
  219. INC CL
  220. CMP CL,maxAB
  221. JNE KPindahB
  222.  
  223. LEA DX,Menu12
  224. CALL LWriteStr ; cetak minta input jebakan B
  225.  
  226. ; minta inputan dari user masuk ke buffer
  227. LEA DX,buffer
  228. LEA BX,buffer
  229. MOV AL,maxAB
  230. MOV [BX],AL
  231. CALL LReadStr
  232. ; pindahkan dari buffer ke jebakanB
  233. ADD DX,2
  234. LEA BX,jebakanB
  235. MOV CL,1
  236. KPindahB2:
  237. PUSH BX
  238. MOV BX,DX
  239. MOV AL,[BX]
  240. POP BX
  241. MOV [BX],AL
  242. INC BX
  243. INC DX
  244. INC CL
  245. CMP CL,maxAB
  246. JNE KPindahB2
  247.  
  248. JMP JMenu
  249.  
  250. JMenu1S:
  251.  
  252. LEA DX,Menu11
  253. CALL LWriteStr ; cetak minta input gerakan S
  254.  
  255. ; minta inputan dari user masuk ke buffer
  256. LEA DX,buffer
  257. LEA BX,buffer
  258. MOV AL,maxS
  259. MOV [BX],AL
  260. CALL LReadStr
  261. ; pindahkan dari buffer ke gerakS
  262. ADD DX,2
  263. LEA BX,gerakS
  264. MOV CL,1
  265. KPindahS:
  266. PUSH BX
  267. MOV BX,DX
  268. MOV AL,[BX]
  269. POP BX
  270. MOV [BX],AL
  271. INC BX
  272. INC DX
  273. INC CL
  274. CMP CL,maxS
  275. JNE KPindahS
  276.  
  277. LEA DX,Menu12
  278. CALL LWriteStr ; cetak minta input jebakan S
  279.  
  280. ; minta inputan dari user masuk ke buffer
  281. LEA DX,buffer
  282. LEA BX,buffer
  283. MOV AL,maxS
  284. MOV [BX],AL
  285. CALL LReadStr
  286. ; pindahkan dari buffer ke jebakanS
  287. ADD DX,2
  288. LEA BX,jebakanS
  289. MOV CL,1
  290. KPindahS2:
  291. PUSH BX
  292. MOV BX,DX
  293. MOV AL,[BX]
  294. POP BX
  295. MOV [BX],AL
  296. INC BX
  297. INC DX
  298. INC CL
  299. CMP CL,maxS
  300. JNE KPindahS2
  301.  
  302. JMP JMenu
  303.  
  304. JMain: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  305.  
  306. MOV tempscore,0
  307. MOV score,0
  308. MOV giliran,0
  309. MOV session,4
  310. MOV salahbenar,2
  311.  
  312. JSession:
  313. CALL LClrScr
  314.  
  315. LEA DX,menu20
  316. CALL LWriteStr ; cetak tempscore
  317.  
  318. CMP giliran,0
  319. JE KCetakA
  320. CMP giliran,1
  321. JE KCetakB
  322. CMP giliran,2
  323. JE KCetakS
  324. JMP KNotGameOver
  325.  
  326. KCetakA:
  327. LEA DX,jebakanA
  328. MOV jebakansekarang,DX
  329. LEA DX,gerakA
  330. MOV pagarsekarang,DX
  331. CALL LWriteStr
  332. CALL LWriteNL
  333. LEA DX,jebakanA
  334. MOV AL,maxAB
  335. JMP KMain
  336. KCetakB:
  337. LEA DX,jebakanB
  338. MOV jebakansekarang,DX
  339. LEA DX,gerakB
  340. MOV pagarsekarang,DX
  341. CALL LWriteStr
  342. CALL LWriteNL
  343. LEA DX,jebakanB
  344. MOV AL,maxAB
  345. JMP KMain
  346. KCetakS:
  347. LEA DX,jebakanS
  348. MOV jebakansekarang,DX
  349. LEA DX,gerakS
  350. MOV pagarsekarang,DX
  351. CALL LWriteStr
  352. CALL LWriteNL
  353. LEA DX,jebakanS
  354. MOV AL,maxS
  355. JMP KMain
  356.  
  357. MOV currentchar,0
  358.  
  359. KMain:
  360. DEC AL
  361. MOV maxchar,AL
  362. CALL LWriteStr ; cetak jebakan
  363.  
  364. KMainLoop:
  365.  
  366. MOV DH,11
  367. MOV DL,4
  368. CALL LGoToXY
  369. CMP salahbenar,0
  370. JE KKCetakSalah
  371. CMP salahbenar,1
  372. JE KKCetakBenar
  373. JMP KKCetakBenarSalah
  374. KKCetakSalah:
  375. LEA DX,hasilMiss
  376. CALL LWriteStr
  377. JMP KKCetakBenarSalah
  378. KKCetakBenar:
  379. LEA DX,hasilPerf
  380. CALL LWriteStr
  381. KKCetakBenarSalah:
  382.  
  383. ; update score dan tempscore
  384. MOV DL,11
  385. MOV DH,1
  386. CALL LGoToXY
  387.  
  388. MOV AH,0
  389. MOV AL,tempscore
  390. MOV CL,10
  391. DIV CL
  392. PUSH AX
  393. ADD AL,48
  394. CALL LWriteChar
  395. POP AX
  396. MOV AL,AH
  397. ADD AL,48
  398. CALL LWriteChar ; cetak tempscore digit ke 2
  399.  
  400. MOV DL,6
  401. MOV DH,2
  402. CALL LGoToXY
  403.  
  404. MOV AH,0
  405. MOV AL,score
  406. MOV CL,10
  407. DIV CL
  408. PUSH AX
  409. ADD AL,48
  410. CALL LWriteChar
  411. POP AX
  412. MOV AL,AH
  413. ADD AL,48
  414. CALL LWriteChar ; cetak score digit ke 2
  415.  
  416. ; cetak pagar di posisi currentchar
  417. MOV CL,0
  418. MOV DH,6
  419. KLoopPager:
  420. MOV DL,CL
  421. CALL LGoToXY
  422. CMP currentchar,CL
  423. JNE KKCetakSpasi
  424. MOV AL,'#'
  425. JMP KKSelesaiCetak
  426. KKCetakSpasi:
  427. MOV AL,' '
  428. KKSelesaiCetak:
  429. CALL LWriteChar
  430. INC CL
  431. CMP CL,maxchar
  432. JNE KLoopPager
  433.  
  434. MOV AL,' '
  435. CALL LWriteChar
  436. MOV AL,8
  437. CALL LWriteChar
  438.  
  439. ; minta input, check, benar maju, salah back fromstart
  440. CALL LGetCh
  441.  
  442. MOV BX,jebakansekarang
  443. MOV DH,0
  444. MOV DL,currentchar
  445. ADD BX,DX
  446.  
  447. CMP [BX],'0'
  448. JE KKDibalik
  449. JMP KKGaDibalik
  450.  
  451. KKDibalik: ; kalau jebakan
  452.  
  453. MOV BX,pagarsekarang
  454. MOV DH,0
  455. MOV DL,currentchar
  456. ADD BX,DX
  457.  
  458. CMP AH,72 ;^
  459. JNE KNext1Balik
  460. CMP [BX],'v'
  461. JNE KKurangiScore
  462. JMP KTambahScore
  463. KNext1Balik:
  464. CMP AH,77 ;>
  465. JNE KNext2Balik
  466. CMP [BX],'<'
  467. JNE KKurangiScore
  468. JMP KTambahScore
  469. KNext2Balik:
  470. CMP AH,80 ;v
  471. JNE KNext3Balik
  472. CMP [BX],'^'
  473. JNE KKurangiScore
  474. JMP KTambahScore
  475. KNext3Balik:
  476. CMP AH,75 ;<
  477. JNE KNext4
  478. CMP [BX],'>'
  479. JNE KKurangiScore
  480. JMP KTambahScore
  481.  
  482. KKGaDibalik: ; kalau bukan jebakan
  483.  
  484. MOV BX,pagarsekarang
  485. MOV DH,0
  486. MOV DL,currentchar
  487. ADD BX,DX
  488.  
  489. CMP AH,72 ;^
  490. JNE KNext1
  491. CMP [BX],'^'
  492. JNE KKurangiScore
  493. JMP KTambahScore
  494. KNext1:
  495. CMP AH,77 ;>
  496. JNE KNext2
  497. CMP [BX],'>'
  498. JNE KKurangiScore
  499. JMP KTambahScore
  500. KNext2:
  501. CMP AH,80 ;v
  502. JNE KNext3
  503. CMP [BX],'v'
  504. JNE KKurangiScore
  505. JMP KTambahScore
  506. KNext3:
  507. CMP AH,75 ;<
  508. JNE KNext4
  509. CMP [BX],'<'
  510. JNE KKurangiScore
  511. JMP KTambahScore
  512. JMP KKurangiScore
  513. KNext4:
  514. CMP AL,32 ; spasi (kalau ga jalan ganti AH)
  515. JNE KKurangiScore
  516. MOV AL,currentchar
  517. CMP AL,maxchar
  518. JE KTambahScore2
  519. JMP KKurangiScore
  520.  
  521. KTambahScore:
  522. INC tempscore
  523. INC currentchar
  524. MOV salahbenar,1
  525. JMP KNext0
  526. KTambahScore2:
  527. MOV AL,score
  528. ADD AL,tempscore
  529. ADD AL,10 ; +10score kalau benar
  530. MOV salahbenar,1
  531. MOV score,AL
  532. MOV tempscore,0
  533. MOV currentchar,0
  534. INC giliran
  535. CMP giliran,3
  536. JNE KGaBaliKe0
  537. MOV giliran,0
  538. KGaBaliKe0:
  539. DEC session
  540. JMP KNext0
  541. KKurangiScore:
  542. MOV tempscore,0
  543. MOV currentchar,0
  544. MOV salahbenar,0
  545. KNext0:
  546.  
  547. CMP session,0
  548. JE KGameOver
  549.  
  550. MOV AL,currentchar
  551. CMP AL,maxchar
  552. JE KMainLoop
  553. JMP JSession ; kalau udah panah panah terakhir
  554.  
  555. KGameOver:
  556.  
  557. ; game over~!
  558. LEA DX,gameover
  559. CALL LWriteStr
  560.  
  561. ; cetak ulang score dan tempscore
  562. MOV DL,11
  563. MOV DH,1
  564. CALL LGoToXY
  565.  
  566. MOV AH,0
  567. MOV AL,tempscore
  568. MOV CL,10
  569. DIV CL
  570. PUSH AX
  571. ADD AL,48
  572. CALL LWriteChar
  573. POP AX
  574. MOV AL,AH
  575. ADD AL,48
  576. CALL LWriteChar ; cetak tempscore digit ke 2
  577.  
  578. MOV DL,6
  579. MOV DH,2
  580. CALL LGoToXY
  581.  
  582. MOV AH,0
  583. MOV AL,score
  584. MOV CL,10
  585. DIV CL
  586. PUSH AX
  587. ADD AL,48
  588. CALL LWriteChar
  589. POP AX
  590. MOV AL,AH
  591. ADD AL,48
  592. CALL LWriteChar ; cetak score digit ke 2
  593.  
  594. CALL LReadChar ; tahan tampilan
  595.  
  596. JMP JMenu
  597.  
  598. KNotGameOver:
  599.  
  600. JMP JSession
  601.  
  602.  
  603. JMP JMenu
  604.  
  605.  
  606. exit:
  607. int 20h
  608. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement