0

这是一个相当简单的蛇游戏。它只是被绞死。当我尝试执行它时,它会运行一段时间,然后在某些时候挂起。请告诉我该怎么办?这是 Turbo C++ 3.0 版,请不要告诉我使用新版本。别说我过时了,我知道。

#include<conio.h>
#include<iostream.h>
#include<dos.h>
#include<graphics.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int x,y,a,b,flag,i,discx,discy,sc,maxx,maxy,same;
short int arr[100][2];
char ch,check;
void shift();
int introscreen();
void condition();
void gameover();
void score();
void randomapple();

int introscreen()
    {
     outtextxy(maxx/2,30,"SNAKE");
     outtextxy((maxx/2)-10,50,"INSTRUCTIONS");
     outtextxy(5,70,"W A S D represent Top Right Bottom Left respectively.");
     outtextxy(5,90,"Press Spacebar to quit any moment");
     outtextxy(5,110,"To play Press Space else anything else");
     char take=getch();
     if(take==' ')
     return 1;
     else
     return 0;
     }
void randomapple()
{same=0;
while(1)
{
 a=random(maxx-5);
 b=random(maxy-5);
 for(i=0;i<flag;i++)
 {if((abs(a-arr[i][0]<=5)&&abs(b-arr[i][1]<=5))||a<=5||b<=5)
  same=1;
 }
 if(same==0) break;
 }
 setcolor(RED);
 outtextxy(a,b,"0");
 setcolor(WHITE);
}
void shift()
    {discx=arr[flag-1][0];
     discy=arr[flag-1][1];
     for(i=flag-1;i>0;i--)
        {
         arr[i][0]=arr[i-1][0];
         arr[i][1]=arr[i-1][1];
         }
     arr[0][0]=x;
     arr[0][1]=y;
     }
void printsnake()
    {
     setcolor(BLACK);
     outtextxy(discx,discy,"X");
     setcolor(GREEN);
     outtextxy(x,y,"X");
     setcolor(RED);
     outtextxy(a,b,"0");
     rectangle(0,0,maxx,maxy);
     delay(5);
    }
void condition()
    {
     switch(ch)
        {
         case'd':x++;
             break;
         case'a':x--;
             break;
         case'w':y--;
             break;
         case's':y++;
             break;
         case' ':exit(1);

        }
     }
    void score()
    {if((abs(x-a)<=5)&&(abs(y-b)<=5))
     {sc++;
     if(flag<500)
     flag=flag+10;
     setcolor(BLACK);
     outtextxy(a,b,"0");
     randomapple();
     }

    if(sc==100)
    {
        clrscr();
        cout<<"You are the champion tonight!!!!";
        getch();
        exit(1);
    }
    }
void collision()
    {
     if(x<=5||y<=5||maxx-x<=5||maxy-y<=5)
     gameover();
     for(i=1;i<flag;i++)
     {
      if(arr[0][0]==arr[i][0]&&arr[0][1]==arr[i][1])
      gameover();
     }
    }
void gameover()
    {textcolor(BLACK);
     clrscr();
     textcolor(WHITE);
     cout<<"YOU LOSE!\n";
     cout<<"GAME OVER\n";
     cout<<"Final Score = "<<sc;
     getch();
     getch();
     getch();
     getch();
     exit(1);
    }
void main()
    {
     randomize();
     int gdriver = DETECT, gmode, errorcode;
     /* initialize graphics mode */
     initgraph(&gdriver, &gmode, "");
     maxx=500;
     maxy=400;
     x=maxx/2;
     y=maxy/2;
     ch='d';
     sc=0;
     if(introscreen())
     {
     textcolor(BLACK);
     clrscr();
     rectangle(0,0,maxx,maxy);
     flag=20;
     setcolor(GREEN);
     for(i=19;i>=0;i--)
     {arr[i][0]=x-i;
      arr[i][1]=y-i;
      outtextxy(x-i,y-i,"X");
     }
     setcolor(WHITE);
     randomapple();
     while(1)
     {
        if(kbhit())
        {
            check=getch();
            switch(check)
            {
            case 'a':if(ch!='d') ch=check;
                break;
            case 'd':if(ch!='a') ch=check;
                break;
            case 'w':if(ch!='s') ch=check;
                break;
            case 's':if(ch!='w') ch=check;
                break;
            case ' ':ch=check;
                break;
            }

        }
        condition();
        shift();
        printsnake();
        collision();
        score();
     }
     }

    }
4

1 回答 1

3

据我所知,问题在于 randomapple 函数。如果您仔细观察它,如果您将 same 设置为 1,那么它将永远保持为 1。您应该在那段时间的每次迭代中重置它。

于 2013-01-17T14:32:37.843 回答