ein system("CLS") zu viel...



  • Hier der Code:

    int eingabe(daten &schuss){
        int wahl=0;
        wahl=getch();
    
        switch(wahl){
            case 72: schuss.schuss=true;
                     break;
            case 80:
                     break;
            case 77: return 1;
                     break;
            case 75: return 0;
                     break;
        }
        return 3;
    }
    
    void ausgabe(daten &spielfeld, daten &x, daten &auswertung, daten &schuss){
        system("CLS");
    
        spielfeld.spielfeld[9][x.x]='_';
        x_berechnen(x, auswertung);
        spielfeld.spielfeld[9][x.x]='X';
    
        if(schuss.schuss==true){
            ausgabe_spielfeld_schuss(spielfeld, schuss, x);
        }
        else if(schuss.schuss==false){
            ausgabe_spielfeld_normal(spielfeld);
        }
    }
    
    void ausgabe_spielfeld_schuss(daten &spielfeld, daten &schuss, daten x){
        int schuss_position=8;
    
        for(unsigned int i=0;i<=8;i++){
            spielfeld.spielfeld[schuss_position][x.x]='|';
            for(unsigned int y=0;y<10;y++){ //Gibt das Spielfeld aus 0-9
                if(y==0){
                }
                else{
                    cout << "\n";
                }
                    for(unsigned int x=0;x<10;x++){
                        cout << spielfeld.spielfeld[y][x];
                    }
            }
            spielfeld.spielfeld[schuss_position--][x.x]='_';
            system("CLS");
        }
    
        schuss.schuss=false;
    }
    

    Immer wenn ich nach oben drücke (die Pfeiltaste) geht er in die Funktion void ausgabe_spielfeld_schuss, und gibt das Spielfeld inklusive den Schuss aus. (Soll auch so) nur immer wenn er mit der Funktion fertig ist macht er nochmal ein system("CLS") und der Bidlschirm ist solange schwarz bis eine Eingabe gemacht wurde.
    Ich hoffe das reicht an COde.



  • Wieso stehen so komische Zahlen in dem switch? In deinem letzten Code-Abschnitt gibst du erst das Feld aus und dann rufst du cls auf. Wie wärs andersrum?



  • Und ich glaube die main.cpp wäre auch nicht schlecht 😃

    int main(){
        daten spiel; //Anlegen von spiel für struct
    
        do{
            ausgabe(spiel, spiel, spiel, spiel); //spielfeld, x, auswertung, schuss
            spiel.auswertung=eingabe(spiel); //schuss
        }while(true);
    
    }
    


  • nwp3 schrieb:

    Wieso stehen so komische Zahlen in dem switch?

    Wegen den Pfeiltaste. Z.B. 72 ist halt für die Pfeiltaste mit dem Pfeil nach oben.

    nwp3 schrieb:

    In deinem letzten Code-Abschnitt gibst du erst das Feld aus und dann rufst du cls auf. Wie wärs andersrum?

    Ja super hat geklappt danke. 🙂



  • Fensterscheibe schrieb:

    nwp3 schrieb:

    Wieso stehen so komische Zahlen in dem switch?

    Wegen den Pfeiltaste. Z.B. 72 ist halt für die Pfeiltaste mit dem Pfeil nach oben.

    gib denen mit Konstanten lieber Namen



  • Fensterscheibe schrieb:

    Wegen den Pfeiltaste. Z.B. 72 ist halt für die Pfeiltaste mit dem Pfeil nach oben.

    Das schreit nach enums.



  • Gute Idee versuche ich mal umzusetzten. Aber ich habe das Programm in 3 Datein aufgeteilt. Wo sollte ich sie am bestern erstellen? main.cpp, funktionen.h , funktionen.cpp.
    Ich benutze so viele Sache momentan -habe sie zwar gelesen ein Beispiel gemacht und zur seite gelegt- wie noch nie 😃



  • In funktionen.h, aber mach daraus direkt eine Klasse und pack das Enum in den private Bereich.



  • Namenloser324 schrieb:

    In funktionen.h, aber mach daraus direkt eine Klasse und pack das Enum in den private Bereich.

    Hm... habe nun meine Variablen in der .h Datei in einem struct Element gepackt und die Funktionen darunter.

    funktionen.h

    #ifndef FUNKTIONEN_H_INCLUDED
    #define FUNKTIONEN_H_INCLUDED
    
    struct daten{
        char spielfeld[10][10];
        int x;
        int auswertung;
        bool schuss;
    
        //Konstruktor
        daten(): x(0),auswertung(3), schuss(false),
                spielfeld( {{'_','_','_','_','_','_','_','_','_','_'},     //0
                            {'_','_','_','_','_','_','_','_','_','_'},      //1
                            {'_','_','_','_','_','_','_','_','_','_'},      //2
                            {'_','_','_','_','_','_','_','_','_','_'},      //3
                            {'_','_','_','_','_','_','_','_','_','_'},      //4
                            {'_','_','_','_','_','_','_','_','_','_'},      //5
                            {'_','_','_','_','_','_','_','_','_','_'},      //6
                            {'_','_','_','_','_','_','_','_','_','_'},      //7
                            {'_','_','_','_','_','_','_','_','_','_'},      //8
                            {'X','_','_','_','_','_','_','_','_','_'}}) {}  //9
                            //  0    1   2   3   4   5   6   7   8   9
    };
    
    void ausgabe(daten &spielfeld, daten &x, daten &auswertung, daten &schuss);
    void x_setzen(daten &spielfeld, daten &x, int richtung);
    void ausgabe_spielfeld_normal(daten &spielfeld);
    void ausgabe_spielfeld_schuss(daten &spielfed, daten &schuss, daten x);
    int eingabe(daten &schuss, daten &spielfeld, daten &x);
    void x_berechnen(daten &x, int richtung);
    
    #endif // FUNKTIONEN_H_INCLUDED
    

    Wie sollte ich sie sonst aufbauen? (wieder komplett neu) 😮



  • Zum Beispiel so:

    enum class Taste : char{oben = 72, unten = 73, rechts = 75, links = 78};
    
    switch (wahl){
    case Taste::oben:
    case Taste::unten:
    }
    

    Ich finde das viel besser lesbar.



  • Danke für das Beispiel. Ich werde es gleich mal versuchen.

    nwp3 schrieb:

    Ich finde das viel besser lesbar.

    Da gebe ich dir recht.

    Ich habe mit class an soetwas gedacht:
    http://www.cplusplus.com/doc/tutorial/classes/

    Aber nun bin ich beruhigt 🙂


Anmelden zum Antworten