Witam,
Czy mógłby mi ktoś pomoc znaleźć błąd w kodzie programu? Ja siedze i patrze i patrze i nie mam pojecia co jest nie tak, może jak ktoś spojrzy "świeżym" okiem to powie mi co jest źle.
// GRA.H--------------------------------------------------------------
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <vector>
using namespace std;
int const MAP_X=20;
int const MAP_Y=30;
struct Position2D
{
int x, y;
};
class Game
{
private:
Position2D player;
vector<Position2D> monsters;
int score;
int monster_selected;
bool not_failed;
public:
Game() : monster_selected(0), score(0), not_failed(true)
{
player.x=10;
player.y=15;
}
void fail ();
bool fail_check()
{
return not_failed;
}
void start();
void create_monsters(int);
void score_up()
{
score++;
}
vector<Position2D>& return_ref_to_monster()
{
return monsters;
}
void move_player();
void monster_ai();
Position2D& return_ref_to_player()
{
return player;
}
};
class Map
{
private:
int mapa[MAP_X][MAP_Y];
public:
Map()
{
for(int i=0;i<MAP_X;i++)
{
for(int j=0;j<MAP_Y;j++)
{
mapa[i][j]=0;
}
}
}
void draw();
void reset();
void put_player(Position2D& player)
{
mapa[player.x][player.y]=2;
}
void put_monster(vector<Position2D>& monsters)
{
for(int i=0;i<monsters.size();i++)
{
mapa[monsters[i].x][monsters[i].y]=1;
}
}
};
//GRA.CPP-------------------------------------------------------
#include "gra.h"
void Game::fail()
{
system("cls");
cout << "GAME OVER!"<<endl;
cout<< "Monsters: "<< monster_selected<<endl;
cout<< "Score: "<< score * monster_selected<<endl;
Beep(500, 200);
Beep(500, 200);
Beep(500, 200);
not_failed = false;
}
void Game::start()
{
system ("title Simple Game");
char menu='f';
cout<<"------------------------"<<endl
<<"--WITAJ W PROSTEJ GRZE--"<<endl
<<"------------------------"<<endl
<<"Wybierz liczbe potworow"<<endl
<<"a)1, b)2, c)3, d)4"<<endl;
cin>>menu;
switch(menu)
{
case 'a':
create_monsters(1);
monster_selected =1;
break;
case 'b':
create_monsters(2);
monster_selected =2;
break;
case 'c':
create_monsters(3);
monster_selected =3;
break;
case 'd':
create_monsters(4);
monster_selected =4;
break;
}
not_failed = true;
system ("cls");
}
void Game::create_monsters(int number)
{
Position2D monster = {19,29};
Position2D monster2 = {0,0};
Position2D monster3 = {0,29};
Position2D monster4 = {19,0};
switch(number)
{
case 1:
monsters.push_back(monster);
break;
case 2:
monsters.push_back(monster);
monsters.push_back(monster2);
break;
case 3:
monsters.push_back(monster);
monsters.push_back(monster2);
monsters.push_back(monster3);
break;
case 4:
monsters.push_back(monster);
monsters.push_back(monster2);
monsters.push_back(monster3);
monsters.push_back(monster4);
break;
}
}
void Game::move_player()
{
char ruch = getch();
switch(ruch)
{
case 'w':
if(player.x-1==-1)
break;
else
player.x--;
break;
case 's':
if(player.x+1==MAP_X)
break;
else
player.x++;
break;
case 'a':
if(player.y-1==-1)
break;
else
player.y--;
break;
case 'd':
if(player.y+1==MAP_Y)
break;
else
player.y++;
break;
}
}
void Game::monster_ai()
{
for(int i=0;i<monsters.size();i++)
{
if(monsters[i].x<player.x)
monsters[i].x++;
if(monsters[i].x>player.x)
monsters[i].x--;
if(monsters[i].y<player.y)
monsters[i].y++;
if(monsters[i].y>player.y)
monsters[i].y--;
if(monsters[i].x<player.x)
monsters[i].x++;
if(monsters[i].y==player.y && monsters[i].x==player.x)
{
cout<< "MAM CIE!" << endl;
fail();
}
}
}
void Map::draw()
{
for(int i=0;i<MAP_X;i++)
{
for(int j=0;j<MAP_Y;j++)
{
switch(mapa[i][j])
{
case 0:
cout <<".";
break;
case 1:
cout <<"M";
break;
case 2:
cout <<"@";
break;
}
}
cout << endl;
}
}
void Map::reset()
{
for(int i=0;i<MAP_X;i++)
{
for(int j=0;j<MAP_Y;j++)
{
mapa[i][j]=0;
}
}
}
//MAIN.CPP---------------------------------------------------
#include "gra.h"
using namespace std;
int main()
{
Map m;
Game g;
g.start();
while(g.fail_check())
{
m.reset();
m.put_player(g.return_ref_to_player());
m.put_monster(g.return_ref_to_monster());
m.draw();
g.monster_ai();
g.move_player();
g.score_up();
system("cls");
}
return 0;
}