verdammt, ich kapier es einfach nicht

Fragen zu Tkinter.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Numerix Ansatz kann man mit Booleans noch etwas erweitern:

Code: Alles auswählen

>>> (not True)*0.5
0.0
>>> (not False)*0.5
0.5
>>> 
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Mit den Sequenzen kann ich die benoetigten Parameter
schon vor der zeitkritischen Hauptschleife berechnen.

Ich denke, sowas wie

Code: Alles auswählen

half_yoffset = yoffset / 2.0
....
for...
    ypos = yorg + [0, half_yoffset][togglebit]
sollte etwas schneller sein als

Code: Alles auswählen

for...
    ypos = yorg + togglebit * 0.5 * yoffset
Ausserdem finde ich es sogar praktischer und uebersichtlicher.

Aber ich weiss, Python ist nicht der Ort, wo man
um Prozessortakte feilscht.
;-)
LG yipyip
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo Midneid

Code: Alles auswählen

master.state('zoomed')# maximiert automatisch das Fenster aus Vollbild
Mit dem habe ich die gleichen Probleme wie 'numerix'. Mein OS hier ist SuSE 10.0 Linux.
Du verwendest vermutlich Windows?

Ich hole mir die Schirmabmessungen mit den Methoden:

Code: Alles auswählen

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

Hach Leute...
ich wollte hier doch keine Lawine lostreten...
:D
Erstmal vielen Dank fuer die tolle Begruessung!
Ihr macht einen ja ganz verlegen...
;-)

Zuerst muss ich jedoch was klarstellen:
Bin weder ein Code-Guru noch Sonstwie-Experte,
Leuten wie 'BlackJack' oder vielen anderen kann
ich garantiert nicht das Wasser reichen.
(Programmiere in Python erst seit
knapp einem 3/4 Jahr)
Ich bilde mir jedoch ein, ein gewisses
Grundverstaendnis fuers Programmieren
zu besitzen.

Da mich das Thema reizte und ich befuerchtete,
dass derkai noch weiter ins Schwimmen geraet,
wollte ich das Ganze etwas
in die 'richtigere' Richtung lenken.

Mit den '600 Zeilen' wollte ich eigentlich ausdruecken,
dass derkai sich mehr mit den Grundlagen
auseinandersetzen sollte, etwa im Stil von
http://www.htdp.org/2003-09-26/Book/
(Nein, ich habs auch noch nicht gemacht :wink: )
Sowas wie Tkinter sollte erst viel spaeter folgen.

Womit wir beim naechsten Thema waeren:
Ich mag Tkinter bzw. das TK! :-)
(...auch wenns unsexy ist...
...und Totgesagte leben meistens laenger...)

'It fits my brain' , weil es nicht der C++ Denkweise
in WxPython entspricht (hab letzteres aber nur kurz angelesen).

Das 'zoomed' funktioniert bei mir uebrigens auch nicht.
(Ubuntu 8.04, Python 2.5.2)

So, das waers fuers erste.
(Nein, ich hab hier wirklich keinen anderen Account...)
:wink:

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

tja, also irgendwie fehlt mir wieder einmal der entscheidende Hinweis ?

ich möchte ein Dictionary erzeugen :
feld_liste {}

dieses soll dann foglende Werte bei jedem Schleifendurchlauf erhalten
(UND DAS ERST EINMAL WIEDER VÖLLIG SIMPEL UND MIT ZU VIEL CODE)

INDEX :
- Index soll bsp so aussehen : (Zeile/Reihe) 01 + (Feld Nr.) 14 = INDEX
0114 (das soll dann eben logischer Weise das 14 te Feld der Reihe 1
bedeuten)
WERTE :
- x1,y1 ... x6,y6
- Farbe
- spätere Eigenschaften, die die Felder der unterschiedlichen Farbe
erhalten werden

meine Schleife sieht ja bekanntlich so aus :

Code: Alles auswählen

    for feld in range(1,3):

        if spalten_nummer == UNGERADE :

            for f in range(ungerade_spalten):
                create_hex_polygon(spiel,xpos,ypos,hex_point_list,farbe)
                xpos = xpos + (xoffset *2)
            spalten_nummer = GERADE
            xpos = xorg + xoffset
            ypos = ypos + yoffset / 2

        else :
            
            for f in range(gerade_spalten):
                create_hex_polygon(spiel,xpos,ypos,hex_point_list,farbe)
                xpos = xpos + (xoffset *2)
            spalten_nummer = UNGERADE
            xpos = xorg
            ypos = ypos + yoffset / 2         
Jetzt ist aber das Problem, dass sich die XY Werte ja in der Funktion
create_hex-polygon befinden und "nur" als Rückgabewerte zur Verfügung
stehen. Es ist doch aber richtig, dass eine Funktion nur EINEN Rückgabeaufrug haben kann, oder ?

mit feld_liste [f] = hex_ponit

könnte ich beispielsweise das Dictionary füllen.

Wie sage ich nun aber, dass der INDEX/KEY "F" eine Kombination
der Zählervariablen der Schleifen "feld" + "f" ist ?

Mal nebenbei gefragt, welche Auskünfte erhalte ich eigentlich über
die jeweilige ID ? Hilft mir die hier vielleicht weiter ?

Mit für Eure Geduld dankenden Grüßen

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

Hallo derkai

Ich hätte vorab einige Fragen zu deinem Spiel:

a) Ist das Spiel, dass du entwickelst eine eigene Erfindung oder ist es ein Spiel das in der Öffentlichkeit bekannt ist und gespielt wird? Hat es einen Namen?

b) Hast du, oder gibt es eine Spielanleitung hierfür? Mir ist das Spiel noch nicht bekannt.

c) Wie werden die einzelnen Sechsecke auf dem Spielfeld selektiert? Werden sie mit einem Mausklick, mittels Tastatur oder über das Programm direkt selektiert? Was passiert mit den selektierten Sechsecken während des Spielablaufes? Werden sie mit der Maus, Tastatur oder durch das Programm verschoben?

Gruss wuf :wink:
Take it easy Mates!
BlackJack

Soweit ich das verstanden habe geht es um eine Art BattleTech, also ein Brettspiel, wo man Kampfroboter, Panzer und ähnliches auf einer Karte mit hexagonalen Feldern bewegt. Implementierung in Java: http://megamek.sourceforge.net/idx.php?pg=main

Und ich muss *wieder* sagen: Das Projekt wird hier IMHO am falschen Ende begonnen. Die GUI sollte als letztes oben aufgesetzt werden und Objektorientierung ist Grundvoraussetzung um das ordentlich umsetzen zu können. Man braucht eine ordentliche Datenstruktur um die Karte programmintern, ohne Grafik, repräsentieren zu können und die für's Spiel notwendigen Abfragen und Manipulationen vornehmen zu können. Also zu Beispiel Koordinaten über die man die einzelnen Felder ansprechen kann, und die Möglichkeit Nachbarfelder zu ermitteln.
derkai
User
Beiträge: 169
Registriert: Montag 12. Mai 2008, 11:43

es ist bzw. soll eine Abwandlung des uralten Brettspiels Battle Tech werden. Allerdings und der Einfachheit halber nicht mit Robotern, sondern mit Panzern.

Diese werden erst einmal nach dem Gewicht in Tonnen unterschieden.
Je nach eingebautem Reaktor resultiert daraus eine mögliche Bewegungsrate. Will heissen, es wird unterschieden ob die Panzer
sich bsp 3 Felder (langsam), oder 5 Felder (schnell) bewegen können.

Je nach Anzahl der zurüchgelegten Feldern entscheidet sich dann, welche zusätzliche Vorgabe für den Gegner aus der eigenen Bewegung resultiert.
Vorgabe beduetet, welche Zahl der Gegner würfeln muss, um mit einer abgefeuerten Waffe einen Treffer zu erzielen. Jede Waffe, und darin unterscheiden sich die Panzer dann im weiteren, kann eine kurze, mittlere und lange Reichweite schiessen. Dies wird in der Anzahl der Felder zum Gegner gemessen und ist wiederum je Waffenart und Waffe unterschiedlich.
Es gibt Laser, Raketen usw....

Durch meine eigene Bewegung und das abfeuern der Waffen wird im Panzer Hitze / Wärme aufgebaut. Diese werden durch s.g. Wärmetauscher intern auch wieder abgebaut. Allerdings reicht die Anzahl der Wärmetauscher meist nicht aus, um die Bewegung und das Abfeuern aller Waffen wieder abzubauen. D.h. ich muss mich entscheiden, was ich tun möchte. Übersteigt die Hitze definierte Werte, so ergeben sich wieder Konsequenzen bsp auf die eignene Bewegung der nächsten Spielrunde, oder es die Möglichkeit mit einer Waffe zu treffen erschwert sich.

Bei den Teffern verhält es sich so, dass zuerst die äußere Panzerung, die man am besten mit der Anzahl bestimmter Panzerwerte :
vorne, links, rechts, hinten und dem Turm
beschrieben könnte.
Sind diese Panzerwerte aussen verbraucht, existieren noch weitere
Panzerwerte intern. Im Unterschied zur äußeren Panzerung verbergen sich hier aber auch die :
- Waffen
- Reaktoren
- und weitere Dinge, die ein Panzer zum "leben" braucht.
Wird also die Interne Panzerung getroffen, so muss dann zusätzlich geprüft werden, ob internen Schaden angerichtet wurde, oder nicht.
Wenn ja, also wenn bsp die Wafffer : Laser getroffen wurde, so steht diese bei der nächsten Spielrunde eben einfach nicht mehr zur Verfügung. komlizierter wird es bei bei einem Treffer des Reaktors. Den ersten steckt man noch gut weg, es ergeben sich aber Auswirkungen auf diee mögliche Bewegung.

Das Spiel findet in Zyklen statt.

1. Bewegungsphase
d.h. jeder Spieler, jeder Panzer wird auf dem Spielbrett gemäß
seinen Möglichkeiten bewegt.
2. Waffenphase
1. der Computer muss aus verschiedenen Faktoren berechnern, welche
Zahl zu erwürfeln ist um den Gegner zu treffen. Dies ist wie oben
beschrieben je Waffe unterschiedlich
2. Der Spieler muss entscheiden, welche Waffen er einsetzen möchte
3. es wird je Waffe gewürfelt, ob diese trifft.
4. wenn beispielsweise eine Waffe, wie eine Raketenlaffette trifft,
muss zusätzlich ermittelt werden, wie viele der abgefeuerten Raketen
treffen
3. Schadensphase
5. Die Treffer beim Gegner werden verarbeitet
6. Es müssen die Konseauenzen der Treffer ermittlet werden

es beginnt eine neue Spielrunde. Ich weiss, dass die für Erwachsene ziemlich lächerlich klingt, aber es soll nun einmal mein Projekt werden.
Anspruchsvoll genug sollte es sein.

Die Panzer auf dem Feld werde nicht durch die Maus bewegt. Es wird bestimmte button auf einem Canvas geben, genau genommen drei.
Eins, für eine Linksdrehung (kostet einen Bewegungsprunkt) eins für nach recht und ein dritter Button für die Bewegung ins nächte Feld. Bei jeder Bewegung läuft einer Zähler mit und ermittelt somit automatisch die maxmal mögliche Bewegung, aber auch die Anzahl der zurückgelegten Felder...

So, ich hör jetzt erst einmal auf ...

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

ach so, eine Kleinigkeit viellicht noch :

Für die Bewegung sind die Farben der Felder gedacht. Bewege ich mich
ausschliesslich auf "normalem" Boden, so gilt für die Bewegung, dass jede Drehung, oder das Betreten eines neuen Feldes einen Bewegungspunkt kostet.

Bewege ich mich aber von "normalem" Terrain in den Wald (grün), so
kostet die Bewegung IN DAS Feld einen zusätzlichen Bewegungspunkt.

Nur damit klar wird, warum auch die Farbe eines Feldes später auslesbar
sein muss.

@ BlackJack
Du wirst sich Recht haben mit Deiner Behauptung, dass dies auf einen Programmierprofi sehr wirr aussehen mag. Mit Sicherheit werde ich auch nach einer Weile diverse Fehler finden und neu beginnen müssen. Aber wie soll ich etwas lernen, wenn ich den Fehler nicht machen darf ??? Es geht mir eben nicht darum hier nur einfach Code zu übernehmen, sondern ihn auch zu verstehen. Zu diesem Zweck lese ich alles in diversen Büchern zu Python nach. Allerdings ist Bücher lesen eben doch nur Theorie. Deswegen möchte ich ja an Hand dieses meinen Projektes lernen. Mag sein, dass ich mich damit übernommen habe. Wahrscheinlich sogar. Aber für den Moment möchte ich daran weiter arbeiten und freue mich riesig über die vielen Meinungen, Anregungen und Tips aus diesem Thread

Nix für Ungut

Kai
imac
20 Zoll
2,4 ghz
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Probier doch einfach mal, dich nicht von der GUI-Seite zu nähern und schau wie weit du kommst. Lernen bedeutet ja nicht unbedingt, alle Fehler selber mal zu machen, sonder auch Fehler andere mit einzubeziehen ;-) Das der Weg über die Logik hin zur GUI besser ist wirst du dann ebenso feststellen.

Du könntest vielleicht noch mal deinen letzten Post anschauen: da hebst du zum Beispiel als wichtig hervor, dass du die Farbe eines Feldes auslesen können musst um auf einen Wald schließen zu können. Das ist schon sehr typische GUI-Sicht. Wär es nicht sinnvoller, Felder als das zu speichern was sie sind? Zum Beispiel "Wald". Dann hat "Wald" eine Farbe und bestimmt diese in der GUI.
derkai
User
Beiträge: 169
Registriert: Montag 12. Mai 2008, 11:43

ok, ich habe in etwa den Inhalt des Projektes beschrieben. Wie das Spiel aussehen soll und was für "Dinge es können muss"

Das einzige, was ich bisher verstanden habe ist, dass ich mich von der LOGIK Seite her nähern soll. Aber was meint denn ihr damit ?

Soll ich eine Klasse für Bewegung, Wafen usw... schreiben ?
Soll ich Funktionen schreiben, die Berechnungen vornhemen können ?
Soll ich einen String, Dictionary oder Liste mit den Daten und Attributen
der Panzer erstellen ?

Mein Gerüst steht ja bereits, aber wo fängt denn die Logik an. Oder besser gesagt womit ?

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

die GUI sollte ja eigentlich nur ein Werkzeug sein, womit ich ein Spielfeld erstelle, daraus ein Dictionary bilde welches die Daten des Spielfeldes sammelt um sie dann später nutzen zu können.

Was würdet IHR zuerst tun ?
Jetzt sagt bitte nicht einen Plan machen. Ich weiss ja, was ich wann brauche und erstellen muss.

Aber womit denn nun KONKRET beginnen ?

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

Hallo derkai

Besten Dank für deinen umfänglichen Spielbeschrieb. Ich wusste nicht, dass dein Spiel diese Komplexität annehmen wird. Hier verstehe ich auch langsam die vielen Warnungen anderer Forum-Mitglieder. Ich finde auch bei einer solchen Dimension muss doch einiges an Brain-Work für die Plannung einer Datenstruktur investiert werden. Ich kann mir gut vorstellen, dass bei erreichen einer bestimmten Komplexität ohne seriöse Koordination die ganze Übung leider kollabieren wird. Aber ich möchte dich auf keinen Fall von deinem Vorhaben abhalten. Du muss dir einfach im klaren sein, dass du eines Tages eventuell das ganze Projekt fallen lassen wirst.

Die Forummitglieder hier sind sicher gewillt dir bei aufkommenden Problemen zu helfen solange diese noch überblickbar sind und du noch fähig bist uns diese in einer vernüftigen Anzahl von Worten erklären kannst (Worte in Form von Text). Bei mir ist es so, dass ich dir nur punktuell helfen könnte, solange ich noch den Überblick habe. Wobei ich die ganze Übung absolut nicht als sinnlose Zeitverschwendung bezeichnen möchte. Ich muss ehrlich sagen, so viel wie aus diesem Forum-Thema habe ich noch nie profitieren können. Da kommt eine unglaublich Menge an Wissen zusammen, welches ein einzelner nie im stande währe nur aus Büchern, Dokumentationen, Tutorials usw. in so kurzer Zeit zu erfahren. Eine sehr effiziente Art sich Weiterzubilden. Das sieht man auch an Hand der grossen Anzahl Forum-Aufrufe bei diesem Thema. Es ist scheinbar ein grosses Interesse bei vielen Forummitgliedern vorhanden an solche Themen teilzuhaben und mitzuwirken.

Frage an die Administratoren und Moderatoren wie sieht es Forum-Serverseitig aus, wenn gewisse Themen solche Dimensionen annehmen. Was passiert, wenn ein Thema auf mehrere tausend Beiträge anwächst. Gib es irgend wann eine Grenze wo ihr Alarm schlägt und eine Serverseitige Reduktion der Datenmenge vornehmen müsst damit es nicht zu einem Datenbanküberlauf kommt?

Danke an @BlackJack und alle die hier teilnehmen!

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

gibt es denn so eine Art "roten Faden" bei der Planung ?
Ein Programm, oder eine Datei ? Eine bestimmte Form ?

In meinen Büchern gibt es tolle und wilde Bildchen,
auch Abschnitte zur Planung. Da steht aber eben leider
auch nuct drin, das man planen soll, aber nicht WIE ?

Welche Arten von Objekten es gibt, wie man auf sie zugreifen bzw
verändern kan usw ist Wissen, welches ich mir aus den Büchern
erwerben kann.
Wofür man welche aber am besten nimmt ist nicht richtig eindeutig und
ich glaube auch erst in der Praxis zu erfahren.

Wie sollte ich also bei der Planung am besten vorgehen ?
Wie und in welcher Form die einzelnen Abschnitte beschreiben ?


________________

Ich beginne auch gerne jetzt schon wieder von vorne, weiss
halt nur nicht richtig, wie ?

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

Hallo derkai

Frage. Ist dein Hardware-Setup wie folgt:

Mac & Mac-OS
20 Zoll
2,4 ghz

Gruss wuf :wink:
Take it easy Mates!
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!
Antworten