Die Aufgabe
Sie müssen ein Shut the Box-Stilprogramm erstellen (nicht Funktion, Programm). Die Grundlagen von shut the box sind:
Die Spieler versuchen, die Kiste durch Drehen eines Hebels mit der Bezeichnung 1-9 zu schließen. Sie müssen dazu die Hebel umlegen. Die Reihenfolge der Ereignisse in jeder Runde ist wie folgt:
- Die aktuelle Position der Hebel wird angezeigt.
- Bei einem neuen Spiel sollte die Position der Hebel als angezeigt werden
123456789
. - Bei einem Spiel mit geschlossenen Hebeln werden alle geschlossenen Hebel als angezeigt
-
. Bei einem Spiel mit 1, 5 und 9 ist die Ausgabe beispielsweise gleich-234-678-
.
- Bei einem neuen Spiel sollte die Position der Hebel als angezeigt werden
- Das Di (c) e (is | are) wird gewalzt.
- Wenn die Hebel 7, 8 und 9 ausgeschaltet sind, wird nur ein sechsseitiger Würfel geworfen. Andernfalls werden zwei sechsseitige Würfel geworfen.
- Der Spieler wird aufgefordert zu wählen, wie viele Hebel er drehen möchte.
- Wenn der Spieler eine Zahl> 9 oder <0 wählt, endet das Spiel.
- Wenn der Spieler einen bereits geschlossenen Hebel wählt, endet das Spiel.
- Der Spieler wählt so viele Hebel.
- Wenn die Summe der Hebel nicht dem Wert des geworfenen Würfels entspricht, endet das Spiel.
- Wenn alle Hebel geschlossen sind, Glückwunsch, gewinnen Sie. Fahren Sie andernfalls mit Schritt 1 fort.
Regeln für das Programm
- In jeder Runde sollten Sie die aktuellen Positionen der Hebel ausgeben.
- Sie müssen den Wert der Rolle mit der Phrase ausgeben
You rolled:
(Leerzeichen beachten). - Sie müssen nach der Anzahl der Hebel fragen (und warten), bis diese mit der Phrase gewechselt wurden
How many levers to flip:
(Leerzeichen beachten). - Sie müssen nach so vielen Hebeln fragen (und warten), wie der Spieler mit der Phrase angegeben hat
Which lever to flip:
(beachten Sie das Leerzeichen). - Sie müssen die angegebenen Hebel umlegen.
- Wenn das Spiel zu irgendeinem Zeitpunkt endet, müssen Sie ausgeben
Game Over
. - Wenn der Spieler eine Runde ohne geöffnete Hebel beendet, müssen Sie ausgeben
You win!
Beispielspiele
123456789
You rolled: 5
How many levers to flip: 5
Which lever to flip: 1
Which lever to flip: 2
Which lever to flip: 3
Which lever to flip: 4
Which lever to flip: 5
Game Over
123456789
You rolled: 5
How many levers to flip: 3
Which lever to flip: 2
Which lever to flip: 2
Which lever to flip: 1
Game Over
123456789
You rolled: 12
How many levers to flip: 2
Which lever to flip: 3
Which lever to flip: 9
12-45678-
You rolled: 6
How many levers to flip: 2
Which lever to flip: 2
Which lever to flip: 4
1---5678-
You rolled: 11
How many levers to flip: 2
Which lever to flip: 5
Which lever to flip: 6
1-----78-
You rolled: 8
How many levers to flip: 1
Which lever to flip: 8
1-----7--
You rolled: 8
How many levers to flip: 2
Which lever to flip: 1
Which lever to flip: 7
---------
You win!
Antworten:
Python 3, 348
5 Bytes gespart dank Mathias Ettinger.
7 Bytes gespart dank DSM.
Dummkopf, das ist lang. Ich hasse es auch, dass es keinen guten Weg gibt, Testfälle zu machen.
quelle
C
405403398392390387 BytesUngolfed
Bearbeiten: D'oh! Habe eine unbenutzte Variable in meiner Antwort hinterlassen. Ich hatte es entfernt, aber die falsche Version eingefügt.
quelle
PowerShell v2 +,
330322 ByteZeilenumbrüche zur Verdeutlichung:
(Benötigt Version 2 oder höher, da
Get-Random
in PowerShell v1 nicht vorhanden ...)Erläuterung:
Beginnen Sie mit dem Festlegen der
$a
Reihe von Hebeln, indem Sie den Bereich verwenden1..9
, und setzen Sie sie$r
gleich einem Skriptblock , den wir später ausführen (im Folgenden mit beschrieben$b
). DerGame Over
Wortlaut wird zu$g
Beginn einer Endlosschleife gesetztfor(){...}
. Bei jeder Iteration setzen wir unsere Ausgabe$o
und geben sie (dank der(...)
Kapselung) sofort aus, indem wir-join
das Array zusammensetzen und jeweils0
durch a ersetzen-
. (Das0
wird weiter unten erklärt). Wenn die Ausgabe gleich 9 Bindestrichen ist, geben SieYou win!
und ausexit
.Als nächstes setzen wir unsere Würfel auf,
$b
indem wir das gespeicherte$r
(via&
) mit einigen zusätzlichen Parametern aufrufen . DerGet-Random
Befehl mit einem-Maximum
von6
(das-Maximum
ist impliziert) erzeugt eine ganze Zahl von 0 bis einschließlich 5. Wir fügen1
das auf einen sechsseitigen Würfel zu erhalten, und fügen hinzu , dass auf einem anderen zufälligen Würfelwurf , multipliziert mit(($a|sort)[8]-ge7)
der überprüft , ob der höchsten Wert auf den Hebeln links eines ist7,8,9
durch erste Sortieranlage$a
und dann das letzte Element zu nehmen und zu prüfen , ob er größer -als-oder-gleich7
. Wir verwenden implizite Typumwandlung, um den Booleschen Wert für die Multiplikation entweder auf 0 (False) oder 1 (True) zu setzen, sodass der zusätzliche "Die" entwederdie*0
oder istdie*1
. Wir geben dann das Ergebnis des Würfels aus.Als nächstes ist der
Read-Host
in$l
für wie viele Hebel. Beachten Sie, dass PowerShell nach einer Aufforderung automatisch das Doppelpunkt-Leerzeichen hinzufügt , sodass wir dieses zumindest kostenlos erhalten. Wir prüfen dann, ob die Anzahl der Hebel, die der Benutzer betätigen möchte, zwischen 1 und 9 liegt .:
Read-Host
exit
Nun betreten wir eine
while
Schleife. Jede Iteration dieser Schleife, die wirRead-Host
hebeln, speichern$i
und diesen Wert subtrahieren$b
. Wir subtrahieren dann auch den entsprechenden Hebel im Array und subtrahieren, wie oft der Benutzer zusätzlich abgefragt werden soll.Die letzte Zeile (mit Ausnahme der schließenden Klammer) testet zwei Boolesche Konstruktionen. Die erste
$b
Möglichkeit besteht nur dann,$True
wenn der Benutzer nicht alle Zahlen ordnungsgemäß vom Würfelwurf subtrahiert hat (in PowerShell ist jede Zahl ungleich Null die Wahrheit). Die andere Bedingung sortiert$a
und nimmt den Minimalwert an. Wenn wir denselben Hebel zweimal subtrahieren, ist der Minimalwert negativ (oder Truthy), andernfalls ist der Minimalwert0
(oder Falsey).Beispiellauf:
quelle