from Tkinter import *

class Joueur:
	def __init__(self, serpent, nom="inconnu", energie=15, nbvies=2):
		self.nom = nom
		self.energie = energie
		self.nbvies = nbvies
		self.serpent = serpent

	def decr_vie(self):
		self.nbvies = self.nbvies-1
		if self.nbvies <= 0:
			return False #perdu
		else:
			return True

	def decr_energie(self, n=1):
		self.energie = self.energie-n
		if self.energie == 0:
			return False # mort
		else:
			return True

	def incr_energie(self, n=1):
		if self.energie+n >= 15:
			self.energie = 15
		else:
			self.energie = self.energie+n

	def gerer_mort(self, princ, LGC, tete, queue):
		self.serpent.effacer(princ)
		self.serpent.init_coord(tete, queue)
		self.serpent.affiche_init(princ, LGC)

class Serpent:
	def __init__(self, tete, queue, dir, motif, motifq):
		self.tete = tete
		self.queue = list(queue)
		self.dir = dir
		self.motif = motif
		self.motifq = motifq
		if dir == "Right":
			self.dirinterdite = "Left"
		elif dir == "Left":
			self.dirinterdite = "Right"
		elif dir == "Up":
			self.dirinterdite = "Down"
		else:
			self.dirinterdite = "Up"

	def change_dir(self,evt):
		if evt.keysym in set(["Left", "Right", "Down", "Up"]) - set([self.dirinterdite]):
			self.dir = evt.keysym

	def init_coord(self, tete, queue):
		self.tete = tete
		self.queue = list(queue)

	def avancer(self,proch_tete,proch_dirint,mange):
		x,y = self.tete
		if not mange:
			self.queue.pop()
		self.queue.insert(0, [x,y])
		self.tete = proch_tete
		self.dirinterdite = proch_dirint

	def prochaine_pos(self):
		x,y = self.tete
		if self.dir == "Up":
			tete = [x,y-1]
			dirinterdite = "Down"
		elif self.dir == "Down":
			tete = [x,y+1]
			dirinterdite = "Up"
		elif self.dir == "Right":
			tete = [x+1,y]
			dirinterdite = "Left"
		else:
			tete = [x-1,y]
			dirinterdite = "Right"
		return tete,dirinterdite

	def affiche_init(self, princ, LGC):
		x,y = self.tete
		self.imtete = princ.create_oval(x*LGC,y*LGC,(x+1)*LGC,(y+1)*LGC,fill=self.motif)
		self.imqueue = []
		for x,y in self.queue:
			self.imqueue.insert(0,princ.create_oval(x*LGC,y*LGC,(x+1)*LGC,(y+1)*LGC,fill=self.motifq))

	def reafficher(self, mange, princ, LGC):
		x,y = self.tete
		im = self.imtete
		princ.coords(im,x*LGC,y*LGC,(x+1)*LGC,(y+1)*LGC)
		# si mange, ajouter un bout de queue
		if mange:
			self.imqueue.insert(0,princ.create_oval(x*LGC,y*LGC,(x+1)*LGC,(y+1)*LGC,fill=self.motifq))
		cpt = 0
		for x,y in self.queue:
			im = self.imqueue[cpt]
			princ.coords(im, x*LGC,y*LGC,(x+1)*LGC,(y+1)*LGC)
			cpt = cpt + 1

	def effacer(self, princ):
		princ.delete(self.imtete)
		for image in self.imqueue:
			princ.delete(image)

	def mourra(self, proch_tete, niveau):
		# tete sur une case vide?
		for x,y in niveau.obs:
			if proch_tete == [x,y]:
				return True
		else:
			return False
	
	def mangera(self, proch_tete, niveau):
		for x,y in niveau.miams:
			if proch_tete == [x,y]:
				return True
		else:
			return False

