Advertisement
Guest User

Untitled

a guest
Nov 30th, 2015
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.15 KB | None | 0 0
  1. #ifndef WORLD_CPP
  2. #define WORLD_CPP
  3.  
  4. #include "world.h"
  5. #include <process.h>
  6.  
  7. #define _BORDER -1
  8. #define _EMPTY 0
  9. #define _HEAD 1
  10. #define _BODY 2
  11. #define _COLL 3
  12. #define _FOOD 4
  13.  
  14. World::World()
  15. {
  16.     m_isInitialized = false;
  17. }
  18.  
  19. World::World(int width, int height)
  20. {
  21.     //+2 for borders
  22.     m_Width = width + 2;
  23.     m_Height = height + 2;
  24.     Initialize();
  25. }
  26.  
  27. World::~World()
  28. {
  29.     if(m_isInitialized)
  30.     {
  31.         for(int i=0;i<m_Height;i++)
  32.         {
  33.             delete [] m_Map[i];
  34.             m_Map[i] = 0;
  35.         }
  36.         delete [] m_Map;
  37.         m_Map = 0;
  38.  
  39.         delete m_Player;
  40.         m_Player = 0;
  41.  
  42.         delete m_score;
  43.         m_score = 0;
  44.  
  45.         m_isInitialized = 0;
  46.     }
  47. }
  48.  
  49. void World::Draw()
  50. {
  51.     for(int i=0;i<m_Height;i++)
  52.     {
  53.         for(int j=0;j<m_Width;j++)
  54.         {
  55.             switch(m_Map[i][j])
  56.             {
  57.             case _BORDER://border
  58.                 cout << "#";
  59.                 break;
  60.             case _EMPTY://empty
  61.                 cout << " ";
  62.                 break;
  63.             case _HEAD://snake head
  64.                 cout << "@";
  65.                 break;
  66.             case _BODY://snake body
  67.                 cout << "o";
  68.                 break;
  69.             case _COLL://snake fat body
  70.                 cout << "O";
  71.                 break;
  72.             case _FOOD://food
  73.                 cout << "*";
  74.                 break;
  75.             default:
  76.                 break;
  77.             }
  78.         }
  79.         cout << endl;
  80.     }
  81.     m_drawTime = omp_get_wtime();
  82. }
  83.  
  84. void World::OnCollect(int i)
  85. {
  86.     m_score->OnCollect();
  87.     m_Player->OnCollect(m_Food[i]);
  88.  
  89.     m_Food.erase(m_Food.begin() + i);
  90.  
  91.     point pt;
  92.     pt.x = rand() % (m_Height - 2) + 1;
  93.     pt.y = rand() % (m_Width - 2) + 1;
  94.  
  95.     bool collision = false;
  96.  
  97.     do
  98.     {
  99.         collision = false;
  100.         for(int i=0;i<m_Player->GetPlayerPos().size();i++)
  101.             if(pt.x == m_Player->GetPlayerPos().operator [](i).x && pt.y == m_Player->GetPlayerPos().operator [](i).y)
  102.             {
  103.                 collision = true;
  104.                 break;
  105.             }
  106.         pt.x++;
  107.         if(pt.x == m_Height - 1)
  108.         {
  109.             pt.x = 1;
  110.             pt.y++;
  111.         }
  112.         if(pt.y == m_Width - 1)
  113.         {
  114.             pt.y = 1;
  115.         }
  116.     }while(collision == true);
  117.    
  118.     m_Food.push_back(pt);
  119.     m_Map[pt.x][pt.y] = _FOOD;
  120. }
  121. int temp = 0;
  122.  
  123. void __cdecl Prepare(void * Args)
  124. {
  125.     World * world = World::GetSingletonPtr();
  126.     while(!world->m_isFinished)
  127.     {
  128.         double time = omp_get_wtime();
  129.         if(time - world->m_drawTime >= world->m_frameTime)
  130.         {
  131.             system("cls");
  132.             world->m_score->OnMove();
  133.             world->m_Player->Prepare();
  134.  
  135.             //Draw player
  136.             vector<point> & pos = Player::GetSingletonPtr()->GetPlayerPos();
  137.             vector<point> & coll = Player::GetSingletonPtr()->GetPlayerCollection();
  138.  
  139.             world->m_Map[pos[0].x][pos[0].y] = _HEAD;
  140.        
  141.             for(int i=1;i<pos.size();i++)
  142.                 world->m_Map[pos[i].x][pos[i].y] = _BODY;
  143.  
  144.             for(int i=0;i<coll.size();i++)
  145.                 world->m_Map[coll[i].x][coll[i].y] = _COLL;
  146.  
  147.             world->Draw();
  148.             world->m_score->Draw();
  149.  
  150.             //Check collisions and clean map from player
  151.             if(pos[0].x == 0 || pos[0].y == 0 || pos[0].x >= world->m_Height || pos[0].y >= world->m_Width)
  152.                 world->m_isFinished = true;
  153.  
  154.             for(int i=0;i<world->m_Food.size();i++)
  155.             {
  156.                 if(pos[0].x == world->m_Food[i].x && pos[0].y == world->m_Food[i].y)
  157.                     world->OnCollect(i);
  158.             }
  159.  
  160.             world->m_Map[pos[0].x][pos[0].y] = _EMPTY;
  161.             for(int i=1;i<pos.size();i++)
  162.             {
  163.                 if(pos[0].x == pos[i].x && pos[0].y == pos[i].y)
  164.                     world->m_isFinished = true;
  165.                 else
  166.                     world->m_Map[pos[i].x][pos[i].y] = _EMPTY;
  167.             }
  168.             for(int i=0;i<coll.size();i++)
  169.                 world->m_Map[coll[i].x][coll[i].y] = _EMPTY;
  170.  
  171.         }
  172.     }
  173.     cout << "!!!!!!!!!!!!!!!!!!!!" << endl;
  174.     cout << "!!!!!Game Over!!!!!!" << endl;
  175.     cout << "!!!!!!!!!!!!!!!!!!!!" << endl;
  176.     _endthread();
  177. }
  178.  
  179. void World::Initialize()
  180. {
  181.     m_Map = new int*[m_Height];
  182.     for(int i=0;i<m_Height;i++)
  183.     {
  184.         m_Map[i] = new int[m_Width];
  185.         for(int j=0;j<m_Width;j++)
  186.         {
  187.             if(i == 0 || j == 0 || i == m_Height - 1 || j == m_Width - 1)
  188.                 m_Map[i][j] = _BORDER;
  189.             else
  190.                 m_Map[i][j] = _EMPTY;
  191.         }
  192.     }
  193.     m_drawTime = 0.0f;
  194.     m_Player = new Player;
  195.     m_score = new Scoreboard;
  196.     m_frameTime = 0.125f;
  197.  
  198.     point pt;
  199.     pt.x = m_Player->GetPlayerPos().operator [](0).x + rand() % (m_Height - 2 - m_Player->GetPlayerPos().operator [](0).x) + 1;
  200.     pt.y = m_Player->GetPlayerPos().operator [](0).y + rand() % (m_Width - 2 - m_Player->GetPlayerPos().operator [](0).y) + 1;
  201.     m_Food.push_back(pt);
  202.     m_Map[pt.x][pt.y] = _FOOD;
  203.  
  204.     m_isFinished = false;
  205.     m_isInitialized = true;
  206. }
  207.  
  208. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement