Orodha ya maudhui:

Panga Mchezo Wako 2048 W W / Java !: Hatua 8
Panga Mchezo Wako 2048 W W / Java !: Hatua 8

Video: Panga Mchezo Wako 2048 W W / Java !: Hatua 8

Video: Panga Mchezo Wako 2048 W W / Java !: Hatua 8
Video: 北斗导航粗糙四十纳米精度如何?天热如何戴口罩健身传染真危险 Beidou navigation with 40 NM chips, how to wear a mask when it is hot. 2024, Julai
Anonim

Kwa PranP1My (haijakamilika) Tovuti Fuata Zaidi na mwandishi:

Mashine ya Arduino CNC Kutoka kwa Sehemu za PC zilizookolewa
Mashine ya Arduino CNC Kutoka kwa Sehemu za PC zilizookolewa
Mashine ya Arduino CNC Kutoka kwa Sehemu za PC zilizookolewa
Mashine ya Arduino CNC Kutoka kwa Sehemu za PC zilizookolewa
Mabenchi ya kisasa ya Mbao ya DIY
Mabenchi ya kisasa ya Mbao ya DIY
Mabenchi ya kisasa ya Mbao ya DIY
Mabenchi ya kisasa ya Mbao ya DIY
Kopo ya mawasiliano isiyo na mawasiliano (vSTEM)
Kopo ya mawasiliano isiyo na mawasiliano (vSTEM)
Kopo ya mawasiliano isiyo na mawasiliano (vSTEM)
Kopo ya mawasiliano isiyo na mawasiliano (vSTEM)

Ninapenda mchezo 2048. Na kwa hivyo niliamua kupanga toleo langu mwenyewe.

Ni sawa na mchezo halisi, lakini kuipanga mwenyewe kunanipa uhuru wa kubadilisha chochote ninachotaka wakati wowote ninataka. Ikiwa ninataka mchezo wa 5x5 badala ya 4x4 ya kawaida, mabadiliko rahisi kwa kutumia mjenzi wa 'Bodi' yataniruhusu kufanya hivyo. Sema nataka kufanya mchezo kuwa mgumu zaidi, nikiongeza vipande kwenye nafasi ambazo zitaifanya iwe ngumu zaidi kwa mchezaji badala ya nasibu. Kutumia algorithm rahisi, naweza kufanya hivyo tu. Ingawa sitashughulikia marekebisho haya yote katika hii inayoweza kufundishwa, nina mpango wa kuongeza zaidi ninapoenda.

Kwa sasa, hata hivyo, tutapanga mchezo wako wa kawaida wa 2048.

Tuanze!

(Ujumbe wa pembeni: Hii inayoweza kufundishwa inahitaji ujuzi wa wastani wa programu - haswa na Java)

Hatua ya 1: Vifaa

Vifaa
Vifaa

Hutahitaji mengi kwa mradi huu kwani ni safari ya programu tu.

Vifaa:

  • Laptop
  • Eclipse (au IDE yoyote ya chaguo lako)

Ndio. Hiyo ndio.

Hatua ya 2: Jua Mpango - Bodi

Nilipakia nambari yangu yote kwenye GitHub - itazame hapa:

Niligawanya mchezo hadi darasa tatu: Bodi, Tile na Mchezo.

Bodi:

Maelezo: Darasa la Bodi linahusika na ubao wa michezo, kuanzisha safu ya vitu vya 'Tile', kupata alama ya sasa na tile ya juu zaidi, na kuweka safu katika kamba (itakayotumika baadaye katika 'Mchezo'). Mantiki nyingi pia ziko hapa, darasa linatoa njia za kuzaa 2 na 4 katika maeneo yasiyofaa, kusonga juu, chini, kushoto na kulia, na kuwajulisha wachezaji wakati mchezo umekwisha.

Waundaji:

/ * Mtengenezaji chaguo-msingi wa Bodi - anaweka matriki 4x4 * /

Bodi ya umma () {…}

/ * Mjenzi wa Bodi - huweka matriki na saizi ya gridi maalum * /

Bodi ya Umma (gridi za ndani) {…}

Mbinu:

/ * Njia ya Getter ambayo inarudisha bodi * /

Tile ya umma getBoard () {…}

/ * Njia ya Getter ambayo inarudisha alama * /

public int getScore () {…}

/ * Inatafuta tile ya juu kabisa ubaoni na kuirudisha * /

public int getHighTile () {…}

/ * Chapisha bodi kwenye koni - kwa madhumuni ya upimaji * /

chapisho batili la umma () {…}

/ * Hurejesha bodi kama Kamba - iliyotumiwa katika GUI * /

Kamba ya umma toString () {…}

/ * Inazaa 2 (au 4) kwenye nafasi tupu wakati mwingi hoja imefanywa * /

mbegu tupu ya umma () {…}

/ * Inakagua kuona ikiwa bodi imezimwa kabisa na ikiwa iko, itawashawishi wachezaji kuanza upya * /

boolean ya umma nyeusiOut () {…}

/ * Hundi ili kuona ikiwa mchezo umeisha - wakati bodi imezimwa na hakuna tiles yoyote inayoweza kuchanganya * /

mchezo wa boolean wa umma () {…}

/ * Inayoitwa wakati 'w' au mshale wa juu umesisitizwa - piga simu 'wimaSonga' kwa kila tile kwenye ubao na parameter 'up' * /

utupu wa umma () {…}

/ * Inayoitwa wakati 's' au mshale wa chini umebanwa - inaita 'verticalMove' kwa kila tile kwenye ubao na parameter 'chini' * / utupu wa umma chini () {…}

/ * Inayoitwa wakati 'd' au mshale wa kulia umebanwa - inaita 'usawa Hoja' kwa kila tile kwenye ubao na parameter 'kulia' * / utupu wa umma kulia () {…}

/ * Inayoitwa wakati 'mshale' au kushoto inabanwa - piga simu 'usawa Hoja' kwa kila tile kwenye ubao na parameter 'kushoto' * /

utupu wa umma kushoto () {…}

/ * Inalinganisha maadili ya tile mbili pamoja na ikiwa ni sawa au ikiwa moja ni sawa na 0 (tile wazi) - maadili yao yanaongezwa (mradi tiles tunazilinganisha ni tiles mbili tofauti na zinaelekea kwenye mwelekeo unaofaa) - unarudia kupitia safu * /

umma utupu usawa

/ * Inalinganisha maadili ya tile mbili pamoja na ikiwa ni sawa au ikiwa moja ni sawa na 0 (tile wazi) - maadili yao yanaongezwa (mradi tiles tunazilinganisha ni tiles mbili tofauti na zinaelekea kwenye mwelekeo unaofaa) - inarudia kupitia safu * /

public void verticalMove (mstari wa ndani, safu ya ndani, mwelekeo wa Kamba) {…}

Ndio, hiyo ni njia nyingi - lakini usijali, nyingi ni rahisi kuelewa. Juu ya hayo, darasa la 'Bodi' ni ngumu zaidi, kwa hivyo kila kitu baada ya hii kitakuwa rahisi.

Hatua ya 3: Jua Programu - Tile

Tile:

Maelezo: Darasa la Tile linahusika na vigae vya kibinafsi, na ni ndogo kuliko darasa zote. Kila tile ina thamani kamili na rangi. Ina wajenzi wawili ambao huunda Tiles za thamani 0 (chaguo-msingi) au thamani #. Njia hizo zinajielezea zaidi, na njia za 'kupata' na 'setter' zinaunda jumla ya jumla.

Waundaji:

/ * Inaunda tile ya msingi na thamani ya 0 * /

Tile ya umma () {…}

/ * Huunda tile yenye thamani ya nambari * /

Tile ya umma (nambari ya int) {…}

Mbinu:

