In Python 2 Personen Interaktionen darstellen

... komplette Frage anzeigen

3 Antworten

import random
anzahl = random.randint(8, 27)
zug = 2
while anzahl > 0:
    h = "0"
    zug = 3 - zug
    if anzahl != 1:
        print "Noch %i Hölzer" %anzahl
        while h != "1" and h != "2" and h != "3":
            h = raw_input("Bitte geben sie ein, wie viele Hölzer sie nehmen "\\\\
                            "wollen, Spieler %i: " %zug)
        anzahl = anzahl - int(h)
    else:
        print "Nur noch ein Holz!"
        anzahl = anzahl - 1
print "Spieler %i hat gewonnen!" %(3 - zug)
Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von vegetassj498
04.02.2015, 18:51

Vielen vielen vielen dank. Falls du noch Zeit hast kannst du das bisschen erklären? :)

0
Kommentar von AnonYmus19941
04.02.2015, 18:52

sorry, hab mich verlesen, ist für ein bis drei hölzer pro spieler...

0

Die eine Person ist der Spieler am Computer, die zweite wird durch den Computer simuliert. Es gibt zu jedem Zeitpunkt einen Spielstand, an dem man gewinnen kann, wenn man keinen Fehler macht oder an dem man nur gewinnen kann, wenn der Gegner einen Fehler macht. Da der Computer in diesem Fall keinen Fehler macht, kommt es auf den Anfangszustand an. Für diesen ist dann weiterhin entscheidend, wer den ersten Zug macht. Für die Ermittlung des richtiges Zuges wird die Zahl der Hölzer beim Beginn benötigt. Beim Spiel ohne Computer wirft man eine unbekannte Anzahl von Streichhölzern auf den Tisch. Wer als erster herausfindet, wieviele Hölzer momentan auf dem Tisch noch liegen, der kann feststellen, ob die Ausgangsposition für ihn nun gut oder schlecht ist. Ist sie gut, kann er so nehmen, dass es für seinen Gegner schlecht ist. Schlecht bedeutet hier, dass der Gegner keine Chance hat, den vorhandenen Status zu seinen Gunsten umdrehen. Dazu müsste ich einen Fehler machen. Ist der Status für mich schlecht, kann ich nur hoffen, dass der Gegner einen Fehler macht, sodass ich den Status zu meinen Gunsten umdrehen kann. Ist der Status für mich gut, ist es sehr einfach, diesen Status beizubehalten und dem Gegner damit keine Chance zu geben. Bei erlaubten Zügen zwischen 1 und 2 bleibt dieser Zustand erhalten, wenn beide zusammen 3 Hölzer nehmen. Nimmte der Gegner also 1, nehme ich 2. Nimmt der Gegner 2, nehme ich nur 1. Entscheidend ist nun, wer als erster herausfindet, ob der Status für ihn günstig ist oder nicht. Da man dazu die Anzahl der noch zu nehmenden Hölzer benötigt, ist der Computer zunächst im Vorteil, da er dies von Anfang an weiß, weil er ja selbst die Zahl per Zufall ermittelt hat. Je nachdem, wie der Start für ihn steht, spielt es eine Rolle, wer nun anfängt. Damit man als Spieler überhaupt eine Chance hat, muss der Status für den Computer mit Schlecht beginnen. Der Spieler kann dann durch geschicktes spielen einen Statuswechsel verhindern. Dazu muss er aber gleich zu Beginn die Zahl der Hölzer kennen oder man programmiert so, dass der Computer zwar die Anzahl hat, aber sie nicht für die Ermittlung seines Zuges benutzen darf. Ist der Computer am Verlieren, so hat er keine Möglichkeit für einen guten Zug. Er muss aber trotzdem ziehen, sozusagen einen Verlegenheitszug. Dazu muss man ein weiteres Mal den Zufall bemühen. Interessant dabei ist, dass es für die Logik des Spiels unerheblich ist, ob der letzte Zug gewinnt oder verliert. Das entscheidet sich erst ganz am Schluss. Derjenige, der am gewinnen ist, kann beim vorletzten Zug den Status ggf. umdrehen. Wird das Spiel so programmiert, dass die noch vorhandene Anzahl keinem der Beteiligten zugänglich ist, Ist der Ausgang des Spiels rein zufällig, eine Spielstrategie ist dann nicht möglich. Ich habe so ein ähnliches Programm gemacht mit einer Sternchenpyramide, die am Bildschirm angezeigt wurde. Man durfte da immer nur in einer Zeile Sterne nehmen, mindestens einen und maximal alle in der betreffenden Zeile. In Deinem Fall wäre es sinnvoll, das Spiel so zu programmieren, dass die aktuelle Anzahl der Hölzer auf dem Bildschirm angezeigt wird. Ist die Anzahl durch 3 teilbar, so lässt man den Computer beginnen, ansonsten beginnt man selbst und nimmt sich den Rest. Dann hat der Computer wieder eine durch 3 teilbare Zahl.

Antwort bewerten Vielen Dank für Deine Bewertung

Hallo, Du könntest es vielleicht folgendermaßen anpacken:
Wenn das Programm am Zug ist, ermittelt es die Anzahl Hölzchen so, daß es ( nach Möglichkeit ) gewinnt.
Wenn der Gegner am Zug ist, nimmt das Programm von ihm die Anzahl der Hölzchen entgegen, die er entfernt haben will --> 1 oder 2.

Das wiederholt sich solange, bis einer das letzte Hölzchen nehmen muß.

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?