3.ASM 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. .286
  2. .model small
  3. .code
  4. org 100h
  5. ;--------------------
  6. count equ 100
  7. delay equ 30
  8. startx equ 10
  9. starty equ 10
  10. sizex equ 40
  11. sizey equ 10
  12. ;--------------------
  13. start:
  14. mov ax, 13h
  15. int 10h
  16. mov curx, startx
  17. mov cury, starty
  18. mov cx, count
  19. lu:
  20. mov ah, 06h
  21. mov dl, 0ffh
  22. int 21h
  23. jnz GAMEOVER
  24. push curx
  25. push cury
  26. push offset face
  27. push sizex
  28. push sizey
  29. call WriteSprite
  30. mov ax, curx
  31. cmp ax, 0
  32. je toright
  33. b1: add ax, sizex
  34. cmp ax, 320
  35. je toleft
  36. b2: mov ax, cury
  37. cmp ax, 0
  38. je todown
  39. b3: add ax, sizey
  40. cmp ax, 200
  41. je toup
  42. jmp gx
  43. toright:mov word ptr cs:[offset gx+4], 06h
  44. jmp b1
  45. toleft : int 3
  46. mov word ptr cs:[offset gx+4], 0Eh
  47. jmp b2
  48. todown :mov word ptr cs:[offset gy+4], 06h
  49. jmp b3
  50. toup : int 3
  51. mov word ptr cs:[offset gy+4], 0Eh
  52. gx: dec curx
  53. gy: dec cury
  54. push delay
  55. call CoolWait
  56. jmp lu
  57. gameover:
  58. int 3
  59. mov ax, 3h
  60. int 10h
  61. int 20h
  62. CoolWait proc near
  63. push bp
  64. mov bp, sp
  65. push cx
  66. mov cx, word ptr [bp+4]
  67. ggg: push cx
  68. mov cx, 0
  69. loop $
  70. pop cx
  71. loop ggg
  72. pop cx
  73. pop bp
  74. ret 2
  75. endp
  76. WriteSprite proc near ;writesprite(x,y,char *sprt,razmx,razmy)
  77. push bp
  78. mov bp,sp
  79. razmy equ word ptr [bp+4]
  80. razmx equ word ptr [bp+6]
  81. sprt equ word ptr [bp+8]
  82. posy equ word ptr [bp+10]
  83. posx equ word ptr [bp+12]
  84. pusha
  85. push es
  86. mov ax, 0A000h
  87. mov es, ax
  88. mov ax, posy
  89. mov bx, ax
  90. shl ax, 8
  91. shl bx, 6
  92. add ax, bx
  93. add ax, posx
  94. mov di, ax
  95. mov ax, sprt
  96. mov si, ax
  97. mov cx, razmy
  98. lup:
  99. push cx
  100. mov cx, razmx
  101. repe movsb
  102. add di, 320
  103. sub di,razmx
  104. pop cx
  105. loop lup
  106. pop es
  107. popa
  108. pop bp
  109. ret 10
  110. endp
  111. curx dw ?
  112. cury dw ?
  113. face db 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0
  114. db 0,1,1,1,1,1,1,1,1,0, 0,2,2,0,0,0,0,2,2,0, 0,0,0,3,3,3,3,3,0,0, 0,4,4,0,0,0,4,4,0,0
  115. db 0,1,1,1,1,1,1,1,1,0, 0,2,2,0,0,0,0,2,2,0, 0,0,3,3,0,0,0,3,3,0, 0,4,4,0,0,4,4,0,0,0
  116. db 0,1,1,0,0,0,0,0,0,0, 0,2,2,0,0,0,0,2,2,0, 0,3,3,0,0,0,0,0,0,0, 0,4,4,0,4,4,0,0,0,0
  117. db 0,1,1,1,1,1,0,0,0,0, 0,2,2,0,0,0,0,2,2,0, 0,3,3,0,0,0,0,0,0,0, 0,4,4,4,4,0,0,0,0,0
  118. db 0,1,1,1,1,1,0,0,0,0, 0,2,2,0,0,0,0,2,2,0, 0,3,3,0,0,0,0,0,0,0, 0,4,4,4,4,0,0,0,0,0
  119. db 0,1,1,0,0,0,0,0,0,0, 0,2,2,0,0,0,0,2,2,0, 0,3,3,0,0,0,0,3,3,0, 0,4,4,0,4,4,0,0,0,0
  120. db 0,1,1,0,0,0,0,0,0,0, 0,0,2,2,0,0,2,2,0,0, 0,0,3,3,0,0,3,3,0,0, 0,4,4,0,0,4,4,0,0,0
  121. db 0,1,1,0,0,0,0,0,0,0, 0,0,0,2,2,2,2,0,0,0, 0,0,0,3,3,3,3,0,0,0, 0,4,4,0,0,0,4,4,0,0
  122. db 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0
  123. end start