Das Wuerfelprogramm

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
gabe
Beiträge: 1
Registriert: Mo Jan 30, 2012 1:50 pm

Das Wuerfelprogramm

Beitrag von gabe » Mo Jan 30, 2012 1:57 pm

Hallo Zusammen

Ich moechte gerne ein Wuerfelprogramm schreiben, bei dem man die Art des Wuerfels, die laenge des berechnens und die Anzahl wuerfel eingeben kann, es dann die Wuerfe einzeln ausgibt und sie man dann nach belieben am schluss alle wuerfel zusammenzählen kann. Das Würfeln an sich habe ich hinbekommen, nur das Zusammenzählen funktioniert noch nicht. Ich habe versucht, in der For-Schleife, bei der ich das Wuerfeln in einem Array mitzähle, das einzelne Ergebnis in einem zweiten Array zu speichern. Ich kopiere das komplette Programm da ich echt nicht weiss, was ich falsch mache.....

Code:

Code: Alles auswählen

/* Projekt: Steuerung
Name: Gabriel Bühler
Datum: 30.01.2012
Version: 1.0
Beschreibung: Dies hier ist mein Steuerungsprojekt. Es geht um Würfeln mit verschiedenen Würfeln.
Mit diesem Programm ist es möglich, verschiedene Würfelarten auszuwählen (nach Wunsch auch selber zu definieren zwischen 1 und 5000), zu Würfeln und die 
Endergebnisse zusammenzuzählen. Zusätzlich ist eine Hilfe und eine Erklärung über verschiedene Würfelarten vorhanden. 
Quellen: Google Bilder, Proggen.org, datasource.de, computerbase.de
*/


