#Arati Banerjee
#06/19/2017
#Collect the Bites!

import pygame, sys
import random
import math
import time
from pygame.locals import *


def distance(center1, center2):
    square1 = (center1[0]-center2[0])*(center1[0]-center2[0])
    square2 = (center1[1]-center2[1])*(center1[1]-center2[1])
    return math.sqrt(square1+square2)

def main():
    #Set up timer
    print("You have about one minute to collect as many bites as possible!")
    time.sleep(3)
    print("Ready? Go!")
    time.sleep(1)
    starttime = time.time()

    #Initialize
    random.seed()
    pygame.init()
    pygame.key.set_repeat(10, 1)
    winX = 1000
    winY = 600
    SURFACE = pygame.display.set_mode((winX, winY))
    pygame.display.set_caption("OmNomNom")

    #Colors
    BLK = pygame.Color(0,0,0)
    WHT = pygame.Color(255, 255, 255)
    RED = pygame.Color(102, 0, 0)
    ORG = pygame.Color(255, 140, 0)
    YLW = pygame.Color(204, 204, 0)
    GRN = pygame.Color(0, 102, 0)
    BLU = pygame.Color(0, 0, 102)
    VLT = pygame.Color(128, 0, 128)
    colors = [RED, ORG, YLW, GRN, BLU, VLT]
    color = 2


    #Pygame Clock
    clock = pygame.time.Clock()

    #Player
    playRad = 30
    playerScore = 0
    #Player X/Y Position
    playX = 490
    playY = 290

    #Om Nom Noms
    s = 10
    oNNamt = 10
    #ONN X/Y Positions
    oNNX = []
    oNNY = []
    #ONN X/Y Reposition
    oNNDx = []
    oNNDy = []
    for i in range(oNNamt+1):
        oNNX.append(random.randint(1, winX-s))
        oNNY.append(random.randint(1, winY-s))
        oNNDx.append(random.randint(1, 3))
        oNNDy.append(random.randint(1, 3))

    while True:
        #Event handler
        for event in pygame.event.get():
            #Quit Event
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            #Button Push Events
            if event.type == KEYDOWN:
                if event.key == K_UP and playY >=0:
                    playY -= 3
                if event.key == K_DOWN and playY+2*playRad <= winY:
                    playY += 3
                if event.key == K_LEFT and playX >= 0:
                    playX -= 3
                if event.key == K_RIGHT and playX+2*playRad <= winX:
                    playX += 3
        
        #Checks every om nom nom and removes if touching the player's circle (probably not the most effiecient)
        ofremove = []
        go = 0
        for i in range(oNNamt+1):
            oNNCenter = [oNNX[i]+s, oNNY[i]+s]
            playCenter = [playX+playRad, playY+playRad]
            if distance(oNNCenter, playCenter) < (playRad + s):
                ofremove.append(i)
                go += 1
        for i in range(go):
            oNNX.pop(ofremove[i])
            oNNY.pop(ofremove[i])
            oNNDx.pop(ofremove[i])
            oNNDy.pop(ofremove[i])
            color = (color+1)%6
            playerScore += 1
            oNNX.append(random.randint(1, winX-s))
            oNNY.append(random.randint(1, winY-s))
            oNNDx.append(random.randint(1, 3))
            oNNDy.append(random.randint(1, 3))
        
        #Moves every om nom nom
        for i in range(oNNamt+1):
            oNNX[i] += oNNDx[i]
            if oNNX[i] > winX-2*s or oNNX[i] <=0:
                oNNDx[i] = -oNNDx[i]
            oNNY[i] += oNNDy[i]
            if oNNY[i] > winY-2*s or oNNY[i] <=0:
                oNNDy[i] = -oNNDy[i]
            

        #Now to actually draw
        SURFACE.fill(WHT)
        pygame.draw.ellipse(SURFACE, colors[color], (playX, playY, 2*playRad, 2*playRad), 0)
        for i in range(oNNamt+1):
            pygame.draw.ellipse(SURFACE, BLK, (oNNX[i], oNNY[i], 2*s, 2*s), 0)
        pygame.display.update()
        clock.tick(75)

        #End game
        if time.time()-starttime >= 60:
            print("You got", playerScore, "points!!")
            pygame.quit()
            sys.exit()
        
                
main()
