Probmel beim einlsesn



  • Ich habe ein kleines Problem beim einlesen aus einer Datei und der korrekten Interpretation von den eingelesenen Zeichen.
    Und zwar hab ich folgendes vor:
    Aus einer extrernen Datei werden insgesamt 2049Zeichen eingelesen. Je nach Zeichen, werden die Zeichen immer anders interpretiert und ein bestimmtes Zeichen wird auf den Monitor ausgegeben. Am ende entsteht ein Labyrint. Dieser Teil funktioniert ohne weiteres. Gleichzeitig läuft ein zweidemensionales Array mit, jenes sich dank schleifen immer mitläuft. Je nach dem welches Zeichen vorlegt, wird dem entsprechenden Platz im Array eine 1 oder 0 zugeteilt(1 bei jeden Zeichen außer Leereichen). Später wenn dann der Benutzer eine Pfeiltaste drückt oder w-a-s-d drückt, soll das Programm abfragen, ob das Feld, jenes Neben ihn liegt eine 0 hat, dann kann er sich hin bewegen oder eine 1, dann kann er sich nicht hinbewegen. Lustiger funktioniert dies an einigen stellen und an anderen mysteriöser Art und weise nicht. Wo ich noch ohne aus einer externen datei einlesen das ganze gemacht habe, hat es fehlerfrei funktioniert. Da ich aber viele Level ,achen möchte, ist die einfacher mit den einlesen zu realisieren. Wo liegt mein Fehler?(hinweis: ich benutze den BCB)

    /* Labyrint */
    //---------------------------------------------------------------------------
    #include <vcl\condefs.h>
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    
    #define felder s_feld[temp-1][loop-1]=1
    
    #pragma hdrstop
    int s_feld[78][24];//s_feld[][]->Das Spielfeld->0=frei,1=belegt
    //---------------------------------------------------------------------------
    USERES("Layrint.res");
    //---------------------------------------------------------------------------
    void Level(void)
    	{
        FILE *datei;
        int x,y;//x,y->Koordinaten
        char f;
    
        x = 0;y = 0;
        datei = fopen("lvl01.txt","r");
        while(((f = fgetc(datei)) != '#') && (y <= 25))
        	{
            x++;
        	switch(f){
            	case 'L':
                	f = 201;
                	printf("%c",f);
                	break;
                case 'w':
                	f = 205;
                	printf("%c",f);
                	break;
                case 'R':
                	f = 187;
                	printf("%c",f);
                	break;
                case 'b':
                	f = 196;
                	printf("%c",f);
                	break;
                case 's':
                	f = 186;
                	printf("%c",f);
                	break;
                case 'K':
                	f = 219;
                	printf("%c",f);
                	break;
                case 'l':
                	f = 200;
                	printf("%c",f);
                	break;
                case 'r':
                	f = 188;
                	printf("%c",f);
                	break;
                case 32:
                	f = 32;
                	printf("%c",f);
                	break;
                case 'H':
                	f = 127;
                	printf("%c",f);
                	break;
            }//Switch-Ende
            if(x == 79)
                	{
                    x = 0;
                    y++;
                    }
            if(f == 32)
            	{
                s_feld[x-1][y-1] = 0;
                }
                else
                {
                s_feld[x-1][y-1] = 1;
                }
            }//while-Schleife-Ende
        fclose(datei);
        }
        	/* Schrift im Rahmen*//*
        	gotoxy(33,2);
        	cprintf("Steves Labyrint\n");
        	gotoxy(29,3);
        	cprintf("Level 1 : The Beginning");*/
    void Game(void)
    	{
    	char e,m,n,ue;//e->Eingabe,m->derBalken,n->Leerzeichen,ue->ü
    	int x,y,loop,z;//z->Züge
    	int d1,d2;//Lösch-Dummy d1->x, d2->y
        Level();
    	x=27;y=8;loop=1;n=32;z=0;ue=129;
    	gotoxy(x,y);
    	cprintf("*");
    	m=179;//Senkrechter Strich
    	gotoxy(30,24);
    	cprintf("Level 1 %c Aktion: ", m);
    
        	while(loop <= 100)
        	{
        	//Level();
        	gotoxy(30,24);
    		cprintf("Z%cge :%d %c  ",ue,z,m);
        	gotoxy(41,24);
        	cprintf("Aktion : %c", e);
        	e = getch();
        	    if((e == 77 || e == 'd') && s_feld[x][y-1] == 1) //nach links bewegen
        	    	{
        	        d1 = x; d2 = y;
        			x++;
        			gotoxy(d1,d2);
        	        cprintf("%c", n);
        			gotoxy(x,y);
    				cprintf("*");
        	        }
        		if((e == 75 || e == 'a') && s_feld[x-2][y-1] == 1) //nach rechts bewegen
        	    	{
        	    	d1 = x; d2 = y;
        	        x--;
        	        gotoxy(d1,d2);
        	        cprintf("%c", n);
        			gotoxy(x,y);
    				cprintf("*");
        	        }
        	    if((e == 80 || e == 's') && s_feld[x-1][y] == 1)  //nach unten bewegen
        	    	{
        	    	d1 = x; d2 = y;
        	    	y++;
        	        gotoxy(d1,d2);
        	        cprintf("%c", n);
        	        gotoxy(x,y);
        	        cprintf("*");
        	        }
        	    if((e == 72 || e == 'w') && s_feld[x-1][y-2] == 1)  //nach oben bewegen
        	    	{
        	    	d1 = x; d2 = y;
        	    	y--;
        	        gotoxy(d1,d2);
        	        cprintf("%c", n);
        	        gotoxy(x,y);
        	        cprintf("*");
        	        }
        	    if(e == 'b')
        	    	{
        	    	clrscr();
        	        gotoxy(33,13);
        			cprintf("Aufwiedersehen!");
        	        getch();
        	        exit(0);
            	    }/*
            	if()
            		{
            		clrscr();
            	    Rahmen();
            	    gotoxy(33,13);
        			fprintf(stderr,"Falsche Eingabe!");
            	    gotoxy(28,14);
        			fprintf(stderr,"Weiter mit beliebige Taste");
            	    getch();
            	    clrscr();
            	    gotoxy(x,y);
            	    cprintf("*");
            	    }  */
            	if(x == 26 && y == 18)//Siegesbedingung
            	       	{
            	        clrscr();
            	        gotoxy(38,13);
        				cprintf("Sieg!");
                		getch();
                		exit(0);
                	    }
        	z++;
        	}
    	}
    int main(int argc, char **argv)
    {
    	Game();
        return 0;
    }
    //---------------------------------------------------------------------------
    


  • Sag doch mal, was nicht funktioniert. Das wär als Anfang nicht schlecht.

    Kann dir zum debuggen nur raten, dass du dir dein Feld, dass du mit 1 und 0 füllst nach dem einlesen der Datei ausgeben lässt. Außerdem würde ich zum Testen das Labyrinth kleiner machen. Dazu kannst du die Felder und die Abfragen nach den Feldgrenzen dynamisch machen.


Anmelden zum Antworten