Advertisement
Guest User

Untitled

a guest
Jan 19th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.45 KB | None | 0 0
  1. # BITRIS - Copyright 2017 Darryl Sloan
  2.  
  3. from microbit import *
  4. import neopixel
  5. from random import randint
  6.  
  7. # Enable NeoPixels to use x & y values
  8. def np_plot(x, y, r, g, b):
  9. np[31-y-abs(x-3)*8] = (r, g, b)
  10.  
  11. # Counter explode effect
  12.  
  13. def counter_explode(x, y):
  14. for glow in range(30, -1, -1):
  15. np_plot(x, y, glow, glow, glow)
  16. np.show()
  17. sleep(10)
  18.  
  19. # Game setup
  20. np = neopixel.NeoPixel(pin0, 32)
  21. grid = [randint(1, 6), 0, 0, 0, 0, 0, 0, 0], [randint(1, 6), 0, 0, 0, 0, 0, 0, 0], [randint(1, 6), 0, 0, 0, 0, 0, 0, 0], [randint(1, 6), 0, 0, 0, 0, 0, 0, 0]
  22. col_combo = [[0, 0, 0], [20, 0, 0], [0, 20, 0], [0, 0, 20], [20, 20, 0], [20, 0, 20], [0, 20, 20], [20, 20, 20]]
  23.  
  24. player_x, player_y, timer, score, instability = 0, 0, 0, 0, 0
  25. alive = True
  26. counter = grid[0][0]
  27.  
  28. # Main game loop
  29. while alive == True:
  30.  
  31. # Display
  32.  
  33. # Display grid
  34. for y in range(0, 8):
  35. for x in range(0, 4):
  36. np_plot(x, y, col_combo[grid[x][y]][0], col_combo[grid[x][y]][1], col_combo[grid[x][y]][2])
  37.  
  38. # Display player
  39. np_plot(player_x, player_y, col_combo[counter][0], col_combo[counter][1], col_combo[counter][2])
  40. np.show()
  41.  
  42. # Consequences
  43.  
  44. # Counter lands on bottom or on another counter
  45. if player_y == 7 or grid[player_x][player_y+1] > 0:
  46. grid[player_x][player_y] = counter
  47. player_y = 0
  48. player_x = 0
  49. timer = 0
  50. counter = grid[0][0]
  51.  
  52. # Scan grid for "L" shape
  53. for y in range(1, 7):
  54. for x in range(0, 3):
  55. for colour in range(1, 7):
  56. square = [[False, False], [False, False]]
  57. counter_sum = 0
  58. if grid[x][y] == colour:
  59. square[0][0] = True
  60. counter_sum += 1
  61. if grid[x][y+1] == colour:
  62. square[0][1] = True
  63. counter_sum += 1
  64. if grid[x+1][y] == colour:
  65. square[1][0] = True
  66. counter_sum += 1
  67. if grid[x+1][y+1] == colour:
  68. square[1][1] = True
  69. counter_sum += 1
  70. if counter_sum >= 3:
  71. for i in [0, 0], [1, 0], [0, 1], [1, 1]:
  72. if square[i[0]][i[1]] == True:
  73. grid[x+i[0]][y+i[1]] = 0
  74. counter_explode(x+i[0],y+i[1])
  75. score += 1
  76. break
  77.  
  78. # Landed white counter explodes and changes counter underneath
  79. for y in range(1, 8):
  80. for x in range(0, 4):
  81. if grid[x][y] == 7:
  82. grid[x][y] = 0
  83. counter_explode(x, y)
  84. if y < 7:
  85. for i in range(40):
  86. np_plot(x, y+1, randint(0, 20), randint(0, 20), randint(0, 20))
  87. np.show()
  88. sleep(20)
  89. grid[x][y+1] = randint(1, 6)
  90.  
  91. # Gravity collapses any gaps between counters
  92. for y in range(1, 7):
  93. for x in range(0, 4):
  94. if grid[x][y] > 0 and grid[x][y+1] == 0:
  95. grid[x][y+1] = grid[x][y]
  96. grid[x][y] = 0
  97.  
  98. # If grid is filled to capacity, game over
  99. for i in range(0, 4):
  100. if grid[i][1] > 0:
  101. alive = False
  102.  
  103. # Movements
  104. # Player movement
  105. if button_b.was_pressed() and player_x > 0:
  106. if grid[player_x-1][player_y+1] == 0:
  107. player_x -= 1
  108. if button_a.was_pressed() and player_x < 3:
  109. if grid[player_x+1][player_y+1] == 0:
  110. player_x += 1
  111.  
  112. # Active counter descends
  113. timer += 1
  114. if timer == 3:
  115. player_y += 1
  116. if player_y == 1:
  117. grid[0][0] = 0
  118. timer = 0
  119.  
  120. # Shift waiting counters left
  121. for i in range(0, 3):
  122. if grid[i][0] == 0:
  123. grid[i][0] = grid[i+1][0]
  124. grid[i+1][0] = 0
  125. if grid[3][0] == 0:
  126. grid[3][0] = randint(1, 7)
  127.  
  128. # Periodically randomise on-screen counters
  129. instability += 1
  130. if instability == 400:
  131. for i in range(80):
  132. for y in range(1, 8):
  133. for x in range(0, 4):
  134. if grid[x][y] > 0:
  135. grid[x][y] = randint(1, 6)
  136. np_plot(x, y, randint(0, 20), randint(0, 20), randint(0, 20))
  137. np.show()
  138. sleep(20)
  139. instability = 0
  140.  
  141. # Game over
  142. for y in range(0, 8):
  143. for x in range(0, 4):
  144. if grid[x][y] > 0:
  145. counter_explode(x, y)
  146. while True:
  147. display.scroll(str(score))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement