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

[allegro] przelozenie kodu z trybu tekstowego na graficzny

Ostatnio zmodyfikowano 2015-02-13 14:10
Autor Wiadomość
rafal100
Temat założony przez niniejszego użytkownika
[allegro] przelozenie kodu z trybu tekstowego na graficzny
» 2015-02-02 17:07:22
Witam mam taki mały problem z przełożeniem kodu z trybu tekstowego na graficzny ponieważ nigdy wczesniej tego nie robiłem i nie bardzo daje sobie z tym rade.

to jest moj kod w trybie tekstowym:
C/C++
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>

void quicksort( int tablica[ 10 ], int x, int y )
{
    int p, i, j, tmp;
   
    i = x;
    j = y;
    p = tablica[ div( x + y, 2 ).quot ];
    do
    {
        while( tablica[ i ] < p ) i++;
       
        while( p < tablica[ j ] ) j--;
       
        if( i <= j )
        {
            printf( "zamiana %d (%d element) na %d (%d element)\n", tablica[ i ], i, tablica[ j ], j );
            tmp = tablica[ i ];
            tablica[ i ] = tablica[ j ];
            tablica[ j ] = tmp;
            i++;
            j--;
        }
    }
    while( i <= j );
   
    printf( "\n" );
    if( x < j ) quicksort( tablica, x, j );
   
    if( i < y ) quicksort( tablica, i, y );
   
}

int main( int argc, char * argv[] ) {
    int wybor, i, j, tmp;
    int tablica[ 10 ];
    srand( time( NULL ) );
   
    printf( "program sortujacy 10 liczb z zakresu 1-30!\n" );
    printf( "\n" );
   
    printf( "wylosowane liczby przed sortowaniem: \n" );
    for( i = 1; i <= 10; i++ ) {
        tablica[ i ] = 1 + rand() % 30;
        printf( "%d, ", tablica[ i ] );
    }
    printf( "\n" );
    printf( "\n" );
   
    printf( "***SORTOWANIA***\n" );
    printf( "1. - bubble sort\n" );
    printf( "2. - quicksort\n" );
    printf( "\n" );
   
    scanf( "%d", & wybor );
    printf( "\n" );
   
    switch( wybor )
    {
    case 1:
       
        for( j = 10; j > 1; j-- )
        {
            for( i = 1; i < j; i++ ) {
                if( tablica[ i ] > tablica[ i + 1 ] ) {
                    printf( "zamiana %d (%d element) na %d (%d element)\n", tablica[ i ], i, tablica[ i + 1 ], i + 1 );
                    tmp = tablica[ i ];
                    tablica[ i ] = tablica[ i + 1 ];
                    tablica[ i + 1 ] = tmp;
                }
            }
            printf( "\n" );
        }
       
        printf( "liczby po sortowaniu: \n" );
        for( i = 1; i < 10; i++ ) {
            printf( "%d, ", tablica[ i ] );
        }
       
        break;
       
    case 2:
        quicksort( tablica, 1, 10 );
       
        printf( "\n" );
       
        printf( "liczby po sortowaniu: \n" );
        for( i = 1; i <= 10; i++ ) {
            printf( "%d, ", tablica[ i ] );
        }
        break;
       
        default:
        printf( "zly numer! \n" );
        break;
    }
    return 0;
}

a to w trybie graficznym w allegro (ale nie bardzo chce chodzic):
C/C++
#include <allegro.h>
int main()
{
   
    int i;
    int tablica[ 10 ];
    srand( time( NULL ) );
   
    for( i = 1; i <= 10; i++ ) {
        tablica[ i ] = 1 + rand() % 30;
    }
   
    allegro_init();
    install_keyboard();
    set_color_depth( 8 );
    set_palette( default_palette );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 );
    clear_to_color( screen, makecol( 128, 128, 128 ) );
   
    BITMAP * a1 = NULL;
    BITMAP * a2 = NULL;
    BITMAP * a3 = NULL;
    BITMAP * a4 = NULL;
    BITMAP * a5 = NULL;
    BITMAP * a6 = NULL;
    BITMAP * a7 = NULL;
    BITMAP * a8 = NULL;
    BITMAP * a9 = NULL;
    BITMAP * a10 = NULL;
    a1 = create_bitmap( 40, 40 );
    a2 = create_bitmap( 40, 40 );
    a3 = create_bitmap( 40, 40 );
    a4 = create_bitmap( 40, 40 );
    a5 = create_bitmap( 40, 40 );
    a6 = create_bitmap( 40, 40 );
    a7 = create_bitmap( 40, 40 );
    a8 = create_bitmap( 40, 40 );
    a9 = create_bitmap( 40, 40 );
    a10 = create_bitmap( 40, 40 );
   
    clear_to_color( a1, 48 );
    clear_to_color( a2, 48 );
    clear_to_color( a3, 48 );
    clear_to_color( a4, 48 );
    clear_to_color( a5, 48 );
    clear_to_color( a6, 48 );
    clear_to_color( a7, 48 );
    clear_to_color( a8, 48 );
    clear_to_color( a9, 48 );
    clear_to_color( a10, 48 );
   
    textprintf_ex( a1, font, 20, 20, makecol( 255, 0, 255 ), - 1, "%d", tablica[ 1 ] );
    textprintf_ex( a2, font, 70, 20, makecol( 255, 0, 255 ), - 1, "%d", tablica[ 2 ] );
    textprintf_ex( a3, font, 120, 20, makecol( 255, 0, 255 ), - 1, "%d", tablica[ 3 ] );
    textprintf_ex( a4, font, 170, 20, makecol( 255, 0, 255 ), - 1, "%d", tablica[ 4 ] );
    textprintf_ex( a5, font, 220, 20, makecol( 255, 0, 255 ), - 1, "%d", tablica[ 5 ] );
    textprintf_ex( a6, font, 270, 20, makecol( 255, 0, 255 ), - 1, "%d", tablica[ 6 ] );
    textprintf_ex( a7, font, 320, 20, makecol( 255, 0, 255 ), - 1, "%d", tablica[ 7 ] );
    textprintf_ex( a8, font, 370, 20, makecol( 255, 0, 255 ), - 1, "%d", tablica[ 8 ] );
    textprintf_ex( a9, font, 420, 20, makecol( 255, 0, 255 ), - 1, "%d", tablica[ 9 ] );
    textprintf_ex( a10, font, 470, 20, makecol( 255, 0, 255 ), - 1, "%d", tablica[ 10 ] );
   
    masked_blit( a1, screen, 0, 0, 0, 10, a1->w, a1->h );
    masked_blit( a2, screen, 0, 0, 50, 10, a2->w, a2->h );
    masked_blit( a3, screen, 0, 0, 100, 10, a3->w, a3->h );
    masked_blit( a4, screen, 0, 0, 150, 10, a4->w, a4->h );
    masked_blit( a5, screen, 0, 0, 200, 10, a5->w, a5->h );
    masked_blit( a6, screen, 0, 0, 250, 10, a6->w, a6->h );
    masked_blit( a7, screen, 0, 0, 300, 10, a7->w, a7->h );
    masked_blit( a8, screen, 0, 0, 350, 10, a8->w, a8->h );
    masked_blit( a9, screen, 0, 0, 400, 10, a9->w, a9->h );
    masked_blit( a10, screen, 0, 0, 450, 10, a10->w, a10->h );
   
   
    readkey();
   
    destroy_bitmap( a1 );
    destroy_bitmap( a2 );
    destroy_bitmap( a3 );
    destroy_bitmap( a4 );
    destroy_bitmap( a5 );
    destroy_bitmap( a6 );
    destroy_bitmap( a7 );
    destroy_bitmap( a8 );
    destroy_bitmap( a9 );
    destroy_bitmap( a10 );
   
    allegro_exit();
   
    return 0;
}
END_OF_MAIN();

nie bardzo wiem jak ruszyc z tym dalej.
prosze o pomoc
P-125874
SeaMonster131
» 2015-02-02 17:16:07
Nie wiem w czym problem, masz po prostu jedną klamrę zamykającą "}" za dużo.
A żeby kod ładniej wyglądał, zamiast BITMAP a1, BITMAP a2, ... może stwórz tablicę?
P-125875
rafal100
Temat założony przez niniejszego użytkownika
» 2015-02-02 17:19:46
problem mam w tym ze ja nie wiem jak zrobic zeby mi tam posortowalo te liczby i zeby to bylo jakos zaprezentowane
P-125876
rafal100
Temat założony przez niniejszego użytkownika
» 2015-02-03 18:05:55
ktos pomoze chociaz troche??
P-125959
pekfos
» 2015-02-03 21:57:36
W gruncie rzeczy, z bibliotekami graficznymi kod się pisze zupełnie inaczej, niż w trybie tekstowym. "Przełożenie kodu" nie ma większego sensu, prościej i szybciej napisać go od zera. Najpierw poćwicz używanie biblioteki, potem będzie ci łatwiej uzyskać konkretny efekt.
P-125969
rafal100
Temat założony przez niniejszego użytkownika
» 2015-02-04 21:21:28
a jest ktos w wstanie zrobic chociaz jedno z tych sortowan w allegro zebym wiedzial jak to ma wygladac i zebym mogl sobie poradzic z reszta, nie ukrywam ze zalezy mi na czasie
P-126009
Gabes
» 2015-02-04 21:31:32
Indeksy w tablicy numerujemy od zera.
Poszczególne liczby wyświetlasz na bitmapach, więc pozycja tekstu powinna być taka sama (20,20).
A tak w ogóle to lepiej wszystko wczytywać na jedną bitmape(bufor), i na końcu na screen(ekran).
BITMAP * bufor = create_bitmap( 800, 600 );
 
