Register for your free account! | Forgot your password?

You last visited: Today at 19:33

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Text Spiel

Discussion on Text Spiel within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Feb 2008
Posts: 30
Received Thanks: 1
Text Spiel

Kann mir einer helfen. Ich möchte ein Text basiertes Spiel programmieren, bekomme aber immer so ein Fehler.


Danke schonmal.
Danielnoel is offline  
Old 05/03/2010, 17:48   #2
 
Madd Eye's Avatar
 
elite*gold: 260
Join Date: Apr 2010
Posts: 229
Received Thanks: 142
So wie das ausschaut wird das mit C++ gemacht oder??
Also die Programmiersprachen angeben ist immer Gut

Und evtl. den Codeteil in denen du die besagten variablen defenierst
Madd Eye is offline  
Old 05/03/2010, 21:33   #3
 
elite*gold: 0
Join Date: Feb 2008
Posts: 30
Received Thanks: 1
Also erst mal danke, dass du mir hilfst. Ich habe das Programm in VB geschrieben.
Code:
#ifndef _SPIELER_H_
#define _SPIELER_H_

class Spieler
{
private:
	char name[32];
	int gold;
	int experience;
	int health;
	int maxhealth;
	int mana;
	int maxmana;
	int str;
	int inti;
public:
	Spieler();
	bool SetName(char* newname);
	char* GetName();
	void SetGold(int newgold);
	void AddGold(int amount);
	void SpendGold(int amount);
	int GetGold();
	void SetExperience(int newexperience);
	void AddExperience(int amount);
	int GetExperience();
	void SetHealth(int newhealth);
	void AddHealth(int amount);
	void LoseHealth(int amount);
	int GetHealth();
	void SetMaxHealth(int newmaxhealth);
	int GetMaxHealth();
	void SetMana(int newmana);
	void AddMana(int amount);
	void LoseMana(int amount);
	int GetMana();
	void SetMaxMana(int newmana);
	int GetMaxMana();
};

#endif]
Code:
#include "Bibliotek.h"

Spieler::Spieler()
{
	SetName("Hero");
	str = 1;
	inti = 1;
	SetGold(500000);
	SetExperience(0);
	SetMaxHealth(25);
	SetHealth(25);
	SetMaxMana(10000);
	SetMana(10000);
}

void Spieler::AddExperience(int amount)
{
	SetExperience(experience + amount);
}

void Spieler::AddGold(int amount)
{
	SetGold(gold + amount);
}

void Spieler::AddHealth(int amount)
{
	SetHealth(health + amount);
}

void Spieler::AddMana(int amount)
{
	SetMana(mana + amount);
}

int Spieler::GetExperience()
{
	return experience;
}

int Spieler::GetGold()
{
	return gold;
}

int Spieler::GetHealth()
{
	return health;
}

int Spieler::GetMana()
{
	return mana;
}

int Spieler::GetMaxHealth()
{
	return maxhealth;
}

int Spieler::GetMaxMana()
{
	return maxmana;
}

char*Spieler::GetName()
{
	return name;
}

void Spieler::SetExperience(int newexperience)
{
	experience = newexperience;
}

void Spieler::SetGold(int newgold)
{
	gold = newgold;
}

void Spieler::SetHealth(int newhealth)
{
	health = newhealth;

	if (health > maxhealth)
		health = maxhealth;

	if (health < 0)
		health = 0;
}

void Spieler::SetMana(int newmana)
{
	mana = newmana;

	if (mana > maxmana)
		mana = maxmana;

	if (mana < 0)
		mana = 0;
}

void Spieler::SetMaxHealth(int newmaxhealth)
{
	maxhealth = newmaxhealth;
}

void Spieler::SetMaxMana(int newmaxmana)
{
	maxmana = newmaxmana;
}

bool Spieler::SetName(char *newname)
{
	if (strlen(newname) == 0)
		return false;

	if (strlen(newname) > 32)
		return false;

	strcpy_s(name,newname);

	return true;
}
void Spieler::LoseHealth(int amount)
{
	SetHealth(health - amount);
}

void Spieler::LoseMana(int amount)
{
	SetMana(mana - amount);
}

void Spieler::SpendGold(int amount)
{
	SetGold(gold - amount);
}
Code:
void deinZimmer(Spieler* spieler)
{
	cout << "Du bist in deinem Zimmer und siehst ein gemuetliches Bett.\n";
	char antwort;
	antwort = 'm';
	while(antwort != 'y' || antwort != 'n')
	{
		cout << "Moechtest du ne Runde schlafen? (y/n)\n";
		cout << ">";
		cin >> antwort;
		cout << endl;
		if(antwort = 'y')
		{
			cout << "Du legst dich hin und schlaefst bis zum Sonnenaufgang.";
			spieler->SetHealth(spieler->GetMaxHealth());
		}
		if(antwort = 'n')
		{
			atlantis(spieler);
		}

	}


}
Beim untersten möchte ich die Hp wieder auf voll setzten.
Genau dort erscheint auch der Fehler.
Danielnoel is offline  
Old 05/03/2010, 21:52   #4
 
