From 6d16f5bf886324a53bc3026b29daf0bb34869167 Mon Sep 17 00:00:00 2001 From: spinel Date: Tue, 14 Feb 2023 20:54:53 +0100 Subject: [PATCH] initial commit --- __pycache__/data.cpython-310.pyc | Bin 0 -> 2036 bytes __pycache__/menu.cpython-310.pyc | Bin 0 -> 1017 bytes __pycache__/scenario.cpython-310.pyc | Bin 0 -> 662 bytes __pycache__/team.cpython-310.pyc | Bin 0 -> 2189 bytes __pycache__/terrain.cpython-310.pyc | Bin 0 -> 638 bytes data.py | 38 +++++++++++++++ data/team.json | 1 + main.py | 56 ++++++++++++++++++++++ scenario.py | 30 ++++++++++++ team.py | 69 +++++++++++++++++++++++++++ terrain.py | 8 ++++ 11 files changed, 202 insertions(+) create mode 100644 __pycache__/data.cpython-310.pyc create mode 100644 __pycache__/menu.cpython-310.pyc create mode 100644 __pycache__/scenario.cpython-310.pyc create mode 100644 __pycache__/team.cpython-310.pyc create mode 100644 __pycache__/terrain.cpython-310.pyc create mode 100644 data.py create mode 100644 data/team.json create mode 100644 main.py create mode 100644 scenario.py create mode 100644 team.py create mode 100644 terrain.py diff --git a/__pycache__/data.cpython-310.pyc b/__pycache__/data.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..637508580154a333310522c95bf2a2dfa98c81a5 GIT binary patch literal 2036 zcmZ`)&5q+l5bpMWekMCRyDSJ0%))}?1Ctj(FcLyY9KuRjamdB;x_f6GIkss#pc&)YnezWTI)QD^*?Xs`{#`E5*r4pV3O^|0WxovA-egFNcIn+STtw z1QR@CGxiG;masoCVXv(jC&>{mNv>pbYi-YLI`M>0CqC&Nk^<2qsYjAaQeO;68j$1( zK4szXAF|CR3F!W^NVue3y&@vnj0-li1Q*r^HnW8-9Qq~C!lPeT_+%;2&Knso5<=20 z@UZj~?fVx*R(!=Gwz7!wD@N23Y|1u#vaz+3#|x?bq*&&)y4HS~#n)0*A!#a^y;B~2 zuY4jKrjWS*ejL9q7IIvbX)d$z>*d=lO~zHM;`d`A|CCu#E@WPhmZ8KJguV$nZAd8k9)k&Z%%;ZVy8_wX?6=dU;$EfN@T_6*aU2DUD;En zU`)A0Laut?5o|*S#OcwMtfP5V&y3$g{ZT?;+ITk!CGWSqwkWaI z+PdSM8f6<^mkYxoAqwD;(hA`QEZ~7Vw9RQk2L}sR zFKORDCvx1D)P{~8Akd%lq!3ai_+Yodqc|pc=fu?1k2POgs<+~|)*U6Tw&%{RyQ1?u zYnMh(_tPrPsaSa;O;`qxc2Gk-_;vc*Wa~})LcWWaSsju|vajvp?R*ciLHju=&^Hwd z(B}akSxw!yMlQBCCZVH%Qhfx1S}T0IXRgcOC!}~n`yTKDHslH?k7iGOOjI+(f&T?D zP0Yj`EW~_CdkakaZ=_Ojnje+F1qbuZFzR4&18dXNu7TLa(*i>g%$uM&ak}->;Zk2B zjPA1z#yKfIgVMl&^k{u5_&DzF-O!~jr?)pvWFD)uc(j1ZhBuUeMrc4?MMFR;9Ta6* z!xU?5&Yf%T^H-qp8{83c!9v literal 0 HcmV?d00001 diff --git a/__pycache__/menu.cpython-310.pyc b/__pycache__/menu.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0e158f59161b4611b5d9d773a15ab59612aa16d1 GIT binary patch literal 1017 zcmZuv&2H2%5cW^9o82b-R)rhA28k{YP?buR-~y{ktvIYekvI0XX`Ohnvs6^!)Jkya zg(ql_eI;KxA>M!!Gs#jFfg_Kp4bwdbBZ;J% zOmJnI?&HceE!l)o@`}hnhUY|vil6aGAn6`Sdq3b58K>0Kr(k$pALqDpdoXaeVY*c? zicF{^6DFx-=VZbq2bRDGZ&bC&LEp{j0SaN_p8E!-CYQ7!4ZQ*_HEZY@{mfzIum%l3 z;teR0>;nEa!BHT&3@+#rhqrLA!^@Lldoq;$<;f6EMqkK`%7Gl7M{=d*!`*nv!5b=* zO{fg$zBBfNyhxUWR%{wW@&{}4+MgZWA>NllN~6_%ckQ|<@u(44%qqEtSpfxr)1nq6_A zuE{m^!`xK0HCiic?*hZG7o$T{s*#%)mC~c##Z(vh$O$VBM^b%M+RPz`dL)cHF;+|W zY%U60R0ktWZDan)N1IxdQz^DuRoL5@oIb(!ZDd(d6?K+vY-*DW?Y01Pu_9tbX!`)oBQPkzJq8ogh(+uUjoS~=8X|U@{FUDr9xMp0pz2xX zhgnt{xzLE?Ec>t!y8F{|clTlGJJeo^x#8P(2qL()%{C2f0>1Cp$3;~`eX#d-4GqTq Vj|sZb-MvL2!bM;r5`pGb_8W$2@k9Us literal 0 HcmV?d00001 diff --git a/__pycache__/scenario.cpython-310.pyc b/__pycache__/scenario.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8af9ef2b0264a75170b2ed1c42d6c189a9f11627 GIT binary patch literal 662 zcmYjNO>fjN5FLLcT`ei%&?0^Ui$rtdgixglxKvf8_Outvjm_3wCl0okwkVw1YyU%g zgTLe}r;2~TiSd?|GSa-n-$Y@<0hhdcg*is^}g4!3K80Q6h_l;&+U| z!0yWjAh-n1D2`Hbs%0BcCXf0mJ`yCGu~atBuG%g!?=DjrqG^`bv#nHo^0L)wB82Ho z6vAgwsW_Bp+9tm6MkVqw@m@Ad)X#&qUsBmiue+G0jq9R!)@q*$n_v6_zl-nx9@OWq z)ph7ir)_<_IX}YNW+8O_B(>x-`EBnlnChwo-e#oYW5+PIV(0`PRoo4_5 literal 0 HcmV?d00001 diff --git a/__pycache__/team.cpython-310.pyc b/__pycache__/team.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4d6b35e9f6b9c8f3b31e7ae5b184056cfed1403c GIT binary patch literal 2189 zcmZuyPj6dA5Z{0A`Ps3PmIf$LN~wU#g~k;(suC)y!U1GeN(E9b*2cR@pYxud*hwRpp4NijEHXdJKG` zs=!wRUr}_8G;3#Im9(4G)4M>pbK6~9x%e1NIE=?I>}?>59*~qAP)B-n%t|t$X36of zP;^2MXo)sid$gpalP#xZZdZD?=r<$J3hTu{y5~ODd#QE6p~Od7A(d@16M=Of1)Wo3 zFev|g(|TUyx@8AxUuUhS!;LKMwyZSrc}wXXofU&z_gzaCcDFE@viAluHEDk~#&s2KL8xI}^crPI@d*oB$-I^#aM5bJ$$Z`EJ+~uGDmOCi z;~kj|wLPP7yHoDtZjlZ1zUQXc^|5tncYEKU%qK=mRrIs{QPS4Cx6t8J>IE7*!w@wW zee|7?x%Nq?llD{B>4bRt>YBq8{3MOR*!bjek#7_m#hw=#q}_{cy$`wHGO6^fbB{MYGiHhOE8#+3^n+K^pvs1J^HI=`II#h77xqc6oDo6R*C zp~{cRm_S(Q1Ooze!q&(s#o`ebls(_lE+qSun@>T>FCga5Pw)vcc%fIg^U1?Z<{L_` zuHYG1FUw?fXFiKF#H~EcimuG;Domz2&+ZjPQ{G|VS3Z;IfA`3!}3PzY5m^Xcus#Kl?Zd-{{e$o`}JIjHXtBID&n!q$M=f-`RmEMG4$P;sAMyA2RHM zV}?&k$tR)H0Uu2WJZ#w01f<1$1$HnzA;qJ`*<%yl8c%nd@w69-Vt}n>*Q8Dxd;xr< zhWWtysGAj5!!}H3FlX>?p|zN=aiiEwq1S}EepTG}L4qT+lbABbX#8)|sIe;$m(kVN zqJhXUE!fRBnfFv*pfQhV literal 0 HcmV?d00001 diff --git a/__pycache__/terrain.cpython-310.pyc b/__pycache__/terrain.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e62da292008f6a7fd4da10fc91e9fd6ac2ae0659 GIT binary patch literal 638 zcmYk4y>1jS5Xb$so73geK+>X=xkzMR0HFv3Y0xPWsjjh{wYfOwT`#teBhht9n|FYc zS8_`gQP5LmW{*fa(u_anH-FEr-`g7#u*1cl`Y(*XaWOOji&OA;1VIx`9l5}fInvNM zrR0oguEjmk!mv9&=eqbzrsX5tCR3W}F$A8{vc`>}F<6{}$9)Kf%&8`Grm1H41RxwB zB2O+%2+FqcTrEt^;o`I5ya0a>9*-d;@`G;3hW=!fBzDa=AXT#mb}c|2PlXl_oPu!R z7PH&knOPtHhl4iljr)?zP6gAZJg$A4f_Kh@UnIPMlz;E4E8mzZcD6OHI$vEnTUSv9 zbyaEe%{bpRkXb1o*FHEMUw6s|+b*iKZN^D=6LtZF&yVIUH@pab&J`$8iq)$bs7CoOG@lCTc}f1>_q0KnG< Tq~y_?ZQZxn;#fjJ)INIxEuEI; literal 0 HcmV?d00001 diff --git a/data.py b/data.py new file mode 100644 index 0000000..06647e3 --- /dev/null +++ b/data.py @@ -0,0 +1,38 @@ +import json + +class Team: + def __init__(self, name, country): + self.name = name + self.country = country + self.players = [] + + def get_json_state(self): + return [self.name, self.country, self.players] + + def addPlayer(self, name, army): + self.players.append(Player(name, army)) + +class TeamEncoder(json.JSONEncoder): + def default(self, obj): + if isinstance(obj, Team): + return obj.get_json_state() + else: + return json.JSONEncoder.default(self, obj) + +class Player: + def __init__(self, name, army): + self.name = name + self.army = army + +class Terrain: + def __init__(self, name): + self.name = name + +class Scenario: + def __init__(self, defender, opponent): + self.defender = defender + self.opponent = opponent + self.terrains = [] + + def addTerrain(self, name): + self.terrains.append(Terrain(name)) \ No newline at end of file diff --git a/data/team.json b/data/team.json new file mode 100644 index 0000000..71a87de --- /dev/null +++ b/data/team.json @@ -0,0 +1 @@ +{"dd": {"name": "dd", "country": "ff"}} \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..55a2804 --- /dev/null +++ b/main.py @@ -0,0 +1,56 @@ +import team +import scenario +import terrain +from tkinter import * +from tkinter import ttk + + # for child in container.winfo_children(): + # child.grid_configure(padx=4, pady=5) + +Screen = (team.TeamsPage, team.EditTeamPage, terrain.TerrainsPage, scenario.ScenarioPage) + +class App(Tk): + def __init__(self, *args, **kwargs): + Tk.__init__(self, *args, **kwargs) + Tk.wm_title(self, "AoS Worlds Pairing Assistant") + Tk.option_add(self, "*tearOff", False) + + container = ttk.Frame(self, padding="100 100 100 100") + container.pack() + container.columnconfigure(0, minsize=500, weight=1) + container.rowconfigure(0, minsize=300, weight=1) + + self.frames = {} + + for F in Screen: + frame = F(container, self) + self.frames[F] = frame + frame.grid(column=0, row=0, sticky=(N, W, E, S)) + for child in frame.winfo_children(): + child.grid_configure(padx=4, pady=5) + + self.makeMenu() + self.showFrame(team.TeamsPage) + + def makeMenu(self): + menubar = Menu(self) + + menuScenarios = Menu(menubar) + menubar.add_cascade(menu=menuScenarios, label="Scenarios") + menuScenarios.add_command(label="New")#, command=scenario.getScreen) + menuScenarios.add_command(label="New from CSV")#, command=scenario.getScreen) + menuScenarios.add_command(label="Load")#, command=scenario.getScreen) + + menuConfig = Menu(menubar) + menubar.add_cascade(menu=menuConfig, label="Configuration") + menuConfig.add_command(label="Teams", command=lambda: self.showFrame(team.TeamsPage)) + menuConfig.add_command(label="Terrains", command=lambda: self.showFrame(terrain.TerrainsPage)) + + self['menu'] = menubar + + def showFrame(self, screen): + frame = self.frames[screen] + frame.tkraise() + +app = App() +app.mainloop() diff --git a/scenario.py b/scenario.py new file mode 100644 index 0000000..9c313fc --- /dev/null +++ b/scenario.py @@ -0,0 +1,30 @@ +from tkinter import * +from tkinter import ttk + +class ScenarioPage(Frame): + def __init__(self, parent, controller): + Frame.__init__(self, parent) + + label = ttk.Label(self, text="Teams") + label.grid(column=1, row=1, sticky=E) + label.pack() + + # button = ttk.Button(self, text="Import") + # button.grid(column=2, row=1, sticky=(W, E)) + # button.pack + + # ttk.Label(self, text="Terrains").grid(column=1, row=2, sticky=E) + # ttk.Button(self, text="Import from CSV").grid(column=2, row=2, sticky=(W, E)) + + # teamCount = StringVar(value=8) + # ttk.Label(self, text="Teams count").grid(column=1, row=3, sticky=E) + # teamCountEntry = ttk.Spinbox(self, textvariable=teamCount, from_=1, to=100).grid(column=2, row=3, sticky=(W, E)) + + # terrainCount = StringVar(value=4) + # terrainCountLabel = ttk.Label(self, text="Terrain count") + # terrainCountLabel.grid(column=1, row=4, sticky=E).pack() + + + # terrainCountEntry = ttk.Spinbox(self, textvariable=terrainCount, from_=1, to=100).grid(column=2, row=4, sticky=(W, E)) + + # ttk.Button(self, text="Test").grid(column=3, row=5, sticky=(W, E)) \ No newline at end of file diff --git a/team.py b/team.py new file mode 100644 index 0000000..88ecfb8 --- /dev/null +++ b/team.py @@ -0,0 +1,69 @@ +import json +import os +# import data +from tkinter import * +from tkinter import ttk + +def loadTeams(): + path = "data/teams.json" + teams = {} + if os.path.exists(path): + teams = json.loads("data/teams.json") + return teams + +class TeamsPage(Frame): + def __init__(self, parent, controller): + Frame.__init__(self, parent) + + teams = loadTeams() + + teamKey = StringVar() + teamSelector = ttk.Combobox(self, textvariable=teamKey, values=list(teams.keys())) + teamSelector.grid(column=1, row=1, sticky=(E, W)) + if len(teams) == 0: + teamSelector.state(["readonly"]) + + ttk.Button(self, text="New Team").grid(column=1, row=2, sticky=(E, W)) + +class EditTeamPage(Frame): + def __init__(self, parent, controller, team=None): + Frame.__init__(self, parent) + + teamName = StringVar() + teamCountry = StringVar() + + if (team != None): + teamName.set(team.name) + teamCountry.set(team.value) + # teamName.trace_add("write", callback=lambda val: team.__setattr__("name", val)) + # teamCountry.trace_add("write", callback=lambda val: team.__setattr__("country", val)) + + ttk.Label(parent, text="Name:").grid(column=1, row=1, sticky=(E, W)) + ttk.Entry(parent, textvariable=teamName).grid(column=2, row=1, sticky=(E, W)) + ttk.Label(parent, text="Country:").grid(column=1, row=2, sticky=(E, W)) + ttk.Entry(parent, textvariable=teamCountry).grid(column=2, row=2, sticky=(E, W)) + + ttk.Button(parent, text="Save", command=lambda: self.save(teamName.get(), teamCountry.get())).grid(column=2, row=3, sticky=(E, W)) + + def save(self, name, country): + teams = loadTeams() + team = { + "name": name, + "country": country + } + + # existing = False + # for t in teams: + # if t.name == teams.name: + # t = team + # existing = True + # if not existing: + # teams.append(team) + + teams[name] = team + + file = open("data/team.json", "w") + file.write(json.dumps(teams)) + file.close() + + diff --git a/terrain.py b/terrain.py new file mode 100644 index 0000000..bf6ae5f --- /dev/null +++ b/terrain.py @@ -0,0 +1,8 @@ +from tkinter import * +from tkinter import ttk + +class TerrainsPage(Frame): + def __init__(self, parent, controller): + Frame.__init__(self, parent) + + ttk.Label(self, text="New Terrain").grid(column=1, row=1, sticky=E) \ No newline at end of file