Labyrinth - Problemchen



  • Seid gegrüßt 🤡
    ich bin gerade dabei, ein einfaches Ansi-Spiel zu schreiben ...

    http://vannius.funpic.de/laby.zipGame-Ordner downloaden und irgendwo entpacken

    Das Ziel des Spiels ist, Coins einzusammeln und diese durch ein Labyrinth zum Ausgang zu bringen...
    Leider zählt das proggie die Coins doppelt und außerdem sind diese nach dem Einsammeln nich weg...
    in zeile 106 bis 110 wird geprüft, ob das feld ein coin ist ...

    #include <conio.h>
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    #define ZEILENLAENGE 80
    #define DATENSATZ 100
    
    void fullscreen()
    {
    keybd_event(VK_MENU, 0x38, 0, 0);
    keybd_event(VK_RETURN, 0x1c, 0, 0);
    keybd_event(VK_RETURN, 0x1c, KEYEVENTF_KEYUP, 0);
    keybd_event(VK_MENU, 0x38, KEYEVENTF_KEYUP, 0);
    } 
    
    void gotoxy(int x, int y)
    {
    HANDLE hConsoleOutput;
    COORD dwCursorPosition;
    dwCursorPosition.X = x;
    dwCursorPosition.Y = y;
    hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hConsoleOutput,dwCursorPosition);
    } 
    int begr()
    {
        system("CLS");
        printf("\n\n\n**********************************************
    *******************************\n\n"
               "\t\tANSI C - Kollisionsabfrage von Norman Fischer\n\n"
               "*************************************
    ****************************************\n\n");
        gotoxy(1,24);
        system("pause");
        system("CLS");
    } 
    int page()
    {
      FILE *quelle;
      char puffer[DATENSATZ][ZEILENLAENGE];
      int c;  
      char eing;
      int i=0, j=0;
      system("CLS"); 
      if( (quelle=fopen("level1.txt","r"))==NULL ) 
      {
        fprintf(stderr, "Fehler beim Öffnen\n");
        getch();
      }  
      while( (c=fgetc(quelle)) != EOF) 
      {
        if( c!='\n' )
        {
        puffer[i][j++]=c; 
        }       
        else 
        {      
          puffer[i++][j]='\0';
          j=0;
        }
      }
    
      for(j=0; j<21; j++)
      {
        puts((puffer[j]));
    }    
    }  
    
    void c_steuerung()
    {
      int f=0;
      int t;    
      int x=3;
      int y=3;
      int life=5; 
      int coins=0;              
      t = 65;     
      FILE *quelle;
      char puffer[DATENSATZ][ZEILENLAENGE];
      int c;  
      char eing;
      int i=0, j=0;
      system("CLS");
      if( (quelle=fopen("level1.txt","r+"))==NULL ) 
      {
        fprintf(stderr, "Fehler beim Öffnen\n");
        getch();
      }  
      while( (c=fgetc(quelle)) != EOF) 
      {
        if( c!='\n' )
        {
        puffer[i][j++]=c;
        }        
        else 
        {
        puffer[i++][j]='\0';
        j=0;
        }
      }    
    
      while(t != 27)        
      {
       if(puffer[y][x]=='@') 
        {
           coins++;
            puffer[y][x]==' ';
        } 
      page();
      gotoxy(x,y);
      printf("O"); 
      gotoxy(5,25);
      printf("Leben: %i",life);
      gotoxy(5,27);
      printf("Coins: %i",coins);   
      t = getch();                    
        if(t == 0) t = getch();     
        switch (t)                 
        {
          case 72 : y--;
          if(puffer[y][x]=='#') 
          {
            gotoxy(25,30);
            life--;
    
            printf("W A N D !\nNur noch %i Leben !",life);
            Sleep(500);
            y++;
          }
           break;
          case 80 : y++;
              if(puffer[y][x]=='#') 
          {
            gotoxy(25,30);
            life--;
    
            printf("W A N D !\nNur noch %i Leben !",life);
            Sleep(500);
        y--;
         } 
           break;
          case 75 :x--;
              if(puffer[y][x]=='#') 
          {
            gotoxy(25,30);
            life--;
    
            printf("W A N D !\nNur noch %i Leben !",life);
            Sleep(500);
        x++;
         } 
           break;
          case 77 :x++;
              if(puffer[y][x]=='#') 
        {
            gotoxy(25,30);
            life--;
    
            printf("W A N D !\nNur noch %i Leben !",life);
            Sleep(500);
        x--;
         } 
    
    gotoxy(5,25);
          printf("Leben: %i",life);
          gotoxy(5,27);
          printf("Coins: %i",coins);   
        gotoxy(x,y);
        printf("O");
    
      }
         if(life<=0) 
        {
        system("CLS"); 
        printf("\n\n\n**************************
    ****************\n\nDas wars !\n\n**************************************
    ****\n\n\n");
        system("pause");
        break; 
    }    
        if(puffer[y][x]=='X') 
        {
        system("CLS"); 
        printf("\n\n\n***************************************
    ***\n\nDu hast gewonnen !\n\n*************************
    *****************\n\n\n");
        system("pause");
        break; 
    }  
    }  
    }
    
    int main()
    {
        system("color 3f");
        fullscreen();
       begr();
       page();
      c_steuerung();
      return(0);
    }
    

    hab bestimmt nur einen logischen aufbaufehler in meinem game...
    weiß echt nicht wie ichs machen soll/was ich falsch mach 😞
    vielleicht könnt ihr mir ja weiter helfen :p

    dank im voraus
    zenfu



  • viel Arbeit:

    ok..erstens mal ne frage...-> lässt sich der code bei dir ernsthaft kompilieren???

    Neben den fehlenden Rückgabewerten einiger Funktionen und de Assertionerror beim Fehlen der Leveldatei gibts noch den Operatorfehler...
    == ( Vergleichsoperator),= ( Zuweisungsoperator)
    Zwar ist das ganze unübersichtlich und einiges steht im switch was eigentlich danach gehört aber deine coins werden doppelt gezählt weil du statt

    puffer[y][x]=' ';
    

    das

    puffer[y][x]==' ';
    

    verwendest.....

    MfG Kuldren



  • Danke für die schnelle Hilfe ;)war wohl ein voller newb-fehler ^^

    habs jetzt hinbekommen und das game um einiges erweitert...
    http://vannius.funpic.de/laby.zip

    könnt ja bischen feedback geben 🙂

    dank nochma
    zen



  • Ich hab den Code jetzt nur überflogen aber die ausgabe ist echt seltsam...
    bei mir erscheint nur der "smiley" und die stats...das eigentliche spielfeld scheint nur kurz auf....
    die steuerung ist auch ein wenig eigenartig...
    und die coins bleiben immer noch liegen...
    sonst gibts neben ner unreferenzierten lokalen variablen eigentlich keine dinge die mir auffallen...

    MfG Kuldren



  • nun müsste es funktionieren...
    hab die steuerung echt bischen verzögert aufgebaut... werd warscheinlich die Sleep(x,y)-Fkt. rausnehmen...

    danke fürs feedback 🙂



  • ich hab mir jetzt nochmal die datei gezogen:
    http://vannius.funpic.de/laby.zip

    aber das level wird wieder übersprungen und danach nur die stats angezeigt...

    werd warscheinlich die Sleep(x,y)-Fkt. rausnehmen...

    sleep(x,y)? meinst du gotoxy(x,y)?

    aber ja...nimm die sleep() heraus...

    Ansonsten find ich es recht gut gelungen.

    MfG Kuldren


Anmelden zum Antworten