Witam! Mam taki projekt z użycie biblioteki graficznej allegro 5.
main.cpp:
#include <allegro5/allegro.h>
#include "kolizja.h"
#include <allegro5/allegro_image.h>
#include <allegro5/allegro_native_dialog.h>
#include <allegro5/allegro_font.h>
int szer=320, wys=240, rozm=10, x=140, y=100, punkty=0;
bool kolizja = 0;
int main()
{
al_init();
al_install_keyboard();
al_init_font_addon();
al_init_image_addon(); // inicjowanie bitmap, możliwości odczytu jak i zapisu bitmap.
al_shutdown_image_addon(); //wyłączenie bitmap.
ALLEGRO_KEYBOARD_STATE klawiatura;
ALLEGRO_DISPLAY *okno = al_create_display( szer, wys);
al_set_window_title( okno,"LZ 129");
ALLEGRO_BITMAP *kwadrat = al_create_bitmap(rozm,rozm);
ALLEGRO_FONT *font8 = al_create_builtin_font();
//ALLEGRO_BITMAP *andrzej = al_load_bitmap("andrzej.png");
al_set_target_bitmap(kwadrat);
al_clear_to_color(al_map_rgb(200,10,0));
al_set_target_bitmap(al_get_backbuffer(okno));
double czas = al_get_time();
while( !al_key_down( &klawiatura, ALLEGRO_KEY_ESCAPE))
{
Kwadrat k1;
al_get_keyboard_state(&klawiatura);
if ( al_get_time() > czas + 0.01)
{
if ( al_key_down(&klawiatura, ALLEGRO_KEY_RIGHT ) && x < szer-rozm && k1.kolizje() == 0) x=x+1 ;
if ( al_key_down(&klawiatura, ALLEGRO_KEY_LEFT ) && x > 0 && k1.kolizje() == 0) x=x- 1 ;
if ( al_key_down(&klawiatura, ALLEGRO_KEY_DOWN ) && y < wys -rozm && k1.kolizje() == 0) y=y+1 ;
if ( al_key_down(&klawiatura, ALLEGRO_KEY_UP ) && y > 0 && k1.kolizje() == 0) y=y- 1 ;
czas = al_get_time();
}
al_clear_to_color(al_map_rgb_f(0.5,0.5,0.5));
al_draw_bitmap (kwadrat,x,y,0);
al_draw_textf(font8,al_map_rgb(255,255,0), 10, 10, 0,"x=%3d , y=%3d", x, y);
al_flip_display();
al_rest(0.001);
}
al_destroy_bitmap(kwadrat);
al_destroy_display(okno);
return 0;
}
kolizja.h:
#include <iostream>
using namespace std;
class Kwadrat // tylko dla tworzenia obiektu jakim jest kwadrat
{
public:
int x_ob;
int y_ob;
int rozm_ob;
Kwadrat(int=100, int=100, int=25);
~Kwadrat();
bool kolizje(); // sprawdza czy wystepuje kolizja miedzy postacia, a obiektem k1 . Jeżeli to prawda zwraca 1, jeżeli nie - 0.
};
kolizja.cpp:
#include <iostream>
#include "kolizja.h"
using namespace std;
Kwadrat::Kwadrat(int x_obiektu, int y_obiektu, int rozm_obiektu){
x_ob = x_obiektu;
y_ob = y_obiektu;
rozm_ob = rozm_obiektu;
}
bool Kwadrat::kolizje(int x, int y, int rozm, bool kolizja, int k1.x_ob, int k1.y_ob){
if ( k1.y_ob == y + rozm /2 || k1.x_ob == x + rozm /2 )
{
kolizja = 1;
}
else{
kolizja = 0;
}
return kolizja;
}
Kwadrat::~Kwadrat(){
//pusto, nie ma po czym czyscic pamieci
}
I otrzymuję nasępujące błędy:
1. error: expected ',' or '...' before '.' token
2. error: prototype for 'bool Kwadrat::kolizje(int, int, int, bool, int)' does not match any in class 'Kwadrat'
3. error: candidate is: bool Kwadrat::kolizje()
Dodam, że nigdy nie miałem takich błędów, a błąd 1 znika, gdy usunie się kropki ze zmiennych w funkcji kolizje(); , ale wtedy kod jest nieporawny. Przepraszam z góry za błędy i głupoty, ale uczę sie dopiero OOP C++.