Page 1 of 1

divas primitīvas spēles

Posted: 18 Jun 2012, 17:49
by kristapuciitis
Sveiki!
Es atkal ielikšu divas spēlītes. Es piekopu, manuprāt, salasāmāku koda stilu nekā iepriekš, ja varat, tad, lūdzu, novērtējiet to! =)

Re: divas primitīvas spēles

Posted: 20 Jun 2012, 18:02
by ArtisDz
Varēji jau kādu ekrānšāviņu ielikt Ne-Windows OS lietotājiem.. :)

Re: divas primitīvas spēles

Posted: 20 Jun 2012, 20:01
by zivs
Gribēju intereses pēc paļurināt, bet tā arī beigās atarhivējot saturu, tā arī nesapratu, uz ko es vispār skatos un kas ir jādara! :mrgreen:

Re: divas primitīvas spēles

Posted: 20 Jun 2012, 20:16
by sunder
Nu vienkāršas c++ spēlītes, kas tur ko nesaprast?
Atverot vaļā jau būtu jābut skaidram ko tu gribi - vai palaist (to var darīt laikam debug/,,,,.exe), vai papētīt pašu kodu( atverot .sln vai pa daļām .cpp un .h)
Ja būs vēlme un laiks ķerties pie c++, tad šie var būt pat noderīgi lai papētītu kā lietas strādā. Kods itkā viegli lasāms, tik būtu noderējuši vel teikumu gari komentāri katrai funcijai un tad jau pa visam labi būtu.

Re: divas primitīvas spēles

Posted: 22 Jun 2012, 16:23
by Dee
Kods izskatījās labs! Man tikai likās jocīgi, ka abas spēles notiek uz 2d grid, bet Level::mCells ir viendimensīju masīvs un Tu tam piekļūsti ar mCells[y * width + x]. Nu tas varbūt ir gaumes jautājums, taču man šķiet ka divdimensīju masīvu ir ērtāk izmantot šādā situācijā. (Cell mCells[width][height]; definē un ar mCells[x][y] piekļūst)

Un vēl pāris ieteikumi, ja nolemsi turpināt veidot šīs spēles:
*) Minesweeperā prasās iespēja spiežot abas peles pogas atvērt visus neatzīmētos lauciņus ap izvēlēto, ja vien ir pietiekami daudz atzīmētio lauciņu. (nu tā kā tas ir klasiskajā minesweeper)
*) Memory derētu vairāk krāsu, jo citādi ir pārāk viegli to iziet un nav interesanti.
*) Abās spēlēs sākās gljuki kad palielina vai samazina window.
*) Derētu kkāds menu kur var izvēlēties grūtības pakāpi utt.

P.S. Sākumā nevarēju palaist nevienu spēli, jo man trūka 2 dll ("msvcp100d.dll" un vel kkads msv...). Šo problēmu atrisināju dll nolādējot no http://www.dll-files.com.

Re: divas primitīvas spēles

Posted: 23 Jun 2012, 13:19
by kristapuciitis
Paldies par atbildēm!
Minesweeperā prasās iespēja spiežot abas peles pogas atvērt visus neatzīmētos lauciņus ap izvēlēto
Es par tādu iespēju pat nezināju! :D
Pie šīm spēlītēm vairs neplānoju atgriezties, tādēļ krāsas vairāk nepielikšu, bet tas nav sarežģīti.
Kad resize window un rodas stulbums- tā ir SFML problēma, gan jau ka var pašam to visu handle, bet nav vajadzības, citos multimedia API nav atļauts resize.
Par to, ka 2D grid tiek glabāts kā 1D masīvs- es tā esmu pieradis, un man tā ir ērtāk, jo, piem., minesweeperā līmeņu ģeneratorā, man vajadzētu arī rakstīt liekus statementus un uzglabāt 2 mainīgos x un y. Tagad ir tā:

Code: Select all

while (mCells[c].IsMine())
{
	c--;
	if (c == 0)
		c = mWidth * mHeight - 1;
}
Bet būtu tā:

Code: Select all

while (mCells[x][y].IsMine())
{
	x--;
	if (x == -1)
	{
		x = mWidth - 1;
		y--;
		if (y == -1)
		{
			y = mHeight - 1;
		}
	}
}
Vajag lieki rakstīt vairāk rindu, kā arī jādomā, kā nosaukt x un y, ja vienlaicīgi vajadzēs zināt vairākas rūtiņas.

Re: divas primitīvas spēles

Posted: 23 Jun 2012, 23:54
by bubu
kristapuciitis wrote:Paldies par atbildēm!
Kad resize window un rodas stulbums- tā ir SFML problēma, gan jau ka var pašam to visu handle, bet nav vajadzības, citos multimedia API nav atļauts resize.
SFML Window un RenderWindow klašu konstruktoriem ir style parametrs, kurā tu vari norādīt, ka negribi resaizojamu logu. Pēc noklusējuma šis parametrs pieņem Style::Default enuma vērtību, kas iekļauj loga resaizojamību. Ja tur padosi Style::Default & ~Style::Resize, tad logs nebūs resaizojams.

Izplatīt Debug buildus nav kūl. Tie nestrādās cilvēkiem, kuriem nav uzinstalēta tieši tāda pati Visual Studio versija ka tev. Labāk kompilēt un izplatīt Release buildu. Un tikai exe failu, nevis kaudzi ar obj un citiem studijas kompilētajiem failiem, lai ir mazāks izmērs.

Lai taupītu CPU laiku, un lieki nenosologotu CPU uz 100%, tev vajag:
1) window.PollEvent(Event) vietā vajag rakstīt window.WaitEvent(Event);
2) window.Clear/level.Draw/window.Display izsaukt tikai tad, ja ir noticis interesējošs events (peles nospiediens)
Alternatīvi - var ieslēgt vsync: window.setVerticalSyncEnabled(true);

Citādi - kā palaižu tavu mainswīperi, tā mans laoptops sāk griezt ventilatorus uz pilnu jaudu.