Weiterspielen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
KaterKarlo
User
Beiträge: 1
Registriert: Montag 13. Dezember 2021, 16:03

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
Sirius3
User
Beiträge: 18278
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Benutzeravatar
__blackjack__
User
Beiträge: 14077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

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()
Benutzeravatar
__blackjack__
User
Beiträge: 14077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten