Simples Schach Game to dive into Python

Fragen zu Tkinter.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

pyStyler hat geschrieben:Ich persönlich kenne nicht sehr viele Leute die damit ein Problem haben.
( höchstens 2 aus diesem Forum )
Wow. Dann schau mal in die Mailingliste, die Newsgroup und den IRC-Channel. Wenn den meisten Leuten PEP8 scheinbar so egal wäre wie dir - warum sind dann viele Python-Programme exakt so geschrieben, wie im Styleguide steht?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
skypa
User
Beiträge: 97
Registriert: Freitag 5. Januar 2007, 03:13

@mawe:

Ich hab soeben mal dein Beispiel ausprobiert... ehm gibts noch andere grafische Lösungen??? :lol:

Das Game soll zwar simple sein, aber etwas anspruchsvoll schon :roll:


Weil das ist nicht grad die "hübscheste" Lösung... was kann man sonst noch machen?
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

skypa hat geschrieben:@mawe:

Ich hab soeben mal dein Beispiel ausprobiert... ehm gibts noch andere grafische Lösungen??? :lol:

Das Game soll zwar simple sein, aber etwas anspruchsvoll schon :roll:
[...]
KlBMT05LKg==
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

sape hat geschrieben:KlBMT05LKg==
OK, sape - jetzt hatten wir unseren Spaß, jetzt können wir das für einige Zeit sein lassen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
skypa
User
Beiträge: 97
Registriert: Freitag 5. Januar 2007, 03:13

Code: Alles auswählen

from Tkinter import *
from thread import*
import Image
import ImageTk
import array

# 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
# 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 

"""
ursprung = [
['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']
]
"""

root = Tk()
img_bauer = PhotoImage(file="bauer.gif")
img_bg = PhotoImage(file="bg.gif")

class Spielfigur(object):
	def __init__(self, pid, startpos, canvas, spieler):
		self.pid = pid
		self.pos = startpos
		self.spieler = spieler
		self.canvas = canvas
		self.dead = False
		if pid == "B":
			self.image = canvas.create_image(self.pos, image=img_bauer, anchor=NW)
		else:
			self.image = 0
	
	def GetPosition(self):
		return self.pos
	
	def GetImage(self):
		return self.image
	
	def SetPosition(self, new_pos):
		self.pos = new_pos
		self.canvas.coords(self.image, self.pos)
		
	def AllowedMove(self, previous_pos, new_pos):
		if self.pid == 'B':
			if self.spieler == 'oben':
				bewegung_y = new_pos[1] - previous_pos[1]
				if previous_pos[0] != new_pos[0] or bewegung_y != 50:
					return False
			elif self.spieler == 'unten':
				bewegung_y = new_pos[1] - previous_pos[1]
				if previous_pos[0] != new_pos[0] or bewegung_y != -50:
					return False
			
		return True
	
	def Kill(self):
		if self.dead == False:
			if self.image != 0:
				self.canvas.delete(self.image)
			self.dead = True
		
	def IsDead(self):
		return self.dead


class Application:
	def __init__(self):
		self.clicked_figur = False
		self.canvas = Canvas(root, width=400, height=400)
		self.canvas.bind("<ButtonPress>", self.click)
		self.canvas.bind("<Motion>", self.move)
		self.canvas.bind("<ButtonRelease>", self.release)
		self.canvas.pack()

		# bilder für die figuren laden
		
		bg = self.canvas.create_image(0, 0, image=img_bg, anchor=NW)
		self.canvas.coords(bg,0,0)
		self.spielfiguren = []
		
		spieler_weiss = [
		['T', 'P', 'L', 'D', 'K', 'L', 'P', 'T'],
		['B' for x in range(8)],
		]
		
		for x in range(8):
			for y in range(2):
				if spieler_weiss[y][x] != "0":
					figur = Spielfigur(spieler_weiss[y][x], (x*50, y*50), self.canvas, 'oben')
					self.spielfiguren.append(figur)

		spieler_schwarz = [
		['B' for x in range(8)],
		['T', 'P', 'L', 'D', 'K', 'L', 'P', 'T']
		]
		
		for x in range(8):
			for ty in range(2):
				y = ty + 6
				if spieler_schwarz[ty][x] != "0":
					figur = Spielfigur(spieler_schwarz[ty][x], (x*50, y*50), self.canvas, 'unten')
					self.spielfiguren.append(figur)

	def KillFigureOnPosition(self, position):
		for figur in range(32):
			if self.spielfiguren[figur].GetPosition() == position:
				print figur
				self.spielfiguren[figur].Kill()

	def click(self, event):
		for figur in range(32):
			if self.spielfiguren[figur].IsDead() == False:
				pos = self.spielfiguren[figur].GetPosition()
				if event.x > pos[0] and event.x < pos[0]+50 and event.y > pos[1] and event.y < pos[1]+50:
					self.clicked_figur = figur
					self.previous_pos = pos
					self.abstand_x = event.x % 50
					self.abstand_y = event.y % 50
	
	def move(self, event):
		if self.clicked_figur != False:
			#print self.clicked_figur
			self.spielfiguren[self.clicked_figur].SetPosition((event.x-self.abstand_x, event.y-self.abstand_y))

	def release(self, event):
		if self.clicked_figur != False:
			pos = self.spielfiguren[self.clicked_figur].GetPosition()
			pos = (pos[0]+25, pos[1]+25)
			new_pos = (pos[0]- ((pos[0])%50), pos[1] - ((pos[1])%50))
			print new_pos
			if self.spielfiguren[self.clicked_figur].AllowedMove(self.previous_pos, new_pos) and self.previous_pos != new_pos:
				self.KillFigureOnPosition(new_pos)
				self.spielfiguren[self.clicked_figur].SetPosition(new_pos)
			else:
				self.spielfiguren[self.clicked_figur].SetPosition(self.previous_pos)
			self.clicked_figur = False


app = Application()
root.mainloop()

Soweit war ich gekommen, vlt intressierts ja einen.

Wenn jemand Lust hat daran weiter zu arbeiten mit mir, soll sich melden?! ;)
Antworten