Mam problem z grą typu Agar.io dla dwóch osób w konsoli graficznej. Podczas kompilacji nie pojawia się żaden błąd, jednakże podczas najechania kulki z class'y BALL na jedną z kulek z class'y BALLS zmienna masa w class'ie BALL się nie zmienia (w obydwu kulkach, którymi sterują gracze). Miejsca w kodzie, które wg. mnie mogą za to odpowiadać zaznaczyłem znakami zapytania, możliwe jest jednak, że chodzi o coś innego.
Moje środowisko to Dev-C++.
System operacyjny to Windows 10.
Za pomoc z góry dziękuje!
#include <winbgim.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
class BALL
{
private:
float v;
int r,x,y;
int mass;
int rk,gk,bk;
public:
BALL();
void move1();
void move2();
void draw();
void setmassr();
int rx();
int ry();
int rr();
int rm();
};
BALL::BALL()
{
mass=100;
r=mass/2;
x=50+rand()%1230;
y=r+rand()%(720-2*r);
rk=34+rand()%221;
gk=34+rand()%221;
bk=34+rand()%221;
v=100/mass;
}
int BALL::rm()
{
return mass;
}
//////////////////////////////////////////////////////
?????????????????????????????
void BALL::setmassr()
{
mass+=5;
r++;
}
??????????????????????????????
////////////////////////////////////////////////////////////
int BALL::rr()
{
return r;
}
int BALL::rx()
{
return x;
}
int BALL::ry()
{
return y;
}
void BALL::move1()
{
v=200/mass;
if(mass>200) v=1;
//poruszanie WSAD
if(GetAsyncKeyState(0x41) & 0x8000)x-=v;
if(GetAsyncKeyState(0x44) & 0x8000)x+=v;
if(GetAsyncKeyState(0x57) & 0x8000)y-=v;
if(GetAsyncKeyState(0x53) & 0x8000)y+=v;
if(x<0+r) x=0+r;
if(x>1280-r) x=1280-r;
if(y<0+r) y=0+r;
if(y>720-r) y=720-r;
}
void BALL::move2()
{
v=200/mass;
if(mass>200) v=1;
//poruszanie strzałki
if(GetAsyncKeyState(VK_LEFT) & 0x8000)x-=v;
if(GetAsyncKeyState(VK_RIGHT) & 0x8000)x+=v;
if(GetAsyncKeyState(VK_UP) & 0x8000)y-=v;
if(GetAsyncKeyState(VK_DOWN) & 0x8000)y+=v;
if(x<0+r) x=0+r;
if(x>1280-r) x=1280-r;
if(y<0+r) y=0+r;
if(y>720-r) y=720-r;
}
void BALL::draw()
{
setcolor(COLOR(rk,gk,bk));
setfillstyle(SOLID_FILL,COLOR(rk,gk,bk));
fillellipse(x,y,r,r);
}
///////////////////////////////////////////////////////////////////////////////////////////
class BALLS
{
private:
bool show;
int x,y;
int r,g,b;
public:
BALLS();
void draw();
void check(BALL);
};
BALLS::BALLS()
{
show=true;
x=10+rand()%1260;
y=10+rand()%700;
r=34+rand()%221;
g=34+rand()%221;
b=34+rand()%221;
}
////////////////////////////////////////////////////////////////////////////////////////////////
??????????????????????????????????????????????
void BALLS::check(BALL b)
{
if((x>b.rx()-b.rr())&&(x<b.rx()+b.rr())&&(y>b.ry()-b.rr())&&(y<b.ry()+b.rr())&&(show==true))
{
b.setmassr();
show=false;
}
}
?????????????????????????????????????????????
///////////////////////////////////////////////////////////////////////////////////////////
void BALLS::draw()
{
if(show==true)
{
setfillstyle(SOLID_FILL,COLOR(r,g,b));
setcolor(COLOR(r,g,b));
fillellipse(x,y,5,5);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////
int main()
{
srand(time(0));
initwindow(1280,720);
BALL b[2];
BALLS bs[500];
char buff[40];
int page=1;
while(1)
{
b[0].move1();
b[1].move2();
for(int j=0;j<2;j++)
{
for(int i=0;i<500;i++)
{
bs[i].check(b[j]);
bs[i].draw();
}
}
for(int i=0;i<2;i++)
{
b[i].draw();
}
sprintf(buff,"mass: %i \n r: %i",b[0].rm(),b[0].rr());
outtextxy(20,50,buff);
delay(1);
setactivepage(page);
setvisualpage(1-page);
page=1-page;
cleardevice();
}
getch();
return 0;
}