Simples Schach Game to dive into Python

Fragen zu Tkinter.
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

Beitragvon pyStyler » Mittwoch 31. Januar 2007, 18:23

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

Beitragvon sape » Mittwoch 31. Januar 2007, 18:55

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

Beitragvon skypa » Donnerstag 1. Februar 2007, 10:49

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])

Beitragvon mawe » Donnerstag 1. Februar 2007, 11:34

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

Beitragvon skypa » Donnerstag 1. Februar 2007, 12: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:
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 1. Februar 2007, 18:10

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 Modvoice
skypa
User
Beiträge: 97
Registriert: Freitag 5. Januar 2007, 03:13

Beitragvon skypa » Donnerstag 1. Februar 2007, 19:34

@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

Beitragvon sape » Donnerstag 1. Februar 2007, 20:34

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==
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 1. Februar 2007, 21:25

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 Modvoice
skypa
User
Beiträge: 97
Registriert: Freitag 5. Januar 2007, 03:13

Beitragvon skypa » Mittwoch 26. September 2007, 12:41

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?! ;)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder