C++ #10 – Przyswojenie wiadomości

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.

One thought on “C++ #10 – Przyswojenie wiadomości

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *