Forum www.allegro2d.fora.pl Strona Główna

www.allegro2d.fora.pl
Forum na temat biblioteki Allegro
 

[C++]Bardzo prosta gierka

 
Napisz nowy temat   Odpowiedz do tematu    Forum www.allegro2d.fora.pl Strona Główna -> Kursy
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
michalos13
Administrator



Dołączył: 03 Mar 2009
Posty: 27
Przeczytał: 0 tematów

Pomógł: 1 raz
Ostrzeżeń: 0/5

PostWysłany: Sob 22:28, 07 Mar 2009    Temat postu: [C++]Bardzo prosta gierka

Napisałem kiedyś tego tutorka dla początkujących, aby pokazać że w konsoli też można robić fajne gierki. Wersja video jest tutaj:

http://www.youtube.com/watch?v=t_hXpIG_k0w

Chyba każdy początkujący programista chce napisać własną gierkę. Ładna graficzka, muzyczka i te sprawy. No może teraz takiej gierki nie napiszemy, ale pokażę wam jakie fajne gierki można robić w konsoli.

To zaczynajmy! Na początek dam cały kod gierki, żebyście się z nim zapoznali ;-p Tu link: [link widoczny dla zalogowanych]

No dobra, wyjaśniać trzy pierwsze linijki kodu specjalnie wyjaśniać nie będę, powiem tylko (dla niewtajemniczonych xD) że za pomocą dyrektywy #include dołączamy plik nagłówkowy(bibliotekę zawierającą jakieś funkcje, zmienne itp.) Dalej napotykamy linijkę:
using namespace std;
Dzięki niej, chcąc wyświetlić tekst nie musimy pisać:
std::cout << "Jakiś tekst" << std::endl;
Tylko wystarczy
cout << "Jakiś tekst" << endl;
Proste, prawda Wink
Później mamy zmienne, dwie pierwsze typu int, przechowywać one będą u nas położenie ludka na osi x oraz na osi y(wyjaśniać specjalnie chyba nie trzeba xD)Ustawiamy od razu ich wartość na 0 żeby nie była to przypadkowa wartość. Później zmienna typu bool o nazwie koniec. Będzie ona przechowywała tylko dwie wartości - prawda lub fałsz (po ang. true or false), które informować nas będą czy gra się skończyła czy nie. Wartość tej zmiennej również ustalamy, na początek false żeby nie było że gra od razu się kończy ;-p Zmienna typu char o nazwie ruch będzie przechowywała to co nacisnąl gracz na klawie, na podstawie tego będziemy wiedzieli jak poruszać ludkiem (w górę, w dół, w lewo, czy może w prawo).

Ok, mamy już potrzebne nam zmienne, więc teraz je wykorzystamy w głównej funkcji main(); Jak widzisz pisze tam takie coś jak:

Cytat:
while (!koniec)
{
}

To jest pętla while która wykonuje polecenia w niej zawarte kiedy warunek (podany w nawiasie) jest spełniony. No i my też podaliśmy ten warunek w nawiasie, może jedyną tajemnicą pozostaje ten znak ! nie oznacza on że będziemy krzyczeć ;} To operator logiczny, inaczej, mówi nam że coś nie równa się czemuś. Zmienna koniec jest typu bool, więc jak już mówiłem przechowuje dwie wartości, kiedy napiszemy !koniec to warunek jest spełniony wtedy gdy koniec nie równa się true (można napisać tak: while(!koniec == true) ale jeśli się nie poda wartości to automatycznie kompilator bierze wartość tej zmiennej = true (mam nadzieję że nie zaplątałem tego Wink)

Kiedy już wiemy czym jest pętla while, to możemy w niej napisać kod który ma sie wykonywać dopóki warunek jest spełniony. Czyli jeśli gra się jeszcze nie skończyła, to gracz może dalej grać, a więc tu określimy na czym gra ma polegać, to naprawdę fajna rzecz Wink Później widzisz tam takie cudo:
system("cls");
To jest funkcja, czyli coś co wykona się wtedy kiedy będziemy chcieli (dokładnie w tym momencie, w tym miejscu gdzie to napiszemy). Już mówię na czym polega ta funkcja, jej działanie jest bardzo proste, po prostu czyści ekran. Ale po co nam czyścić ekran? Zaraz się o tym dowiesz.

Być może dziwi cię to:

Cytat:
for(int x = 0; x < 20; x++)
{
}

To też jest pętla. Jak to przecież dowiedzieliśmy się już o jednej pętli, nazywała się while ;> Tak, ale w C++ (Zresztą w wielu językach programowania też) są dwie pętle. No i po co? Otóż różnią się od siebie, popatrz na schemat pętli while i pętli for:


Cytat:
while ( warunek )
{
//jakieś tam instrukcje
}

for( początkowa_wartość_zmiennej; warunek; wartość_zmiennej_po_wykonaniu_się_pętli)
{
//jakieś tam instrukcje
}


Więc chyba teraz powinieneś lepiej widzieć zasadę działania pętli for. Najczęściej używa się jej (ale pamiętaj że nie zawsze) kiedy chcemy żeby coś wykonywało się określoną przez nas liczbę razy.

Zobacz że tutaj jest pętla w pętli. Ale po co? i co się wtedy będzie działo. Pętla w pętli... hmmmm..... trochę dziwne jak na początek Wink Jeśli chcemy narysować na ekranie mapkę która ma dwie osie x i y, to potrzebne są dwie pętle. U nas pierwsza rysuje osie x składającą się z osi y. Trudno to wyjaśnić zwłaszcza początkującemu, dlatego jeśli chcesz dobrze tego się nauczyć, a nie rozumiesz tego co przed chwilą napisałem, to spróbuj pomyśleć jak to działa.

Dalej jest.... jakieś if, co to, po co, na co i dlaczego? If to po ang. jeśli, więc już czuć że znowu coś będzie z tymi warunkami, tak znowu warunek. Żebyś lepiej zrozumiał to znowu pokażę ci schemat if-a:


Cytat:
if ( warunek ) //tutaj instrukcja która wykona się gdy warunek jest spełniony


Ale może być i tak:


Cytat:
if ( warunek )
{
//instrukcja 1
//instrukcja 2
// instrukcja 3
//.......
}


Ten ostatni schemat if-a stosuje się wtedy gdy mamy więcej instrukcji do wykonania (wtedy znajdują się one w klamerkach {}) Przypomnę (tym co zapomnieli) że te dwa znaczki // rozpoczynają komentarz, ale mam nadzieję że nie muszę tego przypominać Wink Dobra, wiemy co to if... ale co to za dwa krzaczki && w środku if-a? To operator logiczny and (po polsku i), więc można zapodać kolejny schemat if-a:


Cytat:
if ( warunek_1 i warunek_2) //coś tam


Więc nasza instrukcja wykona się wtedy gdy oba warunki zostaną spełnione. Ale na tym nie koniec if-a (po za tym że ma jeszcze 2 operatory logiczne) pozostało nam omówić słówko else (po ang. inaczej). W naszym wypadku wygląda to tak:


Cytat:
jeśli ( y == ludek_x i x == ludek_y ) wyświetl << "x";
inaczej
wyświetl << " ";


Więc tak to wygląda to w wersji polskiej ;-p ( Aha, jeszcze zapomniałem powiedzieć co oznacza to: == to jest operator porównania (w matematyce znak = "równa się") A wracając do naszego if-a to najpierw sprawdzamy czy aktualna pozycja ludka na osi x i na osi y zgadza się z tą osią x i z tą osią y którą akurat rysujemy za pomocą dwóch pętli for. Później mamy coś takiego:
cout << "n";
To jest przejście do nowej lini (coś jak enter), potrzebne ponieważ gdy narysujemy jedną linię to trzeba przejść do nowej żeby nie rysować w tej samej.

Idziemy dalej (coraz bliżej końca), widzisz coś takiego:
ruch = getch();
getch() to funkcja pochodząca z pliku conio.h, która zwraca nam to co nacisnął gracz na klawiaturze, więc przydaje nam się, ponieważ zrobiliśmy sobie zmienną ruch po to by przetrzymywała to co chce zrobić gracz.

Następnie widzisz to:

Cytat:
switch(ruch)
{
case 'w': --ludek_y; break;
case 's': ++ludek_y; break;
case 'a': --ludek_x; break;
case 'd': ++ludek_x; break;
case 'q': koniec = true; break;
}

Switch to coś jak if ale bardziej przydatne wtedy gdy mamy kilkaa warunków, zobacz na kolejny schemat:


Cytat:
switch ( zmienna )
{
case wartość_zmiennej: //instrukcja 1;
case wartość_zmiennej: //instrukcja 2;
case wartość_zmiennej: //instrukcja 3;
//.............
}

Więc u nas się to bardzo przyda ponieważ gracz do naciśnięcia ma dużo klawiszy (u nas 5) to zamiast pisać cały czas if, else, piszemy switch-a który w takich wypadkach jest o wiele czytelniejszy. I tak np. jeśli gracz naciśnie klawisz 'w' to pozycja ludka na osi y zmieni się (zmniejszy te znaczki -- ustawione przy zmiennej zmniejszą jej wartość (w zmiennej typu int o 1) natomiast ++ zwiększy wartość zmiennej też o 1) Pozostaje wyjaśnić słówko break. Dzięki niemu kiedy gracz naciśnie klawisz 'w' to dalej nie będzie sprawdzało nam czy został naciśnięty klawisz np 's'. Więc kiedy gracz naciśnie 'w' to pójdzie do góry zamiast we wszystkie strony xD.

I tak dobiegliśmy prawie końca, bo zostało nam tylko wyjaśnić dwie ostatnie linie kodu:

Cytat:
system("PAUSE"); // (1)
return EXIT_SUCCESS; // (2)


(1)Wyświetli na ekranie... (sam zobacz ;-p (zobaczysz wtedy gdy skompilujesz gierkę i naciśniesz 'q' na klawie))
(2)Wyłączy program, można napisać również tak:
return 0;

No i koniec, skompiluj i sobie pochodź ludkiem. Sterowanie wygląda tak:

Cytat:
w - w górę
s - w dół
a - w lewo
d - w prawo
q - wyjście


Jeśli czegoś nie rozumiesz to zajrzyj do jakiegoś ("typowego") kursu C++.


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum www.allegro2d.fora.pl Strona Główna -> Kursy Wszystkie czasy w strefie EET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
deoxBlue v1.0 // Theme created by Sopel stylerbb.net & programosy.pl

Regulamin