Klassen



  • Fehler 7 error C2065: 'na1x8': nichtdeklarierter Bezeichner C:\Users\Jojo\documents\visual studio 2012\Projects\SPIEL_01-SFML\SPIEL_01-SFML\player.cpp 21 1 SPIEL_01-SFML

    das beim vektor erstellen:
    Fehler 1 error C2143: Syntaxfehler: Es fehlt ';' vor '<' c:\users\jojo\documents\visual studio 2012\projects\spiel_01-sfml\spiel_01-sfml\player.h 36 1 SPIEL_01-SFML

    Fehler 12 error C2228: Links von ".setPosition" muss sich eine Klasse/Struktur/Union befinden. C:\Users\Jojo\documents\visual studio 2012\Projects\SPIEL_01-SFML\SPIEL_01-SFML\player.cpp 23 1 SPIEL_01-SFML
    Fehler 8 error C2228: Links von ".setTexture" muss sich eine Klasse/Struktur/Union befinden. C:\Users\Jojo\documents\visual studio 2012\Projects\SPIEL_01-SFML\SPIEL_01-SFML\player.cpp 21 1 SPIEL_01-SFML
    Fehler 10 error C2228: Links von ".setTextureRect" muss sich eine Klasse/Struktur/Union befinden. C:\Users\Jojo\documents\visual studio 2012\Projects\SPIEL_01-SFML\SPIEL_01-SFML\player.cpp 22 1 SPIEL_01-SFML
    Fehler 3 error C2238: Unerwartete(s) Token vor ';' c:\users\jojo\documents\visual studio 2012\projects\spiel_01-sfml\spiel_01-sfml\player.h 36 1 SPIEL_01-SFML
    Fehler 6 error C2238: Unerwartete(s) Token vor ';' c:\users\jojo\documents\visual studio 2012\projects\spiel_01-sfml\spiel_01-sfml\player.h 36 1 SPIEL_01-SFML
    Fehler 2 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. c:\users\jojo\documents\visual studio 2012\projects\spiel_01-sfml\spiel_01-sfml\player.h 36 1 SPIEL_01-SFML
    Fehler 5 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. c:\users\jojo\documents\visual studio 2012\projects\spiel_01-sfml\spiel_01-sfml\player.h 36 1 SPIEL_01-SFML
    14 IntelliSense: Der Bezeichner ""na1x8"" ist nicht definiert. c:\Users\Jojo\Documents\Visual Studio 2012\Projects\SPIEL_01-SFML\SPIEL_01-SFML\player.cpp 21 2 SPIEL_01-SFML



  • Sieht danach aus, als sei std::vector nicht richtig bekannt. Header eingebunden?



  • bei player.h ja aber bei player.cpp nein 😃



  • Jetzt sagt er aber, dass ein Typspeziefierer erwartet wurde, bei dem Vektor, der nimmt die Anzahl nicht an
    und wenn ich: "na1x8[1].setTexture..." nutzen will dann bietet er mir gar nicht das set... an



  • FJK-2842 schrieb:

    bei player.h ja aber bei player.cpp nein 😃

    Bei player.h reicht, die bindest du ja in der .cpp ein und dadurch auch alle Header, die sie einbindet.

    Poste bitte mal Code.



  • egal was ich bei na1x8 hinschreibe ("[0]") akzeptiert er nicht .. ebenso wie die anzahl beim vektor

    #include <SFML/Graphics.hpp>
    #include <vector>
    
    using namespace sf;
    
    class player
    {
    public:
    	void Update(RenderWindow &Window);
    	void Render(RenderWindow &Window);
    	explicit player(String tex);
    
    private:
    	RectangleShape splayer;
    	RectangleShape ziel;
    
    	Texture na;
    	Sprite na3x2;
    	Sprite na1x8_1;
    	Sprite na1x8_2;
    	Sprite na1x1_1;
    	Sprite na1x1_2;
    	Sprite na1x1_3;
    	Sprite na1x2_1;
    	Sprite na1x2_2;
    	Sprite na1x2_3;
    	Sprite na1x2_4;
    	Sprite na1x2_5;
    	Sprite na1x2_6;
    	Sprite na2x1_1;
    	Sprite na2x1_2;
    	Sprite na2x1_3;
    	Sprite na2x1_4;
    	Sprite na2x1_5;
    
    	std::vector<String> na1x8(String);
    
    };
    
    #include "player.h"
    #include <iostream>
    #include <Windows.h>
    
    using namespace sf;
    using namespace std;
    
    player::player(String tex)
    {
    	splayer.setSize(Vector2f(40,40));
    	splayer.setOrigin(20,20);
    	splayer.setFillColor(Color::Green);
    
    	ziel.setSize(Vector2f(50,50));
    	ziel.setPosition(200,0);
    	ziel.setFillColor(Color::Red);
    
    	na.loadFromFile("Data\\ground2.png");
    	na.setSmooth(false);
    
    	na1x8.setTexture(na);
    
    	na1x8_1.setTexture(na);
    	na1x8_1.setTextureRect(IntRect(0,0,100,750));
    	na1x8_1.setPosition(0,0);
    
    	na1x8_2.setTexture(na);
    	na1x8_2.setTextureRect(IntRect(650,0,750,750));
    	na1x8_2.setPosition(650,0);
    
    	na3x2.setTexture(na);
    	na3x2.setTextureRect(IntRect(350,600,700,750));
    	na3x2.setPosition(350,600);
    
    	na1x1_1.setTexture(na);
    	na1x1_1.setTextureRect(IntRect(100,0,100,100));
    	na1x1_1.setPosition(100,0);
    
    	na1x1_2.setTexture(na);
    	na1x1_2.setTextureRect(IntRect(250,450,100,100));
    	na1x1_2.setPosition(250,450);
    
    	na1x1_3.setTexture(na);
    	na1x1_3.setTextureRect(IntRect(500,450,100,100));
    	na1x1_3.setPosition(500,450);
    
    	na1x2_1.setTexture(na);
    	na1x2_1.setTextureRect(IntRect(100,300,100,200));
    	na1x2_1.setPosition(100,300);
    
    	na1x2_2.setTexture(na);
    	na1x2_2.setTextureRect(IntRect(250,0,100,150));
    	na1x2_2.setPosition(250,0);
    
    	na1x2_3.setTexture(na);
    	na1x2_3.setTextureRect(IntRect(550,0,100,200));
    	na1x2_3.setPosition(550,0);
    
    	na1x2_4.setTexture(na);
    	na1x2_4.setTextureRect(IntRect(550,200,100,200));
    	na1x2_4.setPosition(550,200);
    
    	na1x2_5.setTexture(na);
    	na1x2_5.setTextureRect(IntRect(400,150,100,200));
    	na1x2_5.setPosition(400,150);
    
    	na1x2_6.setTexture(na);
    	na1x2_6.setTextureRect(IntRect(400,350,100,200));
    	na1x2_6.setPosition(400,350);
    
    	na2x1_1.setTexture(na);
    	na2x1_1.setTextureRect(IntRect(350,0,200,100));
    	na2x1_1.setPosition(350,0);
    
    	na2x1_2.setTexture(na);
    	na2x1_2.setTextureRect(IntRect(150,150,200,100));
    	na2x1_2.setPosition(150,150);
    
    	na2x1_3.setTexture(na);
    	na2x1_3.setTextureRect(IntRect(200,300,200,100));
    	na2x1_3.setPosition(200,300);
    
    	na2x1_4.setTexture(na);
    	na2x1_4.setTextureRect(IntRect(150,550,200,100));
    	na2x1_4.setPosition(150,550);
    
    	na2x1_5.setTexture(na);
    	na2x1_5.setTextureRect(IntRect(100,700,200,50));
    	na2x1_5.setPosition(100,700);
    };
    
    void player::Update(RenderWindow &Window)
    {
    	int x,y;
    	x = Mouse::getPosition(Window).x;
    	y = Mouse::getPosition(Window).y;
    	splayer.setPosition(x,y);
    
    	if(splayer.getGlobalBounds().intersects(ziel.getGlobalBounds()))
    	{
    		cout << "Gewonnen!" << endl;
    		system("Pause >nul");
    		Window.close();
    	}
    
    	if(splayer.getGlobalBounds().intersects(na1x1_1.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    		Window.close();
    	}else if(splayer.getGlobalBounds().intersects(na1x1_2.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    		Window.close();
    	}else if(splayer.getGlobalBounds().intersects(na1x1_3.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    		Window.close();
    	}else if(splayer.getGlobalBounds().intersects(na1x2_1.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    		Window.close();
    	}else if(splayer.getGlobalBounds().intersects(na1x2_2.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    		Window.close();
    	}else if(splayer.getGlobalBounds().intersects(na1x2_3.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    		Window.close();
    	}else if(splayer.getGlobalBounds().intersects(na1x2_4.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    		Window.close();
    	}else if(splayer.getGlobalBounds().intersects(na1x2_5.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    		Window.close();
    	}else if(splayer.getGlobalBounds().intersects(na1x2_6.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    		Window.close();
    	}else if(splayer.getGlobalBounds().intersects(na1x8_1.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    		Window.close();
    	}else if(splayer.getGlobalBounds().intersects(na1x8_2.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    		Window.close();
    	}else if(splayer.getGlobalBounds().intersects(na2x1_1.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    		Window.close();
    	}else if(splayer.getGlobalBounds().intersects(na2x1_2.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    		Window.close();
    	}else if(splayer.getGlobalBounds().intersects(na2x1_3.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    		Window.close();
    	}else if(splayer.getGlobalBounds().intersects(na2x1_4.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    		Window.close();
    	}else if(splayer.getGlobalBounds().intersects(na2x1_5.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    		Window.close();
    	}else if(splayer.getGlobalBounds().intersects(na3x2.getGlobalBounds()))
    	{
    		cout << "Verloren!" << endl;
    		system("Pause >nul");
    		Window.close();
    	}
    }
    
    void player::Render(RenderWindow &Window)
    {
    	Window.draw(na1x1_1);
    	Window.draw(na1x1_2);
    	Window.draw(na1x1_3);
    	Window.draw(na1x2_1);
    	Window.draw(na1x2_2);
    	Window.draw(na1x2_3);
    	Window.draw(na1x2_4);
    	Window.draw(na1x2_5);
    	Window.draw(na1x2_6);
    	Window.draw(na1x8_1);
    	Window.draw(na1x8_2);
    	Window.draw(na2x1_1);
    	Window.draw(na2x1_2);
    	Window.draw(na2x1_3);
    	Window.draw(na2x1_4);
    	Window.draw(na2x1_5);
    	Window.draw(na3x2);
    
    	Window.draw(splayer);
    	Window.draw(ziel);
    }
    


  • Du deklarierst keinen vector als Member, sondern eine Funktion, die einene vector zurückgibt. Konstruktoraufrufe müssen in die Initialisierungsliste des Konstruktors. Und du an ein gutes Grundlagenbuch.



  • Ja ich weiß 🙄 😞
    aber könntest du netterweise das jetzt nochmal für "blöde" erklären, wenn nicht okay
    Ich bedanke mich für die Antworten! 👍

    edit:
    Ich leide unter dem Buch "Grundkurs C++", Jürgen Wolf!



  • Ich meine jetzt, wo muss ich den Vektor erstellen und was muss ich noch tun??? 😕



  • Ehrlich: das bringt doch nichts. Wie ich schon sagte: SFML ist zwar relativ einfach zu benutzen, es ist aber trotzdem nicht für Anfänger gedacht. Die Fragen, die du stellst, klingen so als hättest du die ersten 50 Seiten deines Buches gelesen (mal davon abgesehen, dass es von Jürgen Wolf ist) und dann einfach drauf los programmiert. So läuft das leider nicht, so schön es wäre. C++ lernen ist hart und dauert lange, Punkt.

    Der Code, den du jetzt hast, ist so zusammengefrickelt, da hilft es auch nicht, dir zu erklären, wie du jetzt speziell diesen vector verwenden kannst. Lass SFML sein, besorg dir ein gutes Buch (Breymann, Primer, Stroustroup; siehe Buchliste, hier gibts nen Link: https://www.c-plusplus.net/forum/251551)
    und schreib kleine Konsolenprogramme. Ja, das macht weniger Spaß, ist aber nachhaltiger.



  • Das hat weder mit Herrn Wolf, noch mit SFML zu tun.

    Benutz SFML weiter. Konsolenprogrammierung ist stinklangweilig und alles, was über simple Frage/Antwort Spiele hinausgeht ist nicht ordentlich zu machen.

    Meine Anregungen:
    - Mal ein wenig Zeit nehmen.
    - Diesen Link durchlesen, verstehen und beherzigen: Den richtigen Code posten
    - Deine Sprache in Postings von schnoddrig/prosaisch auf nüchtern/präzise umstellen.

    Wenn ich sage: "Zeit nehmen" meine ich, dass das Forum kein online Compiler ist. Insbesondere, wenn Du den Link beherzigst erledigt sich das aber eh...

    Weitermachen! Los los! 🙂



  • mitlerweile bin ich auch schon selber drauf gekommen 😉
    aber eine Sache bleibt mir noch!
    Wie erstelle ich mit der Methode: "std::array<Typ> Name;" ein dreidimensionales Array, denn ich brauche 17 arrays, die 4 werte enthalten!



  • nicht drei sonder zweidimensional


  • Mod

    Das ist dann ein Array mit 17 Elementen vom Typ Array mit vier Elementen von was auch immer für einem Typ.



  • Ich habe es bereits geschafft:

    #include <SFML/Graphics.hpp>
    #include <array>
    #pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
    
    using namespace sf;
    using namespace std;
    
    int main()
    {
        RenderWindow window(VideoMode(750, 750), "Maze between fog");
    
    	Font font;
    	font.loadFromFile("Data\\arial.ttf");
    	Text win, lose;
    	win.setString("Gewonnen! Drücke Esc, um das Spiel zu schließen!");
    	win.setFont(font);
    	win.setColor(Color::Yellow);
    	win.setCharacterSize(24);
    	lose.setString("Verloren! Drücke Esc, um das Spiel zu schließen!");
    	lose.setFont(font);
    	lose.setColor(Color::Yellow);
    	lose.setCharacterSize(24);
    
    	Texture na;
    	na.loadFromFile("Data\\ground2.png");
    	na.setSmooth(false);
    	Texture gtexture;
    	gtexture.loadFromFile("Data\\ground.png");
    	gtexture.setSmooth(false);
    	Sprite ground;
    	ground.setTexture(gtexture);
    	ground.setPosition(0,0);
    	RectangleShape ziel(Vector2f(50,50));
    	ziel.setPosition(200,0);
    	ziel.setFillColor(Color::Red);
    	RectangleShape splayer(Vector2f(40,40));
    	splayer.setOrigin(20,20);
    	splayer.setFillColor(Color::Green);
    
    	array<Sprite, 17> level;
    	array<IntRect, 17> leveld1 = { 
    		IntRect( 350, 600, 700, 750 ), 
    		IntRect( 100, 0, 100, 100 ), 
    		IntRect( 250, 450, 100, 100 ), 
    		IntRect( 500, 450, 100, 100 ), 
            IntRect( 100, 300, 100, 200 ), 
            IntRect( 250, 0, 100, 150 ), 
            IntRect( 550, 0, 100, 200 ), 
            IntRect( 550, 200, 100, 200 ), 
            IntRect( 400, 150, 100, 200 ), 
            IntRect( 400, 350, 100, 200 ), 
            IntRect( 350, 0, 200, 100 ), 
            IntRect( 150, 150, 200, 100 ), 
            IntRect( 200, 300, 200, 100 ), 
            IntRect( 150, 550, 200, 100 ), 
            IntRect( 100, 700, 200, 50 ), 
            IntRect( 0, 0, 100, 750 ), 
            IntRect( 650, 0, 750, 750 ),     
        }; 
    
    	int leveld2 [17][2] = { {350,600},
    							{100,0},
    							{250,450},
    							{500,450},
    							{100,300},
    							{250,0},
    							{550,0},
    							{550,200},
    							{400,150},
    							{400,350},
    							{350,0},
    							{150,150},
    							{200,300},
    							{150,550},
    							{100,700}, 
    							{0,0},
    							{650,0} };
    
    	for(int i = 0; i < 17; i++)
    	{
    		level[i].setTexture(na);
    		level[i].setTextureRect(leveld1[i]);
    		level[i].setPosition(leveld2[i][0],leveld2[i][1]);
    	}
    
    	bool status = false;
    
    	Mouse::setPosition(Vector2i(325,725),window);
    	while(window.isOpen())
    	{
    		Event event;
    		while(window.pollEvent(event))
    		{
    			if(event.type == Event::Closed)
    				window.close();
    			if(Keyboard::isKeyPressed(Keyboard::Escape))
    				window.close();
    		}
    
    		if(status == true)
    		{
    			window.close();
    			RenderWindow GameOver(VideoMode(550,28), "Game over!");
    			GameOver.clear();
    			GameOver.draw(lose);
    			GameOver.display();
    
    			while(GameOver.isOpen())
    			{
    				Event event2;
    				while(GameOver.pollEvent(event2))
    				{
    					if(event2.type == Event::Closed)
    						GameOver.close();
    					if(Keyboard::isKeyPressed(Keyboard::Escape))
    						GameOver.close();
    				}
    			}
    		}else if(status == false)
    		{
    			splayer.setPosition(Mouse::getPosition(window).x , Mouse::getPosition(window).y);
    
    			for(int z = 0; z < 17; z++)
    			{
    				if(splayer.getGlobalBounds().intersects(level[z].getGlobalBounds()))
    				{
    					status = true;
    				}
    			}
    
    			if(splayer.getGlobalBounds().intersects(ziel.getGlobalBounds()))
    			{
    				window.close();
    				RenderWindow GameWin(VideoMode(570,28), "Game won!");
    				GameWin.clear();
    				GameWin.draw(win);
    				GameWin.display();
    
    				while(GameWin.isOpen())
    				{
    					Event event3;
    					while(GameWin.pollEvent(event3))
    					{
    						if(event3.type == Event::Closed)
    							GameWin.close();
    						if(Keyboard::isKeyPressed(Keyboard::Escape))
    							GameWin.close();
    					}
    				}
    			}
    		}
    
    		window.clear();
    		window.draw(ground);
    		window.draw(ziel);
    		window.draw(splayer);
    
    		for(int d = 0; d < 17; d++)
    		{
    			window.draw(level[d]);
    		}
    
    		window.display();
    	}
    	return 0;
    }
    




  • FJK-2842 schrieb:

    Ich habe es bereits geschafft:

    Sieht doch gut aus.

    Ich meine, dass Du das Array leveld2 eigentlich gar nicht brauchst. Du kannst Die Werte doch aus aus leveld1 ziehen.
    Mittels IntRect::left , und IntRect::top .

    Und darüberhinaus kannst Du noch überlegen, ob Du das statt eines std::array s mit Sprites nicht einen std::vector nimmst. Der hat einen Konstruktor, mit dem Du 17 mal den gleichen Wert im vector konstruieren kannst.
    Das ist in diesem Fall sogar sehr praktisch, da SFML::Sprite einen Konstruktor hat, der Textur und Rechteck entgegennimmt (was bei Dir ja immer gleich ist).
    Danach müsstest Du nur noch einmal über den vector rutschen und die Positionen anpassen.



  • richtig, habe ich im nachhinein geändert
    getTextureRect().Left/Top


Anmelden zum Antworten