Gra - bierki

Zapoznaj się z artykułem:

Operacje logiczne w języku C++

 

Prezentowany poniżej program jest przykładem wykorzystania przez komputer strategii wygrywającej w prostej grze logicznej. Zasady gry są następujące:

W grze uczestniczy dwóch graczy oraz 17 bierek. Gracze naprzemian zabierają od jednej do trzech bierek. Przegrywa ten, który zmuszony jest zabrać ostatnią bierkę.

Dla drugiego gracza istnieje prosta strategia wygrywająca - zawsze uzupełnia on liczbę bierek wziętych przez przeciwnika do 4. W ten sposób w każdej turze zabierane są 4 bierki. Po 4 turach wzięte zostanie 16 bierek i oczywiście zostanie jedna bierka dla pierwszego gracza.

 

// Bierki
// (C)2008 Koło informatyczne w I LO w Tarnowie
// Kurs programowania w C++ dla początkujących
//--------------------------------------------

#include <iostream>

using namespace std;

// funkcja wyświetla powtanie
//---------------------------

void tytul()
{
  cout << "*******************\n"
          "*** BIERKI 2008 ***\n"
          "*******************\n\n";
}

// Funkcja wyświetla bierki
//-------------------------

void wyswietl_bierki(unsigned b)
{
  cout << "BIERKI = ";
  for(int i = 0; i < b; i++) cout << "|";
  cout << endl << endl;    
}

// Funkcja odczytuje poprawny ruch człowieka
//------------------------------------------

unsigned ruch_czlowieka(unsigned b)
{
  unsigned r,maxb;
  
  do
  {
    maxb = 3;
    if(b < maxb) maxb = b;
    cout << "Ile bierek zabierasz? (1..." << maxb << ") : ";
    cin >> r;
  } while((r == 0) || (r > maxb));
  return r;
}

// Funkcja generuje ruch komputera
//--------------------------------

unsigned ruch_komputera(unsigned rcz, unsigned b)
{
  if(b > 1)
  {
     unsigned r = 4 - rcz;
     cout << "Ja zabieram " << r << "\n\n\n";
     return r;
  }
  else cout << "Przegrales, bo zabrales ostatnia bierke!!!\n\n";
  
  return 0;
}

// Funkcja prowadzi rozgrywkę
//---------------------------

void gra()
{
  unsigned bierki = 17,rczl,rkomp;
  
  do
  {
    wyswietl_bierki(bierki);
    rczl  = ruch_czlowieka(bierki);
    rkomp = ruch_komputera(rczl,bierki);
    bierki -= rczl + rkomp;
  } while(bierki);
}

// Funkcja zwraca true, jeżli gracz chce zagrać jeszcze raz
//---------------------------------------------------------

bool dalej()
{
  char c;
  
  cout << "\n\nGrasz jeszcze raz? (t = TAK) : ";
  cin >> c;
  cout << "\n\n\n\n\n\n";
  return c == 't';    
}

// Start programu
//---------------

main()
{
  tytul();
  do gra(); while(dalej());
}
*******************
*** BIERKI 2008 ***
*******************

BIERKI = |||||||||||||||||

Ile bierek zabierasz? (1...3) : 3
Ja zabieram 1


BIERKI = |||||||||||||

Ile bierek zabierasz? (1...3) : 2
Ja zabieram 2


BIERKI = |||||||||

Ile bierek zabierasz? (1...3) : 2
Ja zabieram 2


BIERKI = |||||

Ile bierek zabierasz? (1...3) : 1
Ja zabieram 3


BIERKI = |

Ile bierek zabierasz? (1...1) : 1
Przegrales, bo zabrales ostatnia bierke!!!



Grasz jeszcze raz? (t = TAK) : n

 



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2017 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.