Advertisement
Guest User

Untitled

a guest
Mar 25th, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include    "ti83plus.inc"
  2. #define     progStart   $9D95
  3. .org        progStart-2
  4. .db         $BB,$6D
  5.    
  6. init:
  7.     bcall(_ClrLCDFull)
  8.     bcall(_HomeUp)
  9.     call setApple
  10.    
  11.     jp loop
  12.    
  13. ;--- GameLoop
  14. loop:
  15.     call input
  16.     call move
  17.     call collision
  18.     call draw
  19.    
  20.     jp   loop
  21.  
  22. ;--- adds a Segment to the body
  23. addSegment:
  24.     ld ix, var_body ;TableAddr
  25.     ld bc, $0001    ;steps
  26.     call getLength
  27.     ld (var_length), a
  28.    
  29.     ;ix = addr + a
  30.     ld  ix, var_body
  31.     ld  b, $00
  32.     sub $02
  33.     ld  c, a
  34.     add ix, bc
  35.    
  36.     ld a, (ix)
  37.     ld (ix+2), a
  38.     ld a, (ix+1)
  39.     ld (ix+3), a
  40.    
  41.     ret
  42.  
  43.  
  44. ;--- calculates a random number between the given value
  45. ;Input   a = length
  46. ;Output  a = random number
  47. random:
  48.     ld a, $06
  49.     ret
  50.  
  51.  
  52. ;--- sets the location of the apple
  53. setApple:
  54.     ld a, $0F
  55.     call random
  56.     ld (var_apple), a
  57.     ld a, $07
  58.     call random
  59.     ld (var_apple+1), a
  60.     ret
  61.  
  62.  
  63. ;--- Check the Collision between the body and the borders
  64. collision:
  65.     ld hl, var_mode
  66.     ld a, (hl)
  67.     cp $00
  68.     jp nz, collision_mode2
  69.    
  70. ;Collision with the wall
  71. collision_mode1:
  72.    
  73.     jp collision_body
  74.  
  75. ;Without wall collision
  76. collision_mode2:
  77.     ld hl, var_head
  78.     ld a, (hl) ;a = pos_x
  79.    
  80. collision_mode2_left:
  81.     ;if x < 0
  82.     cp $FF
  83.     jp nz, collision_mode2_right
  84.     ld a, $0F ;16
  85.     ld (hl), a
  86.     jp collision_body
  87.    
  88. collision_mode2_right:
  89.     ;if x > 16
  90.     cp $10
  91.     jp nz, collision_mode2_top
  92.     ld a, $00
  93.     ld (hl), a
  94.     jp collision_body
  95.  
  96. collision_mode2_top:
  97.     ld hl, var_head+1
  98.     ld a, (hl) ;a = pos_y
  99.    
  100.     ;if y < 0
  101.     cp $FF
  102.     jp nz, collision_mode2_bottom
  103.     ld a, $07 ;16
  104.     ld (hl), a
  105.     jp collision_body
  106.  
  107. collision_mode2_bottom:
  108.     ;if y > 8
  109.     cp $08
  110.     jp nz, collision_body
  111.     ld a, $00 ;16
  112.     ld (hl), a
  113.    
  114. collision_body:
  115.     ld a, (var_head)
  116.     ld b, a
  117.     ld a, (hl)
  118.     cp b ;TODO
  119.    
  120. collision_body_loop:
  121.    
  122.    
  123.    
  124. collision_apple_x:
  125.     ld  a, (var_head)
  126.     ld  b, a
  127.     ld  a, (var_apple)
  128.     cp  b
  129.     jp nz, collision_end
  130.    
  131. collision_apple_y:
  132.     ld  a, (var_head+1)
  133.     ld  b, a
  134.     ld  a, (var_apple+1)
  135.     cp  b
  136.     jp nz, collision_end
  137.     call addSegment
  138.     call setApple
  139. collision_end:
  140.    
  141.     ret
  142.    
  143.  
  144. ;--- Move Snake
  145. move:
  146.     ;shift segments
  147.     ;for(i=bodyLength-1; i>0; i--)
  148.     ;   body(i) = body(i-1)
  149.     ;   body(0) = head
  150.    
  151.     ld ix, var_body ;TableAddr
  152.     ld bc, $0002    ;steps
  153.     call getLength
  154.    
  155.     add a, a
  156.     sub $03 ;a = i
  157.     ld b,0
  158.     ld c, a
  159.     ld ix, var_body
  160.     add ix, bc ;ix = addr + i
  161.     inc a ;a = counter
  162.     ;maybe sub 2?
  163.    
  164. move_loop:
  165.    
  166.     ;body(i+1) = body(i)
  167.     ld b, (ix)
  168.     ld (ix+2), b
  169.     dec ix
  170.    
  171.     dec a
  172.     jp nz, move_loop
  173.    
  174.     ;move first body segment
  175.     ld a, (var_head)
  176.     ld (var_body), a
  177.     ld a, (var_head+1)
  178.     ld (var_body+1), a
  179.    
  180.     ;move head
  181.     ;switch(var_dir){
  182.     ;case 1: (var_dir)--
  183.    
  184.     ld a, (var_dir)
  185.        
  186. move_case1:
  187.     cp $01
  188.     jp nz, move_case2
  189.     ld a, (var_head)
  190.     dec a
  191.     ld (var_head), a
  192.     ret
  193. move_case2:
  194.     cp $02
  195.     jp nz, move_case3
  196.     ld a, (var_head)
  197.     inc a
  198.     ld (var_head), a
  199.     ret
  200. move_case3:
  201.     cp $03
  202.     jp nz, move_case4
  203.     ld a, (var_head+1)
  204.     dec a
  205.     ld (var_head+1), a
  206.     ret
  207. move_case4:
  208.     ld a, (var_head+1)
  209.     inc a
  210.     ld (var_head+1), a
  211.     ret
  212.  
  213.  
  214. ;--- Get the Length of an Array
  215. ;Input  ix = Array Address
  216. ;       bc = Steps
  217. ;Output  a = Length
  218. getLength:
  219.     ld d, $00 ;counter
  220. getLength_loop:
  221.     ld a, (ix)
  222.     cp $FF
  223. getLength_mod: ;For modifying the value to check for
  224.     jp z, getLength_end
  225.     inc d
  226.     ;ix = ix + a
  227.     add ix, bc
  228.     jp getLength_loop
  229. getLength_end:
  230.     ld a, d
  231.     ret
  232.    
  233.  
  234. ;--- Draw Segments
  235. draw:
  236.     bcall(_ClrLCDFull)
  237.    
  238.     ;draw Apple
  239.     ld a, (var_apple)
  240.     ld (curCol), a
  241.     ld a, (var_apple+1)
  242.     ld (curRow), a
  243.     ld a, 'a'
  244.     bcall(_PutC)
  245.    
  246.     ;draw Head
  247.     ld a, (var_head)
  248.     ld (curCol), a
  249.     ld a, (var_head+1)
  250.     ld (curRow), a
  251.     ld a, '0'
  252.     bcall(_PutC)
  253.     ld ix, var_body ;ix = bodyAddr
  254. draw_loop:
  255.     ld a,(ix)
  256.     cp $FF
  257.     ret z
  258.     ;x
  259.     ld (curCol), a
  260.     inc ix
  261.     ;y
  262.     ld a, (ix)
  263.     ld (curRow), a
  264.     ld a, '0'
  265.     bcall(_PutC)
  266.     inc ix
  267.     jp draw_loop
  268.  
  269. ;--- GameOver
  270. exit:
  271.     bcall(_ClrLCDFull)
  272.     bcall(_HomeUp)
  273.     ld hl, str_gameOver
  274.     bcall(_PutS)
  275.     ld hl, curCol
  276.     ld (hl), $00
  277.     ld hl, curRow
  278.     ld (hl), $02
  279.     ld hl, str_pressKey
  280.     bcall(_PutS)
  281. exit_loop:
  282.     bcall(_GetKey)
  283.     cp $00
  284.     jp z, exit_loop
  285.     ret
  286.    
  287. ;--- Input
  288. input:
  289.     bcall(_GetKey)
  290. input_case1:
  291.     cp $01
  292.     jp nz, input_case2
  293.     ld  b, $02
  294.     jp input_end
  295. input_case2:
  296.     cp $02
  297.     jp nz, input_case3
  298.     ld  b, $01
  299.     jp input_end
  300. input_case3:
  301.     cp $03
  302.     jp nz, input_case4
  303.     ld  b, $03
  304.     jp input_end
  305. input_case4:
  306.     cp $04
  307.     jp nz, input_default
  308.     ld  b, $04
  309.     jp input_end
  310. input_default:
  311.     pop bc
  312.     jp exit
  313. input_end:
  314.     ld hl, var_dir
  315.     ld (hl), b
  316.     ret
  317.  
  318.  
  319.  
  320.  
  321.  
  322. ;--- VARS
  323. var_body:
  324. ;0...20
  325.     .db     $02,$03, $01,$03
  326.     .db     $FF,$FF, $FF,$FF
  327.     .db     $FF,$FF, $FF,$FF
  328.     .db     $FF,$FF, $FF,$FF
  329.     .db     $FF,$FF, $FF,$FF
  330.     .db     $FF,$FF, $FF,$FF
  331.     .db     $FF,$FF, $FF,$FF
  332.     .db     $FF,$FF, $FF,$FF
  333.     .db     $FF,$FF, $FF,$FF
  334.     .db     $FF,$FF, $FF,$FF
  335. ;20...40
  336.     .db     $FF,$FF, $FF,$FF
  337.     .db     $FF,$FF, $FF,$FF
  338.     .db     $FF,$FF, $FF,$FF
  339.     .db     $FF,$FF, $FF,$FF
  340.     .db     $FF,$FF, $FF,$FF
  341.     .db     $FF,$FF, $FF,$FF
  342.     .db     $FF,$FF, $FF,$FF
  343.     .db     $FF,$FF, $FF,$FF
  344.     .db     $FF,$FF, $FF,$FF
  345.     .db     $FF,$FF, $FF,$FF
  346.  
  347. var_length:
  348.     .db $04
  349. var_head:  
  350.     .db $03,$03
  351. var_apple: 
  352.     .db $00,$00
  353. var_dir:   
  354.     .db $02
  355. var_mode:
  356.     .db $01
  357.  
  358. ;--- Strings
  359. str_gameOver:
  360.     .db "   Game Over",$00
  361. str_pressKey:
  362.     .db "Press Key!",$00
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement