Advertisement
Guest User

Simple Game in C++

a guest
Sep 22nd, 2011
11,016
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.81 KB | None | 0 0
  1. // Wejscie wyjscie. Wypisywanie tekstu
  2. #include <iostream>
  3. // system(), Beep(), sleep()
  4. #include <windows.h>
  5. // getch()
  6. #include <conio.h>
  7. // vector
  8. #include <vector>
  9.  
  10. // Stale typu int
  11. int const MAP_X = 20;
  12. int const MAP_Y = 30;
  13.  
  14. using namespace std;
  15.  
  16. // Przechowuje pozycję na plaszczyznie 2d
  17. struct Position2D {
  18.     int x, y;
  19. };
  20.  
  21. // Glowna klasa gry
  22. class Game {
  23.  
  24.     Position2D player;
  25.     vector<Position2D> monsters;
  26.     int score;
  27.     int monster_selected;
  28. public:
  29.     Game() : monster_selected(0), score(0) {
  30.     // Pozycja gracza na start
  31.         player.x = 10;
  32.         player.y = 15;
  33.  
  34.     }
  35.     // Przegrana
  36.     void fail() {
  37.         system("cls");
  38.         cout << "GAME OVER!" << endl;
  39.         cout << "Monsters: " << monster_selected << endl;
  40.         cout << "Score: " << score * monster_selected  << endl;
  41.         Beep(500, 200);
  42.         Beep(500, 200);
  43.         Beep(500, 200);
  44.         system("pause");
  45.         exit(1);
  46.     }
  47.     // Start gry
  48.     void start() {
  49.         system("title game");
  50.         char menu = 'f';
  51.  
  52.         cout << "Select number of monsters" << endl;
  53.         cout << "a) 1, b) 2, c) 3, d)4 " << endl;
  54.         cin >> menu;
  55.  
  56.         switch(menu)
  57.         {
  58.             case 'a':
  59.                 create_monsters(1);
  60.                 monster_selected = 1;
  61.             break;
  62.             case 'b':
  63.                 create_monsters(2);
  64.                 monster_selected = 2;
  65.             break;
  66.             case 'c':
  67.                 create_monsters(3);
  68.                 monster_selected = 3;
  69.             break;
  70.             case 'd':
  71.                 create_monsters(4);
  72.                 monster_selected = 4;
  73.             break;
  74.             default:
  75.                 create_monsters(4);
  76.                 monster_selected = 4;
  77.         }
  78.  
  79.         cout << monster_selected << endl;
  80.     }
  81.  
  82.     // Stworzenie potworow
  83.     void create_monsters(int number)
  84.     {
  85.         // Tworzy potwory
  86.         Position2D monster = {19, 29};
  87.         Position2D monster2 = {0, 0};
  88.         Position2D monster3 = {0, 29};
  89.         Position2D monster4 = {19, 0};
  90.  
  91.         // Wrzuca stworzone potwory do wektora
  92.         // w zeleznosci od tego ile zostalo wybranych
  93.         switch(number)
  94.         {
  95.             case 1:
  96.                 monsters.push_back(monster);
  97.             break;
  98.             case 2:
  99.                 monsters.push_back(monster);
  100.                 monsters.push_back(monster2);
  101.             break;
  102.             case 3:
  103.                 monsters.push_back(monster);
  104.                 monsters.push_back(monster2);
  105.                 monsters.push_back(monster3);
  106.             break;
  107.             case 4:
  108.                 monsters.push_back(monster);
  109.                 monsters.push_back(monster2);
  110.                 monsters.push_back(monster3);
  111.                 monsters.push_back(monster4);
  112.             break;
  113.         }
  114.     }
  115.  
  116.     // Podnosi wynik
  117.     void score_up() {
  118.         score++;
  119.     }
  120.  
  121.     // Zwraca referencje do wektora Position2D
  122.     // ktorzy przechowuje pozycje potworow
  123.     vector<Position2D>& return_ref_to_monster() {
  124.         return monsters;
  125.     }
  126.  
  127.     // Przesuwa gracza
  128.     void move_player()
  129.     {
  130.         // Pobiera klawisz do zmiennej move
  131.         char move = getch();
  132.  
  133.         switch(move)
  134.         {
  135.             case 'w':
  136.                 if(player.x-1 == -1)
  137.                     break;
  138.                 else
  139.                     player.x--;
  140.             break;
  141.             case 's':
  142.                 if(player.x+1 == MAP_X)
  143.                     break;
  144.                 else
  145.                 player.x++;
  146.             break;
  147.             case 'a':
  148.                 if(player.y-1 == -1)
  149.                     break;
  150.                 else
  151.                 player.y--;
  152.             break;
  153.             case 'd':
  154.                 if(player.y+1 == MAP_Y)
  155.                     break;
  156.                 else
  157.                 player.y++;
  158.             break;
  159.         }
  160.     }
  161.  
  162.     // "ai" potworow
  163.     void monster_ai() {
  164.  
  165.         // Prosty algorytm goniacego Ai
  166.         for(int i = 0; i < monsters.size(); i++)
  167.         {
  168.             if(monsters[i].x < player.x)
  169.                 monsters[i].x++;
  170.             if(monsters[i].x > player.x)
  171.                 monsters[i].x--;
  172.             if(monsters[i].y < player.y)
  173.                 monsters[i].y++;
  174.             if(monsters[i].y > player.y)
  175.                 monsters[i].y--;
  176.             if(monsters[i].x < player.x)
  177.             monsters[i].x++;
  178.  
  179.             // Jezeli jakis potwor ma takie same pozycje jak gracz
  180.             // To znaczy, ze go zlapal wiec koniec gry
  181.             if(monsters[i].y == player.y && monsters[i].x == player.x)
  182.             {
  183.                 cout << "Got you!" << endl;
  184.                 fail();
  185.             }
  186.         }
  187.  
  188.     }
  189.  
  190.     // Zwraca referencje do Position2D przechowujacego
  191.     // pozycje gracza
  192.     Position2D& return_ref_to_player() {
  193.         return player;
  194.     }
  195.  
  196. };
  197.  
  198. class Map {
  199.     // Mapa gry
  200.     int map[MAP_X][MAP_Y];
  201.  
  202. public:
  203.     // Zeruje mape
  204.     Map() {
  205.         for(int i = 0; i < MAP_X; i++)
  206.         {
  207.             for(int j = 0; j < MAP_Y; j++)
  208.             {
  209.                 map[i][j] = 0;
  210.             }
  211.         }
  212.     }
  213.  
  214.     // Rysuje mape
  215.     void draw() {
  216.         for(int i = 0; i < MAP_X; i++)
  217.         {
  218.             for(int j = 0; j < MAP_Y; j++)
  219.             {
  220.                 // Zamienia liczy na
  221.                 // odpowiednie znaki graficzne
  222.                 switch(map[i][j])
  223.                 {
  224.                     case 0:
  225.                         cout << ".";
  226.                     break;
  227.                     case 1:
  228.                         cout << "M";
  229.                     break;
  230.                     case 2:
  231.                         cout << "@";
  232.                     break;
  233.                 }
  234.             }
  235.             // Kolejny wiersz mapy
  236.             cout << endl;
  237.         }
  238.     }
  239.  
  240.     // Resetuje mape
  241.     void reset() {
  242.         for(int i = 0; i < MAP_X; i++)
  243.         {
  244.             for(int j = 0; j < MAP_Y; j++)
  245.             {
  246.                 map[i][j] = 0;
  247.             }
  248.  
  249.         }
  250.     }
  251.     // Umieszcza gracza na mapie
  252.     void put_player(Position2D& player) {
  253.         map[player.x][player.y] = 2;
  254.     }
  255.  
  256.     // Umieszcza potwory na mapie
  257.     void put_monster(vector<Position2D>& monsters) {
  258.         for(int i = 0; i < monsters.size(); i++)
  259.         {
  260.             map[monsters[i].x][monsters[i].y] = 1;
  261.         }
  262.     }
  263. };
  264.  
  265. int main()
  266. {
  267.     // Obiekty typu Map i Game
  268.     Map m;
  269.     Game g;
  270.  
  271.     // Start gry
  272.     g.start();
  273.  
  274.     // Glowna petla gry
  275.     for(;;) {
  276.         m.reset();
  277.         m.put_player(g.return_ref_to_player());
  278.         m.put_monster(g.return_ref_to_monster());
  279.         m.draw();
  280.         g.monster_ai();
  281.         g.move_player();
  282.         g.score_up();
  283.         system("cls");
  284.     }
  285.     return 0;
  286. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement