Seite 1 von 2

MASTERMIND in PYTHON wx das wärs doch

Verfasst: Sonntag 6. April 2008, 17:38
von sea-live
Servus Leute

Mastermind gibt es in Java so um die 50verschiedene
geht sowas auch in Python

für pygame gibts hier was
http://paste.pocoo.org/show/39314/
BUGFIX!!!!!!10.4.08

screeenshot
Bild

VIEL SPASS !

Re: MASTERMIND in PYTHON wx das wärs doch

Verfasst: Sonntag 6. April 2008, 17:45
von Leonidas
sea-live hat geschrieben:Mastermind gibt es in Java so um die 50verschiedene
geht sowas auch in Python
Natürlich, warum auch nicht. In der Wikipedia stehen ein paar Fakten dazu und es ist problemlos zu programmieren.

Verfasst: Sonntag 6. April 2008, 17:47
von audax
Nein, Python ist für dermaßen komplexe Projekte nicht geeignet, es sei denn, man integriert JavaScript und lässt Code durch XML und XSLT erstellen.




Natürlich gehts in Python..blöde Frage. Du willst dir PyGame anschaun.

Verfasst: Sonntag 6. April 2008, 18:32
von BlackJack
Zu dem Thema fällt mir spontan das hier ein: Matermind verkehrt. Da ist auch ein wenig Python-Code zu finden.

Verfasst: Montag 7. April 2008, 08:17
von sea-live
Danke erst mal für die tollen Tipps
ich werde mich mal dem Problem annehmen

mal sehn ob da was zu machen ist

Verfasst: Montag 7. April 2008, 13:17
von sea-live
so der erste teil steht es läuft auch schon so zu 10Prozent

kann man den code auch vereinfachen

Code: Alles auswählen

        if pos[0] > 25 and pos[0] < 60 and pos[1] > 150 and pos[1] < 190 :
                Pin(screen,farben[0])
        if pos[0] > 80 and pos[0] < 120 and pos[1] > 150 and pos[1] < 190 :
                Pin(screen,farben[1])
        if pos[0] > 25 and pos[0] < 60 and pos[1] > 200 and pos[1] < 240 :
                Pin(screen,farben[2])
        if pos[0] > 80 and pos[0] < 120 and pos[1] > 200 and pos[1] < 240 :
                Pin(screen,farben[3])

Verfasst: Montag 7. April 2008, 14:11
von EyDu
Ja, du kannst zunjächst die Bedingungen noch etwas umschreiben:

Code: Alles auswählen

pos[0] > 25 and pos[0] < 60
#zu
25 <pos[0] < 60
Außerdem kommen alle Bedingungen zweimal vor, also bestimmst du diese einfach einmal und packst sie in eine Variable:

Code: Alles auswählen

s1 = 25 < pos[0] < 60
s2 = 150 < pos[1] < 190
s3 = 80 < pos[0] < 120
s4 = 200 < pos[1] < 240

if s1 and s2:
    Pin(screen,farben[0])
if s3 and s2:
    Pin(screen,farben[1])
if s1 and s4:
    Pin(screen,farben[2])
if s3 and s4:
    Pin(screen,farben[3])
Eventuell kannst du noch ein wenig mit else und elif zusammenfassen, oder das ganze in eine Funktion "get_color_id" zusammenfassen und dann so aufrufen:

Code: Alles auswählen

Pin(screen, farben[get_color_id(pos)])
Du musst dann lediglich die default-Farbe mit berücksichtigen.

Verfasst: Montag 7. April 2008, 14:20
von BlackJack

Code: Alles auswählen

    koordinaten = [((25, 60), (150, 190)),
                   ((80, 120), (150, 190)),
                   ((25, 60), (200, 240)),
                   ((80, 120), (150, 190))]

    for farbe, ((x_low, x_high), (y_low, y_high)) in zip(farben, koordinaten):
        if x_low < x < x_high and y_low < y < y_low:
            Pin(screen, farbe)
            break

Verfasst: Montag 7. April 2008, 16:14
von sea-live
@BlackJack so läuft das nicht

ohne dein code gehts ! MIT EYDU auch!

code ausgelagert
http://paste.pocoo.org/show/38433/

Verfasst: Montag 7. April 2008, 16:57
von EyDu
sea-live hat geschrieben:@BlackJack so läuft das nicht
Naja, das letzte Unterelement der Letzten Koordinate sollte wohl (200, 240) heißen und nicht (150, 190).

@sea-live: Benutze doch bitte Konstanten und verstreu nicht irgendwelche Werte im Quellcode. Außerdem ist da eine Menge Code den man noch zusammenfassen kann.

Verfasst: Montag 7. April 2008, 17:25
von sea-live
EyDu hat geschrieben:
sea-live hat geschrieben:@BlackJack so läuft das nicht
Naja, das letzte Unterelement der Letzten Koordinate sollte wohl (200, 240) heißen und nicht (150, 190).

@sea-live: Benutze doch bitte Konstanten und verstreu nicht irgendwelche Werte im Quellcode. Außerdem ist da eine Menge Code den man noch zusammenfassen kann.
danke

http://paste.pocoo.org/show/38800/

hier mal ein screenshot
Bild

Verfasst: Montag 7. April 2008, 19:07
von sea-live
neues problem

meinewahl = [3,1,7,0]

wi kontroliere ich richtig ob im array eine 7 drin ist oder nicht
wenn keine 7 drin dann Auswerten()
ansonsten weiter

code ausgelagert

http://paste.pocoo.org/show/38433/

Verfasst: Montag 7. April 2008, 19:14
von audax

Code: Alles auswählen

if 7 in meine_liste: do_stuff()

Verfasst: Montag 7. April 2008, 19:46
von EyDu
Ich darf mir mal einige Kommentare erlauben:

Die ganzen herumfliegenden Zahlen hatte ich ja schon erwähnt. Spätestens in zwei Wochen wirst dur nicht mehr wissen, was diese bedeuten.

Ersetze die *-Importe. Bei dir hilft vielleicht schon ein "import ... as ..."

Konstanten werden nach PEP8 in Großbuchstaben geschrieben und gehören natürlich auch irgendwie dokumentiert/kommentiert.
Zum Einrücken verwende doch bitte pro Block 4 Leerzeichen und keine Tabs oder gar gemische Formen!
Vor und hinter ein Gleichheitszeichen gehören jeweils ein Leerzeichen.
Funktionsnamen werden übrigens mit einem Kleinbuchstaben begonnen: ich_bin_eine_funktion.
Außerdem vermischt du englische und deutsche Bezeichner.

Das Kommentar "globale variablen" ist total überflüssig.

Du arbeitest sehr viel mit copy&paste:

Code: Alles auswählen

pygame.draw.circle(screen, farben[0],(40,170), 20)
pygame.draw.circle(screen, farben[1],(100,170), 20)
pygame.draw.circle(screen, farben[2],(40,220), 20)
pygame.draw.circle(screen, farben[3],(100,220), 20)

#besser als

coords = [(40, 170), (100, 170), ...]
for farbe, coord in zip(farben, coords):
    pygame.draw.circle(screen, farbe, coord, 20)
Deine "Mach"-Funktion ist viel zu lang, da kann man sicher etwas auslagern. Vorallem alles nach dem Kommentar "reihe feststellen" ist viel zu kompliziert:

Code: Alles auswählen

cx = 150 < pos[0] < 250
if cx:
    coords = [(20, 45), (50, 75), ...]
    for index, (x, y) in coords:
        if x < pos[1] < y:
            akt_zeile = index+1
Die Funktion kannst du gleich auslagern und auch auf "spalte festellen" anwenden. Das ist quasi das selbe!

Statt "done = 0" und "done = 1" verwende besser "True" und "False": "done = True".

Verfasst: Montag 7. April 2008, 19:56
von Leonidas
sea-live hat geschrieben:neues problem
Dann erstellt doch einen neuen Thread. Dafür sind sie ja da. Wenn du Fragen an einen Thread hängt dann hilft das weder dir (weil niemand einen Thread liest in dem es laut Topic um Mastermind geht, wenn er nicht dran interessiert ist) noch jemandem anderen (weil in der Suchfunktion dann dieser Thread auftauscht und dort keiner die Antwort auf so eine Frage erwartet).

Superhirn - Mindstorm in Python

Verfasst: Dienstag 8. April 2008, 18:50
von sea-live
so ich hab mal ein ergebniss
hier zufinden
es läuft ist aber noch mit einem bug bei der farbeninfo
keinen schimmer warumm

!! Noch nicht !!!

http://paste.pocoo.org/show/39314

BUGFIX !!!

screenshot
Bild

Verfasst: Dienstag 8. April 2008, 22:27
von audax
Sagt dir....MVC irgendwas?

Verfasst: Mittwoch 9. April 2008, 08:12
von sea-live
audax hat geschrieben:Sagt dir....MVC irgendwas?
NEIN mal googlen

Verfasst: Mittwoch 9. April 2008, 08:52
von Masaru
audax hat geschrieben:Sagt dir....MVC irgendwas?
Klugscheisser ... wenigstens die Wikipedia-Referrenz zu MVC hättest du linken können.

Verfasst: Mittwoch 9. April 2008, 15:04
von sea-live
vorläufiges endergebniss

http://paste.pocoo.org/show/39314/
BUGFIX!!!

viel spass