Witam, postanowiłem napisać prostą grę "snake" i napotkałem pewien problem, otóż podczas odświeżania się ekranu po każdym ruchu na tle planszy pojawiają się migoczące kreski, które po chwili znikają. Co może być tego przyczyną? Poniżej zamieszczam kod programu.
PS: Kod jest w wersji roboczej, nie jest jeszcze dopracowany, ale chcę rozwiązać problem w zarodku.
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <time.h>
#include <windows.h>
using namespace std;
string direction()
{
int key=getch();
key+=getch();
if(key==296) return "up"; //gora
else if(key==304) return "down";//dol
else if(key==299) return "left";//lewo
else if(key==301) return "right";//prawo
}
void idzdoxy(int x, int y)
{
HANDLE hCon;
COORD dwPos;
dwPos.X=x;
dwPos.Y=y;
hCon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hCon, dwPos);
}
void boardDraw(string board[30][30])
{
for(int i=0;i<30;i++)
{
for(int j=0;j<30;j++) cout<< board[i][j];
cout<<endl;
}
}
void point(string board[30][30])
{
int x = rand() % 28 + 1;
int y = rand() % 28 + 1;
board[x][y]="* ";
}
void snake(string board[30][30], string &direct, int &snakeCordX, int &snakeCordY, int &size,int XHistory[100000], int YHistory[100000], int &nmb, bool &pointExist)
{
XHistory[nmb]=snakeCordX;
YHistory[nmb]=snakeCordY;
nmb++;
if(direct=="up")
{
snakeCordX--;
}
else if(direct=="down")
{
snakeCordX++;
}
else if(direct=="left")
{
snakeCordY--;
}
else if(direct=="right")
{
snakeCordY++;
}
//get point
if(board[snakeCordX][snakeCordY]=="* ")
{
size++;
pointExist=0;
}
//game over
if(board[snakeCordX][snakeCordY]=="--"||board[snakeCordX][snakeCordY]=="|"||board[snakeCordX][snakeCordY]=="x ")
{
cout<<"przegrales ;(";
system("pause");
}
board[snakeCordX][snakeCordY]="x ";
board[XHistory[nmb-size]][YHistory[nmb-size]]=" ";
}
int main()
{
srand(time(NULL));
string direct="up";
int snakeCordX=15;
int snakeCordY=15;
bool pointExist=0;
int nmb=0;
int size=1;
int XHistory[100000];
int YHistory[100000];
//tablica
string board[30][30];
for(int i=0;i<30;i++)
{
for(int j=0;j<30;j++) board[i][j]=" ";
cout<<endl;
}
//snake generator
board[snakeCordX][snakeCordY]="x ";
//ramka
for(int i=0;i<30;i++) board[0][i]="--";
for(int i=0;i<30;i++) board[29][i]="--";
for(int i=0;i<30;i++) board[i][0]="|";
for(int i=0;i<30;i++) board[i][29]="|";
cout<<endl;
cout<<endl;
for(;;)
{
//system("cls");
idzdoxy(0, 0);
boardDraw(board);
if(kbhit())direct = direction();
snake(board, direct, snakeCordX, snakeCordY, size, XHistory, YHistory, nmb, pointExist);
if(!pointExist)
{
point(board);
pointExist=1;
}
Sleep(100);
}
getch();
return 0;
}