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: #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): #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 |
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. 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. linia += 8; textprintf_ex( bufor, font, 0, 10 + linia, makecol( 0, 0, 0 ), - 1, "Pozycja%d", linia ); #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(); |