Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 18 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.12.13
Prihlásený: 01.09.14
Príspevky: 54
Témy: 16
Príspevok NapísalOffline : 17.12.2013 22:40

Dobrý deň prosím vás potrebujem pomoc mám program spravený, a prekladač pri kompilácie nehlási žiadne chyby ale pri priebehu aplikacie pri spusteni nacitavania zo suboru asi v 3/4 vyhodi chybu Unhandled exception at 0x01304012 in KUMACRAFT.exe: 0xC0000005: Access violation reading location 0x00244c04. a neviem co mam s tym urobit ... lebo v programe ziadnu chybu nevidim. Tento program by mal zatial sluzit na Na ukladanie hodnot do trojrozmerneho pola objektov Block cize zadate X Y Z Block MAP[X][Y][Z]; a MAP[X][Y][Z].setID(cislo); a nastavim hodnotu do trojroymerneho pola objektu dalej mam tam aj moynost uloyenia do suboru ktora funguje super :-D a moznost nacitania zo suboru ktora mi robi tento problem

pre zobrazenie kodu, otvorit spoiler :)! (ak sa neurazis, pre lepsiu citatelnost som dal kod do spoilera. jtbs)
Spoiler: zobraziť
[c]#include <Windows.h>
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
//kolko hodnot mozem ulozit do x -> MAX_X --> LEN PARNE CISLA !!!!!
#define MAX_X 20 //cize -10 az 10
#define MAX_Y 10 //cize -5 az 5
#define MAX_Z 20 //cize -10 az 10
//hodnoty pre funkciu msg() a wmsg()
#define err 0
#define inf 1
#define war 2
//Farby a ich kody
#define BLACK 0
#define DBLUE 1
#define DGREEN 2
#define DAQUA 3
#define DRED 4
#define DPURPLE 5
#define DYELLOW 6
#define DWHITE 7
#define GRAY 8
#define BLUE 9
#define GREEN 10
#define AQUA 11
#define RED 12
#define PURPLE 13
#define YELLOW 14
#define WHITE 15
#define DEFAULT 7
//Verzia Programu v nej bude ulozena verzia
class GameVersion
{
private:
string gv;
void setVer(string Param1)
{
gv = Param1;
}
public:
GameVersion()
{
setVer("1.0.0");
}
string getVer()
{
return gv;
}
};
//Vector3D v tomto programe zatial nieje pouzity IGNORUJTE
class Vector3D
{
private:
float x, y, z;
public:
Vector3D()
{
setXYZ(0, 0, 0);
}
void setXYZ(float Param1, float Param2, float Param3)
{
x = Param1;
y = Param2;
z = Param3;
}
void setX(float Param1)
{
x = Param1;
}
void setY(float Param1)
{
y = Param1;
}
void setZ(float Param1)
{
z = Param1;
}
float getX()
{
return x;
}
float getY()
{
return y;
}
float getZ()
{
return z;
}
};
//blok
class Block
{
private:
unsigned int ID;
public:
void setID(unsigned int Param1)
{
ID = Param1;
}
unsigned int getID()
{
return ID;
}
};
//Funkcia na nastavovanie farby textu
void SetColor(unsigned char Param1, unsigned char Param2)
{
int color = Param1 + Param2 * 16;
HANDLE cHandle;
cHandle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(cHandle, color);
}
//Staticke Deklaracie aby mohli s nimi pracovat aj funkcie na konci
static GameVersion v;
static Block MAP[MAX_X][MAX_Y][MAX_Z]; //vytvori trojrozmerne pole blokov MAP[X][Y][Z]
static fstream map_file; //subor bude sluzit na ukladanie a nacitavanie mapy
static fstream crash_file; //tu sa budu zapisovat chyby
static fstream log_file; //tu sa bude zapisovat priebeh hry
//funkcie
void wmsg(unsigned char, string); //otvori dialogove okno s chybou , infom , alebo upozornenim
void msg(unsigned char, string); //zobrazi [INFO] / [ERROR] / [WARNING] + string + \n do okna konzoli
void start(); //hlavna funkcia - pokracovanie programu zadavanie prikazov

int main()
{
log_file.open("game_log.log", ios::app); //subor log_file sa otvori a zacne sa zapisovat na jeho koniec (ios::app)
if(!log_file.is_open())
{
crash_file.open("crash.txt" , ios::app);
if(!crash_file.is_open())
{
crash_file << "[ERROR]File crash.txt and game_log.log is not open !!\n";
msg(err, "File crash.txt and game_log.log is not open !!");
wmsg(err, "File crash.txt and game_log.log is not open !!");
}
else if(crash_file.is_open())
{
crash_file << "[WARNING]File game_log.log is not open !\n";
msg(war, "File game_log.log is not open !!");
wmsg(war, "File game_log.log is not open !!");
}
}
system("color 70"); //nastavi hlavnu farbu textu na ciernu a pozadie sede
SetColor(0, DEFAULT); //nastavy Farbu Textu na ciernu a pozadia za textom na DEFAULT
msg(inf, "Running version " + v.getVer()); //zobrazi verziu programu
start(); //spusti zadavanie prikazov
log_file.close();
map_file.close();
crash_file.close();
return 0;
}

void wmsg(unsigned char Param1, string Param2) //otvori dialogove okno s chybou , infom , alebo upozornenim
{
string Param3;
if(Param1 == 0) //chyba
{
Param3 = "echo x=MsgBox(\"" + Param2 + "\",16,\"[FATAL ERROR]\") > message.vbs";
char *c;
c = &Param3[0];
system(c);
system("start message.vbs");
}
else if(Param1 == 1) //info
{
Param3 = "echo x=MsgBox(\"" + Param2 + "\",48,\"[INFO]\") > message.vbs";
char *c;
c = &Param3[0];
system(c);
system("start message.vbs");
}
else if(Param1 == 2) //upozornenie
{
Param3 = "echo x=MsgBox(\"" + Param2 + "\",64,\"[WARNING]\") > message.vbs";
char *c;
c = &Param3[0];
system(c);
system("start message.vbs");
}
}

void msg(unsigned char Param1, string Param2) //zobrazi [INFO] / [ERROR] / [WARNING] + string + \n do okna konzoli
{
if(Param1 == 0) //chyba
{
cout << "[";
SetColor(12, DEFAULT);
cout << "ERROR";
SetColor(0, DEFAULT);
cout << "]" << Param2 << "\n";
log_file << "[ERROR]" << Param2 << "\n";
}
else if(Param1 == 1) //info
{
cout << "[";
SetColor(11, DEFAULT);
cout << "INFO";
SetColor(0, DEFAULT);
cout << "]" << Param2 << "\n";
log_file << "[INFO]" << Param2 << "\n";
}
else if(Param1 == 2) //upozornenie
{
cout << "[";
SetColor(14, DEFAULT);
cout << "WARNING";
SetColor(0, DEFAULT);
cout << "]" << Param2 << "\n";
log_file << "[WARNING]" << Param2 << "\n";
}
}

void start() //hlavna funkcia - pokracovanie programu zadavanie prikazov
{
msg(inf, "All Comands > help");
string command;
float px , py, pz;
unsigned int pid, p1 = 0, p2 = 0, p3 = 0;
while(1) //zadavanie prikazov (opakuje sa stale kym nezadate prikaz exit alebo stop)
{
cin.clear();
cout << "\b\b> ";
SetColor(BLUE, DEFAULT); //nastavi farbu textu na modru
getline(cin, command);
SetColor(BLACK, DEFAULT); //nastavi farbu textu na ciernu
if(command == "help") //ak je prikaz help
{
log_file << "[INFO]User use command \"help\"\n";
msg(inf, "Comands:");
SetColor(YELLOW, DEFAULT);
cout << "Type ";
SetColor(BLUE, DEFAULT);
cout << "chelp ";
SetColor(YELLOW, DEFAULT);
cout << "if you need help with other command.\n";
SetColor(BLUE, DEFAULT);
cout << "set\nget\nclear\nlimits\nload\nsave\nexit\nrestart\n";
SetColor(BLACK, DEFAULT);
}
else if(command == "set") //ak je prikaz set nastavujete ID pre niektory blok z trojrozmerneho pola blokov
{
log_file << "[INFO]User use command \"set\"\n";
SetColor(GREEN, DEFAULT); //zadavate X
cout << "X: ";
cin >> px;
SetColor(RED, DEFAULT); //zadavate Y
cout << "Y: ";
cin >> py;
SetColor(BLUE, DEFAULT); //zadavate Z
cout << "Z: ";
cin >> pz;
SetColor(DAQUA, DEFAULT); //zadavate ID
cout << "ID: ";
cin >> pid;
SetColor(BLACK, DEFAULT);
p1 = px;
p2 = py;
p3 = pz;
p1 += MAX_X / 2;
p2 += MAX_Y / 2;
p3 += MAX_Z / 2;
MAP[p1][p2][p3].setID(pid); //tu sa ID nastavi
cout << "ID has been set MAP[" << p1 << "][" << p2 << "][" << p3 << "].setID(" << pid << ");\n";
log_file << "[INFO]ID has been set MAP[" << p1 << "][" << p2 << "][" << p3 << "].setID(" << pid << ");\n";
msg(inf, "ID has been set.\n");
}
else if(command == "get") //ak je prikaz get ziskavate ID z jedneho bloku trojrozmerneho pola blokov
{
log_file << "[INFO]User use command \"get\"\n";
SetColor(GREEN, DEFAULT); //zadavate X
cout << "X: ";
cin >> px;
SetColor(RED, DEFAULT); //zadavate Y
cout << "Y: ";
cin >> py;
SetColor(BLUE, DEFAULT); //zadavate Z
cout << "Z: ";
cin >> pz;
SetColor(DAQUA, DEFAULT);
p1 = px + MAX_X / 2; //tu sa suradnice X Y Z
p2 = py + MAX_Y / 2; //premienaju na pocitadla trojrozmerneho pola ked bude px = -4 tak bude p1 = 6
p3 = pz + MAX_Z / 2; //ked bude px = 0 tak bude p1 = 10 atd...
pid = MAP[p1][p2][p3].getID();
cout << "ID = " << pid << "\n"; //zobrazi sa ID
SetColor(BLACK, DEFAULT);
}
else if(command == "clear") //zmaze povodny obsah okna
{
log_file << "[INFO]User use command \"clear\"\n";
system("cls");
}
else if(command == "limits") //zobrazi X Y Z limity
{
log_file << "[INFO]User use command \"limits\"\n";
msg(inf, "Limits of X Y Z");
SetColor(DGREEN, DEFAULT);
cout << "MIN X: " << 0 - MAX_X / 2 << "\n";
cout << "MIN Y: " << 0 - MAX_Y / 2 << "\n";
cout << "MIN Z: " << 0 - MAX_Z / 2 << "\n";
cout << "MAX X: " << MAX_X / 2 << "\n";
cout << "MAX Y: " << MAX_Y / 2 << "\n";
cout << "MAX Z: " << MAX_Z / 2 << "\n";
SetColor(BLACK, DEFAULT);
}
else if(command == "save") //ulozi hodnoty do suboru ktoreho nazov zvolite vy
{
log_file << "[INFO]User use command \"save\"\n";
string map_name;
cout << "Map Name: ";
getline(cin, map_name); //zadate nazov suboru
string a = map_name + ".kuma";
map_file.open(a, ios::out); //otvori sa subor pre zapis
if(map_file.is_open()) //ak je subor otvoreny ulozia sa hodnoty do suboru za seba oddelene medzerami
{
int p1 = 0, p2 = 0, p3 = 0;
while(1) //Saving Map
{
map_file << MAP[p1][p2][p3].getID() << " ";
SetColor(GREEN, DEFAULT);
cout << "X: ";
cout << p1 - MAX_X / 2;
SetColor(RED, DEFAULT);
cout << " Y: ";
cout << p2 - MAX_Y / 2;
SetColor(BLUE, DEFAULT);
cout << " Z: ";
cout << p3 - MAX_Z / 2;
SetColor(BLACK, DEFAULT);
cout << "\n";
if(p3 >= 0 && p3 <= MAX_Z - 1)
p3 += 1;
else if(p3 == MAX_Z)
{
p3 = 0;
if(p2 >= 0 && p2 <= MAX_Y - 1)
p2 += 1;
else if(p2 == MAX_Y)
{
p2 = 0;
if(p1 >= 0 && p1 <= MAX_X - 1)
p1 += 1;
else if(p1 == MAX_X)
break;
else
{
msg(err, "Map " + map_name + " can not be saved.");
log_file << "[ERROR]Map " << map_name << " can not be saved.\n";
wmsg(err, "Map " + map_name + " can not be saved.");
cout << "Press ENTER to EXIT.\n";
cin.get();
exit(1);
}
}
else
{
msg(err, "Map " + map_name + " can not be saved.");
log_file << "[ERROR]Map " << map_name << " can not be saved.\n";
wmsg(err, "Map " + map_name + " can not be saved.");
cout << "Press ENTER to EXIT.\n";
cin.get();
exit(1);
}
}
else
{
msg(err, "Map " + map_name + " can not be saved.");
log_file << "[ERROR]Map " << map_name << " can not be saved.\n";
wmsg(err, "Map " + map_name + " can not be saved.");
cout << "Press ENTER to EXIT.\n";
cin.get();
exit(1);
}
}
msg(inf, "Map " + map_name + " is saved.");
log_file << "[INFO]Map " << map_name << " is saved.\n";
map_file.close();
}
else if(!map_file.is_open()) //ak subor nieje otvoreny Zobrazi chybu
{
msg(err, "Map " + map_name + " can not be saved."); //zobrazi chybu
log_file << "[ERROR]Map " << map_name << " can not be saved.\n"; //zapise chybu do suboru
wmsg(err, "Map " + map_name + " can not be saved."); //otvori chybovi dialog
cout << "Press ENTER to EXIT.\n";
cin.get();
exit(1); //KONIEC
}
}
else if(command == "load")
{
log_file << "[INFO]User use command \"load\"\n";
string map_name;
cout << "Map Name: ";
SetColor(BLUE, DEFAULT);
getline(cin, map_name);
SetColor(BLACK, DEFAULT);
string a = map_name + ".kuma";
map_file.open(a, ios::in);
if(map_file.is_open())
{
int p1 = 0, p2 = 0, p3 = 0;
unsigned int p4 = 0;
while(!map_file.eof()) //Nacitavanie Mapy pokym subor neskonci
{
map_file >> p4;
MAP[p1][p2][p3].setID(p4);
SetColor(GREEN, DEFAULT);
cout << "X: ";
cout << p1 - MAX_X / 2;
SetColor(RED, DEFAULT);
cout << " Y: ";
cout << p2 - MAX_Y / 2;
SetColor(BLUE, DEFAULT);
cout << " Z: ";
cout << p3 - MAX_Z / 2;
SetColor(BLACK, DEFAULT);
cout << "\n";
if(p3 >= 0 && p3 <= MAX_Z - 1)
p3 += 1;
else if(p3 == MAX_Z)
{
p3 = 0;
if(p2 >= 0 && p2 <= MAX_Y - 1)
p2 += 1;
else if(p2 == MAX_Y)
{
p2 = 0;
if(p1 >= 0 && p1 <= MAX_X - 1) //ak - 1 zamenite za -3 if(p1 >= 0 && p1 <= MAX_X - 3)
p1 += 1; /* AK SA TOTO ZMENI NACITA SA CCA O 1/4 OBJEKTOV MENEJ a neviskoci CHYBA*/
else if(p1 == MAX_X) //ak dopisete sem - 2 else if(p1 == MAX_X - 2)
break;
else
{
msg(err, "Map " + map_name + " can not be loaded.");
log_file << "[ERROR]Map " << map_name << " can not be loaded.\n";
wmsg(err, "Map " + map_name + " can not be loaded.");
cout << "Press ENTER to EXIT.\n";
cin.get();
exit(1);
}
}
else
{
msg(err, "Map " + map_name + " can not be loaded.");
log_file << "[ERROR]Map " << map_name << " can not be loaded.\n";
wmsg(err, "Map " + map_name + " can not be loaded.");
cout << "Press ENTER to EXIT.\n";
cin.get();
exit(1);
}
}
else
{
msg(err, "Map " + map_name + " can not be loaded.");
log_file << "[ERROR]Map " << map_name << " can not be loaded.\n";
wmsg(err, "Map " + map_name + " can not be loaded.");
cout << "Press ENTER to EXIT.\n";
cin.get();
exit(1);
}
}
msg(inf, "Map " + map_name + " is loaded.");
log_file << "[INFO]Map " << map_name << " is loaded.\n";
map_file.close();
}
else if(!map_file.is_open()) //ak nieje subor urceny na citanie otvoreny pravdepodobne neexistuje tak nas o tom program informuje
{
msg(err, "Map " + map_name + " does not exist.");
log_file << "[ERROR]Map " << map_name << " does not exist.\n";
}
}
else if(command == "stop" || command == "exit") //koniec programu
{
cout << "Press ENTER to EXIT\n";
cin.get();
exit(1);
}
else if(command == "restart") //restart programu
{
system("cls");
main();
}
command = "/0"; //vymaze sa hodnota ulozena v prikaze
}
}[/c]

Pridam aj kod s popisom ked popis (komentare k pochopeniu programu) napisem pridam odpoved.


Naposledy upravil kuma dňa 17.12.2013 23:30, celkovo upravené 1

Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.12.13
Prihlásený: 01.09.14
Príspevky: 54
Témy: 16
Príspevok Napísal autor témyOffline : 17.12.2013 22:46

DOWNLOAD na subor zdrojoveho kodu KUMA 1.0.0.cpp http://uloz.to/xGLQ2BNX/kuma-1-0-0-zip


Naposledy upravil kuma dňa 18.12.2013 0:11, celkovo upravené 2

Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 17.12.2013 23:12

Bolo by dobré, keby si aspoň trochu presnejšie identifikoval chybu. Keďže si sem dal kód, ktorý si nevieme vyskúšať (nemáme niektoré hlavičkové súbory), tak si môžeme akurát čítať a domýšľať, kde že by mohla nastať runtime chyba. A to je ťažké. Tiež si sem dal ten okomentovaný kód štýlom "tu by malo byť toto, ale nejde to, tak je tu toto" Ja chcem vidieť ten chybný kód, nie ten, čo funguje, ale nesprávne.

Podľa výpisov (či debuggera) urči, kde presne sa to zastaví. Ak máš schopný debugger, napíš aj presnú chybu.







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.12.13
Prihlásený: 01.09.14
Príspevky: 54
Témy: 16
Príspevok Napísal autor témyOffline : 17.12.2013 23:24

DEBUG:
Kód:
'KUMACRAFT.exe': Loaded 'C:\Users\mato\Documents\Visual Studio 2010\Projects\KUMACRAFT\Debug\KUMACRAFT.exe', Symbols loaded.
'KUMACRAFT.exe': Loaded 'C:\Windows\SysWOW64\ntdll.dll', Cannot find or open the PDB file
'KUMACRAFT.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll', Cannot find or open the PDB file
'KUMACRAFT.exe': Loaded 'C:\Windows\SysWOW64\KernelBase.dll', Cannot find or open the PDB file
'KUMACRAFT.exe': Loaded 'C:\Windows\SysWOW64\msvcp100d.dll', Symbols loaded.
'KUMACRAFT.exe': Loaded 'C:\Windows\SysWOW64\msvcr100d.dll', Symbols loaded.
'KUMACRAFT.exe': Loaded 'C:\Windows\SysWOW64\apphelp.dll', Cannot find or open the PDB file
'KUMACRAFT.exe': Loaded 'ImageAtBase0x4a110000', Loading disabled by Include/Exclude setting.
'KUMACRAFT.exe': Unloaded 'ImageAtBase0x4a110000'
First-chance exception at 0x01364012 in KUMACRAFT.exe: 0xC0000005: Access violation reading location 0x00244c04.
Unhandled exception at 0x01364012 in KUMACRAFT.exe: 0xC0000005: Access violation reading location 0x00244c04.
First-chance exception at 0x01364012 in KUMACRAFT.exe: 0xC0000005: Access violation reading location 0x00244c04.
Unhandled exception at 0x01364012 in KUMACRAFT.exe: 0xC0000005: Access violation reading location 0x00244c04.
First-chance exception at 0x01364012 in KUMACRAFT.exe: 0xC0000005: Access violation reading location 0x00244c04.
Unhandled exception at 0x01364012 in KUMACRAFT.exe: 0xC0000005: Access violation reading location 0x00244c04.
First-chance exception at 0x01364012 in KUMACRAFT.exe: 0xC0000005: Access violation reading location 0x00244c04.
Unhandled exception at 0x01364012 in KUMACRAFT.exe: 0xC0000005: Access violation reading location 0x00244c04.

Tu je ten problem
Kód:
First-chance exception at 0x01364012 in KUMACRAFT.exe: 0xC0000005: Access violation reading location 0x00244c04.
Unhandled exception at 0x01364012 in KUMACRAFT.exe: 0xC0000005: Access violation reading location 0x00244c04.
First-chance exception at 0x01364012 in KUMACRAFT.exe: 0xC0000005: Access violation reading location 0x00244c04.
Unhandled exception at 0x01364012 in KUMACRAFT.exe: 0xC0000005: Access violation reading location 0x00244c04.
First-chance exception at 0x01364012 in KUMACRAFT.exe: 0xC0000005: Access violation reading location 0x00244c04.
Unhandled exception at 0x01364012 in KUMACRAFT.exe: 0xC0000005: Access violation reading location 0x00244c04.
First-chance exception at 0x01364012 in KUMACRAFT.exe: 0xC0000005: Access violation reading location 0x00244c04.
Unhandled exception at 0x01364012 in KUMACRAFT.exe: 0xC0000005: Access violation reading location 0x00244c04.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.12.13
Prihlásený: 01.09.14
Príspevky: 54
Témy: 16
Príspevok Napísal autor témyOffline : 17.12.2013 23:27

Kebyze si to stiahnes a spustis na svojom PC malo by to ist lebo nemam tam vlozene ziadne vlastne hlavisckove subory je to len jeden cpp subor a vkladam len zakladne kniznice fstream iostream string takze spustiť ti to pojde.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.12.13
Prihlásený: 01.09.14
Príspevky: 54
Témy: 16
Príspevok Napísal autor témyOffline : 17.12.2013 23:45

jj prepac nejako sa mi lagol PC a neulozilo sa to takze pockaj skopirujem zalozny subor


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 17.12.2013 23:58

Už som si poradil, tak som ten prísp. zmazal. Dúfal som, že si to ešte neprečítal. No nevadí...

No to ukladanie a načítanie súboru máš veru divoko. A vôbec máš celý ten program nejaký divoký. Za prvé, čo mi udrelo do očí - voláš metódu main. To nerob. Nikdy. Funkcia main je vstupný bod programu a jej adresa by v programe nemala byť použitá. Tu ti to náhodou funguje, ale inde by nemuselo. V režime -pedantic ti to vyhodí aj warning.

No a teraz tie súbory. Nechce sa mi veľmi lúštiť tie pekelné algoritmy, čo tam používaš, tak sa len spýtam: Prečo to nemôžeš ukladať jednoducho cez tri for cykly? Ukladáš to ako text, čo je jednoduchšie, dobre. No ale aj tak ukladať musíš rovnako, ako načítavaš. Nie som si istý, či pri tých tvojích divokých podmienkach nerobíš niečo zle (a pravdepodobne robíš) Keď si otvorím mapu ako texťák, nevidím tam nič, čo by sa podobalo tomu, čo som do programu zadal.







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.12.13
Prihlásený: 01.09.14
Príspevky: 54
Témy: 16
Príspevok Napísal autor témyOffline : 18.12.2013 0:02

Ja viem že to mam divoke :-D ale nevies mi nejako poradit ako by som do suboru zakodoval informacie ID zo vsetkych objektov od MAP[0][0][0] do MAP [MAX_X][MAX_Y][MAX_Z] ??? a znova nacital do objektov MAP[][][] ?? NAJRADSEJ BY SOM BOL KEBY SOM ZISTIL AKO SA POUZIVA ios::binary pri otvarani suboru ze by som mapu ukladal binarne a nacitaval binarne ?? Ten Algoritmus je jednoduchy len to pocita X Y Z postupne pripocitava k Z od 0 do maximalnej hodnoty ked dosiahne maximalnu hodnotu pripocita sa 1 k Y ked Y dosiahne MAX hodnotu pripocita sa k X Cize ked Z napocita do MAX_Z pripocita sa 1 k Y potom ked Y napocita do MAX_Y pripocita 1 k X a ked X napocita do MAX_X tak sa cyklus ukonci. :-) ZMENIL SOM HORE ULOZTO DOWNLOAD TERAZ SU TAM ORIGINAL SUBORI toho programu vsetko ...


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 18.12.2013 0:17

Ak to chceš ako text, musíš si vymyslieť formát. Stanov si nejaký formát, v ktorom sa nepomýliš. Trebárs formát
Kód:
ID X Y Z ID X Y Z ID X Y Z
Ak to do texťáku nasypeš takto, nemôžeš mať problém. A dáš to tam nejako takto:
Kód:
for( x... ) // nastav správne medze
    for( y... )
        for( z... )
        {
            subor >> MAP[x][y][z].getId() >> " " >> x >> " " >> y >> " " >> z >> " ";
        }

Načítaš to potom podobne. Len pri načítaní pozor na správne poradie (x, y, z), aby ti naozaj sadlo všetko na správne miesto.

Binárny zápis do súboru by ti v tomto ale dosť uľahčil prácu. Stačilo by ti celé pole napachať do binárneho súborua a následne by si ho rovnako vytiahol (celé pole, všetky hodnoty by boli na svojom mieste)
V tomto ale nemám s prúdmi v C++ veľké skúsenosti. Vždy radšej používam starý dobrý prístup cez FILE http://www.cplusplus.com/reference/cstdio/FILE/
Tam sa dá využiť funkcia fwrite a fread. Funkciou fwrite zapíšeš do súboru celý blok dát tak, ako sú. Tzn. že ak tam dáš svoj pole, do súboru sa uloží celé 3D pole podobne, ako je uložené v RAMke.
Funkciou fread potom vieš zase zobrať celý obsah toho súboru a plácnuť ho do RAMky na správne miesto tak, aby každá hodnota bola na svojom mieste.







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.12.13
Prihlásený: 01.09.14
Príspevky: 54
Témy: 16
Príspevok Napísal autor témyOffline : 18.12.2013 21:02

Nejako to uz vymyslim skusim to zmenit uvidim ako to pojde potom napisem ci sa chyba odstranila ... a diki moc :-) :-D :D :-D
A nevies ako by som to mohol ulozit pomocou fstream ??
Kód:
.....
fstream map_file;
string map_name;
cout << "Map Name: ";
getline(cin, map_name);
string a = map_name + ".kuma";
map_file.open(a, ios::binary);
//tu sa to nejako ulozi ????????
cout << "File saved.\n";
.....


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.12.13
Prihlásený: 01.09.14
Príspevky: 54
Témy: 16
Príspevok Napísal autor témyOffline : 19.12.2013 18:52

skusil som tvoju radu s tym for spravil som to takto , zapis do suboru mi funguje:
Kód:
for(int x = 0; x >= 0 && x <= MAX_X;)
{
   for(int y = 0; y >= 0 && y <= MAX_Y;)
   {
      for(int z = 0; z >= 0 && z <= MAX_Z;)
      {
         map_file << MAP[x][y][z].getID() << " ";
         z += 1;
      }
      y += 1;
   }
   x += 1;
}

ale nacitanie zo suboru mi nejde a nechapem preco zas ten RUNTIME ERROR ---->
Kód:
unsigned int pid = 0;
for(int x = 0; x >= 0 && x <= MAX_X;)
{
   for(int y = 0; y >= 0 && y <= MAX_Y;)
   {
      for(int z = 0; z >= 0 && z <= MAX_Z;)
      {
         map_file >> pid;
         MAP[x][y][z].setID(pid);
         z += 1;
      }
      y += 1;
   }
   x += 1;
}

Tu chybu mi nahodi niekde ked je to v 3/4 nacitavania.


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 20.12.2013 11:01

Tak za prvé, ten for máš úplne divne. Naštuduj si ešte raz jeho syntax.
Ďalej, pre pole MAP platí, že súradnice idú od 0 do MAP_X (rovnako pre MAP_Y a MAP_Z) - to preto, že polia začínajú od nuly a je tam presne MAP_X prvkov. Tzn. že pole končí na MAP_X-1.
Takže ti tam robí šarapatu tá podmienka i <= MAX_X (podobne pre ostatné) Správne to má byť len i < MAX_X;
Takto nejako to má vyzerať.
Kód:
for(int x = 0; x < MAX_X; x++)
    for(int y = 0; y < MAX_Y; y++)
        for(int z = 0; z < MAX_Z; z++)
            map_file << MAP[x][y][z].getID() << " ";

Rovnako uprav načítanie a pôjde to :)

(Teda aj tvoje for-cykly sú správne (až na to i <= MAX_X), ale sú zbytočne zložité)







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.12.13
Prihlásený: 01.09.14
Príspevky: 54
Témy: 16
Príspevok Napísal autor témyOffline : 21.12.2013 8:12

dik skusim to ...


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.12.13
Prihlásený: 01.09.14
Príspevky: 54
Témy: 16
Príspevok Napísal autor témyOffline : 24.12.2013 0:43

uz mi to ide ale mam dalsi problem neuklada mi to do suboru 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ale ulozi mi na konci aj nezmyselne cisla ... 454546532 0 0 0 0 86741 0 0 5 0 0 0 15 0 0 0 894564 0 0 0 ... vecsina ID sa ulozi a nacita spravne ale na konci mi ich asi 20 obsahuje cisla mimo 0 tak som rozmyslal ze na zaciatku som mal
Kód:
for(int x = 0; x < MAX_X; x++)
   for(int y = 0; y < MAX_Y; y++)
      for(int z = 0; z < MAX_Z; z++)
         MAP[x][y][z].setID(0);
toto malo nastavit vsetkym objektom ID 0 ale asi nenastavilo tak som chcel pridat este
Kód:
for(int x = 0; x < MAX_X; x++)
   for(int y = 0; y < MAX_Y; y++)
      for(int z = 0; z < MAX_Z; z++)
      {
         if(MAP[x][y][z].getID() != 0)
            MAP[x][y][z].setID(0);
      }
a skoncilo to chybou zasa ta RUNTIME ERROR :( :( :cry: :cry:
DOWNLOAD zdrojovy kod najnovsia verzia + Visual Studio 2010 Subory Projektu: http://uloz.to/xhnK6sXu/kumacraft-1-1-0-zip


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 24.12.2013 10:35

Vieš mi vysvetliť, prečo tam máš v tých for cykloch x < MAX_X + 1 ?!







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.12.13
Prihlásený: 01.09.14
Príspevky: 54
Témy: 16
Príspevok Napísal autor témyOffline : 01.01.2014 20:48

lebo ked tam bolo iba MAX_X a nie MAX_X +1 tak mi nacitalo len od napriklad -15 -10 -15 do 14 9 14
a ja som chcel od -15 -10 -15 do 15 10 15 ......


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 02.01.2014 9:36

Lenže musíš dávať pozor na rozsah pola. Keď si alokuješ pole ako int pole[15], tak tam máš 15 prvkov. To ale nie je od 0 do 15, ale od 0 do 14 (to je 15 prvkov). S tým MAX_X+1 siahaš mimo svojho pola (v tomto príklade sa snažíš pristupovať k prvku pole[15], ktoré ale neexistuje)
Toto je dôvod, prečo máš na konci toho súboru bordelné čísla (sú to čísla mimo pola, takže nejaké náhodné hodnoty) A v závislosti na tom, kde program spúšťaš, to môže spôsobovať aj runtime error (presnejšie segmentation fault)







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.12.13
Prihlásený: 01.09.14
Príspevky: 54
Témy: 16
Príspevok Napísal autor témyOffline : 22.01.2014 19:34

aha dik :)


Odpovedať na tému [ Príspevkov: 18 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. POMOOC.Problem s ASUS 6600GT..VypinanieMonitoraAblbe textury

[ Choď na stránku:Choď na stránku: 1, 2 ]

v nVidia grafické karty

43

2598

18.03.2006 15:34

Shit Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problem s nacitanim

v Operačné systémy Microsoft

10

852

19.08.2011 13:51

michalesku Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. PROBLEM S NACITANIM

v Ostatné

2

569

07.01.2008 15:12

patqo_he Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. problem s nacitanim

v Ostatné zariadenia

5

340

21.01.2015 19:16

Miso122 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problém s načítaním stránok

v Služby a webstránky

2

406

08.08.2015 17:17

cayz Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problem s nacitanim stranek

v Sieťové a internetové programy

12

917

21.04.2006 12:09

Svobik7 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problem s nacitanim stranky

v Sieťové a internetové programy

7

2173

24.11.2010 21:49

Viera Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problem s nacitanim jednotky

v Pevné disky a radiče

2

580

31.10.2009 11:55

Chester Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problem s nacitanim disku

v Ostatné

1

542

06.05.2009 16:46

AsuSmaNiaK Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. problém s načítaním stránky

v Siete

1

550

16.08.2011 18:27

majky358 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problem s nacitanim pamate

v Pamäte

6

401

06.03.2013 3:16

Lukasko21 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problem s načítaním HDD

v Pevné disky a radiče

3

331

26.06.2013 19:42

TPT Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problem z načítanim portálu

v PHP, ASP

8

528

24.04.2008 18:13

stenley Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problém s načítaním Windowsu

v Operačné systémy Microsoft

13

2849

26.11.2013 20:43

Mandy Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problém s načitanim youtube

v Sociálne siete

2

392

04.11.2013 20:15

tairikuokami Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problem s nacitanim stranky

v Služby a webstránky

5

526

07.01.2018 21:12

Vinchenzo Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra