# Pico2048.py migrated by Kobi Tyrkel
# A simple 2048 game migrated
# for the Rapsberry Pi Pico RetroGaming Console
from PicoGame import PicoGame
from Logic import Logic
from Resources import Resources
import time
X_SHIFT = 32
# init game
game = PicoGame()
s_0 = game.add_sprite(Resources.A_0, Resources.A_0_W, Resources.A_0_H) # sprite 0
s_2 = game.add_sprite(Resources.A_2, Resources.A_2_W, Resources.A_2_H) # sprite 1
s_4 = game.add_sprite(Resources.A_4, Resources.A_4_W, Resources.A_4_H) # sprite 2
s_8 = game.add_sprite(Resources.A_8, Resources.A_8_W, Resources.A_8_H) # sprite 3
s_16 = game.add_sprite(Resources.A_16, Resources.A_16_W, Resources.A_16_H) # sprite 4
s_32 = game.add_sprite(Resources.A_32, Resources.A_32_W, Resources.A_32_H) # sprite 5
s_64 = game.add_sprite(Resources.A_64, Resources.A_64_W, Resources.A_64_H) # sprite 6
s_128 = game.add_sprite(Resources.A_128, Resources.A_128_W, Resources.A_128_H) # sprite 7
s_256 = game.add_sprite(Resources.A_256, Resources.A_256_W, Resources.A_256_H) # sprite 8
s_512 = game.add_sprite(Resources.A_512, Resources.A_512_W, Resources.A_512_H) # sprite 9
s_1024 = game.add_sprite(Resources.A_1024, Resources.A_1024_W, Resources.A_1024_H) # sprite 10
s_2048 = game.add_sprite(Resources.A_2048, Resources.A_2048_W, Resources.A_2048_H) # sprite 11
def animate_moves(moves):
for mat in moves:
game.fill(0)
print("matrix:")
for row in mat:
print(row)
for i in range(4):
for j in range(4):
if(mat[i][j]== 0):
game.sprite(s_0, X_SHIFT + i * 16, j * 16)
if (mat[i][j] == 2):
game.sprite(s_2, X_SHIFT + i * 16, j * 16)
if (mat[i][j] == 4):
game.sprite(s_4, X_SHIFT + i * 16, j * 16)
if (mat[i][j] == 8):
game.sprite(s_8, X_SHIFT + i * 16, j * 16)
if (mat[i][j] == 16):
game.sprite(s_16, X_SHIFT + i * 16, j * 16)
if (mat[i][j] == 32):
game.sprite(s_32, X_SHIFT + i * 16, j * 16)
if (mat[i][j] == 64):
game.sprite(s_64, X_SHIFT + i * 16, j * 16)
if (mat[i][j] == 128):
game.sprite(s_128, X_SHIFT + i * 16, j * 16)
if (mat[i][j] == 256):
game.sprite(s_256, X_SHIFT + i * 16, j * 16)
if (mat[i][j] == 512):
game.sprite(s_512, X_SHIFT + i * 16, j * 16)
if (mat[i][j] == 1024):
game.sprite(s_1024, X_SHIFT + i * 16, j * 16)
if (mat[i][j] == 2048):
game.sprite(s_2048, X_SHIFT + i * 16, j * 16)
game.show()
time.sleep_ms(10)
def pico_2048_main():
# Pico 2048 main
# Game settings
SCREEN_WIDTH = game.SCREEN_WIDTH
SCREEN_HEIGHT = game.SCREEN_HEIGHT
sound_freq = 180 # Sound frequency in Hz
l = Logic()
clicked = False
# game loop
while True:
if game.button_down():
clicked = True
l.move_down()
if game.button_up():
clicked = True
l.move_up()
if game.button_right():
clicked = True
l.move_right()
if game.button_left():
clicked = True
l.move_left()
if (len(l.moves) > 0):
animate_moves(l.moves)
l.moves = []
if clicked:
print("matrix rotated (0)")
for row in l.rotate(l.mat):
print(row)
# wait for a clicked key to be released
while (clicked):
time.sleep_ms(100)
if not game.any_button():
clicked = False
if l.get_current_state() != Logic.GAME_NOT_OVER:
l.moves.append(l.mat_copy())
end_game_tune = True
toggle_end_message = False
while True:
toggle_end_message = not toggle_end_message
animate_moves(l.moves)
if toggle_end_message:
game.rect(0, 22, 128, 11, 1, True)
if l.get_current_state() == Logic.WON:
game.center_text("YOU WIN!", 0)
if end_game_tune:
end_game_tune = False
game.sound(440)
time.sleep_ms(500)
game.sound(0)
time.sleep_ms(500)
game.sound(440)
time.sleep_ms(1000)
game.sound(0)
else:
game.center_text("YOU LOSE", 0)
if end_game_tune:
end_game_tune = False
game.sound(200)
time.sleep_ms(1000)
game.sound(0)
game.show()
count_down = 10
while count_down > 0:
count_down -= 1
time.sleep_ms(100)
if game.any_button():
break;
if game.any_button():
break;
if game.any_button():
break;
if __name__ == "__main__":
pico_2048_main()