Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef WORLD_CPP
- #define WORLD_CPP
- #include "world.h"
- #include <process.h>
- #define _BORDER -1
- #define _EMPTY 0
- #define _HEAD 1
- #define _BODY 2
- #define _COLL 3
- #define _FOOD 4
- World::World()
- {
- m_isInitialized = false;
- }
- World::World(int width, int height)
- {
- //+2 for borders
- m_Width = width + 2;
- m_Height = height + 2;
- Initialize();
- }
- World::~World()
- {
- if(m_isInitialized)
- {
- for(int i=0;i<m_Height;i++)
- {
- delete [] m_Map[i];
- m_Map[i] = 0;
- }
- delete [] m_Map;
- m_Map = 0;
- delete m_Player;
- m_Player = 0;
- delete m_score;
- m_score = 0;
- m_isInitialized = 0;
- }
- }
- void World::Draw()
- {
- for(int i=0;i<m_Height;i++)
- {
- for(int j=0;j<m_Width;j++)
- {
- switch(m_Map[i][j])
- {
- case _BORDER://border
- cout << "#";
- break;
- case _EMPTY://empty
- cout << " ";
- break;
- case _HEAD://snake head
- cout << "@";
- break;
- case _BODY://snake body
- cout << "o";
- break;
- case _COLL://snake fat body
- cout << "O";
- break;
- case _FOOD://food
- cout << "*";
- break;
- default:
- break;
- }
- }
- cout << endl;
- }
- m_drawTime = omp_get_wtime();
- }
- void World::OnCollect(int i)
- {
- m_score->OnCollect();
- m_Player->OnCollect(m_Food[i]);
- m_Food.erase(m_Food.begin() + i);
- point pt;
- pt.x = rand() % (m_Height - 2) + 1;
- pt.y = rand() % (m_Width - 2) + 1;
- bool collision = false;
- do
- {
- collision = false;
- for(int i=0;i<m_Player->GetPlayerPos().size();i++)
- if(pt.x == m_Player->GetPlayerPos().operator [](i).x && pt.y == m_Player->GetPlayerPos().operator [](i).y)
- {
- collision = true;
- break;
- }
- pt.x++;
- if(pt.x == m_Height - 1)
- {
- pt.x = 1;
- pt.y++;
- }
- if(pt.y == m_Width - 1)
- {
- pt.y = 1;
- }
- }while(collision == true);
- m_Food.push_back(pt);
- m_Map[pt.x][pt.y] = _FOOD;
- }
- int temp = 0;
- void __cdecl Prepare(void * Args)
- {
- World * world = World::GetSingletonPtr();
- while(!world->m_isFinished)
- {
- double time = omp_get_wtime();
- if(time - world->m_drawTime >= world->m_frameTime)
- {
- system("cls");
- world->m_score->OnMove();
- world->m_Player->Prepare();
- //Draw player
- vector<point> & pos = Player::GetSingletonPtr()->GetPlayerPos();
- vector<point> & coll = Player::GetSingletonPtr()->GetPlayerCollection();
- world->m_Map[pos[0].x][pos[0].y] = _HEAD;
- for(int i=1;i<pos.size();i++)
- world->m_Map[pos[i].x][pos[i].y] = _BODY;
- for(int i=0;i<coll.size();i++)
- world->m_Map[coll[i].x][coll[i].y] = _COLL;
- world->Draw();
- world->m_score->Draw();
- //Check collisions and clean map from player
- if(pos[0].x == 0 || pos[0].y == 0 || pos[0].x >= world->m_Height || pos[0].y >= world->m_Width)
- world->m_isFinished = true;
- for(int i=0;i<world->m_Food.size();i++)
- {
- if(pos[0].x == world->m_Food[i].x && pos[0].y == world->m_Food[i].y)
- world->OnCollect(i);
- }
- world->m_Map[pos[0].x][pos[0].y] = _EMPTY;
- for(int i=1;i<pos.size();i++)
- {
- if(pos[0].x == pos[i].x && pos[0].y == pos[i].y)
- world->m_isFinished = true;
- else
- world->m_Map[pos[i].x][pos[i].y] = _EMPTY;
- }
- for(int i=0;i<coll.size();i++)
- world->m_Map[coll[i].x][coll[i].y] = _EMPTY;
- }
- }
- cout << "!!!!!!!!!!!!!!!!!!!!" << endl;
- cout << "!!!!!Game Over!!!!!!" << endl;
- cout << "!!!!!!!!!!!!!!!!!!!!" << endl;
- _endthread();
- }
- void World::Initialize()
- {
- m_Map = new int*[m_Height];
- for(int i=0;i<m_Height;i++)
- {
- m_Map[i] = new int[m_Width];
- for(int j=0;j<m_Width;j++)
- {
- if(i == 0 || j == 0 || i == m_Height - 1 || j == m_Width - 1)
- m_Map[i][j] = _BORDER;
- else
- m_Map[i][j] = _EMPTY;
- }
- }
- m_drawTime = 0.0f;
- m_Player = new Player;
- m_score = new Scoreboard;
- m_frameTime = 0.125f;
- point pt;
- pt.x = m_Player->GetPlayerPos().operator [](0).x + rand() % (m_Height - 2 - m_Player->GetPlayerPos().operator [](0).x) + 1;
- pt.y = m_Player->GetPlayerPos().operator [](0).y + rand() % (m_Width - 2 - m_Player->GetPlayerPos().operator [](0).y) + 1;
- m_Food.push_back(pt);
- m_Map[pt.x][pt.y] = _FOOD;
- m_isFinished = false;
- m_isInitialized = true;
- }
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement