#! /usr/bin/env python
# -*- coding: Utf-8 -*-

#######################################################
# Agyuparbaj jatek - egygepes verzio - 4 jatekos      #
# (C) Gerard Swinnen, Verviers (Belgique) - July 2004 #
# Licence : GPL                                       #
#######################################################

from Tkinter import *
from math import sin, cos, pi
from random import randrange
import canon03

class Canon(canon03.Canon):
    """Tokeletesitett agyu"""
    def __init__(self, boss, id, x, y, irany, szin):
        canon03.Canon.__init__(self, boss, id, x, y, irany, szin)
  
    def elmozdit(self, x, y, rel=False):
        "elmozdulas, relativ ha <rel> igaz, abszolut ha <rel> hamis"
        if rel:
            dx, dy = x, y
        else:
            dx, dy = x -self.x1, y -self.y1
        # vizszintes hatarok :
        if self.irany ==1:
            xa, xb = 20, int(self.xMax *.33)
        else:
            xa, xb = int(self.xMax *.66), self.xMax -20
        # csak ezek kozott a hatarok kozott mozdul el :
        if self.x1 +dx < xa:
            dx = xa -self.x1
        elif self.x1 +dx > xb:
            dx = xb -self.x1
        #  fuggoleges hatarok :
        ya, yb = int(self.yMax *.4), self.yMax -20
        # csak ezek kozott a hatarok kozott mozdul el :
        if self.y1 +dy < ya:
            dy = ya -self.y1
        elif self.y1 +dy > yb:
            dy = yb -self.y1
        # az agyucso es az agyutest elmozdulasa :     
        self.boss.move(self.cso, dx, dy) 
        self.boss.move(self.test, dx, dy) 
        # az uj koordinatak visszaadasa a hivo programnak :
        self.x1 += dx
        self.y1 += dy
        self.x2 += dx
        self.y2 += dy
        return self.x1, self.y1  

    def animacio_vege(self):
        "vegrehajtando akciok, amikor a lovedek elerte a roppalyaja veget"
        # annak az agyunak az elmozditasa, amelyik lott :
        self.appli.agyu_veletlen_mozditasa(self.id)
        # lovedek elrejtese (a vasznon kivulre kuldjuk) :
        self.boss.coords(self.lovedek, -10, -10, -10, -10)

    def torol(self):
        "az agyu eltuntetese a vaszonrol"
        self.boss.delete(self.cso)
        self.boss.delete(self.test)
        self.boss.delete(self.lovedek)        

class AppAgyuParbaj(Frame):
    '''Az alkalmazas foablaka'''
    def __init__(self, larg_c, haut_c):
        Frame.__init__(self)
        self.pack()
        self.xm, self.ym = larg_c, haut_c
        self.jatek = Canvas(self, width =self.xm, height =self.ym,
                          bg ='ivory', bd =3, relief =SUNKEN)
        self.jatek.pack(padx =4, pady =4, side =TOP)

        self.guns ={}           # a jelen levo agyuk szotara
        self.pult ={}           # a jelen levo vezerlopultok szotara
        self.specificites()     # kulonbozo objektumok a leszarmaztatott osztalyokban

    def specificites(self):
        "agyuk es vezerlopultok letrehozasa"
        self.master.title('<<< Agyuparbaj >>>')
        id_list =[("Paul","red"),("Romeo","cyan"),
                  ("Virginie","orange"),("Juliette","blue")]
        s = False
        for id, szin in id_list:
            if s:
                irany =1
            else:
                irany =-1
            x, y = self.veletlen_koord(irany)
            self.guns[id] = Canon(self.jatek, id, x, y, irany, szin)
            self.pult[id] = canon03.VezerloPult(self, self.guns[id])
            s = not s           # az oldal valtasa minden iterracioban

    def agyu_veletlen_mozditasa(self, id):
        "az <id> agyu veletlenszerû elmozditasa"
        gun =self.guns[id]
        dx, dy = randrange(-60, 61), randrange(-60, 61)
        # elmozditas (avec recuperation des nouvelles coordonnees) :
        x, y = gun.elmozdit(dx, dy, True)
        return x, y

    def veletlen_koord(self, s):
        "veletlen koordinatak, bal (s =1) vagy jobb (s =-1)" 
        y =randrange(int(self.ym /2), self.ym -20)
        if s == -1:
            x =randrange(int(self.xm *.7), self.xm -20)
        else:
            x =randrange(20, int(self.xm *.3))
        return x, y
  
    def goal(self, i, j):
        "az <i> agyu jelzi, hogy eltalalta a <j> ellenfelet"
        # melyik taborhoz tartoznak ?
        ti, tj = self.guns[i].irany, self.guns[j].irany        
        if ti != tj :               # ellenkezo iranyuak :
            p = 1                   # 1 pontot kapunk
        else:                       # ellentetes iranyuak :
            p = -2                  # eltalaltunk egy szovetsegest !!
        self.pult[i].pontHozzaadasa(p)
        # akit eltalaltak veszit egy pontot :
        self.pult[j].pontHozzaadasa(-1)

    def dictionnaireCanons(self):
        "a jelen levo agyukat leiro szotarat adja meg visszateresi ertekkent" 
        return self.guns

if __name__ =='__main__':
    AppAgyuParbaj(650, 300).mainloop()
