riesiges problem



  • hi

    ich wollte ein spiel programmieren, aber er ist immer wieder ohne fehler hängengeblieben.
    was ist an den beiden dateien falsch??

    datei1.c

    #include "datei2.h"
    
    int main()
    {
        int a=0;
        int x,y;
        int **map, **blocks;
        int playerx=3, playery=1, exitx=3, exity=6;
    
        map = (int**)malloc(sizeof(int));
        for ( a = 0; a <= 4; a++)
        {
            map[a] = (int*)malloc(sizeof(int**));
        }
        blocks = (int**)malloc(sizeof(int));
        for ( a = 0; a <= 4; a++)
        {
            blocks[a] = (int*)malloc(sizeof(int**));
        }
    
        loadlevel(1, map, blocks, playerx, playery, exitx, exity); // kommentiert diese Zeilen aus, dann gehts
        zeichnen(playerx, playery, map, exitx, exity);             //
    
        a = getch();
        switch (a) 
        {
            case 'a':
                printf("move(1, map, playerx, playery)");
                break;
            case 's':
                printf("opperate(map, playerx, playery)");
                break;
            case 'd':
                printf("move(2, map, playerx, playery)");
                break;
            case 'w':
                printf("move(3, map, playerx, playery)");
                break;
            default:
                break;
        }
        getch();
    
        return(1);
    }
    

    datei2.h

    void ansiinf(int x){int a=0;while(a<x){printf("%d::%c?\n", a, a);a++;}}
    
    int move(int dir, int **map, int playerx, int playery)
    {
        switch (dir) 
        {
            case 1:
                return(1);
                break;
            case 2:
                return(2);
                break;
            case 3:
                return(3);
                break;
            default:
                return(0);
                break;
        }
        return(1);
    }
    int opperate(int **map, int playerx, int playery)
    {
        return(1);
    }
    
    int zeichnen(int playerx, int playery, int **map, int exitx, int exity)
    {
        int x, y;
        for(y=0;y<=4;y++)
        {
           for(x=0;x<=7;x++)
           {
               printf("%c", map[y][x]);
               if(playery==x && playerx==y)printf("%c%c", 8, 2);
               if(exity==x && exitx==y)printf("%c%c", 8, 4);
           }
           printf("\n");
        }
    }
    
    int loadlevel(int level, int **map, int **blocks, int playerx, int playery, int exitx, int exity)
    {
        switch(level)
        {
            case 1:
                map[0][0] = 219;    map[0][1] = 219;    map[0][2] = 219;    map[0][3] = 219; 
                map[0][4] = 219;    map[0][5] = 219;    map[0][6] = 219;    map[0][7] = 219; 
                map[1][0] = 219;    map[1][1] = 000;    map[1][2] = 000;    map[1][3] = 000; 
                map[1][4] = 000;    map[1][5] = 000;    map[1][6] = 000;    map[1][7] = 219; 
                map[2][0] = 219;    map[2][1] = 000;    map[2][2] = 000;    map[2][3] = 000; 
                map[2][4] = 219;    map[2][5] = 000;    map[2][6] = 000;    map[2][7] = 219; 
                map[3][0] = 219;    map[3][1] = 000;    map[3][2] = 219;    map[3][3] = 000; 
                map[3][4] = 219;    map[3][5] = 000;    map[3][6] = 000;    map[3][7] = 219; 
                map[4][0] = 219;    map[4][1] = 219;    map[4][2] = 219;    map[4][3] = 219; 
                map[4][4] = 219;    map[4][5] = 219;    map[4][6] = 219;    map[4][7] = 219; 
    
                blocks[0][0] = 0;    blocks[0][1] = 0;    blocks[0][2] = 0;    blocks[0][3] = 0; 
                blocks[0][4] = 0;    blocks[0][5] = 0;    blocks[0][6] = 0;    blocks[0][7] = 0; 
                blocks[1][0] = 0;    blocks[1][1] = 0;    blocks[1][2] = 0;    blocks[1][3] = 0; 
                blocks[1][4] = 0;    blocks[1][5] = 0;    blocks[1][6] = 0;    blocks[1][7] = 0; 
                blocks[2][0] = 0;    blocks[2][1] = 0;    blocks[2][2] = 0;    blocks[2][3] = 0; 
                blocks[2][4] = 0;    blocks[2][5] = 0;    blocks[2][6] = 0;    blocks[2][7] = 0; 
                blocks[3][0] = 0;    blocks[3][1] = 0;    blocks[3][2] = 0;    blocks[3][3] = 0; 
                blocks[3][4] = 0;    blocks[3][5] = 0;    blocks[3][6] = 1;    blocks[3][7] = 0; 
                blocks[4][0] = 0;    blocks[4][1] = 0;    blocks[4][2] = 0;    blocks[4][3] = 0; 
                blocks[4][4] = 0;    blocks[4][5] = 0;    blocks[4][6] = 0;    blocks[4][7] = 0; 
    
                /* ###########
                map:
                    ######## 
                    #      # 
                    #   #  # 
                    #   #  # 
                    ########
    
                blocks:
                    00000000
                    00000000 
                    00000000 
                    00100000 
                    00000000
    
                figure:
                    1 : 3
    
                exit:
                    6 : 3
                   ########### */            
    
                break;
            default:
                break;
        }
    }
    


  • was ist an den beiden dateien falsch??

    Keine Ahnung. Aber an deiner Frage is IMHO auch was falsch...



  • IHMO??

    ich mein, dass er ohne angabe des fehlers abgebrochen hat



  • Da ich nicht weiß, wann und wo das Programm abbricht, du ich einfach mal ein paar dumme Gedanken aufschreiben.
    Wenn a ein Integer ist, warum prüfst du in der switch-case auf alphanumerische Zeichen? Ein character wäre da bestimmt angebrachter.



  • Also ich fidne einige Sachen:

    Du benutzt Sachen, die du nicht benutzen darfs. getch ist nicht ANSI, denn es kommt für dos unter conio.h und unter unix in curses.h und ncurses.h und du hast weder noch includiert.

    malloc befindet in malloc.h, hast auch nicht dabei und du befreist (mit free) den allokierten Speicher nicht (sehr böser Fehler).

    Außerdem, einfach Code posten hilft nicht weiter, meine Glaskugel ist in Reparatur. Was genau funktioniert nicht? Falscher Ablauf, kannst du nicht kompiieren?



  • Außerdem, einfach Code posten hilft nicht weiter, meine Glaskugel ist in Reparatur.

    nicht schlecht ... naja nächsttes mal kann ich hoffe ich auch mal was konstruktives posten 😉



  • Hallo,

    statt "malloc.h" sollte man besser "stdlib.h" nehmen. Ersteres ist imho veraltet.



  • CarstenJ schrieb:

    Hallo,

    statt "malloc.h" sollte man besser "stdlib.h" nehmen. Ersteres ist imho veraltet.

    scheint zu stimmen, hab in meinen man pages nachgeschaut und dort steht auch stdlib.h



  • bevor ich hier zu sehr auf standard achten würde, sollte das spiel lieber ins konsolen faq geschoben werden und weitere fragen dazu dort gestellt werden.

    spiele brauchen meist ein paar extras, wie das sofortige "abholen" von konsole, zum bleistift durch getch. (oder pendant unter linux)

    eine gute überschrift und eine klare fehlermeldung nicht vergessen 😉

    ps: das programm bricht nach einer eingabe ab, aber das ist ja auch so programmiert ... was soll es denn können?



  • Dieser Thread wurde von Moderator/in AJ aus dem Forum ANSI C in das Forum DOS und Win32-Konsole verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten