Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Spawn Potworów [ Allegro/C++ ]


Rekomendowane odpowiedzi

Opublikowano

Od tygodnia męczę się ze zrobieniem dobrego spawnu potworów. Po prostu od razu pojawia się dziesięć i tak co chwile.

Zrobi mi ktoś to w końcu? i xxxx który chce od razu kod bo taki nie jestem, więc żeby nie było chamsko -

za dobre rozwiązanie jestem w stanie xxxxx.

 

Nie rozumiem po prostu w jaki sposób mam to respawnować i czym. Zwykłe clasy i wektory umiem robić.

Po prostu jestem człowiekiem który się uczy z doświadczeń

 

Oto kod. Mój kod

#include <allegro.h>
#include <vector>
#define al_draw_bitmap

BITMAP * teren = NULL;
BITMAP * bufor = NULL;
BITMAP *ludekb = NULL;
BITMAP *kursor = NULL;
BITMAP *czar = NULL;
BITMAP *czar2 = NULL;
BITMAP *enemyb = NULL;

class Cpostac
{
public:
int x,y;
short int kierunek, klatka;
};
Cpostac ludek;

volatile long speed = 0;

void increment_speed()
{
speed++;
}
END_OF_FUNCTION( increment_speed );
LOCK_VARIABLE( speed );
LOCK_FUNCTION( increment_speed );

int mapa_y = 0;
int mapa_x = 0;
bool tt = false;
std::vector<Cenemy> cenemy;

short int map[25][25] =
{
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,4,0,0,0,0,
0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,
0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,3,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,
0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,
0,0,4,0,0,0,0,0,0,0,0,4,3,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
};

void wys_mape()
{
int licznik_x, licznik_y;
for (licznik_x = 0; licznik_x < 100 ; licznik_x++)
{
for (licznik_y = 0; licznik_y < 100 ; licznik_y++)
{
blit(teren,bufor,
(map[licznik_y + mapa_y][licznik_x + mapa_x]%4) * 32,
(map[licznik_y + mapa_y][licznik_x + mapa_x]/4) * 32,
licznik_x * 32,licznik_y * 32,32,32);
}
}
};

inline void init()
{
allegro_init();
set_color_depth(32);
set_gfx_mode(GFX_AUTODETECT, 800, 600, 0, 0);

install_timer();
install_int_ex( increment_speed, BPS_TO_TIMER( 100 ) );
install_keyboard();
}

inline void deinit()
{
clear_keybuf();
allegro_exit();
}

int main()
{
init();
bufor = create_bitmap( 800, 600 );
ludekb = load_bmp( "ludek.bmp", default_palette );
teren = load_bmp( "teren.bmp", default_palette );
czar = load_bmp( "czar.bmp", default_palette );
czar2 = load_bmp( "czar2.bmp", default_palette );
enemyb = load_bmp( "enemy.bmp", default_palette );


int frame = 0;
ludek.x = 100;
ludek.y = 100;
ludek.klatka = 0;
ludek.kierunek = 0;

while (!key[KEY_ESC])
{
while( speed > 0 )
{
ludek.kierunek = 0;

if( key[KEY_LEFT]) { ludek.kierunek = 4; ludek.x-=2; }
if( key[KEY_RIGHT]) { ludek.kierunek = 2; ludek.x+=2; }
if( key[KEY_UP]) { ludek.kierunek = 1; ludek.y-=2; }
if( key[KEY_DOWN]) { ludek.kierunek = 3; ludek.y+=2; }

if( key[KEY_A]) { ludek.kierunek = 4; ludek.x-=2; }
if( key[KEY_D]) { ludek.kierunek = 2; ludek.x+=2; }
if( key[KEY_W]) { ludek.kierunek = 1; ludek.y-=2; }
if( key[KEY_S]) { ludek.kierunek = 3; ludek.y+=2; }

if( key[KEY_P]) { tt = !tt; }

if ( tt )
{
if( ludek.x - 10 > enemy.x ) enemy.x++;
if( ludek.x + 10 < enemy.x ) enemy.x--;
if( ludek.y - 10 > enemy.y ) enemy.y++;
if( ludek.y + 10 < enemy.y ) enemy.y--;
}

speed--;

frame++;
if( frame > 40) frame=0;

if( map[ ludek.y / 32 ][ ludek.x / 32 ] == 0 )
{
//cos tam cos tam
}

if( ludek.y <= 0 ) ludek.y = 0;
if( ludek.y >= 570 ) ludek.y = 570;
if( ludek.x <= 0 ) ludek.x = 0;
if( ludek.x >= 783 ) ludek.x = 783;


}
// Czyszczenie bufora
clear_to_color(bufor, makecol(150,150,150));

// Sterowanie animacj?
if( frame<20) { ludek.klatka = 0;}
else if( frame>=20 && frame<40) { ludek.klatka = 1; }

// wyswietlanie mapy
wys_mape();

// animacja skilla
if( key[KEY_SPACE])
{
if( frame<20) { draw_sprite( bufor, czar, ludek.x - 25, ludek.y - 25); }
else if( frame>=20 && frame<40) { draw_sprite( bufor, czar2, ludek.x - 25, ludek.y - 25); }
}
//wyswietalnie postaci

masked_blit( enemyb, bufor, ludek.kierunek*20 ,ludek.klatka*30 ,enemy.x, enemy.y, 20,30);



masked_blit( ludekb, bufor, ludek.kierunek*20 ,ludek.klatka*30 ,ludek.x, ludek.y, 20,30);
masked_blit( enemyb, bufor, ludek.kierunek*20 ,ludek.klatka*30 ,enemy.x, enemy.y, 20,30);
//napisyd
textprintf_ex(bufor, font, 10, 10, makecol(0, 0, 0),-1, "X: %d",ludek.x);
textprintf_ex(bufor, font, 10, 20, makecol(0, 0, 0),-1, "Y: %d",ludek.y);

// przeniesienie na ekran
blit( bufor, screen, 0, 0, 0, 0, 800, 600 );
}


deinit();
return 0;
}
END_OF_MAIN()

Opublikowano

Musisz jakoś dodawać kolejne potwory i przejechać pętlą przez wszystkie przy ich wyświetlaniu, można to zrobić np. za pomocą list.

Twoja stara robi catch the clowny w Game Makerze.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...