Portál AbcLinuxu, 30. dubna 2025 18:44
Poslední dobou jsem trochu omezil seriály a začal programovat. Naučil jsem se trochu Qt 4; napsal jsem dvě hry.
Nejdřív jsem napsal fifteen, bylo to pro mě docela nový... sice už jsem se v Qt 4 něco snažil napsat někdy dřív, ale vzdal jsem to, protože jsem neměl dost zkušeností a nevěděl jsem si rady. Takže jsem se vždycky na něčem zasekl a dvě hodiny hledal co s tím Každopádně nakonec jsem to dal dohromady i s podporou libovolně velkých boardů... Ale bacha, evidentně to umístění tlačítek nemůžu dělat úplně náhodně, takže polovina her co to vygeneruje nejde dohrát, takže pokud vás někdo naštve, nechte ho zahrát si...
A následovaly piškvorky. Netušil jsem, že z toho vypukne taková herní mánie, ale co už. Tady bylo nejtěžší napsat gameover-check... Celkově to bylo složitější, musel jsem implementovat vlastní paintEvent a mousePressEvent. Nakonec jsem to ale nějak uplácal, i když s tím gameoverem nejsem úplně spokojenej... Nicméně funguje.
Co bude dál? No, dál jsem si říkal, že bych napsal hada (Snake z Nokie). Kámoš navrhnul ať napíšu "kurvy", tj. v podstatě multiplayer hada - kdo první nabourá, ten prohrál. Volitelně se budou dát procházet zdi a přemýšlel jsem o tom, že bych se naučil Qt síťování a napsal i síťovej multiplayer.
Uvítám věcný připomínky ke kódu. Psal jsem to celý ručně (nepoužíval jsem Qt Designer), abych se to naučil.
Git repa:
web: http://git.watzke.cz/?p=piskvorky.git;a=summary git: git://git.watzke.cz/piskvorky.git web: http://git.watzke.cz/?p=fifteen.git;a=summary git: git://git.watzke.cz/fifteen.git
Update: V Gitu piškvorek už je podpora pro libovolně velký boardy. V Gitu fifteen je opravená hra 4x4 a ten board je tam prozatím napevno (protože s jinýma generuje furt blbý hry). Už to generuje řešitelný hry na všech boardech
Tiskni
Sdílej:
SVN nestačí
To mě zajímá, pročpak nestačí?
ten github vypadá ok.Já jsem ti to říkal
00001 00001 00001 00001 00001
cat piskvorky | tr -d '\n' | grep -E '1.{4}1.{4}1.{4}1.{4}1'
{4} v regexpu se meni podle velikosti hraci plochy a hledaneho smeru
struct cell { cell* top; cell* bottom; cell* left; cell* right; cell* sikmo; ... int hrac; }
11111 00000 00001 00001 00001
cat tvuj_vstup | tr -d '\n' | grep -E '1.{0}1.{0}1.{0}1.{0}1'
00011 11100 00000 00000 00000
uvítám věcný připomínky ke kódu
v MainWindow::newGame(), nepomuze to resize( sizeHint()) vic nahore s tim FIXME? Nebo mozna explicitni activate() na layoutu? Nevim, co tohle presne je, ale tyhle druhy problemu se tak obvykle resi.Zkusil jsem dát resize hned za vytvoření boardu a za to ještě layout->activate(), ale nepomohlo to. Je to tam z toho důvodu, že když člověk vytvoří velkej board a potom menší, zůstane mu bez toho velký okno.
Vyřešeno v Gitu... to poslední teda zatím (doufám) funguje jen pro 4x4 boardy, takže jsem ten spinbox zatím schoval.
- jestli jsem neco neprehledl, tak 'QPoint* path;' staci proste 'QPoint path;' a pouzivat to hodnotou. Nemusi se pak resit nejake alokace nebo (jako tady) chybejici delete v destruktoru.
- 'size(-1)' mi prijde jako strasne zavadejici kus kodu
- 'int Board::size() const'
- 'QPair<QRect,Owner>(...)' - 'qMakePair(...)'
- polovina vsech moznych zadani patnactky nema reseni, proto se po generovani bud kontroluje resitelnost, nebo se to rovnou rozhazi systemem, ktery to necha resitelne. Urcite to pujde najit ve Wikipedii nebo Googlem.
qMakePair<QRect,Owner>(..
- zkus vynechat template parametry, tzn. qMakePair(...
, tipuju, že to funguje stejně jako std::make_pair
, tzn. že kompilátor si ty template parametry vydedukuje jednoznačně z parametrů funkce, což je dobré, protože je otrava tam ty parametry psát (a taky myslím, že přesně tak to myslel Luboš Luňák)
vim ~/.emacs
new
na vytváření objektů?
Pěkné piškvorky! Jěště bych k nim udělal CMakeLists.txt Nedávno jsem dostal přibližně stejný nápad (naučit se Qt a napsat v něm piškvorky). Dokonce jsem kvůli nim vytvořil projekt na SourceForge -- http://ttt-game.sf.net/
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.