Мазмуну:

Өзүңүздүн 2048 Оюнуңузду W/Java менен программалаңыз!: 8 кадам
Өзүңүздүн 2048 Оюнуңузду W/Java менен программалаңыз!: 8 кадам

Video: Өзүңүздүн 2048 Оюнуңузду W/Java менен программалаңыз!: 8 кадам

Video: Өзүңүздүн 2048 Оюнуңузду W/Java менен программалаңыз!: 8 кадам
Video: How To Use SDXL in Automatic1111 Web UI - SD Web UI vs ComfyUI - Easy Local Install Tutorial / Guide 2024, Ноябрь
Anonim

By PranP1My (Толук эмес) SiteFollow Автордун дагы:

Ардуино CNC машинасы куткарылган компьютер бөлүктөрүнөн
Ардуино CNC машинасы куткарылган компьютер бөлүктөрүнөн
Ардуино CNC машинасы куткарылган компьютер бөлүктөрүнөн
Ардуино CNC машинасы куткарылган компьютер бөлүктөрүнөн
DIY заманбап жыгач отургучтар
DIY заманбап жыгач отургучтар
DIY заманбап жыгач отургучтар
DIY заманбап жыгач отургучтар
Контактсыз эшик ачкыч (vSTEM)
Контактсыз эшик ачкыч (vSTEM)
Контактсыз эшик ачкыч (vSTEM)
Контактсыз эшик ачкыч (vSTEM)

Мен 2048 оюнун жакшы көрөм. Ошентип, мен өз версиямды программалоону чечтим.

Бул чыныгы оюнга абдан окшош, бирок аны өзүм программалоо мага каалаган убакта каалаган нерсени өзгөртүү эркиндигин берет. Эгерде мен кадимки 4x4 оюнунун ордуна 5х5 оюнун кааласам, анда "Board" конструкторун колдонуп, жөнөкөй өзгөртүү жасоого мүмкүндүк берет. Мен оюнду туш келди эмес, оюнчу үчүн эң татаал кыла турган бөлүктөрдү кошуп, оюнду татаалдаштыргым келет деп айт. Жөнөкөй алгоритмди колдонуп, мен муну кыла алам. Мен бул Нускоодо бул өзгөртүүлөрдүн бардыгын камтыбасам да, мен барган сайын дагы кошууну пландап жатам.

Азырынча, биз сиздин 2048 -жылга мүнөздүү оюңузду программалайбыз.

Кел, баштайлы!

(Кошумча эскертүү: Бул Нускамалык программалоо боюнча орто билимди талап кылат - өзгөчө Java менен)

1 -кадам: материалдар

Материалдар
Материалдар

Бул проект үчүн сизге көп нерсенин кереги жок, анткени бул жөн эле программалоо жолу.

Материалдар:

  • Ноутбук
  • Eclipse (же сиз тандаган IDE)

Ооба. Дал ушул.

2 -кадам: Программа менен таанышыңыз - Такта

Мен бардык кодумду GitHubга жүктөдүм - бул жерден текшериңиз:

Мен оюнду 3 класска бөлдүм: такта, плитка жана оюн.

Такта:

Description: Board классы оюн тактасы менен алектенет, "Tile" элементтеринин массивин орнотуу, учурдагы баллды жана эң жогорку плитканы алуу жана массивди сапка коюу (кийинчерээк "Оюнда" колдонулат). Логиканын көбү дагы ушул жерде, класс 2 жана 4төрдү туш келди жерлерде, өйдө, ылдый, солго жана оңго жылдыруу жана оюн бүткөндө оюнчуларга билдирүү ыкмаларын камсыз кылган класс.

Конструкторлор:

/ * Башкаруу үчүн демейки конструктор - 4х4 матрицаны орнотот */

коомдук кеңеш () {…}

/ * Башкармалыктын конструктору - торчо өлчөмү көрсөтүлгөн матрицаны орнотот */

коомдук кеңеш (int grids) {…}

Методдор:

/ * Такта кайтаруучу Getter ыкмасы */

коомдук плитка getBoard () {…}

/ * Упайды кайтаруучу Getter ыкмасы */

public int getScore () {…}

/ * Тактадагы эң бийик плитканы таап, кайра кайтарат */

public int getHighTile () {…}

/ * Тактаны консолго басып чыгарат - тестирлөө максатында */

public void print () {…}

/ * Тактаны String катары кайтарат - GUIде колдонулат */

public String toString () {…}

/ * Көчүрүү учурунда бош жерде 2 (же 4) пайда болот */

коомдук боштуктун пайда болушу () {…}

/ * Такта толугу менен караңгыланганын текшерет жана эгер болсо, анда оюнчуларды кайра баштоого түртөт */

public boolean blackOut () {…}

/ * Оюн бүткөнүн текшерет - такта караңгылатылганда жана плиткалардын бири да бириге албайт */

коомдук логикалык оюнOver () {…}

/ * 'W' же өйдө жебе басылганда чакырылат - 'тик' параметри бар 'плитка үчүн' verticalMove 'чакырат *//

public void up () {…}

/ * 'S' же ылдый жебеси басылганда чакырылат - 'down' */public void down () {…} параметри бар ар бир плитка үчүн 'verticalMove' чакырат.

/ * 'D' же оң жебеси басылганда чакырылат - 'оң' */public void right () {…} параметри бар ар бир плитка үчүн 'horizontalMove' деп аталат

/ * 'A' же солго жебе басылганда чакырылат - 'left' параметри бар тактанын ар бир плитасы үчүн 'horizontalMove' чакырат */

коомдук боштук солго () {…}

/* Эки плитканын маанилерин бирге салыштырат жана эгерде алар бирдей болсо же бири 0го барабар болсо (кадимки плитка) - алардын баалуулуктары кошулат (эгер биз салыштырып жаткан плиткалар эки башка плитка болсо жана алар тийиштүү багытты көздөй жылышса) - рекурсивдүү катар аркылуу жылат */

public void horizontalMove (int катар, int col, String багыты) {…}

/* Эки плитканын маанилерин чогуу салыштырат жана эгер алар бирдей болсо же бирөө 0гө барабар болсо (кадимки плитка) - алардын баалуулуктары кошулат (эгер биз салыштырып жаткан плиткалар эки башка плитка болсо жана алар тиешелүү багытты көздөй жылышса) - мамыча аркылуу рекурсивдүү түрдө жылат */

public void verticalMove (int катар, int col, String багыты) {…}

Ооба, бул көптөгөн ыкмалар - бирок кабатыр болбоңуз, көбүн түшүнүү абдан оңой. Анын үстүнө, 'Board' классы эң татаал, андыктан андан кийинкинин баары салыштырмалуу жөнөкөй болот.

3 -кадам: Программа менен таанышыңыз - Плитка

Плитка:

Description: Tile классы жеке плиткалар менен иштейт жана бардык класстардын эң кичинеси. Ар бир плитканын бүтүн мааниси жана түсү бар. Анда 0 (демейки) же #маанидеги плиткаларды жараткан эки конструктор бар. Методдор көбүнчө өзүн -өзү түшүндүрөт, 'getter' жана 'setter' методдору жалпы көлөмдүн көпчүлүгүн түзөт.

Конструкторлор:

/ * 0 мааниси бар негизги плитканы курат */

коомдук плитка () {…}

/ * Сан мааниси бар плитканы курат */

коомдук плитка (int номери) {…}

Методдор:

/ * Мозаиканын баасын алат */

public int getValue () {…}

/ * Плитканын маанисин коет - эки плитканы бирге кошкондо колдонулат */

public void setValue (int value) {…}

/ * Плитканы String катары билдирет - GUIде колдонулат */

public String toString () {…}

/ * Плитканын түсүн анын маанисине жараша коет */

public void setColor () {…}

/ * Черепица түсүн алат */

public void getColor () {…}

4 -кадам: Программа менен таанышуу - Оюн

Оюн

Description: Оюн классында негизги ыкма, GUI ыкмаларынын көбү жана Негизги өз ара аракеттешүүлөр бар. Бул Tile жана Board класстарын талап кылат жана аларга чогуу иштөөгө мүмкүнчүлүк берет.

Конструкторлор:

Эч ким

Методдор:

/ * GUIди тиешелүү өлчөмдөр менен орнотот жана Негизги угуучуну кошот */

жалпы статикалык боштук setUpGUI () {…}

/ * Wast же жебе баскычтары басылганын текшерет жана тиешелүү аракеттерди аткарат - JFrameди ар бир кыймылы менен жаңыртып турат */

public void keyPressed (KeyEvent e) {…}

/ * GUIди бир катар жиптер, тактайлар, плиткалар менен боёйт жана оюн бүткөндөн кийин алардын боёлушун камсыздайт */

ачык боштук боёгу (Графика g) {…}

/ * жеке плитканы тартат - боёк ыкмасынан чакырылган */

public void drawTiles (Graphics g, Tile tile, int x, int y) {…}

/ * Негизги ыкма - GUIди орнотот жана оюнду баштайт */

жалпыга ачык статикалык боштук негизги (String args) {…}

5 -кадам: Маанилүү методдор - Кыймыл

Кыймылдын ыкмаларын түшүнүү эң маанилүү, бирок жакшы кабар - бул вертикалдуу кыймылдарды түшүнгөнүңүздө, сиз бул түшүнүктү горизонталдык кыймылдарга колдоно аласыз. Чындыгында, үч вертикалдуу кыймыл ыкмасы үч горизонталдык ыкма менен бирдей, бирөөсү катар боюнча, экинчиси мамычалар боюнча. Ушул себептен, келгиле, тик кыймыл ыкмаларына гана токтололу.

private void verticalMove (int катар, int col, String багыты)

{Tile initial = board [border] [col]; Tile салыштыруу = board [row] [col]; if (initial.getValue () == 0 || initial.getValue () == салыштыруу.getValue ()) {if (катар> чек || (багыт. барабар ("ылдый") && (катар <чек))) {int addScore = initial.getValue () + салыштыруу.getValue (); if (initial.getValue ()! = 0) {score += addScore; } initial.setValue (addScore); салыштыруу.setValue (0); }} else {if (direction.equals ("down")) {border--; } else {border ++; } verticalMove (катар, кол, багыт); }}

Жогорудагы вертикальМове "өйдө" жана "ылдый" ыкмалары менен аталат. Келгиле, "өйдө" ыкмасын карап көрөлү.

коомдук боштук ()

{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"); }}}}}

Бул ыкма бүт коллегиядан өтөт жана "өйдө" параметриндеги ар бир плитка үчүн verticalMove чакырат. verticalMove андан кийин 'j' жана 'i' позициясындагы плитканы 'чек' жана 'i' абалындагы плитка менен салыштырат. Эгерде экөө тең болсо, алар бириктирилет. Эгерде алар андай болбосо, чек ара плиткасы 1ге көбөйтүлөт (жердеги параметр 'өйдө'), жана verticalMove кайра чакырылат.

Сунушталууда: