Commit c6931e48 by Patryk Czarnik

Dodatkowa 'gra' z innych zajęć.

parent 88daa8e9
/*
Napisz grę polegającą na poszukiwaniu skarbu na dwuwymiarowej planszy o rozmiarach 10 na 10.
Plansza jest wirtualna - nie trzeba ani w pamięci tworzyć żadnych tablic, ani żadnej planszy wyświetlać :)
Program na początku losuje położenie skarbu na planszy (współrzędne x i y)
oraz początkowe położenie gracza.
Następnie w pętli użytkownik może wprowadzać komendy zmieniające położenie gracza.
(np. po polsku G D L P, albo po angielsku U D L R, albo konwencja graczy W S A D)
Po każdym ruchu użytkownik powinien otrzymywać informację o tym, czy zmierza w dobrym kierunku.
Wyjście poza planszę oznacza porażkę - koniec gry.
Wejście przez gracza na pozycję skarbu oznacza wygraną.
Po znalezieniu skarbu program wypisuje gratulacje i informację o liczbie ruchów
wykorzystanych przez użytkownika na dojście do celu.
Ten program dla urozmaicenia będzie napisany w C :-)
(tak naprawdę łatwiej pisało się z użyciem printf niż cout)
Kompilujcie gcc skarb.c
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>
const int SIZE = 10;
const int PODPOWIADANIE = 1; // true
int losuj(int limit)
// zwraca liczbę z zakresu od 0 do limit-1
{
return rand() % limit;
}
int main()
{
srand(time(0));
int skarb_x = losuj(SIZE);
int skarb_y = losuj(SIZE);
int gracz_x = losuj(SIZE);
int gracz_y = losuj(SIZE);
if(PODPOWIADANIE) {
printf("Pozycja skarbu: (%d , %d)\n", skarb_x, skarb_y);
}
int stan_gry = 0;
int liczba_krokow = 0;
while(stan_gry == 0) {
if(PODPOWIADANIE) {
printf("\nAktualna pozycja: (%d , %d)\n", gracz_x, gracz_y);
}
int stara_odleglosc = abs(skarb_x - gracz_x) + abs(skarb_y - gracz_y);
printf("Podaj ruch [WSAD] lub przerwij [Q]: ");
char ruch;
scanf("%c", &ruch);
switch(toupper(ruch)) {
case 'W' : gracz_y--; break;
case 'S' : gracz_y++; break;
case 'A' : gracz_x--; break;
case 'D' : gracz_x++; break;
case 'Q' :
stan_gry = 2;
printf("Poddajesz się?...\n");
continue;
default:
printf("Nie ma takiej komendy\n");
continue;
}
liczba_krokow++;
if(gracz_x < 0 || gracz_x > 9 || gracz_y < 0 || gracz_y > 9) {
printf("Wypadasz poza planszę\n");
stan_gry = 2;
break;
}
if(gracz_x == skarb_x && gracz_y == skarb_y) {
stan_gry = 1;
break;
}
int nowa_odleglosc = abs(skarb_x - gracz_x) + abs(skarb_y - gracz_y);
if(nowa_odleglosc < stara_odleglosc) {
printf("Zbliżasz się do skarbu\n");
} else {
printf("Oddalasz się od skarbu\n");
}
}
switch(stan_gry) {
case 1:
printf("Wygrana, gratulacje!\nZajęło Ci to %d kroków.\n", liczba_krokow);
break;
case 2:
printf("Przegrana :(\n");
break;
default:
printf("Nie wiem co się stało\n");
}
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment