Gra “Mastermind”

Napiszmy sobie swoją własną grę “Mastermind”, w którą można grać z komputerem.

Jest to ciekawa gra logiczna o dość prostych założeniach. Jeśli jej nie znasz lub nie pamiętasz o co tam dokładnie chodziło – niżej daję link do krótkiego wideo, ładnie obrazującego zasady.

Ponieważ nasz program będzie działał w konsoli, w miejsce kolorowych pionków proponuję wstawić po prostu cyfry od 1 do 6. W ramach kodu zwrotnego, informującego nas o trafieniach, można użyć jedynki (dobra cyfra w dobrym miejscu), zera (dobra cyfra w złym miejscu) i minusa (brak cyfry w kodzie). Poniżej przykładowy przebieg takiej gry:

 

 

 

 

 

 

 

 

 

Link do video z zasadami (2min): https://www.youtube.com/watch?v=5jtcsBERDEQ

Podpowiedź

Zacznij od napisania sobie trzech metod, które potem łatwo będzie wykorzystać w naszym programie:

  • Metoda SetCode(), która będzie zwracać czterocyfrowy kod do odgadnięcia. Kod powinien składać się z cyfr od 1 do 6, bez powtórzeń.
Jak?

Losując cyfrę do kodu, musisz sprawdzić, czy taka już w nim jest. Jeśli jest – powtarzasz losowanie do skutku (pętla while).

[collapse]
  • Metoda Guess(), która jako parametr przyjmuje wprowadzony przez użytkownika kod i na jego podstawie generuje odpowiedź (kod zwrotny – cyfra trafiona, nietrafiona lub w złym miejscu).
Jak?

Trzeba po prostu przejść przez wszystkie elementy ciągu znaków będącego kodem wprowadzonym przez użytkownika i sprawdzić trzy warunki (trafiona, w złym miejscu, nietrafiona), i w zależności od tego do odpowiedzi “dokleić” odpowiedni znak (czyli zero, jeden lub minus w mojej wersji).

[collapse]
  • Metoda ShuffleString(), która jako parametr przyjmuje ciąg tekstowy, i zwraca ciąg “przemieszany” – te same znaki, ale w innych miejscach. Będzie przydatna do randomizacji wyniku otrzymanego z funkcji Guess(), która bazowo zwraca wynik 1:1, a nie o to nam chodzi. (Uwaga: metody Guess() i ShuffleString() można połączyć w jedno, ja jednak wolałam je mieć osobno – w myśl zasady “jedna metoda robi jedną rzecz”.)
Jak?

W swojej wersji stworzyłam nową tablicę, następnie losowałam indeks (0-3) i jeśli pod tym indeksem było pusto – wstawiałam kolejny znak z ciągu bazowego.

[collapse]

Teraz – mając już przygotowane powyższe metody – można skonstruować pętlę główną programu. Zgadujący ma 10 prób, jeśli do tego czasu mu się nie uda – przegrywa.

Dodatkowo:

Możesz wprowadzić wybór poziomu trudności, np zwykły i trudny. W trudnym cyfry w kodzie będą mogły się powtarzać.

[collapse]

 

Rozwiązanie

[collapse]