verdammt, ich kapier es einfach nicht

Fragen zu Tkinter.
derkai
User
Beiträge: 169
Registriert: Montag 12. Mai 2008, 11:43

ja, ich habe osx 10.5.3
und 3 GB Ram

2.4 ghz intel core 2 duo

Kai
imac
20 Zoll
2,4 ghz
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

OK derkai

Weitere Fragen:

Was für eine Umgebung verwendest du für die Erstellung der Skripts und von wo startest du das Skript?

Bei mir ist es wie folgt:

Hardware: Toshiba-Notebook Satellite (Intel-Celeron, 1GB-Ram, 80GB-HD,1280x800-Screen-Size)
OS Linux SuSE 10.0
Skript-Erstellung auf KWrite
Start aus aus dem BASH-Terminal

Was würdest du deinem Spiel für einen Namen geben? (Ohne Urheberrechte zu verletzen) :lol:

Kann die Waben-Struktur (Fläche,Pixels) des Spiels in den Dimensionen grösser werden als die Abmessungen des Bildschirms?

Gruss wuf :wink:
Take it easy Mates!
BlackJack

@derkai: Was die Planung angeht, würde ich zum Beispiel empfehlen Dir Gedanken über "Milestones" zu machen. Also Zwischenziele zu formulieren. Beispielsweise "Milestone 1: Die Logik einer Karte mit hexagonalen Feldern und ein Fahrzeug, dass man darauf bewegen kann.", "Milestone 2: Eine GUI dazu draufsetzen", "Milestone 3: Verschiedene Feldarten und Bewegungspunkte/Wärmeauf- und abbau.", und so weiter. Also immer klar definierte Etappen, an deren Ende etwas greifbares steht. Wenn man zwischendurch nicht immer etwas hat, was funktioniert, verliert man bei einem solch grossen Projekt schnell die Motivation. Etwa wenn man versucht alles auf einmal um zu setzen und nach viel Arbeit dann hunderte kleine Fehler und Problemchen zwischen dem aktuellen Stand und dem Ziel stehen.

Ansonsten gehört zu Planung noch, dass man sich Gedanken über die Objekte und deren Zusammenhänge macht, die man für die Umsetzung braucht. Da kann man sich zum Beispiel eine Beschreibung als Text hernehmen und die Hauptwörter/Objekte als Kandidaten für Klassen hernehmen und die Verben als Kandidaten für Funktionen und Methoden. Das sollte man nicht einfach so 1:1 in Quelltext umsetzen, aber man hat schon mal einen Anhaltspunkt.

Bei einem Projekt dieser Grösse sollte man auch unbedingt eine Versionsverwaltung einsetzen. SVN, mercurial oder ähnliches.

Last but notleast würde ich an Deiner Stelle das grosse Projekt aussetzen und erst einmal irgend ein einfacheres Brettspiel mit quadratischen Spielfeldern umsetzen, um Erfahrungen zu sammeln. Und zwar dort auch mit der Logik beginnen und schon im Vorfeld planen da zwei oder drei verschiedene GUIs drauf zu setzen. Zum Beispiel Text, Tkinter und Webinterface oder Pygame.
derkai
User
Beiträge: 169
Registriert: Montag 12. Mai 2008, 11:43

Hardware :
imac, intel core duo OSX Leopard2,4 ghz, 3gb ram, 1680 x 1050, 650 MB HD
Betriebssystem :
OSX 10.5.3
Skript Erstellung unter Python Idle
Start aus ??? (Wie meinst Du denn das ? ich öffne die Datei in der Idle)
von mir aus nennen wir den Ordner / Panzer

Tja das mit dem Namen weiss ich auch nicht so genau ?
Wie kann ich denn herausfinden, ob ich bsp mit "Panzer Kommandant"
ein Urheberrecht verletzen würde oder nicht ?

Ich gehe aber von einer normalen Bildschirmauflösung von 1024 x 768 aus.
Das Spielbrett später wird kleiner werden müssen, da ich ja noch verschiedene andere Widgets unterbringen werden muss.
Es müssen dann auch Scrollblaken rein, da die Spielfläche etwa 40 x 40 Felder beinhalten werden muss.

@black jack

ich werde das Spiel dann erst einmal vernünftig und schriftlich planen.

Kai
imac
20 Zoll
2,4 ghz
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo derkai

Wenn du Idle benützt ist das mit dem Start schon klar.

Name z.B.: 'Kai's Battle Game 1.1.1' ist noch nicht geschützt. :lol:

OK. Viel Spass beim planen.

Gruss wuf :wink:
Take it easy Mates!
derkai
User
Beiträge: 169
Registriert: Montag 12. Mai 2008, 11:43

Ja, das klingt dich gut.
Ich werde für die "Niederschrift" ein wenig brauchen.

Kai
imac
20 Zoll
2,4 ghz
derkai
User
Beiträge: 169
Registriert: Montag 12. Mai 2008, 11:43

sooo, fertig. Wie kann ich denn hier ein Word Dokument reinhängen ???

Kai
[/quote]
imac
20 Zoll
2,4 ghz
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

