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

Daisuke

Frischling

  • »Daisuke« ist der Autor dieses Themas

Beiträge: 6

Beruf: voice actor

  • Private Nachricht senden

1

05.06.2009, 17:41

Highscor(Punktesystem C++)

Hallo Leuts ;)

Ich bin neu hier im Board und ich beschäftige mich jetzt mit C++ und ich bin in diesem gebiet, leider, noch ein noob. :D
Dennoch habe ich versucht mein Problem selber zu lösen, aber ich komme einfach nicht darauf. Ich habe auch im Netz recherchiert und nichts diesbezüglich gefunden.

So, aber nun genug mit dem geschwafel, hier ist mein Problem: :D


(Link)


Wie man im Bild 1 sieht, erstelle ich ein kleines minni Gehirnjoggingspiel.
Dort werden einfache Rechenarten angegeben, wo man das richtige Ergebnis lösen soll und dieser sagt dir dann, ob die Lösung richtig ist oder nicht.


Label4 ist es, dass mir sagt ob es richtig ist, oder nicht.

Label5 u. 6 sollen dafür da sein, um mir zu sagen wie oft ich die Sachen falsch oder richtig gerechnet habe. ;)

Jedoch tut er es nicht wirklich xD Ich kriege immer eine 1. Sowohl bei Label5, wenn ich was richtig gemacht habe oder wenn ich was falsch gemacht habe bei label6. Aber er zählt nicht irgendwie richtig.

ich will es ja z.B. so haben, dass ich meinetwegen es 6 mal richtig gemacht habe und was weiß ich, 24 mal falsch ^^"

Also eine richtige aufzählung.

Hier sind mal die anderen Bilder, um es besser verstehen zu können, was ich da überhaupt mache.:)


(Link)



(Link)



Sooooooo, jetzt kommt aber für euch, denke ich mal, der interessanteste Teil, der Code von mir, was ich bisher gemacht habe. :D

Bei dem Button (neue Aufgabe), habe ich folgenden Code:

Zitat

private: long lergebnis;
System::Random randgen;
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
long l1,l3;
int iart;
l1 = randgen.Next(10) +1;
l3 = randgen.Next(10) +1;
iart = randgen.Next(3);

this->label1->Text = l1.ToString();
this->label3->Text = l3.ToString();

switch (iart) {
case 0: //add
lergebnis = l1+l3;
this->label2->Text = "+";
break;
case 1: //subtraktion
lergebnis = l1-l3;
this->label2->Text = "-";
break;
case 2: //Multiplikation
lergebnis = l1*l3;
this->label2->Text = "*";
break;
}
this->label4->Text = "";


}


und bei (Prüfen) habe ich diesen Mist eingebaut: XD

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
long lerg;
             lerg =System::Convert::ToInt32(this->textBox1->Text);
             
             int i1,i2;
             i1 = +1;
             i2 = +1;
                
             
             if (lerg == lergebnis) {
                 this->label4->Text = "Richtig";
                 this->label5->Text = i1.ToString();

             }else {
                 this->label4->Text = "Falsch";
                 this->label6->Text = i2.ToString();
             }


Ich habe versucht das ganze in die Schleife einzubauen, dass, wenn es richtig ist das es dann 1 + Punkt gibt.
Ich weiß net, wie ich ihn zum hochzählen bekomme.
Ich dachte es mir so, wenn 1 schon steht und nochmal was richtig ist, rechnet er nochmal +1. Ergebnis wäre ja dann 2.



Oh, man, ihr schüttelt euch bestimmt die Köpfe und fragt, wie doof der Junge doch ist... aber wie gesagt, ich habe es selbst hin und her versucht und ich gebe selbst zu ein Noob zu sein und bitte um eure hilfe.




PS: Wenn ihr mir helft, dann hätte ich, wenn es geht dazu eine kleine Erläuterung, da ich auch verstehen will, wieso das so gemacht werden muss.
Einfach nen Codeschnipsel hergeben, wäre die Lösung, aber ohne Erklärung dazu, wäre mir nicht geholfen, denke ich.:)

Vielen Dank schonmal ;)

2

05.06.2009, 18:57

C-/C++-Quelltext

1
2
3
          int i1,i2; 
          i1 = +1; 
          i2 = +1;


Wenn das dein Code ist, dann gibt es folgende Probleme:
- Die beiden Variablen werden nach dem Funktionsaufruf gelöscht -> der Wert wird nicht gespeichert.
- Die Variablen werden nicht erhöht.

Da ich leider nicht weiß, ob sich statische Variablen in C# gleich verhalten wie in C++, kann ich dir nur die Möglichkeit mit Membervariablen (der Klasse) zeigen. (ich hoffe, der Code ist korrekt; ich kann kein C#)

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
private: long lergebnis; 
private: int richtig; // Anzahl richtige Eingaben

