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

1

11.07.2006, 18:04

Aufgabe Kapitel 6 Alternative

hi,
ich schon wieder. Zeiger und Referenzen... schweres Thema.

naja hab einfach mal drauf los gecodet... und die Aufgabe geschafft. :)

ich höre natürlich gerne verbesserung vorschläge sowie kritik als auch Lob.

Aufgabenstellung:
"Ziel ist es diesmal 3 funktionen zu schreiben, wobei diese den oben beschriebenen Regeln folgen sollen. Dabei soll also die Parameterübergabe einmal als Wert, einmal mittels Zeiger und einmal mit einer Referenz erfolgen. Dazu legst du enfach eine Spielerstruktur an und deklariest darin Energie, Punkte und Team. Die 3 Funktionen heißen wiefolgt: BerechnePunkte(Bonusbetrag soll zu den PUnkte zugezählt werden); ZeigeSpieler(Werte der Struktur ausgeben) und LadeLevel(einfach Level übergeben und frech eine message ausgeben.)

Danke im Vorraus.

MFG Zahlenwächter

Hier mein code:

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
//Listing 6.9


#include <iostream>

using namespace std;

void BerechnePunkte(int *pPunkte);
void ZeigeSpieler(int &Energie, int &Punkte, int &Team);
void LadeLevel(int Level);

int main(void)
{
    struct S_Spieler
    {
        int Energie;
        int Punkte;
        int Team;
    };

    S_Spieler Spieler1;
    Spieler1.Energie = 1000;
    Spieler1.Punkte = 0;
    Spieler1.Team = 1;

    LadeLevel(5);
    BerechnePunkte(&Spieler1.Punkte);

    cout << "\nDaten des Spielers: " << endl;
    cout << "Energie: " << Spieler1.Energie << endl;
    cout << "Punkte: " << Spieler1.Punkte << endl;
    cout << "Team: " << Spieler1.Team << endl;

    ZeigeSpieler(Spieler1.Energie, Spieler1.Punkte, Spieler1.Team);

    return 0;
}

void LadeLevel(int Level)
{
    cout << "Level " << Level << " wird geladen..." << endl;
}

void BerechnePunkte(int *pPunkte)
{
    *pPunkte += 550;
}

void ZeigeSpieler(int &Energie, int &Punkte, int &Team)
{
    cout << "\nDaten des Spielers: " << endl;
    cout << "Energie: " << Energie << endl;
    cout << "Punkte: " << Punkte << endl;
    cout << "Team: " << Team << endl;
}


so und hier der code von heiko(den ich teilweise nicht verstehe):

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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
// C++ für Spieleprogrammierer

// Listing 6.9

// Lösungsvorschlag zur Aufgabe in Kapitel 6

//

#include <iostream>

using namespace std;

// Strukturen

//

struct Spieler
{
    int Energie;
    int Punkte;
    int Team;
};

// Prototypen

//

void BerechnePunkte (Spieler *pSpielerTemp, const int Bonus);
void ZeigeSpieler (const Spieler &SpielerTemp);
void LadeLevel (const int NeuesLevel);

// Hauptprogramm

//

int main ()
{
    // Variablen

    //

    Spieler Spieler1;
    int Level = 1;

    // Spieler initialisieren

    Spieler1.Energie = 1000;
    Spieler1.Punkte = 0;
    Spieler1.Team = 1;

    LadeLevel (Level);
    ZeigeSpieler (Spieler1);
    BerechnePunkte (&Spieler1, 550);
    ZeigeSpieler (Spieler1);

    return 0;
}

// BerechnePunkte

//

// Punkte des Spielers mit Bonus verrechnen

//

void BerechnePunkte (Spieler *pSpielerTemp, const int Bonus)
{
    // Bonus zu den Punkten des Spielers hinzuzählen

    cout << "Es gibt " << Bonus << " Bonuspunkte" << endl;
    cout << endl;

    pSpielerTemp->Punkte += Bonus;

} // BerechnePunkte


// ZeigeSpieler

//

// Spielerdaten anzeigen

//

void ZeigeSpieler (const Spieler &SpielerTemp)
{
    // Alle Werte des Spielers auf dem Bildschirm ausgeben.

    //

    // Spielerwerte können hier nicht verändert werden.

    //

    cout << "Daten des Spielers:" << endl;
    cout << "Energie: " << SpielerTemp.Energie << endl;
    cout << "Punkte: " << SpielerTemp.Punkte << endl;
    cout << "Team: " << SpielerTemp.Team << endl;
    cout << endl;

} // ZeigeSpieler


// LadeLevel

//

// Neuen Level laden

//

void LadeLevel (const int NeuesLevel)
{
    // An dieser Stelle würde ein Level geladen,

    // was hier einfach durch einen Text angezeigt wird.

    //

    cout << "Level " << NeuesLevel << " geladen" << endl;
    cout << endl;

} // LadeLevel
C# oder C++? ==> das ist hier die Frage.
"I want to die peacefully in my sleep like my grandfather. Not screaming in terror like his passengers."

Anonymous

unregistriert

2

11.07.2006, 19:04

Aus deinem letzten "Alternativ"-Thread habe ich schon einiges geschrieben, hast es dir jedoch so wie es aussieht nicht angewohnt.

Ansonsten: Pointer immer auf gültigkeit testen, bevor man diese benutzt!

rklaffehn

Treue Seele

Beiträge: 267

Wohnort: Braunschweig

  • Private Nachricht senden

3

11.07.2006, 19:10

Zwei Dinge:

a) Deine Lösung ist nicht eben revolutionär anders als die Referenzlösung :) Faktisch machst du das sogar umständlicher.

b) Was genau verstehst du an der Referenzlösung denn nicht?
God is real... unless declared integer.
http://www.boincstats.com/signature/user_967277_banner.gif

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

4

11.07.2006, 19:22

Zitat von »"rklaffehn"«

Zwei Dinge:
b) Was genau verstehst du an der Referenzlösung denn nicht?


Das Frage ich mich allerdings auch. Da kann man doch nichts nicht verstehen, wenn man die Befehle kennt.

5

11.07.2006, 21:25

jo... was ich bei DEINER Lösung nur net versteh ... warum die einzellteile der Spieler Struct an ZeigeSpieler geben, wenn auch ganze struct possible ist? :D
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

6

11.07.2006, 21:33

hi,
@nix da:
sry hab ich schon wieder vergessen. :)
ich gewöhns mir schon an. ist kein thema.

was ich nicht verstehe:
1. (const Spieler &SpielerTemp)
warum const? warum Temp?
2. pSpielerTemp->Punkte += Bonus;
was hat das zu bedeuten?
3. echt wie kann ich denn die komplette struct übergeben?

MFG Zahlenwächter
C# oder C++? ==> das ist hier die Frage.
"I want to die peacefully in my sleep like my grandfather. Not screaming in terror like his passengers."

7

11.07.2006, 21:44

1. Er kann die Variable auch SpielerDepp nennen ... das ist doch wurscht...
2. Das er die integrer Variable Punkte des Spielers pSpielerTemp um gewünschte höhe(Bonus) erhöht..
3. Einfach so wie es David (oda Heiko) gemacht hat?
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Sheddex

unregistriert

8

11.07.2006, 21:47

2. -> muss verendet werden da es sich um einen Zeiger auf eine Struktur und nicht eine "normale" Struktur handelt (falls das das Problem war, ansonsten hat's Devil ja gesagt).

3.

C-/C++-Quelltext

1
2
3
4
void Funktion (SStruktur Struktur)
{
//...

}


So wie man das mit int und bool und sonstwas macht...

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

9

11.07.2006, 22:11

... weil dann das gesammte Objekt kopiert werden muss, bei einer Textur dauert das ewig. Wenn man nur einen Pointer auf den speicherbereich übergibt, ist dieser immer gleich groß (32Bit), egal welches Objekt.

Objekt->Funktion() := (*Objekt).Funktion();

10

11.07.2006, 22:17

DarkHunter? Entweder folgendes:

C-/C++-Quelltext

1
void foo (SStruct* pStruct);

oda:

C-/C++-Quelltext

1
void foo(const SStruct& struct);
;)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Werbeanzeige