derkai hat geschrieben:sooo, fertig. Wie kann ich denn hier ein Word Dokument reinhängen ???
Du musst es irgendwo hochladen. Aber Word-Dokumente will eigentlich keiner sehen, paste doch den Text ins Pastebin.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Ein gutes Format ist reStructuredText. Das kann man auch viel besser mit einer Versionsverwaltung verwenden, als Binärformate wie Word-Dokumente.
derkai
User
Beiträge: 169
Registriert: Montag 12. Mai 2008, 11:43

Was ist denn ein "Pastebin" ?
und wie geht das ?

Kai
imac
20 Zoll
2,4 ghz
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

derkai hat geschrieben:Was ist denn ein "Pastebin" ?
Das ist ein Pastebin.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
derkai
User
Beiträge: 169
Registriert: Montag 12. Mai 2008, 11:43

ah, ok !
aber das geht nicht, da fehlen dann meine Grafiken und Tabellen

Kai
imac
20 Zoll
2,4 ghz
derkai
User
Beiträge: 169
Registriert: Montag 12. Mai 2008, 11:43

könnte hier vielleicht doch jemand Unterstützung leisten ?
... mit dem hochladen meine ich

Kai
imac
20 Zoll
2,4 ghz
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo derkai

Hier eine Möglichkeit deine komplexen Dateien allen Forummitgliedern zugänglich zu machen:

http://home.services.spaces.live.com/

Hier ein Beispiel. Ich möchte dir ein Datenblatt eines Microcontrollers zeigen. Die Ordner-Bezeichnung bezieht sich nicht auf Python-Inhalt.Hi:

http://cid-c8d0cae764f09eef.skydrive.li ... py_project

Gruss wuf :wink:
Take it easy Mates!
derkai
User
Beiträge: 169
Registriert: Montag 12. Mai 2008, 11:43

so, wenn jemand langweilig ist, dann kan er ja
ja unter :

http://www.kek-zengo.de/ul/KaisBattleGame.pdf

sich die Planung anschauen.

Ich hatte mir dabei folgendes überlegt.
Es wäre ja schön, wenn sich jeder seinen Panzer so zusammen
bauen könnte, wie er es für richtig hält.
Natürlich unter Berücksichtigung bestimmter und vorgegebener
Rahmenbedinungen.

Wäre es dann nicht eine gute Übung ein Programm zu schreiben,
dass diese Funktionalität erfüllt ? und die Daten der Panzer dann
so zur Verfügung stellt, dass man sie später im Spiel wieder einlesen
kann ?

Kai
imac
20 Zoll
2,4 ghz
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo derkai

Wie gesagt ich kenne das Spiel nicht. Meine Frage:

Was ist das Drehinkrement des Panzers? Ich nehme an in Schritten von 60 Grad. Gilt dieses Inkremment auch für die Schussrichtung? Du hast etwas von Bogenschüssen erwähnt. So wie ich das verstanden habe, können Bogenschüsse in einer x-beliebigen Richtung abgefeuert werden.

Hier eine Zeichnug:

http://cid-c8d0cae764f09eef.skydrive.li ... attle_game

Gruss wuf :wink:
Take it easy Mates!
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Hallo derkai,
dachte eigentlich, dass Du verstanden haettest,
dass wir alles andere brauchen als einen noch
umfangreicheren Anforderungskatalog.
(...hatte etwas mehr 'Pythonisches' erwartet...)

Vergiss doch bitte (fast) alles bisherige, und fange
ganz, ganz klein an.

Zuerst einmal auf der Kommandozeile:

Wir brauchen ein 2d Spielfeld,
also sowas:

Code: Alles auswählen

..........
..........
..........
..........
..........
Darauf setzen wir 2 Panzer 'X' und 'O':

Code: Alles auswählen

..........
...X......
..........
.....O....
..........
Diese Panzer wollen wir bewegen.
Nuetzlich waere da ein Mini-Befehlsinterpreter:

Code: Alles auswählen

..........
...X......
..........
.....O....
..........

Enter Command-> O down
Ergebnis:

Code: Alles auswählen

..........
...X......
..........
..........
.....O....

Enter Command->
Die wichtigen Bausteine dazu sind:
1 Klasse Terrain (Logisches Spielfeld)
1 Klasse Ascii-Display fuer die Darstellung
1 Klasse Panzer
1 Klasse Controller (fuer das Befehlsmanagement)

Das sind die ersten (beispielhaften) Schritte, mit denen ich anfangen wuerde.

LG yipyip
derkai
User
Beiträge: 169
Registriert: Montag 12. Mai 2008, 11:43

@ wuf
also die Bewegungsmöglichkeiten sind in 60 Grad schritten. KORREKT.
Die Panzer können aber nur in die Richtung 60 / 300 Grad schiessen.
Also kegelförmig in der Richtung, in deren Front er "schaut". Dies betrifft alle Waffen, die sich im Panzer befinden. Zusätzlich kann man den Turm des Panzers aber noch bewegen. (um 360 Grad) Somit kann man natürlich auch nur die Waffen damit nutzen, die auch im Turm verbaut sind.

@yipyip
ich dachte es wäre für alle hilfreich erst einmal (fast) alle Rahmenbedingungen zu kennen. BLACKJACK sagt ja, wir müssen uns zu aller erst einmal Gedanken über den Aufbau der Logik machen. Dazu sollte man vorab wissen, welche Anorderungen an den Code und deren Interaktion gestellt werden.
Mein Problem liegt ja genau darin, dass ich nicht weiss, wie man das am besten angeht. Daher diese umfangreiche "BERICHT".


@alle
Meine Gedanken gingen dann dahin gehend weiter, dass es wahrscheinlich OOP am besten wäre. Guckst du hier :

Code: Alles auswählen

from math import sqrt


class Hexfeld(object):
	""" 
		Diese Klasse beschreibt ein Hexfeld, dass auf dem Spielbrett dargestellt 
		werden kann.	
	"""

	length = 20
	
	# Array mit den Randpunkten des Hexfeldes beginnend mit
	# dem Punkt (x0,y0) in der linken oberen Eche.
	pts =   [0,0,length,0,length*3.0/2.0, length*sqrt(3)/2.0,length,
                 length*sqrt(3),0,length*sqrt(3),-length/2.0,length*sqrt(3)/2.0]
	
	def __init__(self,  spielbrett,  xpos,  ypos, zeile, feldnr, color="green"):
		""" Konstrukor der Klasse Hexfeld """
		
		self.spielbrett = spielbrett
		self.xpos = xpos	           #: X-Koordinate links oben
		self.ypos = ypos 		   #: Y-Koordinate links oben
		self.zeile = zeile
		self.feldnr = feldnr
		self.color =  color                #: Farbe des Feldes bzw. die ID
		self.printInfo()
		
		self.__pts = [] + self.pts
		for k in range(0, len(self.__pts), 2):
			self.__pts[k]   += self.xpos
			self.__pts[k+1] += self.ypos		

	def draw(self):
		""" Methode zum Zeichnen des aktuellen Hexfeldes """
		self.spielbrett.create_polygon(self.__pts,  outline="black",fill=self.color)


	def printInfo(self):
		""" Methode zum anzeiden der Attribute dieses Hexfeldes """
		print "xpos     : ",  self.xpos
		print "ypos     : ",  self.ypos
		print "Farbe    : ",  self.color
		print "Zeile    : ",  self.zeile
		print "FeldNr.  : ",  self.feldnr
		

Zuletzt geändert von derkai am Freitag 18. Juli 2008, 20:08, insgesamt 2-mal geändert.
imac
20 Zoll
2,4 ghz
derkai
User
Beiträge: 169
Registriert: Montag 12. Mai 2008, 11:43

Code: Alles auswählen

import Tkinter as tk
from Hexfeld import Hexfeld
from random import choice
from math import sqrt

class Spielbrett(tk.Canvas):
	""" Klasse, die das Spielbrett darstellt. Wir erben von Canvas,
	    um bequem zeichnen zu koennen. """

	def __init__(self,  window):
		""" Konstruktor """
		tk.Canvas.__init__(self, window, width=1024, height=768)
		self.pack()
		self.hexList = []
		self.initHexfelder()
		
	def drawHexfield(self):
		""" Methode zum Zeichnen der Hexfelder """
		for h in self.hexList:
			h.draw()
		
	def initHexfelder(self):
		""" Methode zum initialisieren der Hexfelder (Aufbau wie vorher !) """
		ungerade_spalten = 2                                       
		gerade_spalten = 1                                         
		spielfeld = 2
		farbe = ("green","green","green","green","green","green",
					  "brown","green","blue","green")
		#Vorbelegung der Spalten/Zeilen
		xpos = xorg = 20                                            
		ypos = yorg = 10                                            
		xoffset = Hexfeld.length*1.5
		yoffset = sqrt(3)*Hexfeld.length;
		#Platziere den zweidimensionalen Sechseck-Array
		for i in range(spielfeld):
			if i%2 == 0:
				for x in range(ungerade_spalten):
					self.hexList.append(Hexfeld(self,xpos,ypos,i+1,x+1,choice(farbe)))
					xpos = xpos + (xoffset * 2)
				xpos = xorg + xoffset
				ypos = ypos + yoffset / 2
			else :
				for x in range(gerade_spalten):
					self.hexList.append(Hexfeld(self,xpos,ypos,i+1,x+1,choice(farbe)))
					xpos = xpos + (xoffset *2)
				xpos = xorg
				ypos = ypos + yoffset / 2         
imac
20 Zoll
2,4 ghz
derkai
User
Beiträge: 169
Registriert: Montag 12. Mai 2008, 11:43

Code: Alles auswählen

import Tkinter as tk
from Spielbrett import Spielbrett

def main():
	print("Test des Hexfeldes")
	window = tk.Tk()
	
	# Instanz des Spielbrettes erzeugen
	s = Spielbrett(window)
	# ... und die Hexfelder zeichnen
	s.drawHexfield()
	window.mainloop()

	


if __name__ == "__main__":
	main()
	
imac
20 Zoll
2,4 ghz
Antworten