|
You last visited: Today at 03:47
Advertisement
Wer wird Millionär in C++
Discussion on Wer wird Millionär in C++ within the C/C++ forum part of the Coders Den category.
04/10/2019, 11:04
|
#1
|
elite*gold: 0
Join Date: Jul 2011
Posts: 7,448
Received Thanks: 1,308
|
Wer wird Millionär in C++
Hallo,
ich muss für ein Schulprojekt das Spiel "Wer wird Millionär" programmieren. Da ich aber absoluter Anfänger in C++ bin, bekomme ich das im Moment nicht hin.
Ich bekomme aktuell die Ausgaben der Fragen nicht hin. Diese Fragen sollen später random ausgegeben werden. Ich habs vorher mit einem struct versucht, doch mir wurde geraten, das in Arrays zu packen.
Code:
|
|
|
04/10/2019, 13:03
|
#2
|
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 573
|
Versuchen wir doch erstmal strukturiert ran zu gehen.
Für ein Quiz spiel benötigst du einen Container an Fragen, eine Frage besteht aus dem Fragetext, mehreren Antworten, von der natürlich eine richtig sein muss.
In C++ terms bedeutet das du willst eine art von Objekt haben das die Information der Fragen beinhaltet, sowie eine art Container um die fragen zu halten. Aktuell machst du beides mit einem zweidimensionalen Array. Das ist zum einen unleserlich und aufwendig. Mein Tipp ist, erstelle einen eigenen Typen für Fragen (Stuct/Class), und benutz einen Container (std::set, std::vector) für den Fragenkatalog.
Wenn du eine frage stellst, printest du die Fragestellung sowie die möglichen antworten aus, und liest vom user dann eine zahl ein. Wenn die Zahl = index der richtigen antwort (auf dem screen) ist, bekommt der Spieler die nächste frage, wenn nicht hat er das spiel verloren.
Die fragen solle ja zufällig auftreten, da gibt es verschiedene Optionen, z.B. kannst du die Fragen einfach in einem vector speichern, und die nächste frage mit rand() auswählen, und diese dann löschen. Persönlich finde ich das aber recht ugly da Vector elemt löschen langsam ist (O(n)).
Die etwas kompliziertere lösung die ich machen würde, ich würde den Fragen eine Zufallszahl zuordnen, und sie dann nach dieser sortiert in einem std::set lagern (indem man std::less für den Fragen typen spezialisiert) und dann immer das erste element entfernen. gibt bestimmt noch effizientere Methoden (std::set basiert auf nem RBT in den meisten implementationen, was hohe statische kosten hat), aber dir würde ich eh das mit dem vector empfehlen, da ich glaube das es für dich völlig ausreicht.
Also mal als pseudo code:
Code:
Frage {
-- Daten
Text;
Antworten;
-- Methoden
FrageStellen {
Print (Text);
Print (Antworten);
Read (UserAntwort);
if (UserAntwort == RichtigeAntwort) return true;
return false;
}
}
Liste<Frage> Fragen = {
Frage(Frage1, A1, A2, A3, A4),
Frage(Frage2, A1, A2, A3, A4),
...
Frage(FrageN, A1, A2, A3, A4),
}
Main {
While (Fragen not empty) {
AktuelleFrage = Fragen[Random]
Fragen.delete(AktuelleFrage);
if (AktuelleFrage.FrageStellen ist Falsch) Veloren;
}
Gewonnen
}
|
|
|
04/10/2019, 13:14
|
#3
|
elite*gold: 0
Join Date: Jul 2011
Posts: 7,448
Received Thanks: 1,308
|
Quote:
Originally Posted by warfley
Versuchen wir doch erstmal strukturiert ran zu gehen.
Für ein Quiz spiel benötigst du einen Container an Fragen, eine Frage besteht aus dem Fragetext, mehreren Antworten, von der natürlich eine richtig sein muss.
In C++ terms bedeutet das du willst eine art von Objekt haben das die Information der Fragen beinhaltet, sowie eine art Container um die fragen zu halten. Aktuell machst du beides mit einem zweidimensionalen Array. Das ist zum einen unleserlich und aufwendig. Mein Tipp ist, erstelle einen eigenen Typen für Fragen (Stuct/Class), und benutz einen Container (std::set, std::vector) für den Fragenkatalog.
Wenn du eine frage stellst, printest du die Fragestellung sowie die möglichen antworten aus, und liest vom user dann eine zahl ein. Wenn die Zahl = index der richtigen antwort (auf dem screen) ist, bekommt der Spieler die nächste frage, wenn nicht hat er das spiel verloren.
Die fragen solle ja zufällig auftreten, da gibt es verschiedene Optionen, z.B. kannst du die Fragen einfach in einem vector speichern, und die nächste frage mit rand() auswählen, und diese dann löschen. Persönlich finde ich das aber recht ugly da Vector elemt löschen langsam ist (O(n)).
Die etwas kompliziertere lösung die ich machen würde, ich würde den Fragen eine Zufallszahl zuordnen, und sie dann nach dieser sortiert in einem std::set lagern (indem man std::less für den Fragen typen spezialisiert) und dann immer das erste element entfernen. gibt bestimmt noch effizientere Methoden (std::set basiert auf nem RBT in den meisten implementationen, was hohe statische kosten hat), aber dir würde ich eh das mit dem vector empfehlen, da ich glaube das es für dich völlig ausreicht.
Also mal als pseudo code:
Code:
Frage {
-- Daten
Text;
Antworten;
-- Methoden
FrageStellen {
Print (Text);
Print (Antworten);
Read (UserAntwort);
if (UserAntwort == RichtigeAntwort) return true;
return false;
}
}
Liste<Frage> Fragen = {
Frage(Frage1, A1, A2, A3, A4),
Frage(Frage2, A1, A2, A3, A4),
...
Frage(FrageN, A1, A2, A3, A4),
}
Main {
While (Fragen not empty) {
AktuelleFrage = Fragen[Random]
Fragen.delete(AktuelleFrage);
if (AktuelleFrage.FrageStellen ist Falsch) Veloren;
}
Gewonnen
}
|
Danke erstmal für die Hilfe!
Das Problem ist, wir sind halt noch ganz am Anfang und hatten bis auf paar Basics nichts gemacht. Sprich bis jetzt eig. Nur Datentypen, Strings, Pointer, arrays und Listen.
Deswegen sagen mir die meisten Sachen nichts. Und wir dürfen halt nur das benutzen was wir gelernt haben.
Ich hatte das halt mit einem struct versucht:
|
|
|
04/10/2019, 13:35
|
#4
|
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 573
|
Quote:
Originally Posted by Semikоlоn
Danke erstmal für die Hilfe!
Das Problem ist, wir sind halt noch ganz am Anfang und hatten bis auf paar Basics nichts gemacht. Sprich bis jetzt eig. Nur Datentypen, Strings, Pointer, arrays und Listen.
Deswegen sagen mir die meisten Sachen nichts. Und wir dürfen halt nur das benutzen was wir gelernt haben.
Ich hatte das halt mit einem struct versucht: 
|
Das ist schon fast richtig, du hast nur den fehler gemacht alle daten in eine Struct zu setzen. Du solltest eine Struct für die Fragen haben und dann eine liste dieser Struct als katalog
So würde ich das machen:
Code:
struct Challange {
std::string question;
std::string answers[4];
int correctAnswer;
bool askQuestion() {
...
}
}
std::vector<Challange> challanges = {
{
.question = "Frage 1",
.answers = {
"Antwort1",
"Antwort2",
"Antwort3",
"Antwort4"
},
.correctAnswer = 2
},
{
.question = "Frage 2",
.answers = {
"Antwort1",
"Antwort2",
"Antwort3",
"Antwort4"
},
.correctAnswer = 2
},
...
};
|
|
|
04/10/2019, 14:33
|
#5
|
elite*gold: 0
Join Date: Jul 2011
Posts: 7,448
Received Thanks: 1,308
|
Quote:
Originally Posted by warfley
Das ist schon fast richtig, du hast nur den fehler gemacht alle daten in eine Struct zu setzen. Du solltest eine Struct für die Fragen haben und dann eine liste dieser Struct als katalog
So würde ich das machen:
Code:
struct Challange {
std::string question;
std::string answers[4];
int correctAnswer;
bool askQuestion() {
...
}
}
std::vector<Challange> challanges = {
{
.question = "Frage 1",
.answers = {
"Antwort1",
"Antwort2",
"Antwort3",
"Antwort4"
},
.correctAnswer = 2
},
{
.question = "Frage 2",
.answers = {
"Antwort1",
"Antwort2",
"Antwort3",
"Antwort4"
},
.correctAnswer = 2
},
...
};
|
Wir dürfen halt keine Vektoren benutzen, wenn ich das nicht falsch verstanden habe.
|
|
|
04/10/2019, 22:16
|
#6
|
elite*gold: 100
Join Date: Apr 2008
Posts: 860
Received Thanks: 1,487
|
Quote:
Originally Posted by Semikоlоn
Wir dürfen halt keine Vektoren benutzen, wenn ich das nicht falsch verstanden habe.
|
Statt vector geht auch einfach nur ein Array. Die Fragen sind ja eh fix, du musst dir nur merken welche Frage schon gestellt wurde. Statt die Frage aus dem Array zu entfernen (das geht mit Array natürlich nicht so schön wie mit std::vector) kannst du z.B. in der Challange-Struktur eine weitere Variable anlegen, die signalisiert ob die Frage schon gestellt wurde.
Statt
Code:
std::vector<Challanges> challanges = { ... };
kannst du auch einfach
Code:
Challanges challanges[] = { ... };
machen.
PS: Challenge schreibt man mit e ... ;D
|
|
|
06/15/2019, 07:27
|
#7
|
elite*gold: 162
Join Date: Feb 2014
Posts: 7,852
Received Thanks: 857
|
Pn me hab ein fertiges Produkt
|
|
|
 |
Similar Threads
|
Wer wird Millionär
02/14/2015 - AutoIt - 1 Replies
Ein kleines Spiel, man kann selber Fragen erstellen, so viele wie man will und wenn man spielt wird Random eine Frage gestellt.
Menü:
Spielen:
Frage erstellen:
|
Wer wird Millionär Metin?
01/05/2012 - Metin2 Private Server - 4 Replies
Ja also meine Idee ist es, das man die OX map umformt in form von 4 Spalten anstatt 2,
Da würde da z.B so ne frage kommen
Wie viele Tattoos hat der dunkle Anführer
A) 1 B) 3 C) 5 D) 7
wenn man es richtig hat, ist man eine stufe weiter ---> es werden pro spiel nur 20 runden geben, wenn man falsch benatwortet bekommt man gar nichts.
Man kann vor der Frage jederzeit aussteigen, dann bekommt man das Yang was man bisher gewonnen hat ...
Sobald die nächste Frage kommt, wird der NPC...
|
Wer wird Millionär geknackt
11/29/2010 - Off Topic - 30 Replies
ach fast vier Jahren ohne einen Millionengewinner hat wieder ein Kandidat der Sendung "Wer wird Millionär?" alle 15 Fragen richtig beantwortet. Der Café-Betreiber Ralf Schnoor aus Hannover konnte auch ohne Hilfe seines noch vorhandenen Telefonjokers die letzte Frage richtig beantworten, wie RTL mitteilte.
(37)|Danke!
Schriftgröße A A A
Schnoor hat es geschafft: Er ist Jauchs erster Millionär seit vier Jahren. © RTL / Stefan Gregorowius
Sie lautete: Wie heißt die erste deutsche Briefmarke,...
|
rakion+ebay=millionär
03/29/2006 - General Gaming Discussion - 2 Replies
http://cgi.ebay.de/Rakion-Account-LeveL-71...1QQcm dZViewItem
rofl..
|
All times are GMT +1. The time now is 03:47.
|
|