Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Anfängerhilfe c++ Mastermindspiel

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
02.08.2015, 22:55 Uhr
D.P.



Hallo alle Zusammen ich habe vor kurzem Angefangen mir das programmieren mit c++ ein wenig selbst beizubringen und habe jetzt probiert eine Art Mastermind Spiel als Konsolenanwendung zu programmieren. Dies funktionierte auch recht gut auch wenn es wahrscheinlich viele bessere Möglichkeiten gäbe. Nja wie auch immer auf jeden Fall sitze ich jetzt vor einem Problem: die Zahlen die am Anfang als Variable festgelegt werden scheinen sich nach jeder Runde zu ändern bzw nicht festzustehen leider konnte ich nach langem Suchen keine sinnvolle Veränderung vornehmen. Deshalb wollte ich mir von ein Paar erfahreneren Personen ein paar Lösungsansätze holen. Hier mein Code:


C++:
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <stdlib.h>

using namespace std;

int a()
{
    srand(time(0));
    int all =6 - rand() %5;
return all;
  }
int b()
{
    srand(time(0));
    int all = 7 - rand() %6;
return all;
}

int c()
{
    srand(time(0));
    int all = 7 - rand() %5;
return all;
}

int d()
{
    srand(time(0));
    int all = 5 - rand() %4;
return all;
}

int e()
{
    srand(time(0));
    int all = 8 - rand() %7;
return all;
}

int main()
{
  
while (a()==b()||a()==c()||a()==d()||a()==e()||b()==c()||b()==d()||b()==e()||c()==d()||c()==e()||d()==e())
   {
   int main();
   }
    
int az;
int bz;
int cz;
int dz;
int ez;
    
while (a()==b()||a()==c()||a()==d()||a()==e()||b()==c()||b()==d()||b()==e()||c()==d()||c()==e()||d()==e())
   {
   int main();
   }

cout<<"x   "<<"x   "<<"x   "<<"x   "<<"x   "<<endl;
  
while (az!=a(),bz!=b(),cz!=c(),dz!=d(),ez!=e())
{
cin>>az;
cin>>bz;
cin>>cz;
cin>>dz;
cin>>ez;
    
    if(az==a())
    {cout<<"!";
            }          
else if(az==b()||az==c()||az==d()||az==e())
{cout<<"?";
            }
else if(az!=b()&&az!=c()&&az!=d()&&az!=e()) {cout<<"x";
            }
    
    if(bz==b())
    {cout<<"!";
            }
else if(bz==a()||bz==c()||bz==d()||bz==e())
{cout<<"?";
            }    
else if(bz!=a()&&bz!=c()&&bz!=d()&&bz!=e())
{cout<<"x";
            }
        
        
    if(cz==c())
    {cout<<"!";
            }
else if(cz==b()||cz==a()||cz==d()||cz==e())
{cout<<"?";
            }
else    if(cz!=b()&&cz!=a()&&cz!=d()&&cz!=e())
{cout<<"x";
            }
    
    if(dz==d())
    {cout<<"!";
            }
        
else    if(dz==b()||dz==a()||dz==c()||dz==e())
{cout<<"?";
            }
else if(dz!=b()&&dz!=a()&&dz!=c()&&dz!=e())
{cout<<"x";
            }
        
    if(ez==e())
    {cout<<"!";
            }    
else if(ez==b()||ez==a()||ez==d()||ez==c())
{cout<<"?";
            }  
else if(ez!=b()&&ez!=a()&&ez!=d()&&ez!=c())
{cout<<"x";
            }
az==0;
bz==0;
cz==0;
dz==0;
ez==0;
     }
    return 0;
        
}


Schonmal Danke im vorraus für eure Hilfe!

-----
Edit: cpp-Tags eingefügt.

Dieser Post wurde am 03.08.2015 um 00:06 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.08.2015, 02:47 Uhr
Hans
Library Walker
(Operator)


Hi,

ich wunder mich gerade, dass der Compiler sich nicht darüber beschwert, sondern das Werk übersetzt...

Aber der Reihe nach:
Wenn Du <cstdlib> verwendest, dann brauchst Du <stdlib.h> nicht.

Die Funktion main() markiert den Anfang eines Programms, und sollte deshalb nur ein einziges mal im gesamten Programm vorkommen. Du hast sie hier drei mal drin.

Die Zeile

C++:
srand(time(0));


brauchst Du ebenfalls nur einmal am Anfang des Programms zu schreiben und danach nicht mehr.

Hierzu

C++:
            az==0;  
            bz==0;    
            cz==0;  
            dz==0;  
            ez==0;  


meint mein Compiler, dass diese Ausdrücke nicht sehr sinnvoll sind, genauer: "expression is not meaningful". Und da hat er recht, denn == ist zum vergleichen, aber ein Vergleich ohne folgen ist sinnlos.

Überleg mal, ob Du das hier

C++:
while (a()==b()||a()==c()||a()==d()||a()==e()||b()==c()||b()==d()||b()==e()||c()==d()||c()==e()||d()==e())


wirklich das ist, was Du willst.
Da wird nämlich jede Funktion vier mal aufgerufen, d.h. Du hast 4 Aufrufe der Funktion a(), 4 Aufrufe der Funktion b(), ... 4 Aufrufe der Funktion e().
Wenn Du nun srand() nur einmal am Anfang von main() hast und sich Deine Funktionen a() bis e() auf

C++:
int X()
{
   int all = Z - rand() %Y;
   return all;
}


reduzieren, (wobei X für a,b,c,d oder e steht und Y und Z für die darin verwendeten Konstanten, ) was kommt dann dabei heraus? Wird die Schleife dann überhaupt durchlaufen? - Da solltest Du mal drüber nachdenken.


Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 03.08.2015 um 02:51 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.08.2015, 13:13 Uhr
ao

(Operator)



Zitat von D.P.:
die Zahlen die am Anfang als Variable festgelegt werden scheinen sich nach jeder Runde zu ändern

Das stimmt. In jedem Aufruf von a(), b(), c(), d() oder e() wird eine neue zufällige Zahl gezogen. So wirst du nie fertig.

Du musst die Kombination am Anfang einmal ziehen und dann für den Rest des Spiels speichern.

Und du solltest es so machen, dass du in jedem Schleifendurchlauf die Geheimkombination und deinen Tipp ausgeben kannst. Damit du die Logik deines Programms nachvollziehen kannst. Die Struktur des Programms ist ja eigentlich einfach. Das Knifflige ist, die richtigen Vergleiche zu formulieren, und da wirst du ohne Kontroll-Ausgaben nicht zu Rande kommen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: