Problem bei Funktionen ineinander aufrufen



  • Moin,
    ích muss euch schon wieder behelligen, und zwar geht es jetzt darum, dass ich ein Labyrinth programmieren soll, und zwar mit der Klausel, dass ich ein unterprogramm für die Darstellung und eins für die Steuerung schreibe.
    Dabei soll bei dem vorgegebenem Spielfeld jede 1 in ein # für die wand, jede 0 in ein " " für freien weg, das Zeil mit O, die Figur mit X dargestellt werden.
    Bei der Steuerung soll eine 1 für einen gültigen SPielzug, eine 2 für das Erreichen des Ziels, eine 0 für die falsche eingabe und eine 3 für das beenden des Spiels ausgegeben werden.
    Nun liegt mein Problem bei dem zusammen"wurschteln" der beiden abschnitte.
    Grob zum Ablauf:
    Bei der Ausgabe lese ich aus dem Array die Zahlen aus, gucke ob sie 0 oder 1 sind und schreibe dafür die entsprechenden Zeichen in einen string. dann wird nochmal extra die startposition (1/4) und das Ziel (9/9) markiert.
    Bei der Steuerung lese ich die eingegeben Zeichen auch in einen String ein und gucke, was eingegeben wurde und verändere dann die Koordinaten der Spielfigur.
    in der main function sollen diese beiden teile dann verwurschtelt werden.
    Nur hier gibts auch einen Fehler, wenn ich verusche die Variable TASTATUR zu belegen.
    so Genug geschnackt, hier mein bisheriger Quelltext:

    #include <stdio.h>
    #include <string.h>
    
    // Aktuelle Position der Spielfigur
    short spielfigur_x = 1;
    short spielfigur_y = 4;
    char spielfeld2 [10][10];
    
    // Definition des Spielfelds
    short spielfeld[10][10] = {
    {1,1,1,1,1,1,1,1,1,1},
    {1,0,0,1,0,0,0,1,0,1},
    {1,1,0,0,0,1,0,1,0,1},
    {1,0,0,0,1,1,0,0,0,1},
    {1,1,1,0,1,1,1,1,1,1},
    {1,1,1,0,1,0,0,0,0,1},
    {1,0,0,0,1,1,0,1,0,1},
    {1,0,1,0,0,0,0,1,0,1},
    {1,0,0,0,1,1,1,1,2,1},
    {1,1,1,1,1,1,1,1,1,1}
    };
    
    void ausgabe() {
    	int x,y,hilf;
    	for (y=0;y<=9;y++)
            {for (x=0 ; x<=9; x++)
    	         {hilf = spielfeld2 [x][y];
                    if (hilf ==1)
                       {spielfeld2[x][y]=(char)(35);}
                    if  (hilf ==0)
                        {spielfeld2[x][y]=(char)(32);}}}
     spielfeld2 [spielfigur_x-1][spielfigur_y-1]=(char)(88);
     spielfeld2 [8][8]=(char)(79);
     printf ("\n");
     printf ("/s\n",spielfeld2);
     printf ("\n");
     printf ("\n");
     printf ("\n");
     printf ("\n");
     printf ("\n");
    };
    
    int tastatur() {
    	char eingabe[100];
    	int x,y;
    	x=0;
    	y=0;
        printf ("Bitte bewegen sie ihre Spielfigur mit w(oben), a(links), s(unten),d(rechts), q zum abbrechen\n");
        fgets(eingabe, sizeof(eingabe), stdin);
    
        y = (int) eingabe [0];
    
          if (y==119 && spielfeld [spielfigur_x+1][spielfigur_y]!= 1)
           {spielfigur_x=spielfigur_x+1;
           tastatur = 1;} /*hier kann ich jedes mal nichts zuweisen, es kommt der Fehler: invalid lvalue assignment*/
          else
           {printf ("Ungueltiger Zug\n");
           tastatur = 0;}
    
          if (y==115 && spielfeld [spielfigur_x-1][spielfigur_y]!= 1)
             {spielfigur_x=spielfigur_x-1;
             tastatur = 1;}
          else
           {printf ("Ungueltiger Zug\n");
            tastatur = 0;}
    
          if (y==100 && spielfeld [spielfigur_x][spielfigur_y+1]!= 1)
             {spielfigur_y=spielfigur_y+1;
             tastatur = 1;}
          else
           {printf ("Ungueltiger Zug\n");
            tastatur = 0;}
    
          if (y==97 && spielfeld [spielfigur_x][spielfigur_y-1]!= 1)
             {spielfigur_y=spielfigur_y-1;
             tastatur = 1;}
          else
           {printf ("Ungueltiger Zug\n");
            tastatur = 0;}
    
          if (y==113)
             {printf ("Abbruch\n");
             tastatur = 3;
             return (0);}  
    
          if (  spielfeld [spielfigur_x][spielfigur_y+1] == 2)
             {printf ("Ziel erreicht!\n");
             tastatur = 2;}
    
    }
    
    int main(int argc, char **argv ) {
        do
         { /*hier habe ich keine ahnung, wie ich die Funktionen zusammenbauen kann*/
    
        while (tastatur != 2);
    
    }
    

  • Mod

    tastatur ist bei dir ein Funktion, kein Variable. Wenn du aus einer Funktion etwas zurückgeben willst, dann nutze return.



  • hmm okay, danke



  • Royale schrieb:

    // Definition des Spielfelds
    short spielfeld[10][10] = {
    ...
    };
    

    Nimm für sowas einfach int . Da ist die Chance am grössten, dass du eine Wortgrösse verwendest, die auf der Maschine natürlich ist. Manche Computer mögen Adressen besonders gerne, die ein Vielfaches von einer kleinen ganzen Zahl sind. In diesen Fällen wird der Compiler-Hersteller die Breite von int dementsprechend wählen.



  • Royale schrieb:

    [cpp] y = (int) eingabe [0];

    if (y==119 && spielfeld [spielfigur_x+1][spielfigur_y]!= 1)
    {spielfigur_x=spielfigur_x+1;
    tastatur = 1;} /*hier kann ich jedes mal nichts zuweisen, es kommt der Fehler: invalid lvalue assignment*/
    else
    {printf ("Ungueltiger Zug\n");
    tastatur = 0;}[/cpp]

    Hm, ich fürchte, diese erste if-Abfrage wird bereits dann ein "Ungueltiger Zug" ausgeben, wenn die Taste nicht 'w' ist (bei den anderen entsprechend).

    Mach besser sowas:

    switch( taste )
    {
        case 'a':
            // Hier weitere Tests auf Bewegungsmöglichkeit
            break;
    
        case 'w':
            ....
            break;
    
        case 's':    ....
    
        default:
            // Hier alle anderen, nicht gültigen Tasten abfangen
    }
    


  • okay, habs, funzt bestens, danke


Anmelden zum Antworten