Seite 1 von 1
Weiterspielen
Verfasst: Montag 13. Dezember 2021, 16:27
von KaterKarlo
Hallo Liebes Python Forum,
ich versuche gerade selbstständig das Spiel Russisch Roulett in Python zu programmieren und bin auf ein kleines Problem getreten, wo ich nicht weiterkomme.
Mein Ziel ist es, dass mich das Programm fragt, wenn man sozusagen "erschossen" wird, ob man weiterspielen möchte... Also Beispielsweise: "Neuer Versuch? y/n". Wenn man auf der Tastatur die y (yes) Taste drückt, soll das Programm vom Anfang wieder an starten. Wenn man n (no) drückt soll da zum Beispiel stehen: "Adios".
Code: Alles auswählen
import random
global runde
runde = 0
def schiessen():
play = input("")
global runde
Revolver_Trommel = random.randint(1,6)
print(Revolver_Trommel)
revolverpatrone_kammer = random.randint(1,6)
if revolverpatrone_kammer == Revolver_Trommel:
print("PENG!")
print("Game over")
runde = 0
else:
print("Stille")
runde = runde + 1
print("Runde: " + str(runde))
x = True
while x == True:
schiessen()
Ich hoffe jemand kann mir aus der Krisensituation helfen.
Kater Karlo
Re: Weiterspielen
Verfasst: Montag 13. Dezember 2021, 17:15
von Sirius3
Globale Variablen sollte man nicht benutzen. Hier ist es auch völlig unnütz, weil das Zählen der Runden in der Hauptschleife stattfinden sollte.
Die Funktion `schiessen` sollte nur zurückgeben, ob man noch lebt oder nicht.
Und dann braucht es natürlich eine zweite Schleife, die so lange läuft, wie man neue Spiele spielen möchte und wo man abfragt, ob man nochmal spielen möchte.
Re: Weiterspielen
Verfasst: Montag 13. Dezember 2021, 17:54
von __blackjack__
Das scheint auch nicht das klassische Spiel zu sein, bei dem die Trommel ja nicht jedes mal neu ”gemischt” wird, sondern wo das Risiko und die Spannung bei jeder Runde eines Spiels steigt.
Re: Weiterspielen
Verfasst: Montag 13. Dezember 2021, 18:26
von rogerb
Die Textausgabe ist fehlerhaft, es sind keine Clint Eastwood Quotes enthalten.
Code: Alles auswählen
import random
def play_russian_roulette():
print(
"""
“I know what you're thinking. Did he fire six shots or only five? Well, to tell you the truth, in all this excitement, I've kinda lost track myself.
But being as this is a .44 magnum, the most powerful handgun in the world, and would blow your head clean off, you've got to ask yourself one question:
"Do I feel lucky?" Well, do ya, punk?”
― Clint Eastwood
"""
)
while True:
choice = input("Ready?, (y)es or (n)o ")
if choice.lower() == "n":
print(
"""
“If you want a guarantee, buy a toaster.”
― Clint Eastwood
"""
)
print("Bye!")
return
if choice.lower() == "y":
if random.randint(1, 6) == 1:
print("PENG!")
print(
"""
“Nothing wrong with shooting...as long as the right people get shot.”
― Clint Eastwood
"""
)
print("Game over")
return
print("click!")
else:
print(
"""
“Are you going to pull those pistols or whistle Dixie?”
― Clint Eastwood
"""
)
play_russian_roulette()
Re: Weiterspielen
Verfasst: Montag 13. Dezember 2021, 21:50
von __blackjack__
@KaterKarlo: Noch zum Quelltext: Schau mal in den
Style Guide for Python Code bezüglich der Namensschreibweisen.
Mir kam das als Thema auch so verdammt bekannt vor, und richtig 2007 hatten wir schon einmal russisches Roulette im Thema
Bin ich zu dumm zum programmieren?. Der Benutzer hatte die Aufgabe Vom Hackerboard-Unterforum „Programmieraufgaben“ aus dem Beitrag
Russisches Roulette von 2004.
Meine Lösung in dem Thema hier im Forum würde ich dann mal in dieses Jahrzehnt holen wollen:
Code: Alles auswählen
#!/usr/bin/env python3
from random import randint
from time import sleep
import rich
from attr import attrib, attrs
from rich.panel import Panel
from rich.prompt import Confirm
from rich.rule import Rule
from rich.status import Status
class GermanConfirm(Confirm):
validate_error_message = "[prompt.invalid]Bitte J oder N eingeben"
choices = ["j", "n"]
@attrs
class Revolver:
chamber_count = attrib(default=6)
pulls_till_bang = attrib(default=None)
pulls_since_last_spin = attrib(default=None)
def spin(self):
self.pulls_till_bang = randint(1, self.chamber_count)
self.pulls_since_last_spin = 0
__attrs_post_init__ = spin
def pull_trigger(self):
self.pulls_till_bang -= 1
self.pulls_since_last_spin += 1
return self.pulls_till_bang == 0
def play(computer_starts=False):
humans_turn = not computer_starts
revolver = Revolver()
while True:
rich.print(Rule())
if humans_turn:
rich.print(":man: Spieler am Zug")
spin = GermanConfirm.ask("Trommel drehen? ")
else:
rich.print(":robot: Computer am Zug")
spin = (
revolver.pulls_since_last_spin >= revolver.chamber_count * 0.66
)
if spin:
with Status("Die Trommel dreht sich..."):
revolver.spin()
sleep(1)
if revolver.pull_trigger():
rich.print("[bold red]:boom: [blink]PENG!!![/blink] :boom:")
return humans_turn
rich.print("*klick*")
humans_turn = not humans_turn
def main():
human_starts = GermanConfirm.ask("Soll der Computer anfangen? ")
human_is_dead = play(human_starts)
rich.print(
Panel(
"Du bist tot. :skull:"
if human_is_dead
else "Der Computer ist tot. :smiley:",
title="Ergebnis",
)
)
if __name__ == "__main__":
main()
Damals wurde das Thema
Funktionale Sprachen aus dem Ursprungsthema abgetrennt, wo es auch mindestens eine Lösung in OCaml und zwei in Haskell gibt, beziehungsweise gab, denn die wurden damals nicht im Forum selbst, sondern im Pastebin von Pocoo.org abgelegt, das leider tot ist.