migotanie ekranu w konsoli

0

Witam, programuje w c++ od 3 lat z przerwami i teraz potrzebuje pomocy jak zredukowac miganie w konsoli- petli "gry".

#include "plansza.h"
int main()
{
	przygotuj_plansze();
	
	while(1)
	{
	sterowanie();
	plansza();
	Sleep(60);
	}
}
//plansza.h"
#include "biblioteki.h"
const int rozmiar1=18;
const int rozmiar2=60;
int a,b;
char map[rozmiar1][rozmiar2];
int s1=41;
int s2=40;
int s3=42;
int klawisz=100;
void sterowanie();
void plansza();
void przygotuj_plansze();
void przygotuj_plansze()
{
	for(a=0;a<rozmiar1;a++)
	{
		for(b=0;b<rozmiar2;b++)
		{
			map[a][b]=' ';
			
			if(b==rozmiar2<1)
				cout<<endl;
			cout<<map[a][b];
		}
	}
	for(a=1;a<rozmiar1;a++)
	{
		map[a][1]='|';
	}
	for(a=0;a<rozmiar1;a++)
	{
		map[a][0]=' ';
	}
map[0][0]=map[0][1]=map[0][rozmiar2-1]=' ';
}
void plansza()
{
		system("cls");
	for(a=0;a<rozmiar1;a++)
	{
		for(b=0;b<rozmiar2;b++)
		{
			map[a][rozmiar2-1]='|';
			if(b==rozmiar2<1)
				cout<<endl;
			cout<<map[a][b];
		}
		map[16][s1]='^';
		map[17][s2]='<';
		map[17][s3]='>';
	}
}
void sterowanie()
{
	if(_kbhit())
	{
		klawisz=_getch();
		if(klawisz==75)
		{
			if(s1>2&&s2>2&&s3>2)
			{
		map[16][s1]=' ';
		map[17][s2]=' ';
		map[17][s3]=' ';
		--s1;
		--s2;
		--s3;
		map[16][s1]='^';
		map[17][s2]='<';
		map[17][s3]='>';
			}
		}
		else if(klawisz==77)
		{
			if(s1<58&&s2<58&&s3<58)
			{
		map[16][s1]=' ';
		map[17][s2]=' ';
		map[17][s3]=' ';
		++s1;
		++s2;
		++s3;
		map[16][s1]='^';
		map[17][s2]='<';
		map[17][s3]='>';
			}
		}
	}
}
//biblioteki.h
#include <iostream>
#include <conio.h>
#include <Windows.h>
using namespace std;

jak widac "gra" dopiero powstaje i nawet nie jest obiektowa, to jest pelny kod. Nie mam pojecia jak uzyc buffora ;/
tu cos jest http://cpp0x.pl/forum/temat/?id=7175
tu pan na koncu cos napisal ale tez nie wiem jak sie do tego zabrac http://forum.ks-ekspert.pl/topic/91322-cpodwojne-buforowanie/

0

http://stackoverflow.com/questions/10615042/how-to-update-refresh-console-screen

tl;dr:

  1. Zrob tablice charow NxM, gdzie N i M to wymiary konsoli, dzialaj na tej tablicy, a nastepnie calosc wypluwaj na ekran.
  2. Napisz to za pomoca WinAPI (Zakladam, ze autor korzysta z jedynego slusznego systemu operacyjnego)
  3. Napisz to przy uzyciu sensownych bibliotek typu ncurses.
0

http://stackoverflow.com/quest[...]-update-refresh-console-screen fajne, ale dalej nie wiem jak tego uzyc (tak walczylem w kodzie...). Rzecz, ktora mi popronujesz, zebym uzyl nie jest na moim poziomie :( nie hate'ujcie mnie tylko bo tak nie ladnie ...

0
klawir napisał(a):

Rzecz, ktora mi popronujesz, zebym uzyl nie jest na moim poziomie ...
Skoro masz poziomy to zostań przy poziomie "Hello world"

0

"programuje od 3 lat w c++"
"nie jest na moim poziomie"

...

co do tematu. Mozesz zrobic jeszcze jedno ktore powinno byc na Twoje mozliwosci i zredukuje migotanie.
Nie czysc ekranu!
Trzymaj w vectorze/tablicy pozycje Twojej mapy, trzymaj takze aktualna pozycje kursora na tej mapie. Jezeli cos zmienisz to nadpisz po prostu jeden element zamiast rysowac od poczatku. (to samo Ci napsial @n0name_l ale moze nie zrozumiales)

jak to jest dla Ciebie powyzej zatrudne to mozesz zrobic to jeszcze

  • rysuj JEDYNIE po wykonaniu ruchu. sprawdzasz czy znak ruchu byl, ustawiasz jakas flage na '"ruch = true" w petli w main sprawdzasz czy byl ruch, jezeli tak rysujesz od poczatku i ustawiasz ruch na false (3 instrukcje do Twojego obecnego kodu)

1 użytkowników online, w tym zalogowanych: 0, gości: 1