Obsah:
- Krok 1: Materiály
- Krok 2: Seznamte se s programem - rada
- Krok 3: Seznamte se s programem - dlaždice
- Krok 4: Seznamte se s programem - hrou
- Krok 5: Důležité metody - pohyb
Video: Naprogramujte si vlastní hru 2048 s Javou !: 8 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:18
Od PranP1My (neúplné) stránkyDalší od autora:
Miluji hru 2048. A tak jsem se rozhodl naprogramovat vlastní verzi.
Je to velmi podobné skutečné hře, ale samotné programování mi dává svobodu změnit, co chci, kdykoli chci. Pokud chci místo typického 4x4 hru 5x5, jednoduchá změna pomocí konstruktoru 'Board' mi to umožní. Řekněme, že chci hru ztížit a přidávat figurky na pozice, které ji pro hráče budou nejkomplikovanější než náhodně. Pomocí jednoduchého algoritmu to dokážu. I když nebudu pokrývat všechny tyto úpravy v tomto Instructable, mám v plánu přidávat další, jak jdu.
Prozatím však naprogramujeme vaši typickou hru 2048.
Začněme!
(A postranní poznámka: Tento Instructable vyžaduje mírné znalosti programování - konkrétně s Javou)
Krok 1: Materiály
Pro tento projekt nebudete potřebovat mnoho, protože je to jen návod k programování.
Materiály:
- Notebook
- Eclipse (nebo jakékoli IDE podle vašeho výběru)
Ano. A je to.
Krok 2: Seznamte se s programem - rada
Nahrál jsem celý svůj kód na GitHub - podívejte se sem:
Hru jsem rozdělil do 3 tříd: Board, Tile a Game.
Prkno:
Popis: Třída Board se zabývá herním plánem, nastavením řady prvků 'Tile', získáním aktuálního skóre a nejvyššího žetonu a vložením pole do řetězce (bude použito později v 'Game'). Většina logiky je také zde, třída poskytuje metody pro rozmnožování dvojek a čtyřek na náhodných místech, pohyb nahoru, dolů, doleva a doprava a informování hráčů, když hra skončí.
Konstruktéři:
/ * Výchozí konstruktor pro desku - nastaví matici 4x4 */
veřejná rada () {…}
/ * Constructor for the Board - nastaví matici se zadanou velikostí mřížky */
public Board (int grids) {…}
Metody:
/ * Metoda Getter, která vrací desku */
veřejná dlaždice getBoard () {…}
/ * Metoda Getter, která vrací skóre */
public int getScore () {…}
/ * Najde nejvyšší dlaždici na hrací ploše a vrátí ji */
public int getHighTile () {…}
/ * Vytiskne desku na konzolu - pro účely testování */
veřejný prázdný tisk () {…}
/ * Vrací desku jako řetězec - používá se v GUI */
public String toString () {…}
/ * Umístí 2 (nebo 4) na prázdné místo, jakmile je proveden tah */
spawn veřejného prostoru () {…}
/ * Zkontroluje, zda je hrací plocha zcela zatemněná a pokud ano, přiměje hráče k restartu */
public boolean blackOut () {…}
/ * Zkontroluje, zda je hra u konce - když je hrací plocha zatemněná a žádná z dlaždic se nedá kombinovat */
public boolean gameOver () {…}
/ * Volá se, když je stisknuto 'w' nebo šipka nahoru - volá 'verticalMove' pro každou dlaždici na desce s parametrem 'nahoru' */
public void up () {…}
/ * Volá se při stisknutí šipky 's' nebo dolů - volá 'verticalMove' pro každou dlaždici na hrací ploše s parametrem 'dolů' */public void down () {…}
/ * Volá se, když je stisknuto 'd' nebo šipka vpravo - volá 'horizontalMove' pro každou dlaždici na hrací ploše s parametrem 'vpravo' */public void right () {…}
/ * Volá se, když je stisknuto 'a' nebo šipka doleva - volá 'horizontalMove' pro každou dlaždici na desce s parametrem 'left' */
veřejná prázdnota vlevo () {…}
/* Porovná hodnoty dvou dlaždic dohromady a pokud jsou stejné nebo pokud se jedna rovná 0 (obyčejná dlaždice) - jejich hodnoty se sčítají (za předpokladu, že porovnávané dlaždice jsou dvě různé dlaždice a pohybují se příslušným směrem) - rekurzivně se pohybuje v řádku */
public void horizontalMove (int row, int col, String direction) {…}
/* Porovná hodnoty dvou dlaždic dohromady a pokud jsou stejné nebo pokud se jedna rovná 0 (obyčejná dlaždice) - jejich hodnoty se sčítají (za předpokladu, že porovnávané dlaždice jsou dvě různé dlaždice a pohybují se příslušným směrem) - rekurzivně se pohybuje ve sloupci */
public void verticalMove (int řada, int col, směr řetězce) {…}
Jo, to je spousta metod - ale nebojte se, většina je extrémně snadno pochopitelná. Kromě toho je třída 'Board' nejsložitější, takže vše po tom bude relativně jednoduché.
Krok 3: Seznamte se s programem - dlaždice
Dlaždice:
Popis: Třída Tile se zabývá jednotlivými dlaždicemi a je nejmenší ze všech tříd. Každá dlaždice má celočíselnou hodnotu a barvu. Má dva konstruktory, které vytvářejí dlaždice s hodnotou 0 (výchozí) nebo hodnotou #. Metody jsou většinou samovysvětlující, přičemž metody „getter“a „setter“tvoří většinu z celkového počtu.
Konstruktéři:
/ * Sestaví základní dlaždici s hodnotou 0 */
veřejná dlaždice () {…}
/ * Sestaví dlaždici s hodnotou čísla */
veřejná dlaždice (int číslo) {…}
Metody:
/ * Získá hodnotu dlaždice */
public int getValue () {…}
/ * Nastaví hodnotu dlaždice - používá se při sčítání dvou dlaždic dohromady */
public void setValue (int value) {…}
/ * Představuje dlaždici jako řetězec - používá se v GUI */
public String toString () {…}
/ * Nastaví barvu dlaždice na základě její hodnoty */
public void setColor () {…}
/ * Získá barvu dlaždice */
public void getColor () {…}
Krok 4: Seznamte se s programem - hrou
Hra
Popis: Třída hry obsahuje hlavní metodu, většinu metod GUI a interakce klíčů. Trvá třídy Tile a Board a umožňuje jim spolupracovat.
Konstruktéři:
Žádný
Metody:
/ * nastaví GUI s vhodnými velikostmi a přidá Key Listener */
public static void setUpGUI () {…}
/ * Zkontroluje, zda jsou stisknuty klávesy wasd nebo arrow, a provede příslušné akce - aktualizuje JFrame při každém pohybu */
public void keyPressed (KeyEvent e) {…}
/ * GUI namaluje řadou strun, desky, dlaždic a zajistí, aby byly znovu natřeny, až hra skončí */
public void paint (grafika g) {…}
/ * nakreslí jednotlivou dlaždici - volanou metodou malování */
public void drawTiles (Graphics g, Tile tile, int x, int y) {…}
/ * Hlavní metoda - nastaví GUI a spustí hru */
public static void main (String args) {…}
Krok 5: Důležité metody - pohyb
Metody pohybu jsou nejdůležitější k pochopení, ale dobrou zprávou je, že jakmile porozumíte vertikálním pohybům, můžete toto porozumění aplikovat na horizontální pohyby. Ve skutečnosti jsou tři metody svislého pohybu přesně stejné jako tři pohyby vodorovných metod, kromě toho, že jeden se pohybuje přes řádky a druhý přes sloupce. Z tohoto důvodu se zaměřme pouze na metody vertikálního pohybu.
private void verticalMove (int row, int col, String direction)
{Tile initial = board [border] [col]; Porovnání dlaždic = deska [řada] [sloupec]; if (initial.getValue () == 0 || initial.getValue () == compare.getValue ()) {if (row> border || (direction.equals ("down") && (row <border))) {int addScore = initial.getValue () + compare.getValue (); if (initial.getValue ()! = 0) {score += addScore; } initial.setValue (addScore); porovnat.setValue (0); }} else {if (direction.equals ("down")) {border--; } else {border ++; } verticalMove (řádek, sloupec, směr); }}
Výše uvedená metoda, verticalMove, se nazývá metodami „nahoru“a „dolů“. Podívejme se na metodu „nahoru“.
veřejná neplatnost ()
{for (int i = 0; i <grids; i ++) {border = 0; for (int j = 0; j <grids; j ++) {if (board [j] .getValue ()! = 0) {if (border <= j) {verticalMove (j, i, "up"); }}}}}
Tato metoda prochází celou deskou a volá verticalMove pro každou dlaždici s parametrem „nahoru“. verticalMove pak porovná dlaždici na pozici 'j' a 'i' s dlaždicí na pozici 'border' a 'i'. Pokud jsou si tito dva rovni, spojí se. Pokud tomu tak není, dlaždice ohraničení se zvýší o 1 (jako parametr na místě je 'nahoru') a verticalMove se zavolá znovu.
Doporučuje:
Naprogramujte libovolnou desku/modul ESP8266 pomocí firmwaru AT příkazů: 5 kroků
Naprogramujte libovolnou desku/modul ESP8266 s AT příkazy Firmware: Každý modul a desku ESP8266 lze naprogramovat mnoha způsoby: Arduino, python, Lua, AT příkazy, mnoho dalších pravděpodobně … První tři z nich jsou nejlepší pro samostatný provoz, AT firmware je pro použití ESP8266 jako modulu nebo pro rychlé testování s TTL RS232 c
Vytvořte si vlastní hru 1D Pong: 5 kroků (s obrázky)
Vytvořte si vlastní hru 1D Pong: U tohoto projektu vám ukážu, jak jsem kombinoval desku MDF s tlačítky bzučáku, LED diodami a Arduino Nano, abych vytvořil hru 1D Pong, která je opravdu zábavná. Po cestě vám ukážu, jak vytvořit elektronický obvod a jak se liší
Arduino Rhythm Game Controller (pro vlastní hru): 6 kroků
Arduino Rhythm Game Controller (pro vlastní hru): V tomto návodu vám ukážu, jak tento Rhythm Game Controller stavím od začátku. Zahrnuje základní dovednosti zpracování dřeva, základní dovednosti 3D tisku a základní pájecí dovednosti. Tento projekt pravděpodobně můžete úspěšně postavit, pokud máte nulový ex
Napište si vlastní hru Tic Tac Toe v Javě: 6 kroků
Napište si vlastní hru Tic Tac Toe v Javě: Jsem si jist, že všichni víte o klasické hře Tic Tic Toe. Od mých základních škol byl Tic Tac Toe oblíbenou hrou, kterou jsem hrával se svými přáteli. Vždy mě fascinovala jednoduchost hry. V prvním ročníku můj
KerbalController: vlastní ovládací panel pro raketovou hru Kerbal Space Program: 11 kroků (s obrázky)
KerbalController: vlastní ovládací panel pro raketovou hru Kerbal Space Program: Proč stavět KerbalController? No, protože mačkání tlačítek a spouštění fyzických přepínačů je mnohem podstatnější než kliknutí myší. Zvláště když je to velký červený bezpečnostní spínač, kde musíte nejprve otevřít kryt, přepněte spínač