Madd Eye's Avatar
 
elite*gold: 260
Join Date: Apr 2010
Posts: 229
Received Thanks: 142
Erstmal ist das niemals VB sonder entweder C# oder C++ (Vom Code her)
Und der Fehler CXX0030 gibts nur bei C++ also xD

Naja gehen wir das mal durch

Code:
void Spieler::SetHealth(int newhealth)
{
	health = newhealth;

[COLOR="Red"]	if (health > maxhealth)
		health = maxhealth;[/COLOR]

	if (health < 0)
		health = 0;
}
Was bringt es dir die HP auf Maximum zu stellen wenn man nicht über das Maximum kommen kann?


Code:
void deinZimmer(Spieler* spieler)
{
	cout << "Du bist in deinem Zimmer und siehst ein gemuetliches Bett.\n";
	char antwort;
	antwort = 'm';
	[COLOR="Red"]while(antwort != 'y' || antwort != 'n')
	{[/COLOR]
		cout << "Moechtest du ne Runde schlafen? (y/n)\n";
		cout << ">";
		cin >> antwort;
		cout << endl;
		if(antwort = 'y')
		{
			cout << "Du legst dich hin und schlaefst bis zum Sonnenaufgang.";
			spieler->SetHealth(spieler->GetMaxHealth());
		}
		if(antwort = 'n')
		{
			atlantis(spieler);
		}

[COLOR="Red"]	}[/COLOR]


}
Hier kannst du dir die while schleife sparen da mit cin>> antwort; Das Programm wartet bis der Spieler eine Eingabe macht


Das rote ist also eigentlich unnötig xD

Zum eigentlichen Fehler:

Versuch es mal mit:
Code:
int maxh = spieler->GetMaxHealth();
spieler->SetHealth(maxh);
statt

Code:
spieler->SetHealth(spieler->GetMaxHealth());
Der Fehler ist nämlich ein Windows spezifischer Fehler, für den es so direkt keine Lösung gibt
Madd Eye is offline  
Old 05/03/2010, 22:05   #5
 
elite*gold: 0
Join Date: Feb 2008
Posts: 30
Received Thanks: 1
Zum ersten: Sry hab da was verwechselt meinte natülich Visual C++.
Zum zweiten: Wenn ich des weg machen würde, würde er über das Maximum gehen.
Zum dritten: Stimmt hast recht. xD
Zum vierten: Ne geht net. Er zeigt den Fehler hier an.

Code:
int Spieler::GetMaxHealth()
{
	return maxhealth;
}
bei return maxhealth
Danielnoel is offline  
Old 05/03/2010, 22:12   #6
 
Madd Eye's Avatar
 
elite*gold: 260
Join Date: Apr 2010
Posts: 229
Received Thanks: 142
Ersetz dann mal
Code:
class Spieler
{
private:
mit
Code:
class Spieler
{
public:
Madd Eye is offline  
Old 05/03/2010, 22:21   #7
 
elite*gold: 0
Join Date: Feb 2008
Posts: 30
Received Thanks: 1
Ich hab hier doch beides stehen.

Code:
#ifndef _SPIELER_H_
#define _SPIELER_H_

class Spieler
{
[COLOR="Red"]private:[/COLOR]
	char name[32];
	int gold;
	int experience;
	int health;
	int maxhealth;
	int mana;
	int maxmana;
	int str;
	int inti;
[COLOR="Red"]public:[/COLOR]
	Spieler();
	bool SetName(char* newname);
	char* GetName();
	void SetGold(int newgold);
	void AddGold(int amount);
	void SpendGold(int amount);
	int GetGold();
	void SetExperience(int newexperience);
	void AddExperience(int amount);
	int GetExperience();
	void SetHealth(int newhealth);
	void AddHealth(int amount);
	void LoseHealth(int amount);
	int GetHealth();
	void SetMaxHealth(int newmaxhealth);
	int GetMaxHealth();
	void SetMana(int newmana);
	void AddMana(int amount);
	void LoseMana(int amount);
	int GetMana();
	void SetMaxMana(int newmana);
	int GetMaxMana();
};

#endif]
Danielnoel is offline  
Old 05/03/2010, 22:25   #8
 
Madd Eye's Avatar
 
elite*gold: 260
Join Date: Apr 2010
Posts: 229
Received Thanks: 142
Ja und ersetz das
private:

mal mit einem public:

das beugt in manchen fällen diesem Fehler vor
aber eben nicht immer
Madd Eye is offline  
Old 05/03/2010, 22:28   #9
 
elite*gold: 0
Join Date: Feb 2008
Posts: 30
Received Thanks: 1
Geht nicht er zeigt immernoch den Fehler hier.
Code:
int Spieler::GetMaxLeben()
{
	return maxleben;
}
Danielnoel is offline  
Old 05/03/2010, 22:50   #10
 
Madd Eye's Avatar
 
elite*gold: 260
Join Date: Apr 2010
Posts: 229
Received Thanks: 142
Oh man bin ich Blöd xD

schau mal genau hin

in den Definitionen steht:
Code:
int max[COLOR="Red"][B][U]health[/U][/B][/COLOR];
und bei unten dann:
Code:
int Spieler::GetMaxLeben()
{
	return max[COLOR="Red"][B][U]leben[/U][/B][/COLOR];
}
xD du hast da leben statt health stehen
Madd Eye is offline  
Thanks
1 User
Old 05/04/2010, 15:11   #11
 
elite*gold: 0
Join Date: Feb 2008
Posts: 30
Received Thanks: 1
Oh!!
Ist mir gar net aufgefallen.
Es funktioniert aber immer noch nicht.
Danielnoel is offline  
Old 05/04/2010, 17:04   #12
 
Madd Eye's Avatar
 
elite*gold: 260
Join Date: Apr 2010
Posts: 229
Received Thanks: 142
welche fehler kommen den noch?

Immer noch die selben?
Madd Eye is offline  
Old 05/04/2010, 17:59   #13
 
elite*gold: 0
Join Date: Feb 2008
Posts: 30
Received Thanks: 1
Ich geb dir mal den ganzen Code und du schaust mal OK??
Wenn du es startest, dann nach Atlantis gehst, dann Mein Zimmer und wenn man y eingibt kommt der Fehler.
Attached Files
File Type: rar Text - RPG.rar (1.33 MB, 6 views)
Danielnoel is offline  
Old 05/04/2010, 18:29   #14
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
@TS: Das Verwenden von dem this-Zeiger schafft Übersicht. So als Randbemerkung.

Quote:
if(antwort = 'y') [...] if(antwort = 'n')
Fail...

Quote:
Hier kannst du dir die while schleife sparen da mit cin>> antwort; Das Programm wartet bis der Spieler eine Eingabe macht
Die while-Schleife hat den Sinn, dass die Eingabe wiederholt wird, solange die Eingabe nicht 'y' oder 'n' ist. Das was du da von dir gibst hat damit gar nichts zu tun.

Quote:
Versuch es mal mit:
Code:

int maxh = spieler->GetMaxHealth();
spieler->SetHealth(maxh);

statt

Code:

spieler->SetHealth(spieler->GetMaxHealth());
Beide Ausdrücke sagen das gleiche Aus, dasselbe in Grün.

Quote:
Ersetz dann mal
Code:

class Spieler
{
private:

mit
Code:

class Spieler
{
public:
Noch nie was von Datenkapselung gehört, oder? @TS: Bitte so lassen, wie es war, der Vorschlag deines Helfers war nicht klug. Innerhalb der Klasse hat man eh auf jedes Attribut und jeder Methode Zugriff.. Nur so am Rande bemerkt.

Quote:
Oh man bin ich Blöd xD
Joa...

Quote:
Wenn du es startest, dann nach Atlantis gehst, dann Mein Zimmer und wenn man y eingibt kommt der Fehler.
Bei mir kommt da kein Fehler, sondern das Verhalten, das man wegen dem Quellcode auch zu erwarten hat.
xNopex is offline  
Old 05/04/2010, 19:25   #15
 
Madd Eye's Avatar
 
elite*gold: 260
Join Date: Apr 2010
Posts: 229
Received Thanks: 142
Quote:
Code:
Versuch es mal mit:

int maxh = spieler->GetMaxHealth();
spieler->SetHealth(maxh);

statt

Code:

spieler->SetHealth(spieler->GetMaxHealth());
Beide Ausdrücke sagen das gleiche Aus, dasselbe in Grün.
Das die beiden das selbe aussagen weiß ich, aber es ist die schreibmethode die VC++ oftmals nicht korrekt ausführt

Quote:
Ersetz dann mal


Code:
class Spieler
{
private:

mit
Code:

class Spieler
{
public:
Noch nie was von Datenkapselung gehört, oder? @TS: Bitte so lassen, wie es war, der Vorschlag deines Helfers war nicht klug. Innerhalb der Klasse hat man eh auf jedes Attribut und jeder Methode Zugriff.. Nur so am Rande bemerkt.
Das hatte den selben Sinn
Manchmal schluckt VC++ diese Befehle in dieser Form nicht und dann taucht der Fehler CXX030 auf

Ich weiß wovon ich rede hatte ihn schon selber oft genug -.-

Quote:
Quote:
Oh man bin ich Blöd xD
Joa...
Und abfällig musst du auch nicht werden
Madd Eye is offline  
Reply


Similar Threads Similar Threads
[Frage]Text wenn man im Spiel ist !!
06/23/2010 - Metin2 Private Server - 4 Replies
Hätte eine Frage : Kann mir einer Per TeamViewer Zeigen Wie ich diesen Text Am anfang ändern kann soo z.b "Wilkommen auf ............. Viel spass Leute " Pllss sagt ma schnell bescheid



All times are GMT +1. The time now is 19:33.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.