private: int falsch; // ...

System::Random randgen; 
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { 
long l1,l3; 
int iart; 
l1 = randgen.Next(10) +1; 
l3 = randgen.Next(10) +1; 
iart = randgen.Next(3); 

this->label1->Text = l1.ToString(); 
this->label3->Text = l3.ToString(); 

switch (iart) { 
case 0: //add 

lergebnis = l1+l3; 
this->label2->Text = "+"; 
break; 
case 1: //subtraktion 

lergebnis = l1-l3; 
this->label2->Text = "-"; 
break; 
case 2: //Multiplikation 

lergebnis = l1*l3; 
this->label2->Text = "*"; 
break; 
} 
this->label4->Text = ""; 


} 


Ich gehe davon aus, dass der obere Code Teil der Klassendefinition ist.

Ist dann eine Eingabe richtig, muss der Wert erhöht werden.

C-/C++-Quelltext

1
richtig++;

Das, was du gemacht hast (i1 = +1), weißt der Variable jedes Mal nur den Wert 1 zu.

Gotbread

Alter Hase

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

3

05.06.2009, 18:57

Zitat von »"Daisuke"«


Ich dachte es mir so, wenn 1 schon steht und nochmal was richtig ist, rechnet er nochmal +1. Ergebnis wäre ja dann 2.


Nein :D

die

C-/C++-Quelltext

1
i1 = +1;


bedeutet nicht, dass die zahl um eins erhöht wird. der compiler
interpretiert es einfach als vorzeichen, was eh wegfällt.

selbst wenn in dem ergebnisstring "+1" stehen würde, kommt
da keine addition raus.

du musst zuerst den schon in der box stehenden text in einen
"int" umwandeln (da ich mich nicht mit cli/forms/dotnet/whatever
auskenne, rate ich mal wie das geht :) )

C-/C++-Quelltext

1
int temp = System::Convert::ToInt32(this->label5->Text);


danach kannst du diesen wert, eine ganz normale zahl, beliebig erhöhen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
temp = temp + 1;
// oder

temp += 1;
// oder

temp++;
// oder

++temp;
// ....


zum schluss dann das ganze wieder in einen string packen und in das
label setzen:

C-/C++-Quelltext

1
this->label5->Text = temp.ToString();


kurze zusammenfassung:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (lerg == lergebnis)
{
    this->label4->Text = "Richtig";
    int temp = System::Convert::ToInt32(this->label5->Text);
    ++temp;
    this->label5->Text = temp.ToString();
}
else
{
    this->label4->Text = "Falsch";
    int temp = System::Convert::ToInt32(this->label5->Text);
    ++temp;
    this->label6->Text = temp.ToString();
}


hoffe ich hab das problem so richtig verstanden :D
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

Asmodiel

Treue Seele

Beiträge: 150

Wohnort: Schweiz

Beruf: Applikationsentwickler

  • Private Nachricht senden

4

05.06.2009, 19:04

OT (sry):

Zitat von »"defaultplayer^^


Da ich leider nicht weiß, ob sich statische Variablen in C# gleich verhalten wie in C++, kann ich dir nur die Möglichkeit mit Membervariablen (der Klasse) zeigen. (ich hoffe, der Code ist korrekt; ich kann kein C#)


Ist kein C#. (Das wäre um einiges schöner. ;)) Ist C++/CLI (oder wie auch immer das .NET-C++-Zeugs heisst.)
Wieso ich das schreibe: Bin ich eigentlich der einzige, der dieses C++/CLI-Zeug unglaublich hässlich findet? Oo
Eat a beaver - Save a tree.

Daisuke

Frischling

  • »Daisuke« ist der Autor dieses Themas

Beiträge: 6

Beruf: voice actor

  • Private Nachricht senden

5

05.06.2009, 19:16

Also, ich habe das mal ausprobiert, leider kriege ich aber folgende Fehlermeldung:

Zitat


Eine nicht behandelte Ausnahme des Typs "System.FormatException" ist in mscorlib.dll aufgetreten.


:? :? :?

Ich würde mich aber dennoch um weitere Hilfe freuen.
Naja, dat schönste ist die C++/CLI net, aber ich denke, für einen Anfänger reicht dat XD[/quote]

6

05.06.2009, 19:20

Asmodiel Hm, okay, sah auf den ersten Blick mal so aus (wie gesagt kann ichs ja nicht, konnte es also auch nicht sicher wissen).

Daisuke Zeig am besten noch mal den neuen Code.[/b]

Asmodiel

Treue Seele

Beiträge: 150

Wohnort: Schweiz

Beruf: Applikationsentwickler

  • Private Nachricht senden

7

05.06.2009, 19:23

