Executie simultana de cod

Intrebari despre limbajul C++/CLI (si versiunile mai vechi MC++), applicatii mixed-mode sau probleme specifice .NET legate de C++.
Post Reply
Andrei Marcoci
Junior
Junior
Posts: 3
Joined: 29 May 2009, 23:01
Judet: Braşov

Executie simultana de cod

Post by Andrei Marcoci » 10 Nov 2009, 19:51

Salut, am inceput de cateva zile sa lucrez la un fel de joc sub Windows Forms. Jocul e simplu, se afiseaza pe ecran cate un caracter care se tot deplaseaza in jos(pica), iar jucatorul trebuie sa apeseze in timp pe tasta corespunzatoare.
Problema e ca nu stiu cum sa fac si (re)afisarea ferestrei, si sa pot apela in acelasi timp si alte metode (cum ar fi keyDown(...) pentru un textBox)
Am ajuns la ceva de genul asta

Code: Select all

//diverse initializari inainte

// portiunea de cod care ar trebui sa fie activa pana cand apelez joc->stop()
double timpScurs = 0;
clock_t momentUltDeplasare, momentActual;

momentUltDeplasare = clock()-10;
while (!joc->final)
{
	//calculez timpul scurs de la ultima modificare a pozitiei caracterului pe ecran
	momentActual = clock();
	timpScurs = (double(momentActual)-double(momentUltDeplasare))/CLOCKS_PER_SEC;

	// ma asigur ca nu modific pozitia caracterului decat daca a trecut un anumit interval de timp de la ultima modificare
	if (timpScurs > 1/10*joc->nivel )
	{
		//daca obiectul car se afla in Suprafata de joc (SJoc)
		if (car->getY() < SJoc->Size.Height)
		{
			car->incY();
			momentUltDeplasare = clock();
		}
		//generez un nou caracter
		else
			newCar();

		//de fiecare data cand modific pozitia caracterului, reafisez suprafata de joc
		SJoc->Refresh();
	}

	//aici ar urma citirea caracterului in textBox, si compararea cu valoarea de pe ecran
	if ( tBoxCentral->Text->Contains(Convert::ToString(car->getVal() ) ) )
	{
		tstCorect();
		newCar();
		SJoc->Refresh();
	}
	else
		tstGresit();
}
Unde ar trebui sa introduc codul asta oare? Nu ma pricep, e un fel de multithreading? sper ca ceva mai simplu
Multumesc mult pentru ajutor



User avatar
Marius Bancila
Fondator
Fondator
Posts: 2344
Joined: 11 Jul 2007, 11:45
Judet: Timiş
Location: Timisoara
Contact:

Re: Executie simultana de cod

Post by Marius Bancila » 10 Nov 2009, 22:57

E posibil sa poti folosi si timere si multi-threading. Depinde exact de ce vrei sa faci. Eu as zice sa ne explici putin mai amanuntit partea asta si o sa incercam sa ne facem o idee de care ar fi solutia cea mai buna.
Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog

Andrei Marcoci
Junior
Junior
Posts: 3
Joined: 29 May 2009, 23:01
Judet: Braşov

Re: Executie simultana de cod

Post by Andrei Marcoci » 10 Nov 2009, 23:28

Atasez un screen cu design-ul form-ului
Image
Hm, cand apas pe start, ar trebui ca in zona libera din dreapta sa imi deseneze o elipsa (pornind de sus -> y=0) care merge in jos.
Prima data am pus portiunea aia de cod din mesajul anterior in metoda Click() asociata butonului de start, dar aici se bloca, pentru ca nu termina de executat niciodata functia, deci nu puteam sa mai dau vreun click pe form, nimic.
Asta vroiam sa aflu, cum pot sa fac ca acel cod sa ruleze permanent(deci sa imi deseneze mereu cate o elipsa) si totusi sa pot sa si introduc caractere in textBox-ul ala activat(alb).
Nu ma pricep la multi-threading, dar incerc sa inteleg orice-mi explicati:D

User avatar
Marius Bancila
Fondator
Fondator
Posts: 2344
Joined: 11 Jul 2007, 11:45
Judet: Timiş
Location: Timisoara
Contact:

Re: Executie simultana de cod

Post by Marius Bancila » 11 Nov 2009, 00:45

Solutia cea mai simpla ar fi un timer, in a carui handler sa recalculezi pozitia elipsei si apoi sa invalidezi zona de desenat.

Solutia cea mai flexibila daca ai mai multe entitati care se misca separat (independent) ar fi bazata pe multi-threading, in care sa ai cate un worker thread pentru fiecare entitate, fiecare notificand thread-ul principal de modificare pozitiei astfel incat zona de desenat sa se updateze.

Eu as incerca prima data varianta cu timer-ul.
Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog

Andrei Marcoci
Junior
Junior
Posts: 3
Joined: 29 May 2009, 23:01
Judet: Braşov

Re: Executie simultana de cod

Post by Andrei Marcoci » 12 Nov 2009, 22:12

Ok, mersi pentru raspuns, am inceput sa citesc despre amandoua. Cel mai probabil mai revin cu vreo intrebare, curand:D

Post Reply