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

migotające kreski w programie

Object Storage Arubacloud
0 głosów
110 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ź 125 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ź 98 wizyt
0 głosów
2 odpowiedzi 537 wizyt
pytanie zadane 14 grudnia 2015 w C i C++ przez Klasyczny Użytkownik (610 p.)

92,550 zapytań

141,394 odpowiedzi

319,522 komentarzy

61,935 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...