czyścimy bufor.
clear_to_color( bufor, makecol( 128, 128, 128 ) );

bitmapy,tekst na bufor.
C/C++
masked_blit( pole, bufor, 0, 0, 10, 10, bufor->w, bufor->h );

textprintf_ex( bufor, font, 15, 25, makecol( 255, 255, 255 ), - 1, "%d", tablica[ 0 ] );
na końcu bitmape(bufor) na ekran.                                             
masked_blit( bufor, screen, 0, 0, 0, 0, bufor->w, bufor->h );
Ekran w trybie graficznym nie ma kolumn ani linii, jeden znak w allegro ma rozmiar 8x8 pikseli więc aby wyświetlić tekst w kolejnej linii musimy do pozycji Y w funkcji wyświetlającej tekst dodać wysokość znaku.
C/C++
linia += 8;
textprintf_ex( bufor, font, 0, 10 + linia, makecol( 0, 0, 0 ), - 1, "Pozycja%d", linia );
C/C++
#include <allegro.h>
#include <time.h>
#include <stdio.h>
#include <conio.h>
int licz = 0;
void quicksort( BITMAP * bmp, int tablica[ 10 ], int x, int y )
{
    int p, i, j, tmp;
    i = x;
    j = y;
    p = tablica[ div( x + y, 2 ).quot ];
    do
    {
        while( tablica[ i ] < p ) i++;
       
        while( p < tablica[ j ] ) j--;
       
        if( i <= j )
        {
            licz += 8;
            textprintf_ex( bmp, font, 20, 50 + licz, makecol( 255, 255, 255 ), - 1,
            "zamiana %2d (%2d element) na %2d (%2d element)", tablica[ i ], i, tablica[ j ], j );
            printf( "zamiana %2d (%2d element) na %2d (%2d element)\n", tablica[ i ], i, tablica[ j ], j );
            tmp = tablica[ i ];
            tablica[ i ] = tablica[ j ];
            tablica[ j ] = tmp;
            i++;
            j--;
        }
    }
    while( i <= j );
   
    printf( "\n" );
    if( x < j ) quicksort( bmp, tablica, x, j );
   
    if( i < y ) quicksort( bmp, tablica, i, y );
   
}
int main()
{
    int tablica[ 10 ];
    srand( time( NULL ) );
    for( int i = 0; i < 10; i++ ) {
        tablica[ i ] = 1 + rand() % 30;
    }
   
    allegro_init();
    install_keyboard();
    set_color_depth( 24 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 );
   
    BITMAP * bufor = create_bitmap( 800, 600 );
    clear_to_color( bufor, makecol( 128, 128, 128 ) );
   
    BITMAP * pole = create_bitmap( 40, 40 );
    clear_to_color( pole, makecol( 0, 128, 0 ) );
    textprintf_ex( bufor, font, 0, 0, makecol( 255, 255, 255 ), - 1, "program sortujacy 10 liczb z zakresu 1-30!" );
   
    for( int licz = 0; licz < 10; licz++ )
    {
        masked_blit( pole, bufor, 0, 0, licz * 45, 10, bufor->w, bufor->h );
        textprintf_ex( bufor, font, 15 +( licz * 45 ), 25, makecol( 255, 255, 255 ),
        - 1, "%d", tablica[ licz ] );
    }
    quicksort( bufor, tablica, 1, 10 );
    masked_blit( bufor, screen, 0, 0, 0, 0, bufor->w, bufor->h );
    readkey();
    destroy_bitmap( bufor );
    destroy_bitmap( pole );
    allegro_exit();
    return 0;
}
END_OF_MAIN();
P-126010
rafal100
Temat założony przez niniejszego użytkownika
» 2015-02-05 16:19:29
wielkie dzieki Gabes ale jeszcze jedno pytanie i jedna prosba :P dalbys komentarze zebym bardziej ogarnal co co robi, bo tak srednio lape :/ a chce dodac jeszcze tak te 10 pol tylko z posortowanymi liczbami
P-126046
« 1 » 2
  Strona 1 z 2 Następna strona