Проблема, которую я получаю, заключается в том, что всякий раз, когда к телу добавляется новая буква «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();
}