Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Allegro5.0 i 5.1 - kilka pytań.

Ostatnio zmodyfikowano 2014-03-06 07:42
Autor Wiadomość
skaza
Temat założony przez niniejszego użytkownika
Allegro5.0 i 5.1 - kilka pytań.
» 2014-03-03 19:53:44
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 :(

C/C++
#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 { //wczytywanie 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; //wysokość pkt y
            i++;
            tab2[ j ] = j * 20; //odległość pkt x
            j++; }
        tab[ 30 ] = tab[ 31 ] = 700;
        tab2[ 30 ] = tab2[ 29 ];
        tab2[ 31 ] = 0;
    }
};


class rysuj
    : public pkt
{ //rysowanie wykresu
   
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
{ //trójkąt
   
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
{ //obliczanie pól
   
public:
   
    int x, y, z, l, oba;
    float tab3[ 28 ], tab4[ 28 ];
   
   
   
    void oblicz( float tab[ 31 ], float tab2[ 31 ], float obt, float ra ) { //obliczanie pól
        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
{ //wyświetla wyniki w  prawym górnym rogu
   
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 ) ); //tło
        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.
P-105586
SeaMonster131
» 2014-03-04 15:58:49
P-105621
skaza
Temat założony przez niniejszego użytkownika
» 2014-03-05 22:02:04
Ok. Poprawiłem, uzupełniłem.
Kod poprawiony wrzucam zamiast tego u góry.
Przy kompilacji wyskakuje, że "'pkt::pkty' : function does not take 0 arguments" i tak z resztą funkcji przy wywoływaniu. Przy podaniu zmiennych tych samych co w klasie przy funkcji, kompilator odrzuca je.

Czy dobrze wyświetlam dane linie i zapełniam obszar trójkąta ?

PS. Wklejać kod na nowo czy tak jak teraz zamieniać z tamtym ?
P-105706
maly
» 2014-03-06 07:42:59
Pomoże ktoś w poprawie błędów, gdyż nie wiem jak to rozgryźć, a błędy znając życie są małe
Tego nieda się naprawić to trzeba napisać w zasadzie od nowa.

Na początku myślałem że nie rozumiesz objektowości teraz wiem że wogóle nie umiesz C/C++.
Radziłbym zacząć od podstaw.
P-105722
« 1 »
  Strona 1 z 1