Pliki ,tablice i struktury/klasy
Ostatnio zmodyfikowano 2013-06-21 09:25
Alan468 Temat założony przez niniejszego użytkownika |
Pliki ,tablice i struktury/klasy » 2013-06-20 21:26:54 Witam,
Mam kolejny problem (smuci mnie ten fakt) ,a więc wczytuje dane z pliku do tablicy w strukturze/klasie ,zaraz po wczytaniu wyświetlam przykład i wszystko jest tak jak powinno ,ale gdy już wrócę do main() to zmienna przechowująca tekst z pliku nic nie wyświetla i nie rozmumiem jak zmienna "zapomina" co przechowywała ... .
main.cpp
#include <SFML/Graphics.hpp> #include <string> #include <iostream> #include <fstream> #include <conio.h> #include <sstream> #include "zmienne.h" #include "WczytywaniePliku.h"
using namespace std; using namespace sf;
string IntToStr( int a ) { Zmienne MZ; MZ.ITS << a; MZ.text = MZ.ITS.str(); return MZ.text; }
int main() { Zmienne MZ; WczytajPlik(); MZ.tlomapy.loadFromFile( "data/DCMI/mapa.bmp" ); MZ.TloMapy.setTexture( MZ.tlomapy ); MZ.zaznaczenie.loadFromFile( "data/DCMI/zaznaczenie.bmp" ); MZ.Zaznaczenie.setTexture( MZ.zaznaczenie ); MZ.czcionka.loadFromFile( "arial.ttf" ); MZ.PoleNrNap.setString( "Pole nr.: " ); MZ.CzyGraczaNap.setString( "Czy gracza: " ); MZ.CzyGraczaNap.setPosition( 750, 250 ); MZ.CzyGraczaOdpNap.setPosition( 870, 250 ); MZ.PoleNrNap.setPosition( 750, 200 ); MZ.NumerNap.setPosition( 870, 200 ); RenderWindow MapaGry( VideoMode( 1280, 720, 32 ), "Mapa Gry" ); while( MapaGry.isOpen() ) { MZ.X_Myszy = MZ.Zdarzenie.mouseMove.x; MZ.Y_Myszy = MZ.Zdarzenie.mouseMove.y; MZ.Najechano_Na_Pole = 0; for( int y = 0; y <= 648; y = y + 72 ) { for( int x = 0; x <= 648; x = x + 72, MZ.Najechano_Na_Pole++ ) { if(( MZ.X_Myszy > x && MZ.X_Myszy <=( x + 72 ) ) &&( MZ.Y_Myszy > y && MZ.Y_Myszy <=( y + 72 ) ) ) { MZ.Zaznaczenie.setPosition( x, y ); if( MZ.Najechano_Na_Pole != MZ.Wys ) { if( MZ.Zdarzenie.type == Event::MouseButtonPressed && MZ.Zdarzenie.mouseButton.button == Mouse::Left ) { MZ.Kliknieto_N_Pole = MZ.Najechano_Na_Pole; MZ.NumerNap.setString( IntToStr( MZ.Kliknieto_N_Pole ) ); MZ.CzyGraczaOdpNap.setString( MZ.Czy_Gracza[ MZ.Kliknieto_N_Pole ] ); MZ.Wys = MZ.Najechano_Na_Pole; cout << "[PRZYKLAD]Numer pola: " << MZ.Kliknieto_N_Pole << " ." << endl; cout << "[PRZYKLAD]Czy gracza: " << MZ.Czy_Gracza[ MZ.Kliknieto_N_Pole ] << " ." << endl; } } } } while( MapaGry.pollEvent( MZ.Zdarzenie ) ) { if( Event::KeyPressed && MZ.Zdarzenie.key.code == Keyboard::Escape ) { MapaGry.close(); } if( MZ.Zdarzenie.type == Event::Resized ) { MapaGry.setSize( Vector2u( 1280, 720 ) ); } } } MapaGry.clear(); MapaGry.draw( MZ.TloMapy ); MapaGry.draw( MZ.Zaznaczenie ); MapaGry.draw( MZ.PoleNrNap ); MapaGry.draw( MZ.NumerNap ); MapaGry.draw( MZ.CzyGraczaNap ); MapaGry.draw( MZ.CzyGraczaOdpNap ); MapaGry.display(); } }
WczytywaniePliku.h
#ifndef WczytywaniePliku_HPP #define WczytywaniePliku_HPP
#include <string> #include <iostream> #include <fstream> #include "zmienne.h"
using namespace std;
void WczytajPlik() { Zmienne MZ; fstream Plik_Z_Danymi; Plik_Z_Danymi.open( "properties.txt", ios::in ); cout << "Wczytywanie danych..." << endl; if( Plik_Z_Danymi.good() == true ) { std::cout << "Uzyskano dostep do pliku!" << std::endl; for( int Nr_Pola = 0; Nr_Pola < 100; Nr_Pola++ ) { Plik_Z_Danymi >> MZ.Nazwa_Pola[ Nr_Pola ] >> MZ.Czy_Gracza[ Nr_Pola ] >> MZ.Czy_M_Atakowac[ Nr_Pola ] >> MZ.Nazwa_Misji[ Nr_Pola ]; if( MZ.Nazwa_Pola[ Nr_Pola ] == "endfile" ) { cout << endl << "Przerwano " << endl; break; } } cout << "[PRZYKLAD]Numer pola: 88 ." << endl; cout << "[PRZYKLAD]Czy gracza: " << MZ.Czy_Gracza[ 87 ] << " ." << endl; cout << "Wczytano." << endl; } } #endif
zmienne.h
#ifndef ZMIENNE_H #define ZMIENNE_H
#include <string>
using namespace std; using namespace sf; struct Zmienne { Texture tlomapy; Texture zaznaczenie; ostringstream ITS; Sprite TloMapy; Sprite Zaznaczenie; Text PoleNrNap, NumerNap; Text CzyGraczaNap, CzyGraczaOdpNap; Text CzyMAtakowacNap, CzyMAtakowacOdpNap; Text NazwaMisji, NazwaMisjiOdp; std::string Nazwa_Pola[ 100 ]; std::string Czy_Gracza[ 100 ]; std::string Czy_M_Atakowac[ 100 ]; std::string Nazwa_Misji[ 100 ]; std::string text; int Najechano_Na_Pole; int Kliknieto_N_Pole; int Wys; int X_Myszy; int Y_Myszy; Event Zdarzenie; Font czcionka; };
#endif
|
|
pjpeg_objected |
» 2013-06-20 23:15:38 Problem występuje, ponieważ tworzysz obiekt w funkcji i jest on dostępny tylko lokalnie (z poziomu funkcji). A drugi obiekt który tworzysz w mainie nie jest już tym samym obiektem chociaż ma taką samą nazwę. |
|
Alan468 Temat założony przez niniejszego użytkownika |
» 2013-06-21 08:20:16 Czy wystarczyło by zmienić Zmienne MZ; na na przykład Zmienne MZ2; tylko w funkcji wczytującej plik (i w innych funkcjach też zmienić na jeszcze inne) a w main() zostawić Zmienne MZ; lecz dalej nic :/ |
|
pjpeg_objected |
» 2013-06-21 08:53:37 Nie w tym rzecz. Takie coś spowoduje że będziesz tworzył różne obiekty. W mainie powinieneś stworzyć i przekazać je poprzez referencje do funkcji. Dzięki temu cały czas będziesz pracował na tym samym obiekcie. Polecam przeczytać, może Ci się trochę rozjaśni: Przekazywanie argumentów funkcji przez referencję |
|
Alan468 Temat założony przez niniejszego użytkownika |
» 2013-06-21 09:25:30 Dzięki :) Wielkie dzięki :) |
|
« 1 » |