"""
A simple demonstration of the Zelle graphics library.

Author: Zachary Palmer
Date: 2015-09-28
"""

from graphics import *
from random import *

def grid_position_center(x,y):
  return Point(x*60+30,y*60+30)

def grid_position_upper_left(x,y):
  return Point(x*60,y*60)

def grid_position_lower_right(x,y):
  return Point(x*60+60,y*60+60)

def make_coin():
  coin = Circle(grid_position_center(randrange(15),randrange(15)), 15)
  coin.setFill(color_rgb(200,200,0))
  return coin

def at_same_location(a,b):
  p1 = a.getCenter()
  p2 = b.getCenter()
  return p1.getX() == p2.getX() and p1.getY() == p2.getY()

def main():
  window = GraphWin("Demo",900,900)
  window.setBackground(color_rgb(0,100,0))

  # Create the player
  player = Rectangle(grid_position_upper_left(7,7), grid_position_lower_right(7,7))
  player.setFill(color_rgb(100,0,150))
  player.draw(window)

  # Create the coin
  coin = make_coin()
  coin.draw(window)

  # Score text label
  score_label = Text(grid_position_center(7,14),"0")
  score_label.setSize(20)
  score_label.setStyle("bold")
  score_label.setFill("white")
  score_label.draw(window)

  # Set current score value
  score = 0

  # Loop to get input
  while window.isOpen():
    key = window.getKey()
    if key == 'Up':
      if player.getCenter().getY() > 30:
        player.move(0,-60)
    elif key == 'Down':
      if player.getCenter().getY() < 870:
        player.move(0,60)
    elif key == 'Left':
      if player.getCenter().getX() > 30:
        player.move(-60,0)
    elif key == 'Right':
      if player.getCenter().getX() < 870:
        player.move(60,0)
    if at_same_location(player, coin):
      # The player just captured the coin
      coin.undraw()
      score += 1
      score_label.setText(str(score))
      coin = make_coin()
      coin.draw(window)

main()
