Я пытался закодировать игру змея, и игра работает отлично. У меня только одна ошибка, и я не могу выяснить причину - PullRequest
0 голосов
/ 18 марта 2020

Проблема, которую я получаю, заключается в том, что всякий раз, когда к телу добавляется новая буква «S», она не стирается с экрана, а появляется там. Я пробовал разные подходы, но не получил идеальных результатов.

Я дал код, и проблема ясно видна при запуске программы. Пожалуйста, помогите мне и предложите некоторые методы для улучшения кода и производительности. Это мой первый проект, и любая помощь будет полезна.

#include<iostream.h>
#include<conio.h>
#include<dos.h>
#include<process.h>
#include<stdlib.h>
#define UP 72
#define DOWN 80
#define LEFT 75
#define RIGHT 77
int X[50]={0},FX;
int Y[50]={0},FY;
int DIR=RIGHT;
int gameover=0;
int score=0;
int count=0;
void welcome()
{
   for(int i=1;i<10;i++)
   {
      gotoxy(25,i);
      cout<<"!!! Welcome to SNAKE GAME !!!";
      delay(300);
      clrscr();
   }
   gotoxy(25,10);
   cout<<"!!! Welcome to SNAKE GAME !!!";
   getch();
}
void end()
{
   gotoxy(30,10);
   cout<<"#Thanks for playing";
   getch();
}
int genrandom()
{
   return ((rand()%(39-4+1))+4);
}
void fruit()
{
   FX=genrandom();
   FY=FX/2;
   gotoxy(FX,FY);
   cout<<"F";
}
void box()
{
   int i;
   for(i=0;i<20;i++)
   {
      cout<<"# ";
   }
   cout<<"\n";
   for(i=0;i<19;i++)
   cout<<"#                                     #\n";
   for(i=0;i<20;i++)
   {
      cout<<"# ";
   }
}
void start()
{
   srand(time(0));
   box();
   X[0]=genrandom();
   Y[0]=(X[0]/2);
   gotoxy(X[0],Y[0]);
   cout<<"&";
   fruit();
   getch();
}
void play()
{
int ch,preX,preY,i;
   while(gameover==0)
   {
       while(!kbhit())
       {
       delay(150);
       for(i=count;i>0;i--)
       {
           X[i]=X[i-1];
           Y[i]=Y[i-1];
       }
       preX=X[count];
       preY=Y[count];
       if(DIR==UP)
       Y[0]--;
       if(DIR==DOWN)
       Y[0]++;
       if(DIR==RIGHT)
       X[0]=X[0]+2;
       if(DIR==LEFT)
       X[0]=X[0]-2;
       if(X[0]==1||X[0]==39||Y[0]==1||Y[0]==21)
       {
           gameover=1;
           clrscr();
           gotoxy(30,10);
           cout<<"YOU LOST";
           break;
       }
       if((FX==X[0]||FX==X[0]+1||FX==X[0]-1)&&FY==Y[0])
       {
          gotoxy(FX,FY);
          cout<<" ";
          score=score+10;
          gotoxy(42,1);
          cout<<"Score: "<<score;
          fruit();
          count++;
          if(DIR==UP)
          {
         Y[count]=Y[count-1]+1;
          }
          if(DIR==DOWN)
          {
         Y[count]=Y[count-1]-1;
          }
          if(DIR==RIGHT)
          {
         X[count]=X[count-1]-1;
          }
          if(DIR==LEFT)
          {
         X[count]=X[count-1]+1;
          }
       }
       for(i=0;i<=count;i++)
       {
           gotoxy(X[i],Y[i]);
           cout<<"S";
       }
       gotoxy(preX,preY);
       cout<<" ";
       }
       ch=getch();
       if(ch==88||ch==120)
       {
       gameover=1;
       break;
       }
       else
       DIR=ch;
   }
}
void main()
{
   clrscr();
   welcome();
   clrscr();
   start();
   play();
   getch();
   clrscr();
   end();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...