Easygui kleines spiel

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
mhfu
User
Beiträge: 7
Registriert: Dienstag 20. September 2011, 17:34
Kontaktdaten:

Hi will ein kleines Spiel m it Easygui machen komm aber nicht weiter
1.Ich will , dass wenn die lp vom gegner 0 sind dass dann sieg steht
2.Der Gegner soll auch einen Spiel zug mit random bekommen
Danke schonmal im vorraus

Code: Alles auswählen

# -*- coding: iso-8859-1 -*-
import easygui, sys, random
from player import player as p
from gegner import gegner as g

expe = p.lv / 50
exp = p.exp + expe
lp = p.ruest+p.ver
lpg = g.ruestg+g.verg
atk = p.atk+p.waffe
atkg = g.atkg+g.waffeg
            
wahl = easygui.buttonbox("los beginn zu Kämpfen",
            choices=['Angriff', 'Verteidigen'])
            
if wahl == "Angriff":
    dif = atk - lpg
    easygui.msgbox("Punch", image="playera.gif")
    
elif wahl == "Verteidigen":
    lp + 5
    easygui.msgbox(lp, "leben + 5", image="plus.gif")

while 1:
    if lpg <=0:       
        easygui.msgbox("SIEG!!!", image="Sieg.gif")
        easygui.msgbox(expe , "Expertenpunte")
        if exp >= 100:
            easygui.msgbox("Du hast ein neues lv erreicht")
    else:
        wahl = easygui.buttonbox("weiter",
            choices=['Angriff', 'Verteidigen'])
        
    if wahl == "Angriff":
        lpg - atk
        easygui.msgbox("Punch", image="playera.gif")
    
    elif wahl == "Verteidigen":
        lp + 5
        easygui.msgbox(lp, "leben + 5", image="plus.gif")
Entschuldige mich im voraus für: Rechtschreibfehler, dumme Fragen, dumme Antworten

http://mhfu.cwsurf.de
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

@1: Sofern `lpg` die Lebenspunkte sind, sollte das doch auch jetzt schon eintreten! Hast Du denn genügend attackiert? Zur Kontrolle solltest Du Dir die Daten eben nach jeder Aktion anzeigen lassen.

@2: Hier kommen wir zu eher generelleren Problemen. Du vermischt GUI und Logik. Natürlich könnten wir Dir jetzt so lange helfen, bis Du das gewünschte hier reingequetscht hast, aber imho wäre es sinnvoller, erst die strukturellen Probleme anzugehen.

Was auffällt: Du hast separate Module für einen Spieler und einen Gegner? Wieso? Worin unterscheiden sie sich denn? Auf den ersten Blick, sieht es so aus, als hätten sie die gleichen Attribute. Insofern wäre es doch sinnvoll, auch die gleiche Datenstruktur zu verwenden. Je nach Kämpfer muss man da eben andere Werte hinein packen.

Wir haben ja keine Glaskugel und können daher nicht sehen, wie Du `player` und `gegner` in den Modulen implementiert hast, aber ideal ist hier imho ein OOP Ansatz. Entwerfe eine Basisklasse, die einen solchen Kämpfer repräsentiert. Ggf. leitest Du dann noch davon ab, sofern zusätzliche Funktionalität (z.B. für einen menschlichen Kämpfer) erforderlich ist.

Wenn Du von diesen dann Objekte anlegst, speichere die doch besser in einer Liste oder einem Dictionary. Das hier ist einfach nur furchtbar verworren:

Code: Alles auswählen

expe = p.lv / 50
exp = p.exp + expe
lp = p.ruest+p.ver
lpg = g.ruestg+g.verg
atk = p.atk+p.waffe
atkg = g.atkg+g.waffeg
Am einfachsten wäre es doch, sich in einer Struktur zu merken, welche Gegner(objekte) es gibt und wer gegen wen kämpfen soll. So kann man auch andere Kämpfe als 1vs1 durchführen, der letztlich ein Spezialfall ist.

Schließlich kommt man dann auch schnell auf Lösungen, wie man eine simple KI entwerfen kann: Man kann dem Kämpfer-Objekt eben einfach eine Art `Fight`-Objekt zuordnen, welches einfach in der Abfolge eines Kampfes aufgerufen wird. Bei einem Mensch erscheint dann eben ein wie auch immer geartetes Eingabeinterface, bei einem Computer gesteuerten Kämpfer kannst Du mit div. Funktionen aus dem `random`-Modul seine Strategieaktionen auswählen.

Die deterministischen Rechnungen musst Du unabhängig davon hinterlegen - denn die gelten ja eh für alle und sind unabhängig vom Eingabe / Auswahlinterface. Das ist bei Dir aktuell nicht der Fall, da Du die Rechnungen immer in dem Codeabschnitt ausführst, der durch den Menschen gesteuert wird.

Ich bastel mal grad ein Beispiel zusammen...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

So, da ist es: Link

Das ist jetzt sehr simpel und minimal gehalten; evtl. ist es sinnvoller, für die AI eine Klasse anzulegen usw. Auch die "Engine" könnte man noch weiter zergliedern, etwa um einen evtl. Sieg oder eine Niederlage zu bestimmen, sofern die Kriterien dafür komplexer werden. Oder man möchte die Gegnerwahl beim Ende eines Kampfes dynamisch machen. Wenn `a` seinen Gegner ausgelöscht hat, greift er dann einen anderen Gegner an?

Aber das Prinzip wird hoffentlich deutlich! Die Logik, wie Punkte in einem Kampf verrechnet werden, ist komplett unabhängig von den Charakteren und der AI bzw. der Spielerentscheidung. Letztere fehlt hier übrigens - das überlasse ich Dir einfach mal ;-) Im Moment kämpft eben nur Computer gegen Computer.

Btw: Man könnte jetzt leicht einen dritten oder vierten Kämpfer in die Match-Struktur einbauen. Also 2vs1 usw.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
mhfu
User
Beiträge: 7
Registriert: Dienstag 20. September 2011, 17:34
Kontaktdaten:

Heyyyyyy vielen Tausend dank !!!!!!!
Werd es sofort überarbeiten :D :D :D :D :D :D
Entschuldige mich im voraus für: Rechtschreibfehler, dumme Fragen, dumme Antworten

http://mhfu.cwsurf.de
Antworten