piotrwalkusz1 Temat założony przez niniejszego użytkownika |
Problem z SDL » 2011-03-15 21:36:38 Witam. Mój program nie działa jak należy więc proszę was, doświadczonych programistów o znalezienie w moim programie błędu. Wszystko się ładnie kompiluje, ale nie takiego wyniku oczekiwałem. Tło jest czarne, a powinno być zielone (Ścieszka do pliku jest dobra, sprawdzałem). Oto kod:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <SDL/SDL.h> #include <windows.h> #include "mapa.hpp"
SDL_Surface * ekran; SDL_Event zdarzenie; bool wyjscie = false; mapa mapa1( 1 ); int main( int argc, char * args[] ) { SDL_Init( SDL_INIT_EVERYTHING ); ekran = SDL_SetVideoMode( 1024, 768, 32, SDL_SWSURFACE | SDL_DOUBLEBUF ); while( !wyjscie ) { mapa1.narysuj_mape( ekran ); SDL_Flip( ekran ); while( SDL_PollEvent( & zdarzenie ) ) { } Sleep( 50 ); } return 0; }
#ifndef MAPA_HPP #define MAPA_HPP #include <fstream> #include "pole.hpp" using namespace std; class mapa { private: pole miejsce[ 23 ][ 34 ]; int ilosc_wierszy; int ilosc_kolumn; public: mapa( int wybor_mapy ); void narysuj_mape( SDL_Surface * rysunek ); void narysuj_gory(); void nadaj_wiersz( char * tab, int wielkosc, int wiersz ); }; #endif
#ifndef POLE_HPP #define POLE_HPP #include <SDL/SDL.h> class pole { private: int x, y; char rodzaj; int obiekt; public: void narysuj( SDL_Surface * rysunek ); void nadaj_pozycje( int poz_y, int poz_x ); void nadaj_rodzaj( char znak ); char podaj_rodzaj(); }; #endif
#include "mapa.hpp" #include <fstream> #include <iostream> #include <string> using namespace std; mapa::mapa( int wybor_mapy ) { switch( wybor_mapy ) { case 1: char tab1[ 10 ] = { '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' }; char tab2[ 10 ] = { '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' }; char tab3[ 10 ] = { '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' }; char tab4[ 10 ] = { '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' }; char tab5[ 10 ] = { '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' }; char tab6[ 10 ] = { '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' }; char tab7[ 10 ] = { '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' }; char tab8[ 10 ] = { '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' }; char tab9[ 10 ] = { '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' }; char tab10[ 10 ] = { '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' }; nadaj_wiersz( tab1, 10, 0 ); nadaj_wiersz( tab2, 10, 0 ); nadaj_wiersz( tab3, 10, 0 ); nadaj_wiersz( tab4, 10, 0 ); nadaj_wiersz( tab5, 10, 0 ); nadaj_wiersz( tab6, 10, 0 ); nadaj_wiersz( tab7, 10, 0 ); nadaj_wiersz( tab8, 10, 0 ); nadaj_wiersz( tab9, 10, 0 ); nadaj_wiersz( tab10, 10, 0 ); for( int w = 0; w < 10; w++ ) { for( int k = 0; k < 10; k++ ) { miejsce[ w ][ k ].nadaj_pozycje( w, k ); } } break; } }
void mapa::narysuj_mape( SDL_Surface * rysunek ) { for( int w = 0; w < ilosc_wierszy; w++ ) { for( int k = 0; k < ilosc_kolumn; k++ ) { miejsce[ w ][ k ].narysuj( rysunek ); } } }
void mapa::narysuj_gory() { char a; for( int w = 0; w < ilosc_wierszy; w++ ) { for( int k = 0; k < ilosc_kolumn; k++ ) { a = miejsce[ w ][ k ].podaj_rodzaj(); if( a == '2' ) { if( miejsce[ w - 1 ][ k - 1 ].podaj_rodzaj() == '1' && w > 0 && k > 0 ) { miejsce[ w - 1 ][ k - 1 ].nadaj_rodzaj( '3' ); } if( miejsce[ w - 1 ][ k ].podaj_rodzaj() == '1' && w > 0 ) { miejsce[ w - 1 ][ k ].nadaj_rodzaj( '3' ); } if( miejsce[ w - 1 ][ k + 1 ].podaj_rodzaj() == '1' && w > k < ilosc_kolumn - 1 ) { miejsce[ w - 1 ][ k + 1 ].nadaj_rodzaj( '3' ); } if( miejsce[ w ][ k - 1 ].podaj_rodzaj() == '1' && k > 0 ) { miejsce[ w ][ k - 1 ].nadaj_rodzaj( '3' ); } if( miejsce[ w ][ k + 1 ].podaj_rodzaj() == '1' && k < ilosc_kolumn - 1 ) { miejsce[ w ][ k + 1 ].nadaj_rodzaj( '3' ); } if( miejsce[ w + 1 ][ k - 1 ].podaj_rodzaj() == '1' && w < ilosc_wierszy - 1 && k > 0 ) { miejsce[ w + 1 ][ k - 1 ].nadaj_rodzaj( '3' ); } if( miejsce[ w + 1 ][ k ].podaj_rodzaj() == '1' && w < ilosc_wierszy - 1 ) { miejsce[ w + 1 ][ k ].nadaj_rodzaj( '3' ); } if( miejsce[ w + 1 ][ k + 1 ].podaj_rodzaj() == '1' && w < ilosc_wierszy - 1 && k < ilosc_kolumn - 1 ) { miejsce[ w + 1 ][ k + 1 ].nadaj_rodzaj( '3' ); } } } } }
void mapa::nadaj_wiersz( char * tab, int wielkosc, int wiersz ) { for( int i = 0; i < wielkosc; i++ ) { miejsce[ wiersz ][ i ].nadaj_rodzaj( * tab ); tab++; } }
#include "pole.hpp" #include <SDL/SDL.h> void pole::nadaj_rodzaj( char znak ) { rodzaj = znak; } void pole::nadaj_pozycje( int poz_y, int poz_x ) { y = poz_y * 30; x = poz_x * 30; } void pole::narysuj( SDL_Surface * rysunek ) { SDL_Surface * obraz = NULL; SDL_Rect fragment; fragment.x = x; fragment.y = y; switch( rodzaj ) { case '1': obraz = SDL_LoadBMP( "nizina.bmp" ); case '2': obraz = SDL_LoadBMP( "sciana.bmp" ); case '3': obraz = SDL_LoadBMP( "gora.bmp" ); } SDL_BlitSurface( obraz, NULL, rysunek, & fragment ); SDL_FreeSurface( obraz ); } char pole::podaj_rodzaj() { return rodzaj; }
Ja sprawdzałem ten kod już wiele razy i nic nie znalazłem plik "nizina.bmp" jest obrazem bitmapowym 30x30 pikseli i jest cały zielony. |