Penney's game: Difference between revisions
Content added Content deleted
(added MiniScript example) |
(Added C#) |
||
Line 570: | Line 570: | ||
[Y] to play again |
[Y] to play again |
||
</pre> |
</pre> |
||
=={{header|C sharp}}== |
|||
{{works with|C sharp|7}} |
|||
<lang csharp>using static System.Console; |
|||
using static System.Threading.Thread; |
|||
using System; |
|||
public static class PenneysGame |
|||
{ |
|||
const int pause = 500; |
|||
const int N = 3; |
|||
static Random rng = new Random(); |
|||
static int Toss() => rng.Next(2); |
|||
static string AsString(this int sequence) { |
|||
string s = ""; |
|||
for (int b = 0b100; b > 0; b >>= 1) { |
|||
s += (sequence & b) > 0 ? 'T' : 'H'; |
|||
} |
|||
return s; |
|||
} |
|||
static int UserInput() { |
|||
while (true) { |
|||
switch (ReadKey().Key) { |
|||
case ConsoleKey.Escape: return -1; |
|||
case ConsoleKey.H: return 0; |
|||
case ConsoleKey.T: return 1; |
|||
} |
|||
Console.Write('\b'); |
|||
} |
|||
} |
|||
public static void Main2() { |
|||
int yourScore = 0, myScore = 0; |
|||
while (true) { |
|||
WriteLine($"Your score: {yourScore}, My score: {myScore}"); |
|||
WriteLine("Determining who goes first..."); |
|||
Sleep(pause); |
|||
bool youStart = Toss() == 1; |
|||
WriteLine(youStart ? "You go first." : "I go first."); |
|||
int yourSequence = 0, mySequence = 0; |
|||
if (youStart) { |
|||
WriteLine("Choose your sequence of (H)eads and (T)ails (or press Esc to exit)"); |
|||
int userChoice; |
|||
for (int i = 0; i < N; i++) { |
|||
if ((userChoice = UserInput()) < 0) return; |
|||
yourSequence = (yourSequence << 1) + userChoice; |
|||
} |
|||
mySequence = ((~yourSequence << 1) & 0b100) | (yourSequence >> 1); |
|||
} else { |
|||
for (int i = 0; i < N; i++) { |
|||
mySequence = (mySequence << 1) + Toss(); |
|||
} |
|||
WriteLine("I chose " + mySequence.AsString()); |
|||
do { |
|||
WriteLine("Choose your sequence of (H)eads and (T)ails (or press Esc to exit)"); |
|||
int choice; |
|||
yourSequence = 0; |
|||
for (int i = 0; i < N; i++) { |
|||
if ((choice = UserInput()) < 0) return; |
|||
yourSequence = (yourSequence << 1) + choice; |
|||
} |
|||
if (yourSequence == mySequence) { |
|||
WriteLine(); |
|||
WriteLine("You cannot choose the same sequence."); |
|||
} |
|||
} while (yourSequence == mySequence); |
|||
} |
|||
WriteLine(); |
|||
WriteLine($"Your sequence: {yourSequence.AsString()}, My sequence: {mySequence.AsString()}"); |
|||
WriteLine("Tossing..."); |
|||
int sequence = 0; |
|||
for (int i = 0; i < N; i++) { |
|||
Sleep(pause); |
|||
int toss = Toss(); |
|||
sequence = (sequence << 1) + toss; |
|||
Write(toss > 0 ? 'T' : 'H'); |
|||
} |
|||
while (true) { |
|||
if (sequence == yourSequence) { |
|||
WriteLine(); |
|||
WriteLine("You win!"); |
|||
yourScore++; |
|||
break; |
|||
} else if (sequence == mySequence) { |
|||
WriteLine(); |
|||
WriteLine("I win!"); |
|||
myScore++; |
|||
break; |
|||
} |
|||
Sleep(pause); |
|||
int toss = Toss(); |
|||
sequence = ((sequence << 1) + toss) & 0b111; |
|||
Write(toss > 0 ? 'T' : 'H'); |
|||
} |
|||
WriteLine("Press a key."); |
|||
ReadKey(); |
|||
Clear(); |
|||
} |
|||
} |
|||
} |
|||
</lang> |
|||
{{out}} |
|||
<pre style="height:30ex;overflow:scroll"> |
|||
Your score: 0, My score: 0 |
|||
Determining who goes first... |
|||
I go first. |
|||
I chose HHH |
|||
Choose your sequence of (H)eads and (T)ails (or press Esc to exit) |
|||
thh |
|||
Your sequence: THH, My sequence: HHH |
|||
Tossing... |
|||
HTHTHTHTTHH |
|||
You win! |
|||
Press a key. |
|||
Your score: 2, My score: 0 |
|||
Determining who goes first... |
|||
You go first. |
|||
Choose your sequence of (H)eads and (T)ails (or press Esc to exit) |
|||
thh |
|||
Your sequence: THH, My sequence: TTH |
|||
Tossing... |
|||
HTTTTH |
|||
I win! |
|||
Press a key.</pre> |
|||
=={{header|Clojure}}== |
=={{header|Clojure}}== |