Zitat von »"defaultplayer^^

Asmodiel Hm, okay, sah auf den ersten Blick mal so aus (wie gesagt kann ichs ja nicht, konnte es also auch nicht sicher wissen).


Jupp, schon klar, war auch nicht böse gemeint. :) Musste auch zwei mal gucken, um's zu erkennen. xD
Eat a beaver - Save a tree.

Daisuke

Frischling

  • »Daisuke« ist der Autor dieses Themas

Beiträge: 6

Beruf: voice actor

  • Private Nachricht senden

8

05.06.2009, 19:28

Einmal der Prüfe Button:

Quellcode

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
         long lerg;
             lerg = System::Convert::ToInt32(this->textBox1->Text);
             int temp;

        temp = temp + 1;
        // oder
        temp += 1;
        // oder
        temp++;
        // oder
        ++temp;
        // .... 
                
             
            if (lerg == lergebnis)
{
    this->label4->Text = "Richtig";
    int temp = System::Convert::ToInt32(this->label5->Text);
    ++temp;
    this->label5->Text = temp.ToString();
}

else
{
    this->label4->Text = "Falsch";
    int temp = System::Convert::ToInt32(this->label5->Text);
    ++temp;
    this->label6->Text = temp.ToString();
}


und der "neue Aufgaben" Button.

Quellcode

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
private: long lergebnis;
    private: int richtig;// Anzahl richtige Ergebnisse
    private: int falsch;// Anzahl falscher Ergebnisse
             System::Random randgen;
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
                 long l1,l3;
                 int iart;
                 l1 = randgen.Next(10) +1;
                 l3 = randgen.Next(10) +1;
                 iart = randgen.Next(3);

                 this->label1->Text = l1.ToString();
                 this->label3->Text = l3.ToString();

                 switch (iart) {
                     case 0: //add
                          lergebnis = l1+l3;
                         this->label2->Text = "+";
                    break;
                          case 1: //subtraktion
                         lergebnis = l1-l3;
                         this->label2->Text = "-";
                    break;
                          case 2: //Multiplikation
                         lergebnis = l1*l3;
                         this->label2->Text = "*";
                    break;
                 }
                    this->label4->Text = "";


                 }



Ich habe es jetzt so gemacht, wie es geschrieben wurde.

Ich habe temp, als integer zugewiesen(ich habe es einfach mal versucht). Wenn ich es aber weglasse, passiert der gleiche Fehler.

Wenn ich temp = temp + 1;
// oder
temp += 1;
// oder
temp++;
// oder
++temp;
// ....

auch weglasse, dann kommt auch der Fehler. Es muss also am Prüfe Button liegen. Sobald ich darauf klicke kommt der Fehler.

ich kenne mich mit der Funktion mit temp nicht aus, da muss ich mich noch schlau drüber machen ^^"

Ansonsten, wenn ich zu meiner alten Funktionsweise rübergehe, habe ich keine Fehlermeldung, aber das alte Prob noch immer. Oh Gott, ich bin ein Problemfall XD

9

05.06.2009, 19:38

Asmodiel Ich meinte auch nicht, dass du es böse meinst...vllt. sollte ich mal ein wenig mehr Smileys einfügen :)

Daisuke
Mir scheint, als ob du vllt. erst nochmal die Grundlagen der Sprache lernen solltest, das hier sieht gar nicht gut aus.

Versuch es mal so:

Prüfe-Button:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
long lerg = System::Convert::ToInt32(this->textBox1->Text); // Eingabe des Users


static int right = 0;
static int wrong = 0;

if(lerg == lergebnis) // richtige Eingabe

{
    this->label4->Text = "Richtig";
    right++;
}
else
{
    this->label4->Text = "Falsch";
    wrong++;
}

this->label5->Text = right.ToString();
this->label6->Text = wrong.ToString();

Daisuke

Frischling

  • »Daisuke« ist der Autor dieses Themas

Beiträge: 6

Beruf: voice actor

  • Private Nachricht senden

10

05.06.2009, 19:59

Vielen lieben dank an euch allen.:D Es klappt wunderbar jetzt. ^^

Aber jetzt habe ich dennoch einige Fragen und ja, ich stecke was C++ betrifft noch in den Kinderschuhen, aber ich will mich bessern hehe. :lol:

Zitat

static int right = 0;
static int wrong = 0;


Wofür steht das static und wann benutze ich es am besten?

Zitat


right++;

wrong++;


Das heißt doch eigentlich nichts anderes als, dass er immer 1 mehr zählen soll, oder?

Quellcode

1
long lerg = System::Convert::ToInt32(this->textBox1->Text);


Ich kann auch Textboxen mit deklarationen damit verknüpfen?Das wusste ich net, dass ist eine echt coole angehensweise.

Werbeanzeige