Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

jonnesen

Frischling

  • »jonnesen« ist der Autor dieses Themas

Beiträge: 58

Wohnort: Brandenburg, Templin

Beruf: Schüler

  • Private Nachricht senden

21

10.07.2010, 18:06

es wäre doch dann übersichtlicher wenn ich statt (S_Spieler Spieler) gleich (S_Spieler Spieler1) schreibe oder?

bitte seit mir nicht böse das ich mich so duUm anstelle :( sonst bin ich eigentlich gut durch das buch gekommen...und hab mit wenigen aussetzern auch alles auf anhieb verstanden aber dieses eine code Bsp. bringt mich noch in den Wahnsinn.....



Gruß Jonas

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

22

10.07.2010, 18:10

es wäre doch dann übersichtlicher wenn ich statt (S_Spieler Spieler) gleich (S_Spieler Spieler1) schreibe oder?

nein wäre es nicht.

du kannst in deiner mainfunktion auch mehrere spieler haben, in der funktion NamenAbfragen hast du aber immern nur einen.

C-/C++-Quelltext

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// C++ für Spieleprogrammierer
// Listing 6.1
// Nachteile ohne Zeiger
//
#include <iostream>

using namespace std;

// Strukturen
//
struct S_Spieler
{
    int Energie;
    int Punkte;
    int xPosition;
    int yPosition;
    char Name[30];
};

// Prototypen
//
S_Spieler NameAbfragen (S_Spieler Spieler);

// Hauptprogramm
//
int main ()
{
    // Variablen
    //
    S_Spieler Spieler1, Spieler2;

    // Spieler initialisieren
    Spieler1.Energie = 1000;
    Spieler1.Punkte = 0;
    Spieler1.xPosition = 0;
    Spieler1.yPosition = 0;
    Spieler1.Name[0] = '\0';

    S_Spieler Spieler2;

    // Name des Spielers abfragen
    Spieler1 = NameAbfragen (Spieler1);

    // Spieler initialisieren
    Spieler2.Energie = 1000;
    Spieler2.Punkte = 0;
    Spieler2.xPosition = 0;
    Spieler2.yPosition = 0;
    Spieler2.Name[0] = '\0';

    // Name des Spielers abfragen
    Spieler2 = NameAbfragen (Spieler2);   <--------------------------------

    cout << "spieler 1: " << Spieler1.Name << endl;
    cout << "spieler 2: " << Spieler2.Name << endl;

    return 0;
}

// NameAbfragen
//
// Aufgabe: Name des Spielers abfragen
//
S_Spieler NameAbfragen (S_Spieler Spieler)
{
    // Name abfragen
    cout << "Name des Spielers: ";
    cin.get (Spieler.Name, 29);

    return Spieler;
} // NameAbfragen


dabei ist die funktion wie ein geldautomat der eine karte der entsprechenden bank erwartet, wird eine falsche karte(falscher datentyp) eingeführt gibts ein fehler. wenns die richtige karte ist wird sie genau so behandelt wie alle anderen geldkarten der bank, auch wenns millionen verschiedene von der gleichen art geben kann. wär der automat an einer bestimmten karte, eines bestimmten kunden gebunden bräuchte man für jede geldkarte einen eigenen automaten und das wär ziemlich teuer oder?
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »NachoMan« (10.07.2010, 18:16)


23

10.07.2010, 18:14

Ich kann mich in der Hinsicht nur NachoMan anschließen.
Es wäre nicht übersichtlicher, wenn du einer allgemeine Variable für einen Spieler, einen einzigen Spieler zuordnest (In deinem Fall Spieler1)

jonnesen

Frischling

  • »jonnesen« ist der Autor dieses Themas

Beiträge: 58

Wohnort: Brandenburg, Templin

Beruf: Schüler

  • Private Nachricht senden

24

11.07.2010, 09:35

nochmal @ nachoman,



ich müsste doch eigentlich gar keine parameter übergeben in den zeilen 42 und 52 in deinem code...die funktion soll doch einen namenabfragen und keinen übergeben kriegen oder?



und dann nochmal zu dem codebsp. aus kapitel 5...zahlenraten...da sieht der "verlauf" der funktion so aus:



int waehleLevel (int Level); --------alles noch klar

int Level = 5;-----------------------das hier wird in dem andern code bsp. nicht gemacht???

level = WaehleLevel(Level); --------alles noch klar

int WaehleLevel (int Level) ---------alles noch glas klar

{

bla bla

bla bla

.....Level wird gewählt.....



return neuerlevel;

}





und jetzt aus dem code bsp."nachteile ohne zeiger":



S_Spieler NameAbfragen (S_Spieler Spieler);

-------------------------------------------------Spieler wird nicht initialisiert???

Spieler1 = NameAbfrageb(Spieler1);----------------warum muss hier ein wert übergeben werden???....und warum nicht Spieler1.name=NameAbfr.???

S_Spieler NameAbfrageb(S_Spieler Spieler)----------







ich hoffe ihr habt mein problem verstanden

GRUß Jonas

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

25

11.07.2010, 09:58

nochmal @ nachoman,



ich müsste doch eigentlich gar keine parameter übergeben in den zeilen 42 und 52 in deinem code...die funktion soll doch einen namenabfragen und keinen übergeben kriegen oder?
Ja, wie schon gesagt: der Code ist Schwachsinn.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

26

11.07.2010, 10:03

aber ein guter weg um zu zeigen was man mit zeigern tolles machen kann.

Zitat

S_Spieler NameAbfragen (S_Spieler Spieler);

-------------------------------------------------Spieler wird nicht initialisiert???


spieler brauch nicht initialisiert werden weil eine kopie übergeben wird.

du hast das kapitel nicht weiter gelesen oder? dann wär dir vielleicht klar wieso S_Spieler übergeben wurde. beim programmieren lernen darfst du dich nicht zum verstehen zwingen und einfach weiter lesen. wenn du das nächste kapitel durch hast kannst du wieder zurück gehen und nochmal lesen.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

27

11.07.2010, 10:32

aber ein guter weg um zu zeigen was man mit zeigern tolles machen kann.
Nein. Wie schon gesagt macht das Beispiel nicht mehr Sinn, wenn man Zeiger benutzen wuerde. Eine sinnvolle Loesung ist hier besser ohne Zeiger moeglich.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

28

11.07.2010, 11:37

natürlich kann man es anders lösen. du bist hier nicht der einzige der c++ kann. darum geht es hier aber nicht -.-
denk an die zeit zurück in der du anfänger warst(jaaaaaa muss verdammt lang her sein, ich weiß)
da hätte dir eine professionelle lösung eines problems auch nicht viel gebracht weil du es nicht verstanden hättest. das ist ein beispiel zum lernen!!!
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

29

11.07.2010, 11:45

ich müsste doch eigentlich gar keine parameter übergeben in den zeilen 42 und 52 in deinem code...die funktion soll doch einen namenabfragen und keinen übergeben kriegen oder?
In dem Beispiel ist der Spieler, der übergeben wird eine Struktur. Und in der Funktion wird der Name des Spielers, die in der Stuktur staht, zurückgeliefert. Dein Spieler hat ja noch andere Variablen ausser den namen ;)
Du übergibst die Stuktur, von welchem Spieler du den Spielernamen wissen willst.

int waehleLevel (int Level); --------alles noch klar
int Level = 5;-----------------------das hier wird in dem andern code bsp. nicht gemacht???
Das ist das selbe wie ich dir vorhin schon gepostet habe ... Das Level in waeleLevel ist nicht die selbe Variable wie Level eine Zeile darunter!

S_Spieler NameAbfragen (S_Spieler Spieler);
-------------------------------------------------Spieler wird nicht initialisiert???

Ich glaube, dass du deshalb den Teil nicht verstehst

jonnesen

Frischling

  • »jonnesen« ist der Autor dieses Themas

Beiträge: 58

Wohnort: Brandenburg, Templin

Beruf: Schüler

  • Private Nachricht senden

30

11.07.2010, 15:35

@ ombalat:
warum verstehe ich es nicht?

ich werde jetzt wie gesagt erst mal weiter im buch lesen und dann später nochmal versuchen^^ den code zu verstehen :huh:


Gruß Jonas

Werbeanzeige