from pyxel import *

game_over = False
landed = False
frame_count = 0
anim_timer = 0
anim_frame = 0
resolution = 256
stars = []
for i in range(60):
    stars.append((
        rndi(0, resolution),
        rndi(0, resolution)
    ))
x = rndi(50, resolution-50)
landing_pad = rndi(50, resolution-50)
y = 50
dx = 0
dy = 0
fuel = 80


def draw_centered_text(y, txt, color):
    global resolution
    text_width = len(txt) * 4
    text((resolution - text_width) // 2, y, txt, color)


def reset():
    global x, y, dx, dy, fuel, landing_pad, game_over, landed, resolution
    x = rndi(50, resolution-50)
    y = 50
    dx = 0
    dy = 0
    fuel = 100
    landing_pad = rndi(50, resolution-50)
    game_over = False
    landed = False


def update():
    global x, y, dx, dy, fuel, game_over, landed, anim_frame, anim_timer, resolution
    moving = False
    if game_over or landed:
        if btnp(KEY_R):
            reset()
        return
    if fuel > 0:
        if btn(KEY_RIGHT):
            dx += 0.1
            fuel -= 1
            moving = True
        if btn(KEY_LEFT):
            dx -= 0.1
            fuel -= 1
            moving = True
        if btn(KEY_UP):
            dy -= 0.15
            fuel -= 1
            moving = True
        if moving:
            anim_frame = 1
        else:
            anim_frame = 0
    else:
        anim_frame = 0
    dy += 0.05
    x += dx
    y += dy
    if y >= resolution-50:
        if abs(dy) < 1.5 and landing_pad < x < landing_pad + 20:
            landed = True
        else:
            game_over = True


def draw():
    global frame_count, anim_frame, resolution
    cls(0)
    for star in stars:
        pset(star[0], star[1], 7)
    rect(0, resolution-50, resolution, 50, 5)
    rect(landing_pad, resolution-50, 20, 4, 7)
    if not game_over:
        text(50, 10, "Fuel:", 11)
        rect(80, 10, fuel*2, 3, 11)
        blt(x-4, y-16, 0, 0, anim_frame*16, 16, 16, 0)
    if game_over:
        draw_centered_text(60, "Game Over", 14)
        draw_centered_text(70, "Press R to restart", 3)
    if landed:
        draw_centered_text(80, "Successfully Landed!", 4)
        draw_centered_text(90, "Press R to restart", 14)


init(resolution, resolution, fps = 25)
load("res.pyxres")
run(update, draw)