103 lines
3.5 KiB
C#
103 lines
3.5 KiB
C#
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();
|
|
}
|
|
}
|
|
|
|
}
|