Simples Schach Game to dive into Python

Fragen zu Tkinter.
skypa
User
Beiträge: 97
Registriert: Freitag 5. Januar 2007, 03:13

Nun ja, ich versuch täglich ein stück mehr das kleine Tierchen zu verstehen, abe rich brauch dabei wohl hilfe... hab mnir vor genommen ein simples Schach Game zu proggen, später mit mehr Funktionalität auch noch auszustatten um auch mal was in Sachen Netzwerkprogrammierung getan zu haben...

Hier erstmal bissl code:

Code: Alles auswählen

from Tkinter import *

root = Tk(className="chessPy")
canvas=Canvas(root, width=480, height=480)
canvas.pack()

#img_bauer = PhotoImage(file="bauer.gif")
#label_bauer = Label(root, image=img_bauer)
#label_bauer.place(x=5, y=60)

# 0,0: Turm		T
# 0,1: Pferd		P
# 0,2: Läufer		L
# 0,3: Dame		D
# 0,4: König		K
# 0,5: Läufer		L
# 0,6: Pferd		P
# 0,7: Turm		T 
# 1,0 - 1,7: Bauer	B

# 6,0 - 6,7: Bauer
# 7,0: Turm
# 7,1: Pferd
# 7,2: Läufer
# 7,3: Dame
# 7,4: König
# 7,5: Läufer
# 7,6: Pferd
# 7,7: Turm 


spielfeld = [
['T', 'P', 'L', 'D', 'K', 'L', 'P', 'T'],
['B' for x in range(8)],
['0' for x in range(8)],
['0' for x in range(8)],
['0' for x in range(8)],
['0' for x in range(8)],
['B' for x in range(8)],
['T', 'P', 'L', 'D', 'K', 'L', 'P', 'T']
]

for x in range(8):
	for y in range(8):
		if ((x+y)%2) == 0:
			farbe = "#FFF"
		else:
			farbe = "#000"
		canvas.create_rectangle(x*60,y*60,x*60+60,y*60+60,fill=farbe)


root.mainloop()
Also los:

Ich brauch Infos.. also ob ich TK austauschen muss durch wxPython (kenn ich noch gar nix von) oder kann ich so weiter machen?

Ich will eigentlich png-Dateien einladen wegen der Transparenz, hab aber nun zu test zwecken das umgewandelt in gif.. was aber weder Kompromiss noch Endlösung sein soll...

Ja ich weiß, es ist grad mal das Grundgerüst, aber ich bin net schneller.. vlt könnt ihr ja mit helfen?!

Ich will für jede Figur n png machen, was ich dann per Maus aufnehmen kann und verschieben kann any ideas?
Benutzeravatar
name
User
Beiträge: 254
Registriert: Dienstag 5. September 2006, 16:35
Wohnort: Wien
Kontaktdaten:

Ich wuerde dir mal raten das ganze Objektorientiert anzugehen...
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
skypa
User
Beiträge: 97
Registriert: Freitag 5. Januar 2007, 03:13

ja daran dacht ich schon selbst, aber ist nun auch egal, da ich meinen Ansatz verwerfen muss bzw werde... und werd das ganze objektorientiert neuproggen mit xturtle modul... das müsste als grafische Alternative funktionieren....

Aber wenigstens mal 1 Reply :roll:
Benutzeravatar
name
User
Beiträge: 254
Registriert: Dienstag 5. September 2006, 16:35
Wohnort: Wien
Kontaktdaten:

Ausserdem koennte es sein das pygame da besser geeignet, hab aber noch nie was mit Tkinter gemacht, also kann ichs net bewerten...
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

skypa hat geschrieben:und werd das ganze objektorientiert neuproggen mit xturtle modul... das müsste als grafische Alternative funktionieren....
Was hat das damit zu tun? xturtle ist doch nur für Turtlegrafik gedacht und kocht auch nutmit Tkinter-Wasser.

Du musst dich informieren, ob Tk das kann was du willst oder es nicht sofort besser wäre, auf ein anderes Toolkit umzusatteln.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
skypa
User
Beiträge: 97
Registriert: Freitag 5. Januar 2007, 03:13

ja bin dabei... Tkinter würd zwar gehen, ist aber grafisch nicht so der Bringer... darum dacht ich, ich check mal pygame aus. Damit sollten erste Gehversuche machbar sein. Aber was is?

Code: Alles auswählen

import pygame
from pygame.locals import *
-> No module named locals..... lol?

wieso klappt das bei allen anderen? bzw stehts so in den meisten Scripts die pygame benutzen...

Egal, für was ich mich entscheide, ich hab jedesmal n Haken dabei, weiß einer Rat?
was nun? wxPython?

Kann mir vlt mal einer eine Übersicht geben was wozu zu gebrauchen is?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

skypa hat geschrieben:

Code: Alles auswählen

import pygame
from pygame.locals import *
-> No module named locals..... lol?

wieso klappt das bei allen anderen? bzw stehts so in den meisten Scripts die pygame benutzen...
Gut das das nicht geht ;) *-Importe sind sowieso keine gute Idee. Versuch mal auf die dort definierten Konstanten z.B. per ``pygame.K_UP`` zuzugreifen. Möglicherweise wurde das ``locals``-Modul aus ebendiesem Grund abgeschafft.
skypa hat geschrieben:Kann mir vlt mal einer eine Übersicht geben was wozu zu gebrauchen is?
Tkinter: Hässliche GUI mit wenigen Möglichkeiten, aber vergleichsweise unfassender Doku
wxPython: Umfassendes Toolkit, mit langsam verbessernder Doku, läuft unter Windows und Linux mit nativen Widgets
PyGTK: Binding für das am häufigsten verwendete GUI-Toolkit unter Linux, vergleichsweise umfassende Doku, unter Windows wenig populär.
Pygame: Binding für SDL, eine Spiele-Lib für 2D-Spiele.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
skypa
User
Beiträge: 97
Registriert: Freitag 5. Januar 2007, 03:13

Ah ok, das is schon mal informativ...

Tkinter is also was für stupide Anwendungssoftware, wenn es mal eher um die Funktionalität geht, als die Präsentation...

Pygame scheint optimal zu sein fürs erste...
Ich werd mich heut nach der Arbeit nochmal dran setzen, vlt funzt es ja wenn ich das locals wirklich weglasse...
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

Leonidas hat geschrieben: Tkinter: Hässliche GUI mit wenigen Möglichkeiten.......
sorry aber das stimmt nicht. Jemand der das denkt, hat mit Tkinter noch nicht viel zu tun gehabt.
BlackJack

Über das hässlich lässt sich streiten, aber das im Grundpaket weder Tabellen noch Bäume als Widgets enthalten sind, ist schon eine ziemlich starke Einschränkung.

`Canvas` für interaktiv manipulierbare Vektorgraphik ist dagegen sehr gut.
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Leonidas hat geschrieben:Tkinter: Hässliche GUI mit wenigen Möglichkeiten
Also Moment mal ... :x
Tkinter GUIs sind auf keinen Fall hässl... naja gut, vielleicht doch :)
Aber wenige Möglichkeiten? Ok, BlackJack hats gesagt, keine Tabellen und Tree-Widgets, aber sonst? (PMW bringt die übrigens mit).
Unschlagbar ist für mich das Canvas (ja, auch das hat BlackJack schon gesagt). Für 2D Grafiken gibt es kein GUI Toolkit (pygame eingeschlossen), das so einfach so viele Möglichkeiten bietet.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

mawe hat geschrieben:Aber wenige Möglichkeiten? Ok, BlackJack hats gesagt, keine Tabellen und Tree-Widgets, aber sonst?
Skinning, Kalender-Widgets, Throbber, etc. Man muss sich nur mal die wxPython-Demo ansehen, was dort alles möglich ist. Klar, vieles kann man nachrüsten, aber warum - andere Toolkits können sowas von Haus aus.
mawe hat geschrieben:Unschlagbar ist für mich das Canvas (ja, auch das hat BlackJack schon gesagt). Für 2D Grafiken gibt es kein GUI Toolkit (pygame eingeschlossen), das so einfach so viele Möglichkeiten bietet.
Punkt für dich. Das Canvas-Widget isttatsächlich gut gelungen. Und das Pygame perfekt ist, dem Hirngespenst brauchen wir uns auch nicht hingeben - SDL ist teilweise erstaunlich schlecht. An dieser Stelle ist aber leider nicht viel Entwicklung zu verzeichnen. Mindestens seit 2003 hat sich an SDL leider nicht mehr viel getan.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
skypa
User
Beiträge: 97
Registriert: Freitag 5. Januar 2007, 03:13

Interessante Replies... Ja, bei Canvas scheint schon was Möglichkeit zu sein, wobei ich mangelns Wissen damit nicht weitermachen konnte...

Ich muss mich langsam mal festlegen wo ich mich reinstürze...
zwar alles ne Frage von Zeit bis das Verständnis da is, aber vorher muss man erstmal wissen ob es lohnt...

ich könnte Canvas ja beibehalten oder nicht? :shock:
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

pyStyler hat geschrieben:
Leonidas hat geschrieben: Tkinter: Hässliche GUI mit wenigen Möglichkeiten.......
sorry aber das stimmt nicht. Jemand der das denkt, hat mit Tkinter noch nicht viel zu tun gehabt.
Genug. Was mich an Tkinter auch stört, wofür aber Tkinter selbst nichts kann ist, dass viele Quellcodes die Tkinter nutzen nicht PEP8-konform sind oder extrem unlesbar strukturiert. Sicher, das legt an den Usern, aber die lernen leider oft aus schlechten Beispielen. Gibt natürlich auch sehr positive Ausnahmen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

skypa hat geschrieben:ich könnte Canvas ja beibehalten oder nicht? :shock:
Du meinst, das Canvas-Widget in anderen Toolkits zu verwenden? Nein, das geht nicht.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

Leonidas hat geschrieben: Genug. Was mich an Tkinter auch stört, wofür aber Tkinter selbst nichts kann ist, dass viele Quellcodes die Tkinter nutzen nicht PEP8-konform
Ich persönlich kenne nicht sehr viele Leute die damit ein Problem haben.
( höchstens 2 aus diesem Forum )
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

pyStyler hat geschrieben:[...]
( höchstens 2 aus diesem Forum )
Da sind aber noch ein par mehr hier im Forum, denen non-PEP8 konformer Code stört.
skypa
User
Beiträge: 97
Registriert: Freitag 5. Januar 2007, 03:13

Leonidas hat geschrieben:
skypa hat geschrieben:ich könnte Canvas ja beibehalten oder nicht? :shock:
Du meinst, das Canvas-Widget in anderen Toolkits zu verwenden? Nein, das geht nicht.

Nein ich meinte damit, dass ich es von dir so verstanden habe, das Canvas (sprich Tkinter) für mein Vorhaben voll und ganz ausreichen...

wobei ich imho nicht weiß wie ich den rest damit erstelle der noch fehlt.. sprich Figuren...
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

skypa hat geschrieben:Nein ich meinte damit, dass ich es von dir so verstanden habe, das Canvas (sprich Tkinter) für mein Vorhaben voll und ganz ausreichen...
Ich finde ja.

Was die Figuren betrifft:
Entweder du zeichnest die Figuren und lädst die Bilder in Tkinter (wurde hier im Forum schon mehrmals gezeigt, such mal ;))
Oder, wenns nur einfache Grafiken sein sollen, könnte man das auch so ähnlich machen:

Code: Alles auswählen

import Tkinter as tk

def draw_rook( canvas, x, y, size, color="black" ):
    coords = [
        x         , y,
        x + 5*size, y,
        x + 5*size, y - 2*size,
        x + 4*size, y - 2*size,
        x + 4*size, y - 6*size,
        x + 5*size, y - 6*size,
        x + 5*size, y - 8*size,
        x + 4*size, y - 8*size,
        x + 4*size, y - 7*size,
        x + 3*size, y - 7*size,
        x + 3*size, y - 8*size,
        x + 2*size, y - 8*size,
        x + 2*size, y - 7*size,
        x + size  , y - 7*size,
        x + size  , y - 8*size,
        x         , y - 8*size,
        x         , y - 6*size,
        x + size  , y - 6*size,
        x + size  , y - 2*size,
        x         , y - 2*size
    ]
    canvas.create_polygon( coords, fill=color)

root = tk.Tk()
c = tk.Canvas()
c.pack()
draw_rook(c, 100, 100, 10)

root.mainloop()
skypa
User
Beiträge: 97
Registriert: Freitag 5. Januar 2007, 03:13

Ahh ! :D

Ich glaub damit kann ich was anfangen...
Demzufolge erstell ich für jede Figur so eine Klasse, die das Aussehen beeinhaltet...?!

Die Bewegung der Figuren ist mir noch ein Rätsel, aber ich test mich da mal weiter Schritt für Schritt ran.

Bin nun auch etwas im Klareren über OOP, in den nächsten Tagen release ich dann mal ein Zwischenergebnis.

Und vielen Dank für eure Anteilnahme! :roll:
Antworten