/ * Inapata thamani ya tile * /

public int getValue () {…}

/ * Inaweka thamani ya tile - hutumiwa wakati wa kuongeza tiles mbili pamoja * /

batili ya umma setValue (thamani ya int) {…}

/ * Inawakilisha tile kama Kamba - inayotumiwa katika GUI * /

Kamba ya umma toString () {…}

/ * Inaweka rangi ya tile kulingana na thamani yake * /

setColor ya utupu wa umma () {…}

/ * Anapata rangi ya tile * /

umma utupu GetColor () {…}

Hatua ya 4: Jua Programu - Mchezo

Mchezo

Maelezo: Darasa la Mchezo lina njia kuu, njia nyingi za GUI na mwingiliano muhimu. Inachukua darasa zote za Tile na Bodi, na inawawezesha kufanya kazi pamoja.

Waundaji:

Hakuna

Mbinu:

/ * inaweka GUI na saizi inayofaa na inaongeza Msikilizaji Muhimu * /

hadharani tuli setUpGUI () {…}

/ * Hukagua ikiwa funguo za wasd au mshale zimebanwa na hufanya vitendo mwafaka - sasisha JFrame kwa kila hoja * /

kitufe cha utupu wa umma kimeshinikizwa (KeyEvent e) {…}

/ * Inapaka rangi GUI na safu ya masharti, bodi, vigae na inahakikisha zinapakwa rangi tena wakati mchezo umekwisha * /

rangi batili ya umma (Graphics g) {…}

/ * huchota tile ya kibinafsi - inayoitwa kutoka kwa njia ya rangi * /

vigae vya utupu vya umma (Graphics g, Tile tile, int x, int y) {…}

/ * Njia kuu - inaweka GUI na kuanza mchezo * /

hadhi kuu ya umma iliyo wazi (Kamba args) {…}

Hatua ya 5: Njia Muhimu - Harakati

Njia za harakati ni muhimu kuelewa, lakini habari njema ni mara tu unapoelewa harakati za wima, unaweza kutumia uelewa huo kwa harakati zenye usawa. Kwa kweli, njia tatu za harakati za wima ni sawa sawa na harakati tatu za usawa, isipokuwa moja inapita kwenye safu na nyingine kwenye safu zote. Kwa sababu hiyo, wacha tuangalie tu njia za harakati za wima.

wima ya kibinafsi wimaMove (mstari wa ndani, int col, mwelekeo wa Kamba)

{Tile awali = bodi [mpaka] [col]; Linganisha tile = bodi [safu] [col]; ikiwa (initial.getValue () == 0 || initial.getValue () == kulinganisha.getValue ()) {if (row> border || (direction.equals ("down") && (row <border))) {int addScore = initial.getValue () + linganisha.getValue (); ikiwa (initial.getValue ()! = 0) {alama + = addScore; } awali.setValue (addScore); linganisha. Seti ya Thamani (0); }} mwingine {if (direction.equals ("down")) {border--; } mwingine {border ++; } wimaSonga (safu, kololi, mwelekeo); }}

Njia iliyo hapo juu, wimaMove, inaitwa na njia za 'juu' na 'chini'. Wacha tuangalie njia ya 'juu'.

utupu wa umma ()

{kwa (int i = 0; i <gridi; i ++) {border = 0; kwa (int j = 0; j <grids; j ++) {if (board [j] .getValue ()! = 0) {if (border <= j) {verticalMove (j, i, "up"); }}}}}

Njia hii hupitia bodi nzima na inaita verticalMove kwa kila tile na parameter "juu". verticalMove kisha inalinganisha tile katika nafasi 'j' na 'i' na tile kwenye msimamo 'mpaka' na 'i'. Ikiwa wawili ni sawa, wameunganishwa. Ikiwa sio, tile ya mpaka imeongezwa kwa 1 (kama parameter iliyopo ni 'up'), na verticalMove inaitwa tena.

Ilipendekeza: