Aby jeszcze lepiej przyswoić sobie zdobyte umiejętności w trakcie trwania kursu przyjrzyjmy się kilku prostym programom.
Przyswojenie wiadomości
Prosta gierka konsolowa, której celem jest odgadnięcie jaką liczbę wylosował komputer.
[codesyntax lang=”cpp”]
#include <iostream> #include <cstdlib> using namespace std; int main() { int losowa = (rand() % 50)+1; //losujemy int wprowadzona; cout<<"Program 'zgaduj-zgadula' v0.1 by Komeniusz"<<endl; while(wprowadzona != losowa) { //dopóki nie odgadniemy cout<<"Zgadnij jaką liczbę wylosowałem (1;50): "; cin>>wprowadzona; if(isdigit(wprowadzona)) { //zabezpieczenie cout<<"Wprowadzone dane nie są liczbą!"<<endl; return 0; } if(wprowadzona > losowa) { //jesli za duza cout<<"Podana liczba jest za duża"<<endl; } else if(wprowadzona < losowa) { //jesli za mala cout<<"Podana liczba jest za mała"<<endl; } } cout<<"Moje gratulacje! Tajemnicza liczba to "<<losowa<<endl; return 0; //koniec :-) }
[/codesyntax]
Program wypisujący podaną przez użytkownika wartość od tyłu.
[codesyntax lang=”cpp”]
#include <iostream> using namespace std; int main() { string slowo; cout<<"Wpisz słowo: "; cin>>slowo; for(int i=slowo.length()+1; i>-1; --i) { cout<<slowo[i]; } cout<<endl; return 0; }
[/codesyntax]
Prosty kalkulator z menu wyboru, nie mogło go zabraknąć 🙂
[codesyntax lang=”cpp”]
#include <iostream> using namespace std; //zmienne globalne - dostępne w każdej funkcji int pierwsza; int druga; void dodawanie() { cout<<"Wpisz pierwszą liczbę: "; cin>>pierwsza; cout<<"Wpisz drugą liczbę: "; cin>>druga; cout<<"Wynik to: "; cout<<pierwsza+druga<<endl; } void odejmowanie() { cout<<"Wpisz pierwszą liczbę: "; cin>>pierwsza; cout<<"Wpisz drugą liczbę: "; cin>>druga; cout<<"Wynik to: "; cout<<pierwsza-druga<<endl; } void dzielenie() { cout<<"Wpisz pierwszą liczbę: "; cin>>pierwsza; cout<<"Wpisz drugą liczbę: "; cin>>druga; cout<<"Wynik to: "; cout<<pierwsza/druga<<endl; } void mnozenie() { cout<<"Wpisz pierwszą liczbę: "; cin>>pierwsza; cout<<"Wpisz drugą liczbę: "; cin>>druga; cout<<"Wynik to: "; cout<<pierwsza*druga<<endl; } int main() { int menu; cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl; cout<<"| Kalkulator v0.1 by Komeniusz |"<<endl; cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl; while(1) { cout<<endl; cout<<"1 - dodawanie"<<endl; cout<<"2 - odejmowanie"<<endl; cout<<"3 - dzielenie"<<endl; cout<<"4 - mnożenie"<<endl; cout<<"0 - exit"<<endl; cout<<"Wybierz działanie: "; cin>>menu; switch(menu) { case 1: dodawanie(); break; case 2: odejmowanie(); break; case 3: dzielenie(); break; case 4: mnozenie(); break; case 0: cout<<"Do widzenia :-)"<<endl; return 0; break; default: cout<<"Nieprawidłowy wybór"<<endl; return 0; } } }
[/codesyntax]
Gra OrcRider v0.2. Tą prostą grę konsolową pisałem na początku mojej zabawy z C++. Mimo, iż kod nie jest napisany zbyt profesjonalnie to można sobie pograć i nieźle się zabawić. Wersja v0.4 uległa niestety zniszczeniu, więc wiele elementów, które wprowadziłem, aby ulepszyć grę po prostu nie istnieje, a naprawdę były to niezłe ulepszenia 🙂
[codesyntax lang=”cpp”]
#include <iostream> #include <cstdlib> using namespace std; char chceszzagrac; char coteraz; int zycie = 100; int orc = 50; int silaorca = 0; int zloto = 20; int walka = 0; /*Zmienne w programie*/ int main(); int zajeborca(); int pub(); int atak(); int krecha(); int dane(); int krecha() { cout<<"|---------------------------------------------------------------------------------"<<endl; } int dane() { krecha(); cout<<"|Twoje punkty zyciowe: "<<zycie<<endl; cout<<"|Twoje zloto: "<<zloto<<endl; krecha(); } int atak() { while (walka == 1) { int atak = 1 + (int)(rand() / (RAND_MAX + 1.0) * 11 - 1); int atakorca = 1 + (int)(rand() / (RAND_MAX + 1.0) * 11 - 1); krecha(); cout<<"Orc zostal trafiony! Twoj cios odebral mu "<<atak<<"pkt zycia"<<endl; cout<<"Bestia nie pozostaje Ci dluzna, kontratakuje w wyniku czego tracisz "<<atakorca<<"pkt zycia"<<endl; zycie -= atakorca; orc -= atak; krecha(); if (orc <= 0) { krecha(); cout<<"Zabiles Orca!"<<endl; int ilezlota = 20 + (int)(rand() / (RAND_MAX + 1.0) * 50); cout<<"W nagrode otrzymujesz "<<ilezlota<<"gc"<<endl; zloto += ilezlota; krecha(); dane(); silaorca += 20; orc = 50 + silaorca; walka = 0; zajeborca(); } else if (zycie <= 0) { cout<<"Przegrales - Orc odniosl zwyciestwo, a Ty uciekasz do pubu - tracisz polowe zlota, a Twoj stan zycia spada do 20 ;("<<endl; walka = 0; zycie = 20; zloto /= zloto; pub(); } else { cout<<"Twoj aktualny stan zdrowia: "<<zycie<<endl; cout<<"Stan zdrowia Orca: "<<orc<<endl; cout<<"Chcesz mu jebnac jeszcze raz? (t/n)(t=tak, chce! || n=nie, spadam stad!)"<<endl; cin>>coteraz; if (coteraz == 't') { walka = 1; } else if (coteraz == 'n') { cout<<"Uciekasz, Orc smieje sie z Ciebie - Twoj honor jest zhanbiony!"<<endl; cout<<"Tracisz polowe swoich pkt zycia i polowe swojego zlota"<<endl; zycie /= zycie; zloto /= zloto; dane(); pub(); } else { cout<<"Niepoprawne polecenie!"<<endl<<endl; walka = 1; } } } } int pub() { dane(); cout<<"Jestes w pubie, co chcesz zrobic? (o/n/z/p)(o=odpoczac || n=napic sie piwka || z=zjesc obiad || p=powrot na droge)"<<endl; cin>>coteraz; if (coteraz == 'o') { cout<<"Odpoczynek zregeneruje 5pkt zycia, ale zajmie minute - chcesz kontynuowac? (t/n)(t=tak || n=nie)"<<endl; cin>>coteraz; if (coteraz == 't') { sleep(1000); zycie += 5; cout<<"jebane Orci czekaja..."<<endl; pub(); } else if (coteraz == 'n') { pub(); } else { cout<<"Niepoprawne polecenie!"<<endl<<endl; pub(); } } else if (coteraz == 'n') { cout<<"Piwo zregeneruje 10pkt zycia, ale kosztuje 20gc - chcesz kontynuowac? (t/n)(t=tak || n=nie)"<<endl; cin>>coteraz; if (coteraz == 't') { if (zloto >= 20) { zloto -= 20; zycie += 10; pub(); } else { cout<<"Przykro mi, dzisiaj nic nie wypijesz - masz "<<zloto<<"gc"<<endl; pub(); } } else if (coteraz =='n') { pub(); } else { cout<<"Niepoprawne polecenie!"<<endl<<endl; pub(); } } else if (coteraz == 'z') { cout<<"Obiad kosztuje 30gc, regeneruje 20pkt zycia - kontynuowac? (t/n)(t=tak || n=nie)"<<endl; cin>>coteraz; if (coteraz == 't') { if (zloto >= 30) { zloto -= 30; zycie += 20; pub(); } else { cout<<"Przykro mi, dzisiaj nic nie zjesz - masz "<<zloto<<"gc"<<endl; pub(); } } else if (coteraz == 'n') { pub(); } else { cout<<"Niepoprawne polecenie!"<<endl<<endl; pub(); } } else if (coteraz == 'p') { main(); } else { cout<<"Niepoprawne polecenie!"<<endl<<endl; pub(); } } int zajeborca() { cout<<"Na Twojej drodze stoi Orc"<<endl; cout<<"Po uwaznej obserwacji stwierdzasz, ze ma on "<<orc<<"punktow zycia"<<endl; cout<<"Co chcesz zrobic? (a/u/p)(a=atak || u=ucieczka || p=powrot do pubu)"; cin>>coteraz; if (coteraz == 'a') { walka = 1; atak(); } else if (coteraz == 'u') { cout<<"Mezny woj nigdy nie ucieka!"<<endl; cout<<"Zhanbiles swoj honor!"<<endl; cout<<"GAME OVER!"<<endl; return 0; } else if (coteraz == 'p') { pub(); } else { cout<<"Niepoprawne polecenie!"<<endl<<endl; zajeborca(); } } int gra() { zajeborca(); } int main() { cout<<"Gra 'Orc Rider v0.2' autorstwa komeniusz'a - chcesz zagrac? (t/n)"; cin>>chceszzagrac; if (chceszzagrac == 't') { krecha(); cout<<"|Jestes meznym wojem o imieniu Tuck------------------------------------------------"<<endl; cout<<"|Zle Orci napadly na Twoja wioske, kiedy Ty zabawiales sie w pubie------------------"<<endl; cout<<"|Zniszczyly wszystko, a na dodatek porwaly Twoja zone!-------------------------------"<<endl; cout<<"|Twoim zadaniem jest ocalenie zony i innych dziewic z wioski z rak okrutnych bestii!--"<<endl; krecha(); dane(); gra(); } else if (chceszzagrac == 'n') { cout<<"To po chuj wlaczasz gre w, ktora nie chcesz grac?"<<endl; return 0; } else { cout<<"Niepoprawne polecenie!"<<endl; main(); } }
[/codesyntax]
Źródła
W trakcie pisania kursu korzystałem z strony 4 programmers, na której można znaleźć wiele ciekawych informacji.
Czytelnik chcący pogłębić swoją wiedzę z zakresu C++ powinien przeczytać Megatutorial “Od zera do gier kodera” Xion’a dostępny tutaj.
OrcRider wymiata! 😉