Piszę obiektowo symulację gry RPG. Napotkałem na bardzo dziwny problem, mianowicie, gdy staram się porównać wartości zwracane przez akceosory z klasy mob
w klasie arena
występuje mi wyżej wymieniony błąd w Visual Studio. Ma ktoś może pomysł na to? Na razie jestem na etapie sprawdzanie czy działa mi odnajdywanie współrzędnych mobow na arenie zrobionej z tablicy dwuwymiarowej. Używam akcesorów nie od dzisiaj i pierwszy raz się z czymś takim spotykam. Prosze o pomoc jak rozwiązać ten problem z wyjątkiem. Dodam jeszcze że zawsze się kompiluje, nie wyrzuca błędów, ale po uruchomieniu programu wlącza sie ten wyjątek. Dzięki!
arena.h
:
#pragma once
#include <string>
#include <iostream>
#include "Mob.h"
class arena
{
string arenaa[10][10];
Mob*a[10];
int ilosc_mobow;
int poziom_mobow;
int iteracja_mobow;
public:
arena();
~arena();
void inicjalizuj_arene();
void up_ilosc_mobow();
void up_poziom_mobow();
void daj_mob_wspo();
void pokaz_wspol();
void set_arena();
void show_arena();
};
#include "arena.h"
#include "Mob.h"
#include <string>
#include <iostream>
using namespace std;
arena::arena()
{
iteracja_mobow = 0;
up_ilosc_mobow();
up_poziom_mobow();
for (int i = 0; i < ilosc_mobow; i++)
{
a[i] = new Mob(poziom_mobow);
}
}
arena::~arena()
{
for (int i = 0; i < ilosc_mobow; i++)
{
a[i] = NULL;
delete a[i];
}
}
void arena::inicjalizuj_arene()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
arenaa[i][j] = " ";
}
}
}
void arena::daj_mob_wspo()
{
int j = 0;
int l = 0;
int h = 0;
for(int i = 0 ; i < ilosc_mobow; i++)
{
if (i < 3)
{
a[i]->up_wspolx(j);
j = j + 4;
a[i]->up_wspoly(l);
}
else if (i > 2 && i < 6)
{
j = 9;
a[i]->up_wspoly(l);
l = l + 4;
if (l == 12) l = 9;
a[i]->up_wspolx(j);
}
else if (i > 5 && i < 9)
{
l = 9;
j = j - 4;
h = j + 3;
a[i]->up_wspolx(h);
a[i]->up_wspoly(l);
}
else if(i>8 && i <13)
{
j =0 ;
l = l - 2;
if (l == 0)l = 2;
a[i]->up_wspolx(j);
a[i]->up_wspoly(l);
}
}
}
void arena::up_ilosc_mobow()
{
cout << "Podaj ilosc mobow, tylko parzyste. 1-10" << endl;
int r = 11;
while (r > 10|| r%2==1)
{
cin >> r;
}
ilosc_mobow = r;
}
void arena::up_poziom_mobow()
{
cout << "Podaj poziom mobow, maksymalnie 3!" << endl;
do
{
cin >> poziom_mobow;
} while (poziom_mobow > 3);
}
void arena::pokaz_wspol()
{
for (int i = 0; i < ilosc_mobow; i++)
{
cout << a[i]->a_wspol_x()<<" "<<a[i]->a_wspol_y() << endl;
}
}
void arena::set_arena()
{
int tmp_ilosc_mobow;
for(tmp_ilosc_mobow=0; tmp_ilosc_mobow<=ilosc_mobow; tmp_ilosc_mobow++)
for (int i = 0; i < ilosc_mobow; i++)
{
cout << "|";
for (int j = 0; j < ilosc_mobow; j++)
{
if (i == a[tmp_ilosc_mobow]->a_wspol_y() && j == a[tmp_ilosc_mobow]->a_wspol_x())
cout << i << "SASASAS" << j << endl;
}
cout << "|" << endl;
}
}
void arena::show_arena()
{
for (int i = 0; i < 10; i++)
{
cout << "|";
for (int j = 0; j < 10; j++)
{
cout << arenaa[i][j];
}
cout << "|" << endl;
}
}
Problem jest w metodzie set_arena()
natomiast tu jest klasa mob.h
#pragma once
#include <iostream>
#include <string>
using namespace std;
class Mob
{
int dmg;
int hp;
string name;
int exp;
int lvl;
int wspol_x;
int wspol_y;
public:
Mob(int lvll);
~Mob();
string a_name();
int a_lvl();
int a_exp();
int a_hpmax();
int a_dmg();
void image();
void up_wspolx(int a);
void up_wspoly(int a);
int a_wspol_x();
int a_wspol_y();
};
#include "Mob.h"
Mob::Mob(int lvll)
{
lvl = lvll;
if (lvl == 1)
{
dmg = 5;
hp = 5;
name = "Wilk";
exp = 10;
}
else if (lvl == 2)
{
dmg = 10;
hp = 20;
name = "Ork";
exp = 30;
}
else if (lvl == 3)
{
dmg = 30;
hp = 50;
name = "Smok";
exp = 50;
}
}
Mob::~Mob()
{
}
int Mob::a_hpmax()
{
return hp;
}
string Mob::a_name()
{
return name;
}
int Mob::a_exp()
{
return exp;
}
int Mob::a_dmg()
{
return dmg;
}
int Mob::a_lvl()
{
return lvl;
}
void Mob::image()
{
if (lvl == 1)
cout << "+";
else if (lvl == 2)
cout << "#";
else if (lvl == 3)
cout << "@";
}
void Mob::up_wspolx(int a)
{
if (a < 21)
wspol_x = a;
else
cout << "nie miesci sie na plaszny" << endl;
}
void Mob::up_wspoly(int a)
{
if (a < 21)
wspol_y = a;
else
cout << "nie miesci sie na plaszny" << endl;
}
int Mob::a_wspol_x()
{
return wspol_x;
}
int Mob::a_wspol_y()
{
return wspol_y;
}
Problem zaczyna się w akcesorach dotyczących wspolrzednych mobow na arenie :
int Mob::a_wspol_x()
{
return wspol_x;
}
int Mob::a_wspol_y()
{
return wspol_y;
}