Allegro5.0 i 5.1 - kilka pytań.
Witam.
Wiem, że temat niewiele mówi, prawie nic, jednakże nie mam pomysłu na inną nazwę. Oto kilka pytań dotyczący powyższych bibliotek.
1. Czy jest w allegro5 wersja 5.0 zamiennik do funkcji al_draw_filled_polygon, która jest od wersji 5.1?
2. W.w. funkcja odnosi się do biblioteki allegro5/allegro_primitives.h . Czy mogę wziąć tylko tą bibliotekę z wersją 5.1, a resztę z 5.0 i nie będzie problemów ?
2a. Jeśli nie, to jak zamalować obszar ograniczony prostymi ? Chciałem użyć coś na kształt floodfill z allegro4.
2b. Jeśli nie, to jak z kodu źródłowego zrobić działającą wersję allegro 5.1 ?
3. Szukałem u wujka google lecz nie znalazłem, może używałem złych fraz. Mówię tu o tym jak zrobić coś na kształt przycisków/paska narzędzi/menu (tylko 3- "reset", "o programie","koniec") ? Wiem,że muszę nadać flagi, jednakże nie wiem jak wygląda implementacja takiego przycisku.
W razie kolejnych pytań, edytuję post.
3. już mam odpowiedź.
EDIT::
Ok. Koniec pomysłów. Pomoże ktoś w poprawie błędów, gdyż nie wiem jak to rozgryźć, a błędy znając życie są małe :(
#include <stdio.h>
#include <allegro5/allegro5.h>
#include <allegro5/allegro_font.h>
#include <allegro5/allegro_ttf.h>
#include <allegro5/allegro_primitives.h>
#include <iostream>
#include <allegro5/allegro_image.h>
#include <math.h>
using namespace std;
class pkt {
public:
int i, j;
float a, b, d;
void pkty( float tab[ 31 ], float tab2[ 31 ] ) {
a = 0; b = 1; i = 0; j = 0;
for( a; a < 30; a++ )
{
cout << "Podaj Wysokość Punktu: " << b;
b++;
cin >> d;
tab[ i ] = 700 - d * 20;
i++;
tab2[ j ] = j * 20;
j++; }
tab[ 30 ] = tab[ 31 ] = 700;
tab2[ 30 ] = tab2[ 29 ];
tab2[ 31 ] = 0;
}
};
class rysuj
: public pkt
{
public:
int c;
void rys( float tab[ 31 ], float tab2[ 31 ] ) {
for( c = 0; c < 29; )
{
al_draw_line( tab2[ c ], tab[ c ], tab2[ c + 1 ], tab[ c + 1 ], al_map_rgb( 255, 128, 64 ), 5 );
c++; }
al_draw_line( tab2[ 29 ], tab[ 29 ], tab2[ 29 ], tab[ 30 ], al_map_rgb( 255, 128, 64 ), 5 );
al_draw_line( tab2[ 29 ], tab[ 30 ], tab2[ 31 ], tab[ 31 ], al_map_rgb( 255, 128, 64 ), 5 );
al_draw_line( tab2[ 31 ], tab[ 31 ], tab2[ 0 ], tab[ 0 ], al_map_rgb( 255, 128, 64 ), 5 );
} };
class troj
: public pkt
{
public:
void trojj( float tab2[ 31 ], float tab[ 31 ] )
{ al_draw_filled_triangle( tab2[ 31 ], tab[ 31 ], tab2[ 0 ], tab[ 0 ], tab2[ 30 ], tab[ 30 ], al_map_rgba( 255, 128, 64, 128 ) ); }
};
class licz
: public pkt
{
public:
int x, y, z, l, oba;
float tab3[ 28 ], tab4[ 28 ];
void oblicz( float tab[ 31 ], float tab2[ 31 ], float obt, float ra ) {
oba = 0; y = 0;
for( x = 0; x < 29; x++ )
{
tab3[ oba ] =(( tab[ y ] + tab[ y + 1 ] ) / 20 ) / 2;
oba++;
};
l = 0;
for( z = 0; z < 29; z++ )
{
ra = ra + tab3[ l ];
l++;
};
obt =( tab[ 0 ] * 30 ) / 2;
};
};
class wyswietl
: public licz
{
public:
void wys( float obt, float ra )
{
ALLEGRO_FONT * font7 = al_create_builtin_font();
al_draw_textf( font7, al_map_rgb( 0, 180, 0 ), 500, 20, ALLEGRO_ALIGN_CENTRE, "Pole trojkata: %f ", obt );
al_draw_textf( font7, al_map_rgb( 0, 180, 0 ), 500, 20, ALLEGRO_ALIGN_CENTRE, "Pole trojkata: %f ", ra );
};
};
pkt aa;
rysuj bb;
troj cc;
licz dd;
wyswietl ee;
int main()
{
al_init();
al_init_font_addon();
al_install_keyboard();
al_init_primitives_addon();
ALLEGRO_DISPLAY * okno = NULL;
okno = al_create_display( 800, 800 );
al_set_window_title( okno, "ksssooooo" );
ALLEGRO_FONT * font8 = al_create_builtin_font();
if( !font8 )
{
std::cout << "Nie udalo sie wczytac czcionki!" << std::endl;
getchar();
return 0;
}
aa.pkty();
dd.oblicz();
dd.oblicz();
ALLEGRO_KEYBOARD_STATE key_state;
al_get_keyboard_state( & key_state );
while( !al_key_down( & key_state, ALLEGRO_KEY_ESCAPE ) )
{ al_clear_to_color( al_map_rgb( 0, 0, 0 ) );
al_get_keyboard_state( & key_state );
bb.rys();
cc.trojj();
ee.wys();
getchar();
al_flip_display();
}
}
Opis.Klasa pkt - Wprowadzam 30 danych z klawiatury do tablicy tab (wysokość- OY). Każdemu z tych elementów przyporządkowuje
kolejną liczbę na osi OX.
Dane wrzucam do kolejnych klas.
Klasa rysuj - Dane z klasy pkt zamieniam na swoisty "wykres"(po prostu łączę je liniami aby powstał wielokąt)
Klasa troj - z pierwszego i ostatniego punktu z klasy pkt, oraz mojego umownego pkt (0,0)tworzę wypełniony trójkąt.
Klasa licz - oblicza pole wykresu (cały wykres to poukładane obok siebie trapezy prostokątne więc 2 boki to podstawy, a odcinek na OX to wysokość) oraz trójkąta.
Klasa wyswietl - ukazuje w prawym górnym rogu pole wielokąta i trójkąta.
Program kompiluje się.Po Uruchomieniu mogę wprowadzić 30 pkt. Wykres się nie wyświetla, wielkość wielokąta i trójkąta jest 0.00000.