Hilfe bei Vergleichen mehrerer Werte
-
Guten Abend zusammen, ich habe mich soeben in diesem forum eingefunden und will am besten auch grad loslegen.
Ich bin Anfänger auf dem Gebiet C++ und habe einige Probleme mit einem Wuerfelspiel welches ich also Projekt für die Schule bearbeite.
Hierbei soll im Großen und Ganzen eine Kombination aus 3 Würfeln zusammengesetzt werden, wobei im 2. und 3. Wurf nicht alle Wuerfel sondern auch nur 2,1 oder garkeiner neu generiert werden kann. Maximal darf drei mal geworfen werden. Anschließend sollen die geworfenen werte mit werten aus einer Tabelle oder einem festgelegten Datenfeld verglichen werden und die Wertigkeit des wurfs ermittelt werden.
Mein Quellcode sieht momentan so aus:#include <iostream>
#include <stdlib.h>
#include <time.h>using namespace std;
void wuerfel(int wuerfe[]);
int main()
{
srand(time(NULL));
int wuerfe[3];wuerfel(wuerfe);
return 0;
}void wuerfel(int wuerfe[])
{
int zaehler=0;
for(int i=0;i<1;i++)
{
for (int i=0;i<3;i++)
{
wuerfe[i]=rand()%6+1;
cout <<"Wuerfel "<< i+1 << ": " << wuerfe[i] << '\t'<<endl;}
}for(int i=0;i<4;i++)
{
cout<<" Welche Wuerfel sollen erneut gewuerfelt werden?" <<endl;
cout<<"(1,2,3 - f=garkeine)"<<endl;bool nehmen[3];
int eingabe1,eingabe2,eingabe3;cout<<"Eingabe1: ";
cin>> eingabe1;
if (eingabe1==1)
{
nehmen[0]=true;
}if(nehmen[0]==true)
{
wuerfe[0]=rand()%6+1;
i++;}
cout<<"Eingabe2: ";
cin>> eingabe2;
if (eingabe2==1)
{
nehmen[1]=true;
}if(nehmen[1]==true)
{
wuerfe[1]=rand()%6+1;
i++;}
cout<<"Eingabe3: ";
cin>> eingabe3;
if (eingabe3==1)
{
nehmen[2]=true;
}if(nehmen[2]==true)
{
wuerfe[2]=rand()%6+1;
i++;}
cout<<"Wuerfel 1: "<<wuerfe[0]<<endl;
cout<<"Wuerfel 2: "<<wuerfe[1]<<endl;
cout<<"Wuerfel 3: "<<wuerfe[2]<<endl;int aw;
cout<<" Zug Beenden?"<<endl;
cin>> aw;
if(aw==1)
{
i=4;
}}
}Wahrscheinlich hätte es jeder komplett anders geschrieben aber mit meinen Kenntnissen war es vorerst nur so möglich.
Nun ja..
Als erstes habe ich das Problem, dass die werte nachdem ich beim Abfragen 3x eine 0 eingelesen habe die werte beim ersten mal stehen bleiben, sich aber beim zweiten mal doch verändern.
Und dann weiß ich nicht wie es möglich ist z.B. zu sagen dass 1.1.6 hoeher ist als 6.6.6.ich hoffe das war jetzt net zu viel auf einmal.

Falls mir jemand helfen kann bereits ein
GROßES DANKESCHÖN
-
hi isi147,
Als erstes habe ich das Problem, dass die werte nachdem ich beim Abfragen 3x eine 0 eingelesen habe die werte beim ersten mal stehen bleiben, sich aber beim zweiten mal doch verändern.
Du initialisierst dein Array bei jedem Schleifendurchlauf neu.
bool nehmen[3];Wenn du diese Zeile vor die Schleife ziehst, dann bleibt der Wert erhalten.
Ein Würfel der einmal draußen war, bleibt immer draußen?
Dann brauchste noch ne Abfrage, um so einen Blockcout<<"Eingabe1: "; cin>> eingabe1; if (eingabe1==1) { nehmen[0]=true; } if(nehmen[0]==true) { wuerfe[0]=rand()%6+1; i++; }Zieh (falls ich dich richtig verstanden habe) das 2. if mal ins erste rein...
Und dann weiß ich nicht wie es möglich ist z.B. zu sagen dass 1.1.6 hoeher ist als 6.6.6.
Knobelst du oder welches Kriterium haben deine Wurfwerte? minimale Summe?
EDIT: Aber unabhängig von dem Kriterium (außer Summe) vereinfacht eine
aufsteigende oder absteigende Sortierung die Analyse.
Wenn du natürlich deine Würfel in der Reihenfolge behalten willst kopier
die Werte in ein (temporäres) 2tes array.Gruß,
CSpille
-
ja danke auf jeden fall für die schnell antwort.
also das erste funktioniert jetzt auf jeden fall so wie es soll.für das zweite habe ich hier nochmal eine tabbelle.
Definition Würfe
• 1 1 1 = Chicago aus
• 1 2 4 = Jule
• 1 1 6 = Max 6
• 1 1 5 = Max 5
• 1 1 4 = Max 4
• 1 1 3 = Max 3
• 1 1 2 = Max 2
• 6 6 6 = 6er Dicker
• 5 5 5 = 5er Dicke
• 4 4 4 = 4er Dicke
• 3 3 3 = 3er Dicke
• 2 2 2 = 2er Dicke
• 4 5 6 = Große Straße
• 3 4 5 = Straße
• 2 3 4 = kleine Straße
• 1 2 3 = Sträßchen
• Restliche Würfelalso letzten endes läuft es darauf aus dass für bestimmte würfe dem verliere deckel/punkte zugewiesen werden. demnach muss das programm alle aufgelistetet kennen und alle anderen werden addiert. bei den deckeln jedoch bin ich mir noch nicht sicher ob ich diese reinbringe.
Nur weiß ich halt gar nicht wie ich das mit den wertigkeiten festlegen soll.mfg
isi
-
also Knobeln

Kopier dir deine Werte in ein 2. Array und sortier sie aufsteigend.
Ich würde es etwa so machen:if(alleWürfelGleich(wurf1, wurf2)) return remis if(isSchock(wurf1)){ if(isSchockAus(wurf1)) return sieg if(isSchockAus(wurf2)) return niederlage; if(isJule(wurf1)) return sieg if(isJule(wurf2)) return niederlage; if(isSchock(wurf2)){ if(wurf1[3]>wurf2[3]) return sieg else return niederlage } // EDIT2 return sieg } // EDIT if(isSchock(wurf2)) return niederlage if(general(wurf1)){ ... } ... return niederlage;Zu mehr hatte ich keine Lust
