Witam, otóż z niewiadomych mi powodów kod wczytywania danych z pliku gryzie mi się z inicjalizacją klawiatury i/lub trybu graficznego z Allegro, tj. gdy wsadzę wczytywanie z pliku do tablicy przed inicjalizacją wczytanie zostaje wykonane poprawne, a gdy umieszczę kod wczytywania po inicjalizacji nie wczytuje/usuwa mi zawartość ostatnich 10 komórek.
Jedna uwaga do tego, kiedy przepisałem TYLKO wczytywanie do tablicy i inicjalizacje allegro i klawiatury (tj allegro_init() i init() z mojego kodu) wczytanie także wykonało się poprawnie, ale niestety nie jestem w stanie określić co dokładnie powoduje problem..
zawartości plików:
main.cpp
using namespace std;
#include <allegro.h>
#include <cstdlib>
#include <fstream>
#include <string>
#include <iostream>
#include <map.h>
//zmienne okna
int w_x = 640;
int w_y = 640;
//Zmienne mapy
int map_x=0;
int map_y=0;
int dziel=8;
//zmienne gracz
int player_x=0;
int player_y=0;
int player_idxx=0;
int player_idxy=0;
//bitmapy
BITMAP * bufor = NULL; //bufor
BITMAP * tiles = NULL; //kafelki mapy
BITMAP * player = NULL; //gracz
void draw_map()
{
int temp_x,temp_y;
for(temp_x=0; temp_x<16; temp_x++)
{
for(temp_y=0; temp_y<16; temp_y++)
{
blit(tiles,bufor,
(map[temp_y+map_y][temp_x+map_x]%dziel)*40,
(map[temp_y+map_y][temp_x+map_x]/dziel)*40,
temp_x*40,temp_y*40,40,40);
};
};
};
void init() // INICJALIZACJA
{
install_keyboard(); //TO LUB
set_color_depth(32);
set_gfx_mode(GFX_AUTODETECT,640,640,0,0); //TO WG MOICH TESTÓW SIĘ GRYZIE
};
int main()
{
allegro_init();
init(); //tym <------------------
map_load(); //kiedy to jest nad /\ to wczytywanie wykonuje się poprawnie, kiedy jest w obecnej pozycji komórki
//map[16][6-16] są puste
bufor = create_bitmap(w_x,w_y);
tiles = load_bmp("tiles.bmp",default_palette);
player = load_bmp("player.bmp",default_palette);
while(!key[KEY_ESC])
{
//sterowanie graczem
if(key[KEY_RIGHT])
{
player_x=player_x+40;
player_idxx++;
};
if(key[KEY_LEFT])
{
player_x=player_x-40;
player_idxx--;
}
if(key[KEY_UP])
{
player_y=player_y-40;
player_idxy--;
}
if(key[KEY_DOWN])
{
player_y=player_y+40;
player_idxy++;
}
//rysowanie mapy i mobow
draw_map();
masked_blit(bufor,screen,0,0,0,0,w_x,w_y);
//przygotowanie bufora na rysowanie gracza
clear_to_color(bufor, makecol( 255, 0, 255 ));
//rysowanie gracza
masked_blit(player,bufor,0,0,0,0,40,40);
masked_blit(bufor,screen,0,0,player_x,player_y,40,40);
rest(70);
};
allegro_exit();
return 0;
}
END_OF_MAIN();
map.h
int map[16][16];
void map_load()
{
fstream map_file;
map_file.open("map1.dat",ios::in);
int ii=0;
int jj=0;
do
{
string linia;
string temp;
map_file>>linia;
int size=linia.size();
for(int k=0; k<size; k++)
{
if(linia[k]!=',' && linia[k]!=';') temp=temp+linia[k]; else
{
map[ii][jj]=atoi(temp.c_str());
jj++;
temp="";
};
if(temp[k]==';')
{
ii++;
jj=0;
};
};
}while(!map_file.eof());
map_file.close();
};
map1.dat
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1;
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1;
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1;
1,1,1,2,4,4,4,4,2,2,1,1,1,1,1,1;
1,1,1,1,4,4,4,4,2,1,1,1,1,1,1,1;
2,1,1,1,4,4,4,4,1,1,1,1,1,1,1,1;
1,1,1,1,4,4,4,4,1,1,1,1,1,1,1,1;
1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1;
1,5,3,5,1,1,1,1,1,1,1,1,1,1,2,1;
1,5,3,5,5,5,5,1,2,1,1,1,1,1,1,1;
1,5,3,3,3,3,5,1,1,1,1,1,1,1,1,1;
1,5,5,5,3,3,5,1,1,1,1,2,1,1,1,1;
1,1,1,5,5,3,5,1,1,1,1,1,1,1,1,1;
1,1,2,1,5,3,5,1,1,1,1,1,1,1,1,1;
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1;
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1;