#include <iostream>
#include <stdlib.h>
#include <stdio.h> // Die zwei Bibliotheken werden für den Zufallsgenerator verwendet.
#include <windows.h>// Diese Bibliothek ist für den Timer zuständig
#include <conio.h> // Bibliothek um den Bildschirm zu loeschen und das Programm neu zu starten
using namespace std;
int main()
{
char vorauswahl; //Falls man einen vordefinierten Wuerfel moechte, kann man hier auch einen vordefinierten Wuerfel nehmen
int eigenwahl; //FaLlls man eine eigene Wuerfelart eingeben moechte
int wuerfelart; // Variable für die Wuerfelgroesse
int zeit;  // Variable fuer den Timer
int wuerfelanzahl; //Variable fuer die Wuerfelanzahl
int wurf =1; // Anzahl Wuerfe um den Ueberblick zu behalten, welcher Wurf gerade dran ist
int menue;
int ergebniszaehler[6000]; //Der Array, der die Werte der ausgegebenen Zahlen speichert
int zaehler = 1; // Die einzelnen Speicherstaende des Arrays
char antowrt; // Die Antwort, ob das Programm die Würfelzahlen zusammenzaehlen soll oder nicht

char  antwort; //Antwort, ob man zurück ins Menü möchte
// Die Summe der zusammengezählten wuerfe
menue:
cout << "***********************************************************************" << endl;
cout << "*Hallo und Willkommen zum Wuerfelprogramm                             *" << endl;
cout << "*Bitte waehlen sie zwischean folgenden Menuepunkte:                   *" << endl;
cout << "*1: Hilfe                                                             *" << endl;
cout << "*2: Wuerfelarten                                                      *" << endl;
cout << "*3: Wuerfeln starten                                                  *" << endl;
cout << "*4: Beenden                                                           *" << endl;
cout << "***********************************************************************" << endl;
cin >> menue;

switch (menue)
{
  case 1:
   {
       do
       {
       cout << "***********************************************************************" << endl;
       cout <<"*                           HILFE                                     *" << endl;
       cout <<"* Das Wuerfelprogramm ist eigentlich sehr simpel. Eine Simulation     *" << endl;
       cout <<"* Fuehrt ein Wuerfeln aus, bei dem SIE alles bestimmen koennen        *" << endl;
       cout <<"* (Wuerfelart, dauer des Wurfes, Anzahl der Wuerfel). Sie koennen zwi-*" << endl;
       cout <<"* Vordefinierten Wuerfeln waehlen oder selber einen Wuerfel bestimmen.*" << endl;
       cout <<"* Nach wunsch koennen sie anschliessend die Summe der ausgegeben      *" << endl;
       cout <<"* Wuerfelzahlen zusammenzaehlen lassen. Anschliessend koennen sie das *" << endl;
       cout <<"* Programm beenden oder nochmals ausfuehren lassen. Viel spass :)     *" << endl;
       cout <<"***********************************************************************" << endl;
       cout <<" Moechten sie zurück zum Menue (j/n)?";
       cin >> antwort;
       }while(antwort == 'n');
       system("cls");
       goto menue;
   }
  
  case 2:
  {
       do
       {
            cout << "***********************************************************************"  << endl;
            cout << "*                          WUERFELARTEN                               *" << endl;
            cout << "* Es gibt verschiedenste Wuerfel zum vorwaehlen:                      *" << endl;
            cout << "* D6: Ein normaler 6-Seitiger wuerfel, der am haeufigsten verwendet   *" << endl;
            cout << "* wird.                                                               *" << endl;
            cout << "* D20: Ein Wuerfel der in Rollenspielen wie DnD genutzt wird          *" << endl;
            cout << "* D10: Auch ein Rollenspiel-Wuerfel fuer Dnd und andere.              *" << endl;
            cout << "* Sie koennen auch einen eigenen Wuerfel definieren.                  *" << endl;
            cout << "***********************************************************************" << endl;
            cout <<" Moechten sie zurück zum Menue (j/n)?";
            cin >> antwort;
       }while(antwort == 'n');
  system("cls");
  goto menue;
     
 }
  
 case 3:
{
  do
       {
       cout << "***********************************************************************" << endl;
       cout << "*                           WUERFELN                                  *"<< endl;
       cout << "***********************************************************************" << endl;
    do
    {
        cout << "Beginnen wir mit dem Wuerfeln" << endl;
        cout << " Was fuer eine art Wuerfel moechten sie haben? (6 = 6-Seitiger, 20 = 20-Seitiger, 1 = 10 Seitiger, n = selber auswaehlen" << endl;
        cin >> vorauswahl;
            if ( vorauswahl == '6')
            {
              wuerfelart = 6;
            }
            else if (vorauswahl == '1')
            {
             wuerfelart = 10;
            }
            else if (vorauswahl == '2')
            {
             wuerfelart = 20;
            }
            else if (vorauswahl == 'n')
            {
                 cout << "Welche wuerfelart moechten sie denn? (nicht hoeher als 5000)" << endl;
                 cin >> eigenwahl;
                 wuerfelart = eigenwahl;
            }
            else 
            {
                 cout << " Bitte geben sie ein Befehl aus der Auswahl ein";
            }
         } while(wuerfelart > 5000);
    
        cout << "Sie haben " << wuerfelart << " gewaehlt" << endl;
        cout << " Wie lange sollen die einzelnen Wuerfe dauern? (in Millisekunden)" << endl;
        cin >> zeit;
        cout << "Wieviele Wuerfel moechten sie?" << endl;
        cin >> wuerfelanzahl;
       
    
   
for (int i = 1; i <= wuerfelanzahl; i++)
{

    Sleep(zeit);
    //int zaehler = 1;    
     // Variable, die ausgibt welcher Wurf gerade dran ist
    srand( time( NULL ) ); // Ab hier Beginnt der Zufallsgenerator, der die Würfelzahlen ausgeben wird.
    int wuerfeln[wurf];
    wuerfeln[wurf ] = rand() % wuerfelart + 1; // Variable für den Zufallsgenerator
    cout << "Der " << wurf << " Wuerfel ist " << wuerfeln[wurf]  << endl;
   ergebniszaehler[zaehler] = wuerfeln[wurf]; // Das ist der Zaehler der einzelnen Wuerfelergebnisse, um die dann am Schhluss des Programmes ausführen zu lassen.
    wurf = wurf + 1;
    zaehler = zaehler + 1;


}

cout << "Moechten sie die Summe der zusammengezaehlten Wuerfe? (j/n)" << endl;
cin >> antwort;

if (antwort == 'j')
{
  cout << "Folgende Zahlen kamen raus:" << endl;
  for (int i = 0; i <=zaehler; i++)
  {
    zaehler = 0;
      
      cout << ergebniszaehler[zaehler];
   zaehler = zaehler + 1;
   }
}
cout <<" Moechten sie zurueck zum Menue (j/n)?";
cin >> antwort;

 }     while(antwort == 'n');
       system("cls");
       goto menue;
   
}


}
cin.get();
system("PAUSE");
return 0;
}
Ich bin echt kurz vor der Verzweiflung....könnt Ihr mir helfen?


Gruss

Gabe

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Das Wuerfelprogramm

Beitrag von Xin » Mo Jan 30, 2012 3:21 pm

Moin!
gabe hat geschrieben:Ich moechte gerne ein Wuerfelprogramm schreiben, bei dem man die Art des Wuerfels, die laenge des berechnens und die Anzahl wuerfel eingeben kann, es dann die Wuerfe einzeln ausgibt und sie man dann nach belieben am schluss alle wuerfel zusammenzählen kann. Das Würfeln an sich habe ich hinbekommen, nur das Zusammenzählen funktioniert noch nicht. Ich habe versucht, in der For-Schleife, bei der ich das Wuerfeln in einem Array mitzähle, das einzelne Ergebnis in einem zweiten Array zu speichern. Ich kopiere das komplette Programm da ich echt nicht weiss, was ich falsch mache.....
Darf ich fragen, von wo aus Programmieren lernst?
Den Stil, den Du gerade lernst, würde ich Dir gerne schnellstmöglich wieder abgewöhnen ;-D

Code: Alles auswählen

for (int i = 1; i <= wuerfelanzahl; i++)
{

    Sleep(zeit);
    //int zaehler = 1;    
     // Variable, die ausgibt welcher Wurf gerade dran ist
    srand( time( NULL ) ); // Ab hier Beginnt der Zufallsgenerator, der die Würfelzahlen ausgeben wird.
    int wuerfeln[wurf];
    wuerfeln[wurf ] = rand() % wuerfelart + 1; // Variable für den Zufallsgenerator
    cout << "Der " << wurf << " Wuerfel ist " << wuerfeln[wurf]  << endl;
   ergebniszaehler[zaehler] = wuerfeln[wurf]; // Das ist der Zaehler der einzelnen Wuerfelergebnisse, um die dann am Schhluss des Programmes ausführen zu lassen.
    wurf = wurf + 1;
    zaehler = zaehler + 1;
}
Die Variable wuerfeln benutzt Du immer nur an der Stelle wurf, dabei ist sie wurf Elemente groß. Da man bei 0 zu zählen beginnt, benutzt Du also immer das Element, dass direkt hinter dem Array liegt und eben nicht mehr ins das Array. Das ist... suboptimal. ;-)

Brauchst überhaupt ein Array?
Bedenke, dass das Array bei ende des Scopes (der geschweiften, schließenden Klammer) sowieso über die Wupper geht!

Code: Alles auswählen

cout << "Moechten sie die Summe der zusammengezaehlten Wuerfe? (j/n)" << endl;
cin >> antwort;

if (antwort == 'j')
{
  cout << "Folgende Zahlen kamen raus:" << endl;
  for (int i = 0; i <=zaehler; i++)
  {
    zaehler = 0;
      
      cout << ergebniszaehler[zaehler];
   zaehler = zaehler + 1;
   }
}
Hier wird nix zusammengezählt, sondern nur ausgegeben?

Ich habe das ganze nur überflogen, da steckt vielleicht noch mehr drin.

Bitte schau Dir an, wie Du Funktionen schreibst, damit Du die Probleme besser unterteilst.
gabe hat geschrieben: Ich bin echt kurz vor der Verzweiflung....könnt Ihr mir helfen?
Schauen wir mal. :-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten