基本的蛇游戏错误

时间:2021-07-14 14:28:08

标签: c

我的蛇游戏有问题(在 c - 代码块中)。

大多数时候,它不会产生果实。此外,当蛇(“+”)与水果(“*”)进入同一行时,它突然开始窃听(不知道如何描述它,只需尝试代码)。

请详细说明问题,以免我犯同样的错误两次。 (我是自学的,所以我需要了解这一点才能继续学习并希望成为一名软件工程师)。

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <unistd.h>

int fruit = 0;
int snake_row = 9;
int snake_column = 21;
int fruit_row;
int fruit_column;
int move;
int gameover = 0;

void draw(){
    sleep(0.9);
    system("cls");
    if (move==1)
        snake_row--;
    if (move==2)
        snake_column--;
    if (move==3)
        snake_row++;
    if (move==4)
        snake_column++;
    if (snake_row<1 || snake_row>19 || snake_column<1 || snake_column>43)
        gameover++;

    if (snake_row!=fruit_row){
    printf(" ___________________________________________");
    for (int i = 0; i<19; i++){
        if (i==fruit_row){
            printf("\n|");
            for (int j = 1; j<fruit_column; j++)
                printf(" ");
            printf("*");
            for (int j = 0; j<43-fruit_column; j++)
                printf(" ");
            printf("|");
        }
        else if (i==snake_row){
            printf("\n|");
            for (int j = 1; j<snake_column; j++)
                printf(" ");
            printf("+");
            for (int j = 0; j<43-snake_column; j++)
                printf(" ");
            printf("|");
        }
        else
            printf("\n|                                           |");
        }
    }else if (snake_row==fruit_row){
    printf(" ___________________________________________");
    for (int i = 0; i<19; i++){
        if (i==fruit_row){
            printf("\n|");
            if (fruit_column<snake_column){
            for (int j = 1; j<fruit_column; j++)
                printf(" ");
            printf("*");
            for (int j = 1; j<snake_column-fruit_column; j++)
                printf(" ");
            printf("+");
            for (int j = 1; j<42-snake_column; j++)
                printf(" ");
            printf("|");
        }else if (snake_column>fruit_column){
            for (int j = 1; j<snake_column; j++)
                printf(" ");
            printf("+");
            for (int j = 1; j<fruit_column-snake_column; j++)
                printf(" ");
            printf("*");
            for (int j = 1; j<42-fruit_column; j++)
                printf(" ");
            printf("|");

        }
        else{
            fruit = 0;
            for(int j = 1; j<snake_column; i++)
                printf(" ");
            printf("+");
            for(int j = 1; j<43-snake_column; i++)
                printf(" ");
            printf("|");
        }

        }
        else
            printf("\n|                                           |");
        }

    }
    printf("\n---------------------------------------------\n");

}

void set_stage(){

    if (fruit == 0){

    srand(time(0));

    int fruit_position = (rand()*rand())%860;

    fruit_row = fruit_position/19;
    fruit_column = fruit_position%43;
    fruit++;
    }
    draw();

}

void input(){

    if (kbhit()){

        switch(getch()){

            case 'w':
                move=1;
                break;

            case 'a':
                move=2;
                break;

            case 's':
                move=3;
                break;

            case 'd':
                move=4;
                break;
            default:
                break;

        }


    }

}


int main()
{
    while (gameover==0){

    set_stage();
    input();

    }
    return 0;
}

0 个答案:

没有答案
相关问题