• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

migotające kreski w programie

0 głosów
184 wizyt
pytanie zadane 20 stycznia 2019 w C i C++ przez walkorn Nowicjusz (120 p.)

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;
}

 

1 odpowiedź

0 głosów
odpowiedź 21 stycznia 2019 przez inczyk Początkujący (410 p.)
Hmm... u mnie nie pojawiały się żadne kreski. Chodzi Ci o to, że po odświeżeniu, niektóre elementy ramki znikają i natychmiastowo się pojawiają?
komentarz 22 stycznia 2019 przez walkorn Nowicjusz (120 p.)
Problem już rozwiązany, migające kreski były odświeżającym się kursorem. Użyłem funkcji na jego ukrycie i problem się rozwiązał ;)

Podobne pytania

0 głosów
1 odpowiedź 195 wizyt
pytanie zadane 27 kwietnia 2019 w Sprzęt komputerowy przez Błażej Stochmal Początkujący (370 p.)
0 głosów
1 odpowiedź 140 wizyt
0 głosów
2 odpowiedzi 757 wizyt
pytanie zadane 14 grudnia 2015 w C i C++ przez Klasyczny Użytkownik (610 p.)

93,604 zapytań

142,526 odpowiedzi

322,993 komentarzy

63,087 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...