P010 - Gra w OKO dla człowieka z komputerem |
---|
Program uruchomiono w środowisku Bloodshed Dev-C++ 4.9.9.2 |
// I Liceum Ogólnokształcące // im. K. Brodzińskiego // w Tarnowie //-------------------------- // Koło informatyczne 2006/7 //-------------------------- // Program: P010 //-------------------------- #include <iostream> #include <iomanip> using namespace std; // Funkcja rysuje kostkę do gry //----------------------------- void Kostka(int oczka) { cout << " ----- \n"; for(int i = 1; i <= 9; i++) { switch(i) { case 1: case 4: case 7: cout << "| "; } switch(i) { case 1: case 9: if(oczka > 1) cout << "O"; else cout << " "; break; case 2: case 8: cout << " "; break; case 3: case 7: if(oczka > 3) cout << "O"; else cout << " "; break; case 4: case 6: if(oczka == 6) cout << "O"; else cout << " "; break; case 5: if(oczka % 2) cout << "O"; else cout << " "; break; } switch(i) { case 3: case 6: case 9: cout << " |\n"; } } cout << " ----- \n"; } // Funkcja wyświetla punkty gracza //-------------------------------- void Punkty(int n, int pg) { if(n == 1) cout << "CZLOWIEK\n"; else cout << "KOMPUTER\n"; cout << "PUNKTY = " << pg << endl << endl; } // Funkcja dokonuje ruchu //----------------------- void Ruch(int n, int &pg, bool &gg, int pp, bool gp) { char odp; int los; cout << "\n\n--------------------------\n"; Punkty(n,pg); cout << "Grasz dalej ? (T = TAK) : "; // Tutaj umieszczamy moduł strategii if(n == 2) { if((pg < 16) || (pg < pp) || (gp && (pg < 19))) { odp = 'T'; cout << "T\n"; } else { odp = 'N'; cout << "N\n"; } } else cin >> odp; cout << endl; if((odp == 'T') || (odp == 't')) { los = 1 + rand() % 6; Kostka(los); pg += los; Punkty(n,pg); } else gg = false; } // Funkcja ocenia punkty gracza //--------------------------- bool Przegrana(int pg, bool &gg) { if(pg > 21) { gg = false; return true; } return false; } // Funkcja dokonuje oceny gry //--------------------------- void Ewaluacja(int n, int pg, int pp) { if(n == 1) cout << "CZLOWIEK"; else cout << "KOMPUTER"; cout << ", PUNKTY = " << setw(2) << pg << " : "; if((pp > 21) || ((pg <= 21) && (pg > pp))) cout << "GRATULACJE !!! WYGRANA !!!"; else if(pg == pp) cout << "REMIS"; else cout << "PRZEGRANA !!!"; cout << "\n\n"; } // Program główny gry //------------------- main() { int pg1,pg2; bool gg1,gg2; char w; srand((unsigned)time(NULL)); do { cout << "Gra w OKO dla czlowieka z komputerem\n" "====================================\n\n"; pg1 = pg2 = 0; gg1 = gg2 = true; while(gg1 || gg2) { if(gg1) { Ruch(1,pg1,gg1,pg2,gg2); if(Przegrana(pg1,gg1)) break; } if(gg2) { Ruch(2,pg2,gg2,pg1,gg1); if(Przegrana(pg2,gg2)) break; } } cout << "\n\n\nWYNIKI GRY\n" "==========\n\n"; Ewaluacja(1,pg1,pg2); Ewaluacja(2,pg2,pg1); cout << "\n\n--------------------------\n" "Jeszcze raz (T = TAK) ? : "; cin >> w; cout << "\n\n\n\n"; } while((w == 'T') || (w == 't')); } |
Widok okienka konsoli w uruchomionym programie |
---|
Gra w OKO dla czlowieka z komputerem ==================================== -------------------------- CZLOWIEK PUNKTY = 0 Grasz dalej ? (T = TAK) : t ----- | O O | | O O | | O O | ----- CZLOWIEK PUNKTY = 6 -------------------------- KOMPUTER PUNKTY = 0 Grasz dalej ? (T = TAK) : T ----- | O O | | O O | | O O | ----- KOMPUTER PUNKTY = 6 -------------------------- CZLOWIEK PUNKTY = 6 Grasz dalej ? (T = TAK) : |
Program P010 jest rozwinięciem programu P009 o moduł gracza komputerowego. Ustalamy, iż komputer zawsze jest graczem nr 2. Strategia komputera jest następująca:
Komputer kontynuuje grę, gdy
- komputer ma mniej niż 16 punktów
- komputer ma mniej punktów od człowieka
- szanse przekroczenia wyniku 21 są mniejsze lub równe szansom osiągnięcia wyniku 21 lub mniejszego, a człowiek wciąż jest w grze.
Wyjaśnienie tej strategii jest bardzo proste:
- Jeśli komputer ma mniej niż 16 punktów, to nie może w kolejnym rzucie przekroczyć 21 punktów. Zatem kontynuuje grę.
- Jeśli komputer ma mniej punktów od człowieka, to przerywając grę przegra. Nie ma zatem nic do stracenia i liczy na szczęście grając dalej.
- Komputer ryzykuje rzut w sytuacji, gdy wynik może przekroczyć 21. Jednakże jest to wykalkulowane ryzyko - robi to tylko wtedy, gdy jego szanse na wyrzucenie do 21 są większe lub równe szansom przekroczenia 21. Dodatkowo człowiek musi być w grze, gdyż inaczej ryzyko to się nie opłaci.
Rozważmy kolejne sytuacje. Kolorem zielonym zaznaczyliśmy wynik rzutu pozytywny, a kolorem czerwonym negatywny - komputer przekracza 21 punktów:
punkty komputera wynik rzutu kostką decyzja 16 1 2 3 4 5 6 gra 17 1 2 3 4 5 6 gra 18 1 2 3 4 5 6 gra 19 1 2 3 4 5 6 nie gra 20 1 2 3 4 5 6 nie gra 21 1 2 3 4 5 6 nie gra Z tabelki wynika prosty wniosek: jeśli wynik komputera jest mniejszy od 19 punktów, komputer gra dalej.
I Liceum Ogólnokształcące |
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe