StudentCodingHUB

Use programming to create innovative things.
  • new post

    Wednesday, 23 October 2019

    snake game in c

    snake game in c using function




    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    #include<windows.h>
    #include<string.h>
    #include<time.h>

    enum direction
    {
        stop=0, up, down, left, right, die
    };
    enum flag
    {
        end=0, start
    };
    int x, y, fruitX, fruitY, i, j;
    const int width=40;
    const int height=20;
    int score=0, ntail=0, live=3;
    int tailX[100], tailY[100];
    enum direction dir, prvdir;
    enum flag gameover;

    void gotoxy(int x, int y);
    void print();
    void setup();
    void display();
    void getKey();
    void logic();

    void gotoxy(int x, int y)
    {
        COORD c;
        c.X=x;
        c.Y=y;
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
    }
    void print()
    {
      system("cls");
      gotoxy(35, 14);
      printf("WELCOME\n");
      gotoxy(31, 15);
      for(int r=0;r<15;r++){
        for(int q=0;q<100000000;q++);
            printf("%c", 177);
      }
      getch();
    }
    void setup()
    {
        dir=stop;
        ntail=0;
        live=3;
        gameover=end;
        x=width/2;
        y=height/2;
        srand(5);
        fruitX=rand()%(width-1);
        fruitY=rand()%(height-1);
    }
    void setup2()
    {
        gameover=end;
        x=width/2;
        y=height/2;
        srand(5);
        fruitX=rand()%(width-1);
        fruitY=rand()%(height-1);
    }
    void display()
    {
        int found;
        system("cls");
        for(i=0;i<height;i++){
            for(j=0;j<width;j++){
                if(i==0 || j==0 || i==height-1 || j==width-1)
                    printf("#");
                else if(j==x && i==y)
                    printf("%c", 153);
                else if(j==fruitX && i==fruitY)
                    printf("%c", 220);
                else{
                    found=0;
                    for(int k=0;k<ntail;k++){
                        if(j==tailX[k] && i==tailY[k]){
                            found=1;
                            printf("o");
                        }
                    }
                    if(!found)
                        printf(" ");
                }
            }
            printf("\n");
        }
        printf("SCORE : [ %d ]  LIVE : [ %d ]\n", score, live);
        printf("\n[ESC] : EXIT | [SPACE] : PAUSE\n");
    }
    void getKey()
    {
        int ch;
        if(kbhit()){
            ch=getch();
            if(ch==' ')
                getch();
            if(ch==27)
                dir=die;
            else{
                if(ch==224)
                    ch=getch();
               if(ch==72 && dir!=down && dir!=up)
                    dir=up;
                else if(ch==80 && dir!=up && dir!=down)
                    dir=down;
                else if(ch==75 && dir!=right && dir!=left)
                    dir=left;
                else if(ch==77 && dir!=left && dir!=right)
                    dir=right;
            }
        }
    }
    void logic()
    {
        int prevx=tailX[0];
        int prevy=tailY[0];
        int prev2x, prev2y;
        tailX[0]=x;
        tailY[0]=y;
        for(i=1;i<=ntail;i++){
                prev2x=tailX[i];
                prev2y=tailY[i];
                tailX[i]=prevx;
                tailY[i]=prevy;
                prevx=prev2x;
                prevy=prev2y;
        }
        switch(dir)
        {
        case die:
            gameover=start;
            live=0;
            break;
        case up:
                y--;
            break;
        case down:
                y++;
            break;
        case left:
                x--;
            break;
        case right:
                x++;
            break;
        default:
            break;
        }
        if(x==fruitX && y==fruitY){
            score+=5;
            ntail++;
            fruitX=rand()%(width-1);
            if(!fruitX){fruitX+=1;}
            fruitY=rand()%(height-1);
            if(!fruitY){fruitY+=1;}
        }
        for(int k=0;k<ntail;k++){
            if(x==tailX[k] && y==tailY[k]){
                live==0?gameover=start:(--live);
                setup();
            }
        }

        /*if(x<=0) x=width-1;
        if(x>=width) x=1;
        if(y<=0) y=height-1;
        if(y>=height) y=1;*/

        if(x==0 || y==0 || x==width-1 || y==height-1){
            live==0?gameover=start:(--live);
            setup2();
        }
    }
    void delay()
    {
        int r, q;
        for(r=0;r<10;r++){
            for(q=0;q<10000000;q++);
        }
    }
    void intro()
    {
        printf("\t\t\tWELCOME TO MINI SNAKE GAME\n");
        printf("\t\t\t--------------------------");
        getch();
        system("cls");
        printf("\n\nHOW TO PLAY :\n\n\n >use up, down, left, right arrow key to move the snake.\n");
        printf(" >There is only one Live, if you hit the walls you will die\n");
        printf(" >If you hit the body of snake with its head, then also you will die\n\n");
        printf("\n\nGood Luck...");
        getch();
    }
    int main()
    {
        int ch;
       // intro();
        //print();
    main:
        setup();
        while(!gameover){
            do{
                 display();
                 getKey();
                 logic();
                 Sleep(30);
            }while(live);
            if(live==0)
                break;
        }
        printf("\n\nGAMEOVER... !!");
        printf("\nEnter any key to continue.."); getch();
        while(1){
            system("cls");
            printf("\nPLAY AGAIN [1] | EXIT [0]");
            printf("\nEnter choice : ");
            scanf("%d", &ch);
            switch(ch){
            case 0:
                exit(0);
            case 1:
                goto main;
            }
        }
        return 0;
    }

    No comments:

    Post a Comment