Nabend,
Ich moechte bald ein kleines größeres Projekt starten und ein kleines Rollenspiel auf die Beine stellen, das erstmal nur aus Text besteht. (Um die 100 Kilo Byte groß) Und ich wollte euch Fragen ob jemand "Wissensquellen" kennt, die sich speziell auf Rollenspiel-artige Programme konzentrieren, denn jedes Spielgengre ist eine Kunst für sich, die man nicht unterschätzen sollte. Kennt ihr da ein paar empfehlenswerte Anleitungen zum Programmieren von Rollenspielen? (Muss nicht mit Python verbunden sein, ich will mir nur allgemeines logisches Verständnis dafür aneignen.)
Ideal wäre ein (kleines) Rollenspiel das in Basic oder Python oder sonstigen (am besten einfachen) Sprachen geschrieben wurde, wo ich den Code genau angucken und studieren könnte.
Danke für Antworten!
Wie werden Rollenspiele programmiert
Am besten fängst du einfach an und probierst aus. Die ersten Ansätze werden eh nicht funktionieren. Egal ob du vorher etwas darüber liest oder nicht. Hilfreich könnte es auch sein, wenn du deinen Code hier postest. In der Regel wird der dann zwar vollkommen zerpflückt, aber mehr Hinweise kannst du wohl kaum bekommen.
Das Leben ist wie ein Tennisball.
-
- User
- Beiträge: 92
- Registriert: Sonntag 2. Dezember 2012, 21:13
Bin grad dabei und habe ein problem. (achso, mein spiel soll Textkonsole sein)
das inventar.
Ich muss eine möglichkeit finden, das er nur die items anzeigt, die ich wirklich habe. man könnte das mit if und else machen, aber ich hab das im blut das es da eine bessere variante gibt. vielleicht listen oder sowas
das inventar.
Ich muss eine möglichkeit finden, das er nur die items anzeigt, die ich wirklich habe. man könnte das mit if und else machen, aber ich hab das im blut das es da eine bessere variante gibt. vielleicht listen oder sowas
Sicher Listen , noch besser objektorientiert
Inventar_Item_reinlegen
Inventar_anzeigen
Inventar_Item_entfernen
Ach ja, kennst du pygame??? Dort gibt es auf der Projektwebsite auch eine Rubrik rpg...
Inventar_Item_reinlegen
Inventar_anzeigen
Inventar_Item_entfernen
Ach ja, kennst du pygame??? Dort gibt es auf der Projektwebsite auch eine Rubrik rpg...
-
- User
- Beiträge: 92
- Registriert: Sonntag 2. Dezember 2012, 21:13
Die Rubrik habe ich auch schon gesehen, ja:D aber erst nach genauem hinschauen, schön versteckt...
das doofe ist auch das es ziemlich kompliziert ist das pygame modul zu importieren:(
und mit objekten habe ich derzeit so meine verständnisproblemchen, und bin deswegen zu faul mich ranzusetzen und das nochmal zu lernen...
das doofe ist auch das es ziemlich kompliziert ist das pygame modul zu importieren:(
und mit objekten habe ich derzeit so meine verständnisproblemchen, und bin deswegen zu faul mich ranzusetzen und das nochmal zu lernen...
Die Frage wäre halt, was du unter einem Rollenspiel verstehst; man kann da ja verschiedene Typen unterscheiden (abgesehen davon, dass der Begriff inzwischen ganz schön verwässert ist und zumindest "Rollenspielelemente" ja zum guten Ton gehören ). Ein klassisches Subgenre wären z.B. roguelikes, zu denen es auch einiges an Material gibt, als Startpunkt wäre evtl. zu nennen: http://roguebasin.roguelikedevelopment. ... =Main_Page bzw. http://roguebasin.roguelikedevelopment. ... e=Articles
-
- User
- Beiträge: 92
- Registriert: Sonntag 2. Dezember 2012, 21:13
Die Website sieht sehr interessant aus!
Die Rollenspielart die ich meine, ist von der Sielmechanik ungefähr so wie "World of Warcraft" und "Nostale".
Ich hab schonmal ein Übungsskript geschrieben, um ein Gefühl für die Rollenspielprogrammierung zu bekommen:
(Entstanden mit Python 2.6)
Falls es eine Möglichkeit gibt, Code in Spoiler hier unterzubringen, last es mich wissen, der Code ist eig. etwas zu lang für ein Forum
Die Rollenspielart die ich meine, ist von der Sielmechanik ungefähr so wie "World of Warcraft" und "Nostale".
Ich hab schonmal ein Übungsskript geschrieben, um ein Gefühl für die Rollenspielprogrammierung zu bekommen:
(Entstanden mit Python 2.6)
Code: Alles auswählen
# -*- coding: cp1252 -*-
import random, time
# Variablen fuer Characktereigenschaften
Leben = 100
Max_Leben = 100
Aktionspunkte = 10
Ruestung = 0
Stufe = 1
Waffenwert1 = 2
Waffenwert2 = 5
# Variablen fuer Inventar
Goldmuenzen = 500
Monsterfell = 0
Heiltrank = 0
Heilpflanze = 0
Starker_Heiltrank = 0
# Preise fuer Verbesserungen des Charackters
Ruestung_Preis = 200
Waffe_Preis = 200
Leben_Preis = 200
# Monster Werte
F_Schadenswert1 = 1
F_Schadenswert2 = 4
F_Ruestung = 0
F_Max_Leben = 60
F_Leben = F_Max_Leben
Monster_Gold = 2000
# Variablen für Level und Faehigkeiten
Levelanforderung = 3
Erfahrungspunkte = 0
Level = 1
Pflanzenkunde = 0
Pflanzenkunde_Preis = 50000
# Variablen fuer Quests
Quest_Belohnung = 100000
print "Die Anleitung kriegst du, wenn du die Ziffer [7] in der Auswahl tippst."
print
while Leben > 0 and Aktionspunkte > 0:
Schaden = random.randint (Waffenwert1, Waffenwert2)
print "[1] Charackter anschauen"
print "[2] In die Stadt"
print "[3] In den Wald gehen"
print "[4] Inventar oeffnen"
print "[5] Quests suchen"
print
print "Du hast " + str(Aktionspunkte) + " Aktionspunkte, " + str(Goldmuenzen) + " Goldmuenzen und " + str(Leben) + " Lebenspunkte."
print
eingabe = int (raw_input ("Zahl eingeben um etwas zu tun:") )
print
if eingabe == 1:
print "Level: " + str (Level)
print "Waffe: " + str(Waffenwert1) + "-" + str(Waffenwert2) + " Schaden"
print "Ruestungsstufe: " + str(Stufe)
print "Lebenspunkte: " + str(Leben) + "/" + str(Max_Leben)
print "Alchemiestufe: " + str(Pflanzenkunde)
print
while eingabe == 2:
print "[1] Zum Haendler"
print "[2] Zum Skillmeister"
print "[3] Sachen herstellen"
print "[4] Zurueck zur Auswahl"
print
eingabe2 = int (raw_input ("Wo willst du hin?") )
print
while eingabe2 == 1:
print "Du hast " + str(Goldmuenzen) + " Goldmuenzen"
print
print "[1] Heiltrank kaufen (100 Gold)"
print "[2] Aktionspunkte kaufen (50 Gold)"
print "[3] Zurueck zu Stadtuebersicht"
print
eingabe3 = int(raw_input ("Was willst du kaufen?"))
if eingabe3 == 1:
eingabe4 = int (raw_input ("Wieviele Heiltraenke willst du kaufen?"))
Preis_Heiltrank = 100 * eingabe4
if Goldmuenzen >= Preis_Heiltrank:
Goldmuenzen = Goldmuenzen - Preis_Heiltrank
Heiltrank = eingabe4
print "Handel erfolgreich abgeschlossen."
print
else:
print "Du hast nicht genug Gold!"
print
if eingabe3 == 2:
anzahl_Aktionspunkte = int (raw_input ("Wieviele Aktionspunkte willst du kaufen?") )
preis = 50 * anzahl_Aktionspunkte
if preis <= Goldmuenzen:
Goldmuenzen = Goldmuenzen - preis
Aktionspunkte = Aktionspunkte + anzahl_Aktionspunkte
print "Du hast " + str(anzahl_Aktionspunkte) + " Aktionspunkte fuer " + str(preis) + " Goldmuenzen gekauft."
print
elif preis > Goldmuenzen:
print "Du hast nicht genug Geld."
print
if eingabe3 == 3:
eingabe2 = 0
print
time.sleep(1)
while eingabe2 == 2:
print "Goldmuenzen: " + str(Goldmuenzen)
print
print "[1] Alchemie Stufe " + str((Pflanzenkunde + 1)) + " erlernen (" + str(Pflanzenkunde_Preis) + "Gold)"
print "[2] Waffe verbessern " + "(" + str(Waffe_Preis) + " Gold)"
print "[3] Ruestung verbessern " + "(" + str(Ruestung_Preis) + " Gold)"
print "[4] Lebenspunkte erhoehen " + "(" + str(Leben_Preis) + " Gold)"
print "[5] Abbrechen"
print
eingabe3 = int(raw_input("Was willst du lernen?"))
if eingabe3 == 1:
print "Das kostet dich " + str(Pflanzenkunde_Preis) + " Goldmuenzen."
time.sleep(1)
if Goldmuenzen >= Pflanzenkunde_Preis:
Pflanzenkunde = Pflanzenkunde + 1
print "Herzlichen Glueckwunsch! Du kannst nun bessere Traenke herstellen!"
print
Goldmuenzen = Goldmuenzen - Pflanzenkunde_Preis
Pflanzenkunde_Preis = Pflanzenkunde_Preis + 50000
else:
print "Du hast nicht genug Geld!"
print
if eingabe3 == 2:
if Goldmuenzen >= Waffe_Preis:
Waffenwert1 = Waffenwert1 + 1
Waffenwert2 = Waffenwert2 + 2
Goldmuenzen = Goldmuenzen - Waffe_Preis
F_Schadenswert1 = F_Schadenswert1 + 1
F_Schadenswert2 = F_Schadenswert2 + 2
Monster_Gold += 500
print "Schaden erfolgreich erweitert."
print
Waffe_Preis = Waffe_Preis + 300
elif Goldmuenzen < Waffe_Preis:
print "Du hast nicht genug Geld!"
print
if eingabe3 == 3 and Stufe < 9:
if Goldmuenzen >= Ruestung_Preis:
Ruestung = Ruestung + 0.1
Stufe = Stufe + 1
F_Ruestung = F_Ruestung + 0.1
Goldmuenzen = Goldmuenzen - Ruestung_Preis
Ruestung_Preis = Ruestung_Preis + 300
Monster_Gold += 500
print "Ruestung erfolgreich verbessert!"
print
if Goldmuenzen < Ruestung_Preis:
print "Du hast nicht genug Geld!"
print
if Stufe == 9:
print "Deine Ruestung kann man nicht mehr verbessern."
print
if eingabe3 == 4:
if Goldmuenzen >= Leben_Preis:
Goldmuenzen = Goldmuenzen - Leben_Preis
Max_Leben = Max_Leben + 20
Leben = Leben + 20
F_Max_Leben = F_Max_Leben + 20
F_Leben = F_Max_Leben
Leben_Preis = Leben_Preis + 300
Monster_Gold += 500
print "Leben erfolgreich erweitert:"
print
elif Goldmuenzen < Leben_Preis:
print "Du hast nicht genug Geld!"
print
time.sleep(1)
if eingabe3 == 5:
eingabe2 = 0
if eingabe2 == 3:
print "[1] Starke Heiltraenke herstellen"
print "[2] Zurueck zur Auswahl"
print
eingabe3 = int(raw_input("Was willst du herstellen?"))
print
if eingabe3 == 1:
print "Fuer einen Starken Heiltrank brauchst du 3 Heilpflanzen. (Du hast " + str(Heilpflanze) + " Heilpflanzen)"
eingabe4 = int(raw_input("Wie viele Heiltraenke moechtest du herstellen?"))
print
if eingabe4 <= (Heilpflanze * 3) and Pflanzenkunde >= 1:
Heilpflanze = Heilpflanze - (eingabe3 * 3)
Starker_Heiltrank = Starker_Heiltrank + eingabe3
print "Du hast jetzt " + str(Starker_Heiltrank) + " Starke Heiltraenke!"
print
else:
print "Dir fehlen die benötigten Zutaten, oder du bist nicht bewandert genug um einen Heiltrank herzustellen."
print
time.sleep(1)
if eingabe3 == 2:
eingabe2 = 0
if eingabe2 == 4:
eingabe = 0
while eingabe == 3:
print "[1] Kaempfe gegen Monster!"
print "[2] Sammle Pflanzen!"
print "[3] Zurueck zur Auswahl"
print
eingabe2 = int (raw_input ("Moechtest du gegen Monster kämpfen?") )
print
if eingabe2 == 1:
Aktionspunkte = Aktionspunkte - 1
print "Du begegnest einem Monster!!!"
time.sleep(1)
print "Ihr schlagt euch!"
time.sleep(1)
print "Auf in den Kampf!"
time.sleep(1)
print
while Leben > 0 and F_Leben > 0:
Wert = random.randint (1, 40)
if Wert == 10:
print " BBBBBB A A A M M QQ"
print " B B A A M M M M QQ"
print " B B A A M M M M QQ"
print " BBBBBB A A M M M QQ"
print " B B AAAAAAAAA M M M QQ"
print " B B A A M M "
print " BBBBBB A A M M QQ"
print
time.sleep(2)
print "Ach du scheisse, Du hast maechtig zugeschlagen!"
time.sleep(1)
F_Leben = 0
else:
Leben = Leben - random.randint (F_Schadenswert1, F_Schadenswert2) * (1 - F_Ruestung)
F_Leben = F_Leben - random.randint (Waffenwert1, Waffenwert2) * (1 - Ruestung)
print "Dein Leben: ---> " + str(Leben) + "/" + str(Max_Leben) + " " + str(F_Leben) + "/" + str(F_Max_Leben) + " <--- Leben vom Monster"
print
time.sleep(1)
if Leben > 0 and F_Leben <= 0:
print "Du hast den Kampf gewonnen und dir Gold dazuverdient"
print
Goldmuenzen = Goldmuenzen + Monster_Gold
eingabe = 0
Monsterfell = Monsterfell + random.randint (5, 15)
F_Leben = F_Max_Leben
Erfahrungspunkte = Erfahrungspunkte + 1
else:
print "Du hast den Kampf verloren."
print
eingabe = 0
if eingabe2 == 2:
print "Du begibst dich auf Pflanzensuche"
time.sleep(1)
for i in range (5):
Wert_1 = random.randint (1, 2)
if Wert_1 == 1:
Heilpflanze = Heilpflanze + 1
print "Du hast eine Heilpflanze gefunden!"
else:
print "Du hast nichts gefunden!"
time.sleep(2)
print
time.sleep(1)
if eingabe2 == 3:
eingabe = 0
while eingabe == 4:
print "########################################################"
print "## [1] Heiltrank: " + str(Heiltrank) + " Monsterfell: " + str(Monsterfell) + " ##"
print "## [2] Starker Heiltrank: " + str(Starker_Heiltrank) + " Heilpflanze: " + str(Heilpflanze) + " ##"
print "########################################################"
print
print "[3] Zurueck zur Auswahl"
eingabe2 = int (raw_input ("Was willst du tun?") )
if eingabe2 == 1 and Heiltrank > 0:
Heiltrank = Heiltrank - 1
Leben = Leben + 50
elif Heiltrank <= 0 and eingabe2 == 1:
print "Du hast keine Heiltraenke."
print
time.sleep(1)
if Starker_Heiltrank > 0 and eingabe2 == 2:
Leben = Leben + 500
Starker_Heiltrank = Starker_Heiltrank - 1
elif Starker_Heiltrank == 0 and eingabe2 == 2:
print "Du hast keine starken Heilstraenke!"
print
time.sleep(1)
if Leben > Max_Leben:
differenz = Leben - Max_Leben
Leben = Leben - differenz
if eingabe2 == 3:
eingabe = 0
print
while eingabe == 5:
Erforderte_Monsterfelle = random.randint (60, 100)
print "Ein Meister verlangt Felle von dir und will dich dafür Entlohnen."
print "Er will " + str(Erforderte_Monsterfelle) + " Monsterfelle und bietet " + str(Quest_Belohnung) + " Goldmuenzen dafür."
print "Angebot annehmen [1]"
print "Zurueck zu Auswahl [2]"
print
eingabe2 = int(raw_input("Was willst du tun?"))
print
if eingabe2 == 1:
if Monsterfell >= Erforderte_Monsterfelle:
Goldmuenzen = Goldmuenzen + Quest_Belohnung
Monsterfell = Monsterfell - Erforderte_Monsterfelle
Erfahrungspunkte = Erfahrungspunkte + 10
print "Der Deal wurde erfolgreich abgeschlossen! Du hast " + str(Quest_Belohnung) + " erhalten."
print
Quest_Belohnung = Quest_Belohnung + 50000
time.sleep (2)
eingabe = 0
else:
print "Du hast nicht genug Monsterfelle!"
print
if eingabe2 == 2:
eingabe = 0
time.sleep(1)
if eingabe == 7:
print "Du hast 10 Aktionspunkte und 500 Goldmuenzen als Startkapital."
print "Deine Lebenspunkte und Aktionspunkte dürfen nicht unter 0 sinken, sonst hast du das Spiel verloren."
print "Toete Monster, kaufe Gegenstaende, steige Stufen auf und entdecke das Spiel!"
print "Das Ziel des Spiels ist simpel: Immer stärker werden, mehr Schaden austeilen, mehr einstecken können, und so weiter!"
print
if Erfahrungspunkte >= Levelanforderung:
Level = Level + 1
Levelanforderung = Levelanforderung + 10
Erfahrungspunkte = Erfahrungspunkte - Erfahrungspunkte
print "DEIN LEVEL WURDE ERHOEHT! DU BIST JETZT LEVEL " + str(Level) + " !"
print
time.sleep(1)
if Leben <= 0:
print "Du bist gestorben, weil du keine Lebenspunkte mehr hast!"
elif Aktionspunkte <= 0:
print "Du bist vor lauter Erschoepfung gestorben, weil du keine Aktionspunkte mehr hast!"
raw_input ()
Der Quellcode ist nicht so schön, sehr verworren, wenn ich das sagen darf. Die while-Schleifen
Das Rollenspiel ist sehr schön gelungen, mir hat es gerade Spaß gemacht, es zu spielen.
Ach ja, implementiere einen Exit-Befehl Du kannst das Spiel momentan nicht direkt beenden.
Das Rollenspiel ist sehr schön gelungen, mir hat es gerade Spaß gemacht, es zu spielen.
Ach ja, implementiere einen Exit-Befehl Du kannst das Spiel momentan nicht direkt beenden.
-
- User
- Beiträge: 92
- Registriert: Sonntag 2. Dezember 2012, 21:13
Danke für das Kompliment!:)
Ja, meine Lehrer sagen aber alle, ich bin ein ziemlicher Träumer und sehr schusslich, ich denke sowas spiegelt sich in meinen Codes wieder:D
Ein Exit Befehl, höre ich zum ersten mal von. Vielen Dank für den Hinweis, hatte schon immer irgendwie gehofft das es sowas gibt!
Ja, meine Lehrer sagen aber alle, ich bin ein ziemlicher Träumer und sehr schusslich, ich denke sowas spiegelt sich in meinen Codes wieder:D
Ein Exit Befehl, höre ich zum ersten mal von. Vielen Dank für den Hinweis, hatte schon immer irgendwie gehofft das es sowas gibt!
Code: Alles auswählen
import sys
print "Guten Tag"
sys.exit("Und gute Nacht")
Dein Problem ist, dass du überhaupt erst mal ein Gefühl für die Programmierung an sich bekommen musst.Dexter1997 hat geschrieben:Ich hab schonmal ein Übungsskript geschrieben, um ein Gefühl für die Rollenspielprogrammierung zu bekommen
Ich weiß nicht, wie du selber deinen Code empfindest, aber ich gebe dir sicherheitshalber mal eine Einschätzung die auf 30 Jahren Programmiererfahrung beruht: Der Code ist völlig unübersichtlich und für eine Weiterentwicklung absolut nicht zu gebrauchen. Das tut jetzt vielleicht weh, aber es bringt nichts wenn du dich jetzt schon für einen kompetenten Entwickler hältst und mit diesem völlig verkorksten Ansatz weitermachst.
Trenne das alles mal in sinnvolle Funktionen auf. Trenne Verarbeitungslogik und Ein-/Ausgabe. Verwende sprechende Namen (nicht so etwas wie eingabe2). Orientiere dich bitte bei der Namensvergabe am Python Style Guide PEP-8.
-
- User
- Beiträge: 92
- Registriert: Sonntag 2. Dezember 2012, 21:13
Das tut nicht weh, das der Code verkorkst ist, glaube ich auch, und ich gebe dir vollkommen recht.Ich bin umso froher das er überhaupt funktioniert xD (Bugs, die man im obrigen Code noch finden kann wurden behoben) Ich bin eh grade dabei den Code in Funktionen zu zerlegen, und ich wollte gleich mal fragen ob es moeglich ist mehrere Variablen an den Aufrufer einer Funktion zurueckzugeben. (mit return)Das tut jetzt vielleicht weh, aber es bringt nichts wenn du dich jetzt schon für einen kompetenten Entwickler hältst und mit diesem völlig verkorksten Ansatz weitermachst.
Trenne das alles mal in sinnvolle Funktionen auf. Trenne Verarbeitungslogik und Ein-/Ausgabe. Verwende sprechende Namen (nicht so etwas wie eingabe2). Orientiere dich bitte bei der Namensvergabe am Python Style Guide PEP-8.
@Dexter1997: Jain. Man kann nur einen Wert zurück geben. Aber dieser eine Wert kann natürlich auch ein Containerobjekt wie eine Liste oder ein Tupel sein, in dem mehrere Werte zusammengefasst sind.
Ergänzend zu der Antwort von BlackJack hier ein Code-Beispiel (Die Funktion f gibt Tupel der Länge 2 zurück, die mit ``x, y = f(n)`` wieder "ausgepackt" werden können):
Code: Alles auswählen
>>> def f(n):
... return n, 2**n
...
>>> x, y = f(5)
>>> x
5
>>> y
32
-
- User
- Beiträge: 92
- Registriert: Sonntag 2. Dezember 2012, 21:13
und wo hast du x definiert? bzw. wie geht das, dass er x kennt?
Hier werden `x` und `y` an Werte gebunden die von `f()` in einem iterierbaren Objekt mit zwei Elementen zurück gegeben werden:
Code: Alles auswählen
x, y = f(5)