Glücksspiel

Hallo,
folgende Aufgabe stammt von mastermix252,Fragen etc bitte an ihn.

Aufgabe:

Es soll ein Programm geschrieben werden das einen einfachen Spielautomaten der nach dejem Tipp nur Zahlen zwischen 1 und 3 zieht. Bei einen richtigen Tipp soll sich ein Kapital um einen Einsatz erhöhrem, bei einem Falschen Tipp verringern.

Folgende Bedingungen hat das Programm zu erfüllen
- nach Übernahme der Werte durch den OK Button können diese erst wieder geändertwerden, wie ein Spieler kein Kapital mehr hat oder das Spiel mit aufhören beendet wurde

- die unterschiedlichen Positionen der sich bewegenden Labels sind in Arrays zu speichern (Zahlen 1-3 siehe Bild)

- Überprüfung der Eingegebenen Werte "Startkapital" und "Einsatz". Darf auf jeden fall nicht unter NULL sein

- die Zeitlupe und deren Eingaben "Faktor" muss nicht implementiert werden

mastermix252

Happy Coding
Xalon
 
HiHo, bin neu!
Hab das Glückspiel in in c++ geschrieben.

#include <cstdlib>
#include <iostream>

using namespace std;

int kapital, einsatz,tipp,zahl;
char nochmal;

void
game()
{

cout<<"\n\nIhr Tipp >";
cin>>tipp;
if(tipp == 1 || tipp == 2 | tipp == 3) {
zahl = rand() % 3 +1;
cout<<"Gewinnzahl: "<<zahl;
if (tipp == zahl) {
cout<<" RICHTIG! +"<<einsatz;
kapital += einsatz;
}
else {
cout<<" FALSCH! -"<<einsatz;
kapital -= einsatz;
}
cout<<"\nKapital: "<<kapital;
} else {
cout<<"\nNur Zahlen 1-3 eingeben!!";
game();
}
}

void
start ()
{
cout<<"\n\nStartkapital >";
cin>>kapital;
cout<<"\nEinstatz pro Spiel >";
cin>>einsatz;
while(kapital > 0) game();
cout<<"\nLeider verloren nochmal? [J/N]";
cin>>nochmal;
cout<<endl<<endl;
if (nochmal == 'j'){
start();
}
}

int main(int argc, char *argv[])
{
cout<<"$$$ Gluecksspiel $$$";
start();
return EXIT_SUCCESS;
}

Im Anhang ist die exe!

Mfg OLI G.

edit: den Fehler der von Lesco endeckt wurde, korrigiert.
 
Code:
zzahl = gzahlen[rand() % 2];

rand() % 2 liefert nur 0 oder 1, daher kommen bei dir nur 1 und 2 als Gewinnzahlen in Frage. Desweiteren kann man sich das Array sparen und die Zahl so berechnen:
Code:
zahl = rand() % 3 + 1;
 
hi
hatte ich mir zu erst auch gedacht aber in der Aufgabe stand:
"- die unterschiedlichen Positionen der sich bewegenden Labels sind in Arrays zu speichern (Zahlen 1-3 siehe Bild)"

OLI G
 
Original von Oli_G
hi
hatte ich mir zu erst auch gedacht aber in der Aufgabe stand:
"- die unterschiedlichen Positionen der sich bewegenden Labels sind in Arrays zu speichern (Zahlen 1-3 siehe Bild)"

OLI G

Naja, dass ist ja darauf bezogen, wenn man das graphisch mit Bewegung usw. macht, nicht jedoch bei deiner Implementierung, so wie ich das verstehe.
 
Hoe
Hab des Programm mal grafisch programmiert (net ganz genau wie vorgegeben aber doch recht ähnlich).

Code:
//---------------------------------------------------------------------------
#define _USE_OLD_RW_STL
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <math.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

void play(void);
void anzeige(void);

class Spiel
{
private: int Startkapital;
int Kapital;
int Einsatz;
int Richtig;
int Falsch;
int Gewinn;
int Verlust;
int Zeitlupe;
bool Risiko;

public: Spiel(void);
~Spiel(void);
void setStartkapital(int);
void setKapital(int);
void setEinsatz(int);
void setRichtig(int);
void setFalsch(int);
void setGewinn(int);
void setVerlust(int);
void setZeitlupe(int);
void setRisiko(bool);
int getStartkapital(void);
int getKapital(void);
int getEinsatz(void);
int getRichtig(void);
int getFalsch(void);
int getGewinn(void);
int getVerlust(void);
int getZeitlupe(void);
bool getRisiko(void);
}spiel;

Spiel::Spiel ()
{
Startkapital = 0;
Kapital = 0;
Einsatz = 0;
Richtig = 0;
Falsch = 0;
Gewinn = 0;
Verlust = 0;
Zeitlupe = 1;
Risiko = false;
}

Spiel::~Spiel ()
{
}

void Spiel::setStartkapital(int Startkapital)
{
if (Startkapital > 10)
{
this->Startkapital = Startkapital;
}
else
{
this->Startkapital = 10;
Form1->LabeledEdit1->Text = 10;
}
if (Startkapital > 1000)
{
this->Startkapital = 1000;
Form1->LabeledEdit1->Text = 1000;
}
}

void Spiel::setKapital(int Kapital)
{
if (Kapital > 0)
{
this->Kapital = Kapital;
}
else
{
this->Kapital = 0;
}
}

void Spiel::setEinsatz(int Einsatz)
{
if (Einsatz <= this->Kapital)
{
this->Einsatz = Einsatz;
}
else
{
this->Einsatz = this->Kapital;
Form1->LabeledEdit2->Text = this->Einsatz;
}
}

void Spiel::setRichtig(int Richtig)
{
this->Richtig = Richtig;
}

void Spiel::setFalsch(int Falsch)
{
this->Falsch = Falsch;
}

void Spiel::setGewinn(int Gewinn)
{
this->Gewinn = Gewinn;
}

void Spiel::setVerlust(int Verlust)
{
this->Verlust = Verlust;
}

void Spiel::setZeitlupe(int Zeitlupe)
{
if (Zeitlupe > 0)
{
this->Zeitlupe = Zeitlupe;
}
else
{
this->Zeitlupe = 1;
}
if (Zeitlupe > 5)
{
this->Zeitlupe = 5;
}
}

void Spiel::setRisiko(bool Risiko)
{
if(Risiko)
{
this->Risiko = true;
}
else
{
this->Risiko = false;
}
}

int Spiel::getStartkapital(void)
{
return this->Startkapital;
}

int Spiel::getKapital(void)
{
return this->Kapital;
}

int Spiel::getEinsatz(void)
{
return this->Einsatz;
}

int Spiel::getRichtig(void)
{
return this->Richtig;
}

int Spiel::getFalsch(void)
{
return this->Falsch;
}

int Spiel::getGewinn(void)
{
return this->Gewinn;
}

int Spiel::getVerlust(void)
{
return this->Verlust;
}

int Spiel::getZeitlupe(void)
{
return this->Zeitlupe;
}

bool Spiel::getRisiko(void)
{
return this->Risiko;
}

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
anzeige();
}
//---------------------------------------------------------------------------



void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(LabeledEdit1->Enabled == true)
{
spiel.setStartkapital(StrToInt(LabeledEdit1->Text));
LabeledEdit1->Enabled = false;
spiel.setKapital(spiel.getStartkapital());
Label1->Caption = spiel.getKapital();
}
spiel.setEinsatz(StrToInt(LabeledEdit2->Text));
spiel.setRisiko(CheckBox1->Checked);
spiel.setZeitlupe(StrToInt(LabeledEdit3->Text));
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Text = 1;
play();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
Edit1->Text = 2;
play();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)
{
Edit1->Text = 3;
play();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)
{
exit(1);
}
//---------------------------------------------------------------------------


void play(void)
{
int i, right_one, tipp;
Form1->Label2->Top = 64;
Form1->Label3->Top = -32;
Form1->Label4->Top = 160;
tipp = StrToInt(Form1->Edit1->Text);
randomize();
right_one = random(3)+1;
for(i=0;i<1416+right_one*24;i++)
{
Form1->Label2->Top += 4;
Form1->Label3->Top += 4;
Form1->Label4->Top += 4;
Sleep(i/100/spiel.getZeitlupe());
if(Form1->Label2->Top >= 208)
{
Form1->Label2->Top = -80;
}
if(Form1->Label3->Top >= 208)
{
Form1->Label3->Top = -80;
}
if(Form1->Label4->Top >= 208)
{
Form1->Label4->Top = -80;
}
Application->ProcessMessages();
}
for(i=0;i<10;i++)
{
if(i%2)
{
Form1->Label5->Visible = false;
}
else
{
Form1->Label5->Visible = true;
}
Sleep(200);
Application->ProcessMessages();
}
if(tipp == right_one)
{
if(spiel.getRisiko())
{
spiel.setKapital(spiel.getKapital()+spiel.getEinsatz()*2);
}
else
{
spiel.setKapital(spiel.getKapital()+spiel.getEinsatz());
}
spiel.setRichtig(spiel.getRichtig()+1);
}
else
{
if(spiel.getRisiko())
{
spiel.setKapital(spiel.getKapital()-spiel.getEinsatz()*3);
}
else
{
spiel.setKapital(spiel.getKapital()-spiel.getEinsatz());
}
spiel.setFalsch(spiel.getFalsch()+1);
}
anzeige();
if(!spiel.getKapital())
{
Form1->Label1->Caption = "Game Over";
Form1->LabeledEdit1->Enabled = true;
spiel.setStartkapital(0);
spiel.setKapital(0);
spiel.setEinsatz(0);
spiel.setRichtig(0);
spiel.setFalsch(0);
spiel.setGewinn(0);
spiel.setVerlust(0);
spiel.setZeitlupe(0);
spiel.setRisiko(false);
}
}


void anzeige(void)
{
Form1->LabeledEdit4->Text = spiel.getRichtig();
Form1->LabeledEdit5->Text = spiel.getGewinn();
Form1->LabeledEdit6->Text = spiel.getVerlust();
Form1->LabeledEdit7->Text = spiel.getFalsch();
Form1->Label1->Caption = spiel.getKapital();
if(spiel.getEinsatz() > spiel.getKapital())
{
spiel.setEinsatz(spiel.getEinsatz());
}
}

Und hier noch die exe:

edit by ivegotmail: fehlerhaften bb code entfernt
 
Bin neu hier.
Also dann gerade mal: Tag an alle.


Also, ich hab mir mal ne Lösung in Blitzbasic ausgedacht.


Hier könnt ihr euch die Demo downloaden, ums auszuführen:
http://blitzbasic.de/download.htm


;D31~$0u1

AppTitle "Glücksspiel"
Graphics 640,480, 32,1 ;Grafik-Modus, um alles lesen zu können.
Print "Willkommen beim Glücksspiel!"
Print "Wie hoch soll dein Startkapital sein?"
SKapital = Input()
Print "Gut. Dein Startkapital beträgt " + SKapital + " Euro." ;Kapital abfragen. -> Spielereingabe.
Print ""

.againES
Print "Wie hoch soll dein dauerhafter Einsatz sein?"
Print ""
Einsatz = Input()
If Einsatz > SKapital Then Print "Dein Einsatz ist höher, als dein Kapital. Bitte niedrigeren Einsatz eingeben." Goto againES ;Zu hoch?
If Einsatz < SKapital Then Goto AgainGAME


.AgainGAME
While (SKapital > 0) ;Noch genug Geld vorhanden?
SeedRnd MilliSecs()
Zufall = Rand(1,3)
Print ""
Print ""
Print "Nun rate bitte die zufällige Zahl, die 1, 2 oder 3 sein kann."
Zahl = Input("Rate die Zahl bitte jetzt: ";)
If Zahl <> Zufall Then Print "Nein, das war falsch. Richtig war: " + Zufall + ". - " + Einsatz + " Euro." SKapital = SKapital - Einsatz
If Zahl = Zufall Then Print "Ja, das war richtig. + " + Einsatz + " Euro." SKapital = SKapital + Einsatz
Print "Dein Kapital beträgt momentan " + SKapital + " Euro."
Wend

Print ""
Print ""
Print "Du hast kein Geld mehr, und somit verloren." ; Spieler hat verloren (Zu wenig Geld)
Print "Bitte spiel bald wieder!"
WaitKey ;Auf Tastendruck warten.
End

Hier noch die C++ Lösung:


#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <ctime>
using namespace std;



int main(int nNumberofArgs, char* pszArgs[])
{
againGAME:
int SKapital, SEinsatz, Zufall, Zahl;
char ANTW;



cout << "Willkommen beim Gluecksspiel." << endl;
cout << endl;
cout << "Wie hoch soll dein Startkapital sein?" << endl;
cin >> SKapital;
cout << " Dein Startkapital betraegt nun " << SKapital << " Euro" << endl;
cout << endl;


againES:
cout << "Wie hoch soll dein dauerhafter Einsatz sein?" << endl;
cin >> SEinsatz;
if (SEinsatz > SKapital)
{
cout << "Dein Einsatz ist hoeher als dein Kapital. Bitte niedrigeren " << endl;
cout << "Einsatz eingeben." << endl;
goto againES;
}
else
{
goto Game;
}


Game:
for (; SKapital > 0;)
{
srand(time(NULL));
Zufall = rand() % 3 + 1;

cout << endl;
cout << endl;
cout << endl;
cout << "Nun rate bitte die zufaellige Zahl, die 1, 2 oder 3 sein kann." << endl;
cin >> Zahl;

if (Zahl != Zufall)
{
cout << "Nein, das war leider falsch. Richtig war: " << Zufall << endl;
cout << "- " << SEinsatz << " Euro" << endl;
SKapital = SKapital - SEinsatz;
}
else
{
cout << "Ja, das war richtig." << endl;
cout << "+ " << SEinsatz << " Euro" << endl;
SKapital = SKapital + SEinsatz;
cout << endl;
}

cout << " Dein Kapital betraegt im Moment " << SKapital << " Euro" << endl;
cout << endl;
system("PAUSE");
}

cout << endl;
cout << endl;
cout << " Du hast kein Geld mehr und somit verloren." << endl;
cout << endl;
falsch:
cout << "Möchtest du nochmal spielen? (j/n)" << endl;
cin >> ANTW;

switch(ANTW)
{
case 'j':
cout << endl;
cout << endl;
goto againGAME;
break;

case 'n':
goto exit;
break;

default:
cout << "Bitte j oder n eingeben." << endl;
goto falsch;
break;
}

exit:
cout << "Bis bald." << endl;
system("PAUSE");
}
 
Zurück
Oben