Zastosowania biblioteki newconio - gra Bombowiec

Zapoznaj się z materiałami przedstawionymi na poprzednich zajęciach koła:

 

Utwórz nowy katalog projektowy. Skopiuj do niego pliki biblioteki:

newconio.cpp  -  plik źródłowy biblioteki
newconio.h  - plik nagłówkowy dla biblioteki

Utwórz nowy projekt konsoli w Dev-C++. Do projektu dodaj plik źródłowy newconio.cpp z twojego katalogu projektowego.

 

Napiszemy prostą grę zręcznościową - BOMBOWIEC. Reguły są następujące:

Nad miastem lata bombowiec, który zrzuca bomby. Bomba niszczy całkowicie jeden budynek. Naraz można zrzucić tylko jedną bombę. Druga jest dostępna wtedy, gdy pierwsza bomba doleci do ziemi. Samolot zniża swój lot po każdym przelocie nad miastem. Gra kończy się katastrofą, gdy samolot uderzy w niezniszczony dom lub wykonaniem misji, gdy wszystkie domy w mieście zostaną zburzone.

 

// Bombowiec
// (C)2008 Koło informatyczne w I LO w Tarnowie
// Kurs programowania w C++ dla początkujących
//--------------------------------------------

#include <cstdlib>
#include "newconio.h"

// Ekran tytułowy gry
//-------------------

void tytul()
{
  textattr(0x17); clrscr();
  textcolor(YELLOW);     center(24,"B O M B O W I E C");
  textcolor(LIGHTGREEN); center(26,"(C) 2008 KI w I-LO w Tarnowie");
  textcolor(WHITE);      center(49,_pl("Naciśnij dowolny klawisz, aby rozpocząć grę..."));

  while(!getch());      // czeka na dowolny klawisz

}


// Sprawdza, czy gracz chce ponownie zagrać
//-----------------------------------------

bool jeszcze_raz()
{
  char c;
  textbackground(YELLOW);
  textcolor(RED); center(49," Grasz jeszcze raz? (t = TAK) ");

  while(!(c = getch()));  // czeka na klawisz
  return c == 't';        // zwraca true, gdy naciśnięto klawisz t
}

// Rysuje planszę gry
//-------------------

void plansza()
{
  fillrect(' ',0xb0,0,0,79,48);  // niebo
  fillrect(' ',0x20,0,49,79,49); // trawka

  for(int i = 10; i < 70; i++)   // bloki
    fillrect('_', rand() % 128,i,25 + rand() % 15,i,48);     
}

// Test na wyburzone miasto
//-------------------------

bool zburzone()
{
  for(int i = 10; i < 70; i++)
    if(getchxy(i,48) != ' ') return false;

  return true;     
}

// Lot bombowca
//-------------

void lot_bombowy()
{
  int sx,sy,bx,by;
  
  sx = sy = 0;  // współrzędne samolotu
  by = 49;      // wysokość bomby - 49 = bomba na trawce, czyli nieaktywna

  while(true)
  {
     putxy('>',0xb1,sx,sy);                // samolot

     if(by < 49) putxy('*',0xce,bx,by);    // bomba

     delay(50);                            // opóźnienie

     putxy(' ',0xb1,sx++,sy);              // maże samolot i przesuwa go w prawo

     if(sx == 80)                          // jeśli wyszedł poza prawą krawędź okna
     {
       sx = 0; sy++;                       // ustawia go na początku następnego wiersza
     }

     if(getchxy(sx,sy) != ' ')             // sprawdza, czy samolot nie zderzył się z blokiem
     {
       putxy('#',0xcf,sx,sy);              // jeśli tak, kończy lot   :(
       break;                  
     }

     if(by < 49) putxy(' ',0xb1,bx,by++);  // sprawdza, czy leci jakaś bomba
                                           // jeśli tak. maże ją i przesuwa w dół
     if(kbhit())                           // sprawdza, czy naciśnięto jakiś klawisz
     {
       while(!getch());                    // jeśli tak, pozbywa się go z bufora klawiatury
       if(by == 49)                        // i zrzuca bombę o ile jakaś już nie leci
       {
         by = sy; bx = sx;                 // początkowe współrzędne bomby
       }           
     }

     if(zburzone())                        // test, czy miasto jest wyburzone
     {
       textcolor(WHITE); textbackground(BLACK); center(25,"***  BRAWO!!!  ***");
       break;          
     }
  }
}

// Program główny
//---------------

main()
{
  _cinit();

  srand((unsigned)time(NULL));   // inicjuje generator liczb pseudolosowych

  fullscreen(true);
  cursoroff();
  tytul();

  do
  {
    plansza();
    lot_bombowy();          
  } while(jeszcze_raz());

  fullscreen(false);
  cursoron();
}
obrazek

obrazek

 


   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2024 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.

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