Forum

> > Off Topic > Pommes Games
Forums overviewOff Topic overviewLog in to reply

German Pommes Games

261 replies
Page
To the start Previous 1 29 10 1113 14 Next To the start

old Re: Pommes Games

HW
User Off Offline

Quote
Mach doch die Waffenfunktionen als Methoden der Klasse Player und gib ihnen einen Player als Parameter. Dann greifst du auf die HP des übergebenen Spielers zu. Die Waffen mit Klassen umzusetzen ist nicht nötig, wäre aber möglich.
Die HP des ersten Spielers gibt es übrigens auch erst nach dessen Instanzierung, die hast du auch nicht davor.

old Re: Pommes Games

Pommes die Fritte
User Off Offline

Quote
Ähm... Wenn ich die HP als Parameter über gebe muss ich doch
1
minigun(int HP);
als Deklaration machen. Und wenn ich dann die KP mit reinnehmen will?? dann müsste es ja
1
minigun(int HP, int KP);
heißen, oder?? aber dann werden ja...
ICH BIN DUMM!! Die HP und KP Werte werden ja dann in der Funktion main() erst übergeben!!
(Wer ist dümmer als PDF??? ICH!! )
Muss das gleich mal ausprobieren (unter Linux => Neustart )

old Re: Pommes Games

HW
User Off Offline

Quote
Du sollst ja auch nicht die verdammten HP oder KP übergeben (das brächte ja nichts, da du sie dann nicht wirklich ändern könntest) sondern den Player! (d.h. die Instanz/das Objekt des entsprechenden Players)

old Re: Pommes Games

Pommes die Fritte
User Off Offline

Quote
oder einfach die Funktion, die die KP/HP eines Spielers ausgiebt und den wert dann Als die KP/HP als die Variable des jeweiligen Spielers übergibt. So hab ich das gemeint .
Soll so ausgucke:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class player
{ ...
  public:
  int GetHP() {return itsHP; };
  void SetHP(int newHP) {itsHP = newHP; };
  private:
  minigun(int oldHP, int oldKP)
  {
      int temp = GetHP() - 232323;
      SetHP(temp);
      temp = GetKP() - 12121232;
      SetKP(temp);
  }
  int itsHP;
...}

main()
{ player.player1;
  player.player2; 
minigun(player1.GetHP(), player2.GetHP);
...}
Klappt das so?? Ich glaube nicht .

old Re: Pommes Games

bizzl
User Off Offline

Quote
Das kann gar nicht klappen weil das Werte ohne Referenz übergibt

Nein, mach die Waffen als Funktionen ohne Klassen oder als eigene Klassen, etwa so:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Weapon {
 private:
  int damage = 0;
 public
  void Shoot(Player *p) {
   int hp = p->getHP();
   hp-=this->damage;
   p->setHP(hp);
  }
}

class Minigun : public Weapon {
  public:
   Minigun() {
    this->damage=50;
   }
}
(ich hoffe mal das ist alles so richtig)

Entsprechende Erweiterungen sind machbar.
Das ist zwar alles etwas overheap, aber so lernt man OOP am besten...

old Re: Pommes Games

Pommes die Fritte
User Off Offline

Quote
Tja, ist das c++ oder wieder java??
Außerdem versteh ichs net . So wie´s für mich aussieht machst du class Minigun als Unterklasse von weapon? Ist das nicht irgendiwie was mit Vererbung ?? Das weiß ich noc nicht, wei man das macht.

old Re: Pommes Games

bizzl
User Off Offline

Quote
Das ist ein versuch in C++.
Java sähe etwas anders aus.

Und ja, das ist vererbung (Minigun ist eine Kindklasse von Weapon)
Mach dich mal drüber schlau, das hier ist noch ein recht einfaches Beispiel
Vererbung ist eine wichtige Sache in OOP...

old Re: Pommes Games

HW
User Off Offline

Quote
Bei dem Code von bizzl handelt es sich um C++ und dein vorletzter Post ändert nichts daran, dass du den Player und nicht die HP/KP übergeben sollst, sonst kannst du sie nicht ändern. Außer du übergibst sie als Referenzen (was du nicht tust), das wäre dann aber nicht mehr im Sinne von OOP.

Pommes has written
So wie´s für mich aussieht machst du class Minigun als Unterklasse von weapon? Ist das nicht irgendiwie was mit Vererbung cheeky tongue ?? Das weiß ich noc nicht, wei man das macht.

Ja, die Minigun ist eine vererbte Klasse von Weapon. Und dass du nicht weißt, wie man sowas macht, ist kein Argument.

old Re: Pommes Games

Pommes die Fritte
User Off Offline

Quote
Das mach ich in den kommenden Ferien durch .
Hab jetzt vor, das Prog komplett von vorne zu machen. Bei dem gewurschtel, dass ich in der letzten Stunde fabriziert hab blickt keine Sau mehr durch .
Wie ich vermute sind auch Zeiger drinnen?? "this -> ". Kann ich auch noch nicht . Ich glaube, das projekt leg ich dich lieber mal auf Eis und fang dann später nochmal an .

old Re: Pommes Games

HW
User Off Offline

Quote
Pommes has written
Wie ich vermute sind auch Zeiger drinnen?? "this -> ". Kann ich auch noch nicht wink . Ich glaube, das projekt leg ich dich lieber mal auf Eis und fang dann später nochmal an wink .

Öhm...das ist wirklich Grundwissen
Ohne das wirst du nicht viel Erfolg haben, OOP hin oder her. Kümmer dich erstmal um Zeiger und Speicherverwaltung und das ganze Gedöhns, bevor du irgendwas anderes machst. Da fehlt dir wirklich ein wichtiges Stück Verständnis zum Lowlevelprogrammieren.

old Re: Pommes Games

bizzl
User Off Offline

Quote
@HW: das fehlte mir aber bis vor kurzen auch

@Pommes: Entgegen der Obigen Zeile gebe ich HW aber vollkommen recht. Geh erstmal eine Stufe runter und schreib reines C .
Allein die ganze Zeigerarithmetik ist stoff für ein ganzes Schuljahr

old Re: Pommes Games

Pommes die Fritte
User Off Offline

Quote
Ok. Aber petsim hab ich doch schon mal ganz gut hingekriegt, oder ?? Dann rakere ich mich erstmal durch mein Buch durch...


EDIT: Das grundlegene über Zeiger hab ich jetzt . Ich wollt nur fragen, weil man mit Zeigern ja im Speicher alles mögliche anstellen kann (z.B. mit Zeigern mit zufälliger Adressse (vergessen, ne explizite Adresse zuzuweisen ) irgendwo was rumschreiben...), ob man damit auch sein Betriebsystem schrotten kann. Und damit mein ich, dass nichts mehr zu retten ist !!! Ich frag aus reinem Interesse versteht sich .
edited 1×, last 19.05.07 08:41:48 pm

old Re: Pommes Games

jeepohahyo
User Off Offline

Quote
Erstens: Alle heutigen Betriebssysteme haben inzwischen nen Speicherschutz, so gut kannst du also auch nicht im Speicher rumpfuschen.

Zweitens: Du bearbeitest ja nur den RAM, allerdings kann ich keine Garantie dafür geben, dass man tatsächlich irgendwie ausführbaren Code erzeugt und dann ausführt

Keine Ahnung, ob das geht, ist aber sehr unwahrscheinlich.

old Re: Pommes Games

Pommes die Fritte
User Off Offline

Quote
Wie antwortet mein Mathe Lehrer immer auf die Frage: "Schreiben wir heute ne Ex??"
"Möglich ist immer alles" .
Ich will´s aber jetzt nicht ausprobieren

old Re: Pommes Games

HW
User Off Offline

Quote
Dicker has written
Keine Ahnung, ob das geht, ist aber sehr unwahrscheinlich.

Bei speicherschutzlosen Betriebssystemen geht das; aber dass man etwas gescheites/gefährliches damit anstellt, ist unwahrscheinlich, solange man nicht gezielt irgendwas verändert. Da wird man aber wohl eher andere Programme manipulieren wollen, inwieweit man das Betriebssystem beeinflussen kann, weiß ich nicht und es hängt wohl auch vom jeweiligen OS ab.

Bei modernen Betriebssystemen braucht man sich da jedenfalls keine Sorgen machen, wenn man da irgendwas zerschießt, dann höchstens das eigene Programm. Unter Linux/Unix kriegt man bei einer Speicherzugriffsverletzung einen Segmantation fault und das Prog wird abgekillt; was unter Windows passiert weiß ich nicht (ich tippe mal auf Bluescreen bei älteren Windowsversionen), ebenso bei MacOS.

old Re: Pommes Games

bizzl
User Off Offline

Quote
MacOS bis 9 kann uU abstürzen (das alte MacOS war etwas eigenartig, hatte kooperatives Multitasking und kaum schutzmechanismen), abe OS X gibt es aber auch segmentation faults, da es auf FreeBSD basiert.

old Re: Pommes Games

Pommes die Fritte
User Off Offline

Quote
THX.
Dann muss ich mir da mal keine Sorgen machen .

EDIT: Wenn ich ner Funktion eine Variable (lokal, also in main() erstellt) übergebe, dann macht die Funktion ja ne kopie von dieser. Wie ist das bei Zeigern? Wird da auch ne kopie von dem gemacht?
edited 1×, last 20.05.07 10:29:46 am

old Re: Pommes Games

HW
User Off Offline

Quote
Auch Zeiger werden kopiert, aber nicht der Inhalt der Variable, auf die sie zeigen. Somit wird auch die lokale Variable in main() verändert, wenn du den Inhalt des dereferenzierten Zeigers veränderst. Den Zeiger selbst kannst du aber nicht verändern, außer du verwendest ein Handle (einen Zeiger, der auf einen Zeiger zeigt).

Bei Funktionsaufrufen werden grundsätzlich immer alle Parameter kopiert. Das ist auch einer der Gründe warum es Zeiger gibt. Erstens um die Parameter auch außerhalb der aufgerufenen Funktion verändern zu können, und zweitens um die übergebenen Parameter klein zu halten (ein Zeiger ist für gewöhnlich so groß wie ein Int [also 4 Byte bei einem 32 Bit System], die Größe einer Klasse oder Struktur kann dagegen ein Vielfaches davon betragen, je nach Inhalt. Mit einem Zeiger auf eine Struktur/Klasse kann man sich also einiges an Geschwindigkeit ersparen)

old Re: Pommes Games

Pommes die Fritte
User Off Offline

Quote
Ich hab jetzt mal nen kleinen Codeabschnitt mit Referenz geeproggt und wollte eure Meinung dazu hören, ob man das so machen kann/soll/darf . Wenn man das so machen kann/soll... dann kaönnte ich bei KampfSim weiter proggen .
Hier der ausschnitt (die cout teile waren nur zur Kontrolle, ob das Teil überhaupt funzt):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
using namespace std;

void minigun(int &KP, int &HP);

main()
{
	int player1HP = 100, player1KP = 35;
	int player2HP = 100, player2KP = 35;
	cout << "Vor minigun():\n"
	<< "Player1 HP: " << player1HP << "\tPlayer1 KP: " << player1KP << endl
	<< "player2 HP: " << player2HP << "\tPlayer2 KP: " << player1KP << endl;
	minigun(player1KP, player2HP);
	cout << "Nach minigun():\n"
	<< "Player1 HP: " << player1HP << "\tPlayer1 KP: " << player1KP << endl
	<< "player2 HP: " << player2HP << "\tPlayer2 KP: " << player2KP << endl;
}

void minigun(int &KP, int &HP)
{
	cout << "In minigun():\n";
	KP -= 3;
	HP -= 12;
	cout << "Player1 KP: " << KP << endl
	<< "player2 HP: " << HP << endl;
}
Ach ja, das using namespace lass ich so, auch wenns schlechter Stil ist .

old Re: Pommes Games

bizzl
User Off Offline

Quote
Achtung, es wird böse, ich fummel mal planlos drin rum...
Aber wenn C ein Subset von C++ ist müsste das so gehen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
using namespace std;

void minigun(int [b]*[/b]KP, int [b]*[/b]HP);

main()
{
	int player1HP = 100, player1KP = 35;
	int player2HP = 100, player2KP = 35;
	cout << "Vor minigun():\n"
	<< "Player1 HP: " << player1HP << "\tPlayer1 KP: " << player1KP << endl
	<< "player2 HP: " << player2HP << "\tPlayer2 KP: " << player1KP << endl;
	minigun([b]&[/b]player1KP, [b]&[/b]player2HP);
	cout << "Nach minigun():\n"
	<< "Player1 HP: " << player1HP << "\tPlayer1 KP: " << player1KP << endl
	<< "player2 HP: " << player2HP << "\tPlayer2 KP: " << player2KP << endl;
}

void minigun(int [b]*[/b]KP, int [b]*[/b]HP)
{
	cout << "In minigun():\n";
	KP -= 3;
	HP -= 12;
	cout << "Player1 KP: " << KP << endl
	<< "player2 HP: " << HP << endl;
}

So würde das in C funzen (mal von den couts abgesehen)
Meine änderungen sind fett hervorgehoben.
To the start Previous 1 29 10 1113 14 Next To the start
Log in to replyOff Topic overviewForums overview