import pyxel

pyxel.init(50, 40, fps=10)
x = 2
y = 2
v = [1, 0]
score = 0
blocks = [{"x": pyxel.rndi(1, 48), "y": pyxel.rndi(1, 38), "v": [pyxel.rndi(-1, 1), pyxel.rndi(-1, 1)],
          "color": pyxel.COLOR_RED} for _ in range(4)]



win = False
lose = False
counter = 0
counter_lose = 0
coins = []
for _ in range(10):
   coins.append([pyxel.rndi(1, 49), pyxel.rndi(1, 30)])


def update():
   global x, y, v, score, win, lose, counter, counter_lose, blocks
   if pyxel.btnp(pyxel.KEY_RIGHT):
       v = [1, 0]
   if pyxel.btnp(pyxel.KEY_LEFT):
       v = [-1, 0]
   if pyxel.btnp(pyxel.KEY_UP):
       v = [0, -1]
   if pyxel.btnp(pyxel.KEY_DOWN):
       v = [0, 1]
   x = x + v[0]
   y = y + v[1]

   if x == 49 and y == 39 and not lose:
       win = True
       counter = 20

   for block in blocks:
       block["x"] += block["v"][0]
       block["y"] += block["v"][1]
       if block["x"] <= 0 or block["x"] >= 48 or block["y"] <= 0 or block["y"] >= 38:
           block["v"] = [-block["v"][0], -block["v"][1]]
       if block["x"] == x and block["y"] == y and not win:
           lose = True
           counter_lose = 20


   for coin in coins:
       if x == coin[0] and y == coin[1]:
           score = score + 2
           coins.remove(coin)
           break

   if pyxel.rndi(1, 100) < 5:
       coins.append([pyxel.rndi(1, 49), pyxel.rndi(1, 39)])

   if counter > 0:
       counter = counter - 1
       if counter == 0:
           win = False
           lose = False
           x = 1
           y = 1
           v = [1, 0]
           for _ in range(3):
               blocks.append({"x": pyxel.rndi(1, 48), "y": pyxel.rndi(1, 38), "v": [pyxel.rndi(-1, 1), pyxel.rndi(-1, 1)],
          "color": pyxel.COLOR_RED})

   
   if counter_lose > 0:
       counter_lose = counter_lose - 1
       if counter_lose == 0:
           score = 0
           win = False
           lose = False
           x = 1
           y = 1
           v = [1, 0]
           blocks = [{"x": pyxel.rndi(1, 48), "y": pyxel.rndi(1, 38), "v": [pyxel.rndi(-1, 1), pyxel.rndi(-1, 1)], "color": pyxel.COLOR_RED} for _ in range(3)]

def draw():
   pyxel.cls(pyxel.COLOR_BLACK)

   pyxel.rectb(49, 39, 1, 1, pyxel.COLOR_GREEN)

   for block in blocks:
       pyxel.rect(block["x"], block["y"], 1, 1, block["color"])

   for i, j in coins:
       pyxel.rect(i, j, 1, 1, pyxel.COLOR_YELLOW)

   pyxel.text(1, 33, "Score:" + str(score), pyxel.COLOR_WHITE)
   if win:
       pyxel.text(5, 15, "You win", pyxel.COLOR_WHITE)
   elif lose:
       pyxel.text(5, 15, "Game over", pyxel.COLOR_WHITE)
   else:
       pyxel.rect(x, y, 1, 1, pyxel.COLOR_NAVY)


pyxel.run(update, draw)