İçindekiler:
- Adım 1: Malzemeler
- 2. Adım: Programı Tanıyın - Yönetim Kurulu
- Adım 3: Programı Tanıyın - Döşeme
- Adım 4: Programı Tanıyın - Oyun
- Adım 5: Önemli Yöntemler - Hareket
Video: Java ile Kendi 2048 Oyununuzu Programlayın: 8 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:16
PranP1My (Tamamlanmamış) SiteTakip Yazar tarafından daha fazlası:
2048 oyununu seviyorum. Bu yüzden kendi versiyonumu programlamaya karar verdim.
Gerçek oyuna çok benziyor, ancak kendim programlamak bana istediğim zaman istediğim şeyi değiştirme özgürlüğü veriyor. Tipik 4x4 yerine 5x5 oyun istiyorsam, 'Board' yapıcısını kullanarak basit bir değişiklik yapmama izin verecek. Diyelim ki, oyunu rastgele değil de oyuncu için en karmaşık hale getirecek pozisyonlara parçalar ekleyerek oyunu daha zor hale getirmek istiyorum. Basit bir algoritma kullanarak, bunu yapabilirim. Bu Eğitilebilir Dosyadaki tüm bu değişiklikleri kapsamayacak olsam da, ilerledikçe daha fazlasını eklemeyi planlıyorum.
Ancak şimdilik, tipik 2048 oyununuzu programlayacağız.
Başlayalım!
(Bir yan not: Bu Eğitilebilir Kitap, orta düzeyde programlama bilgisi gerektirir - özellikle Java ile)
Adım 1: Malzemeler
Bu sadece bir programlama kılavuzu olduğu için bu proje için fazla bir şeye ihtiyacınız olmayacak.
Malzemeler:
- dizüstü bilgisayar
- Eclipse (veya seçtiğiniz herhangi bir IDE)
Aynen. Bu kadar.
2. Adım: Programı Tanıyın - Yönetim Kurulu
Tüm kodumu GitHub'a yükledim - buradan kontrol edin:
Oyunu 3 sınıfa ayırdım: Board, Tile ve Game.
Pano:
Açıklama: Board sınıfı oyun tahtası ile ilgilenir, bir dizi 'Döşeme' öğelerini ayarlar, mevcut puanı ve en yüksek kutucuğu alır ve diziyi bir dizgeye koyar (daha sonra 'Oyun'da kullanılacaktır). Mantığın çoğu da burada, sınıf rastgele konumlarda 2'li ve 4'lü yumurtlama, yukarı, aşağı, sola ve sağa hareket etme ve oyun bittiğinde oyunculara haber verme yöntemleri sağlıyor.
Yapıcılar:
/* Board için varsayılan kurucu - bir 4x4 matris kurar */
genel Kurul() {…}
/* Pano için Oluşturucu - belirtilen ızgara boyutuna sahip bir matris kurar */
public Board (int grids) {…}
Yöntemler:
/* Tahtayı döndüren Getter yöntemi */
genel Döşeme getBoard() {…}
/* Puanı döndüren Getter yöntemi */
public int getScore() {…}
/* Tahtadaki en yüksek döşemeyi bulur ve onu döndürür */
public int getHighTile() {…}
/* Tahtayı konsola yazdırır - test amaçlı */
public void print() {…}
/* Tahtayı bir Dize olarak döndürür - GUI'de kullanılır */
public String toString() {…}
/* Her hamle yapıldığında boş bir alana 2 (veya 4) verir */
public void spawn() {…}
/* Tahtanın tamamen kararmış olup olmadığını kontrol eder ve eğer öyleyse, oyuncuları yeniden başlamaya teşvik eder */
genel boolean blackOut() {…}
/* Oyunun bitip bitmediğini kontrol eder - tahta karardığında ve hiçbir taş birleşemezken */
public boolean gameOver() {…}
/* 'w' veya yukarı oka basıldığında çağrılır - 'yukarı' parametresiyle tahtadaki her karo için 'verticalMove'u çağırır */
public void up() {…}
/* 's' veya aşağı oka basıldığında çağrılır - 'down' parametresiyle tahtadaki her karo için 'verticalMove'u çağırır */public void down() {…}
/* 'd' veya sağ oka basıldığında çağrılır - 'right' parametresiyle tahtadaki her karo için 'horizontalMove'u çağırır */public void right() {…}
/* 'a' veya sol oka basıldığında çağrılır - 'left' parametresiyle tahtadaki her karo için 'horizontalMove'u çağırır */
public void left() {…}
/* İki döşemenin değerlerini birlikte karşılaştırır ve eğer aynıysa veya 0'a eşitse (düz döşeme) - değerleri eklenir (karşılaştırdığımız döşemelerin iki farklı döşeme olması ve uygun yöne doğru hareket etmeleri şartıyla) - özyinelemeli olarak satır boyunca hareket eder */
public void horizontalMove (int satır, int sütun, Dize yönü) {…}
/* İki döşemenin değerlerini birlikte karşılaştırır ve eğer aynıysa veya 0'a eşitse (düz döşeme) - değerleri eklenir (karşılaştırdığımız döşemelerin iki farklı döşeme olması ve uygun yöne doğru hareket etmeleri şartıyla) - yinelemeli olarak */ sütununda hareket eder
public void verticalMove (int satır, int sütun, Dize yönü) {…}
Evet, pek çok yöntem var - ama merak etmeyin, çoğunu anlamak son derece kolaydır. Bunun da ötesinde, 'Board' sınıfı en karmaşık olanıdır, dolayısıyla bundan sonraki her şey nispeten basit olacaktır.
Adım 3: Programı Tanıyın - Döşeme
Fayans:
Açıklama: Döşeme sınıfı, tek tek döşemelerle ilgilenir ve tüm sınıfların en küçüğüdür. Her döşemenin bir tamsayı değeri ve bir rengi vardır. 0 değerinde (varsayılan) veya # değerinde Döşemeler oluşturan iki kurucuya sahiptir. Yöntemler çoğunlukla kendi kendini açıklayıcıdır ve 'alıcı' ve 'ayarlayıcı' yöntemler toplamın büyük bir kısmını oluşturur.
Yapıcılar:
/* 0 değerinde temel bir döşeme oluşturur */
genel Döşeme() {…}
/* Sayı değerinde bir döşeme oluşturur */
genel Kutucuk (int numarası) {…}
Yöntemler:
/* Döşemenin değerini alır */
public int getValue() {…}
/* Döşemenin değerini ayarlar - iki döşemeyi birbirine eklerken kullanılır */
public void setValue (int değeri) {…}
/* Dize olarak döşemeyi temsil eder - GUI'de kullanılır */
public String toString() {…}
/* Değerine göre döşemenin rengini ayarlar */
public void setColor() {…}
/* Döşemenin rengini alır */
public void getColor() {…}
Adım 4: Programı Tanıyın - Oyun
oyun
Açıklama: Oyun Sınıfı, ana yöntemi, GUI yöntemlerinin çoğunu ve Anahtar etkileşimlerini barındırır. Hem Tile hem de Board sınıflarını alır ve birlikte çalışmalarını sağlar.
Yapıcılar:
Hiçbiri
Yöntemler:
/* GUI'yi uygun boyutlarda kurar ve bir Anahtar Dinleyici ekler */
genel statik boşluk setUpGUI() {…}
/* wasd veya ok tuşlarına basılıp basılmadığını kontrol eder ve uygun eylemleri gerçekleştirir - her harekette JFrame'i günceller */
public void keyPressed (KeyEvent e) {…}
/* GUI'yi bir dizi dizi, tahta, fayans ile boyar ve oyun bittiğinde yeniden boyanmalarını sağlar */
genel boşluk boyası (Grafik g) {…}
/* tek bir döşeme çizer - boyama yönteminden çağrılır */
public void drawTiles (Graphics g, Tile tile, int x, int y) {…}
/* Ana yöntem - GUI'yi kurar ve oyunu başlatır */
public static void main(String args) {…}
Adım 5: Önemli Yöntemler - Hareket
Hareket yöntemleri, anlaşılması gereken en önemli yöntemlerdir, ancak iyi haber şu ki, dikey hareketleri anladıktan sonra, bu anlayışı yatay hareketlere uygulayabilirsiniz. Aslında, üç dikey hareket yöntemi, biri satırlar ve diğeri sütunlar arasında hareket dışında, üç yatay yöntem hareketiyle tamamen aynıdır. Bu nedenle sadece dikey hareket yöntemlerine odaklanalım.
private void verticalMove(int satır, int sütun, Dize yönü)
{ Tile first = board[border][col]; Karo karşılaştırma = tahta[satır][sütun]; if (initial.getValue() == 0 || initial.getValue() == karşılaştırma.getValue()) { if (satır > kenar || (direction.equals("aşağı") && (satır < kenar))) { int addScore = initial.getValue() + karşılaştırma.getValue(); if (initial.getValue() != 0) { puan += addScore; } initial.setValue(addScore); karşılaştırma.setValue(0); } } else { if (direction.equals("aşağı")) { border--; } başka { sınır++; } verticalMove(satır, sütun, yön); } }
Yukarıdaki yöntem, verticalMove, 'yukarı' ve 'aşağı' yöntemlerle çağrılır. Şimdi 'yukarı' yöntemine bir göz atalım.
genel boşluk ()
{ for (int i = 0; i < ızgaralar; i++) { border = 0; for (int j = 0; j < grids; j++) { if (board[j].getValue() != 0) { if (border <= j) { verticalMove(j, i, "yukarı"); } } } } }
Bu yöntem tüm panodan geçer ve "yukarı" parametresiyle her döşeme için dikey Hareket'i çağırır. verticalMove daha sonra 'j' ve 'i' konumundaki döşemeyi 'border' ve 'i' konumundaki döşemeyle karşılaştırır. İkisi eşitse, birleştirilirler. Değillerse, sınır döşemesi 1 artırılır (yerinde parametre 'yukarı' olduğundan) ve dikeyMove yeniden çağrılır.
Önerilen:
Herhangi Bir ESP8266 Kartını/Modülünü AT Komutlarıyla Programlayın Ürün Yazılımı: 5 Adım
Herhangi Bir ESP8266 Kartını/Modülünü AT Komutları ile Programlayın Firmware: Her ESP8266 modülü ve kartı birçok şekilde programlanabilir:Arduino,python,Lua,AT komutları, muhtemelen daha fazlası… Bunlardan ilk üçü bağımsız çalışma için en iyisidir, AT firmware ESP8266'yı modül olarak kullanmak veya TTL RS232 c ile hızlı test etmek içindir
Arduino ile ATtiny Programlayın: 7 Adım (Resimlerle)
Bir ATtiny'yi Arduino ile Programlayın: Aşağıda, Arduino IDE'yi kullanarak ATtiny mikro denetleyicilerini programlamak için talimatlar verilmiştir. Sade İngilizce'de, normalde bir Arduino'da yaptığınız gibi 8 pinli Atmel çiplerini bu şekilde programlayabilirsiniz. Bu harika çünkü ATtiny küçük ve - peki - bu izin veriyor
Kendi 1D Pong Oyununuzu Yapın: 5 Adım (Resimlerle)
Kendi 1 Boyutlu Pong Oyununuzu Yapın: Bu proje için size oynaması gerçekten eğlenceli bir 1 Boyutlu Pong Oyunu yaratmak için bir MDF kartını buzzer düğmeleri, LED'ler ve bir Arduino Nano ile nasıl birleştirdiğimi göstereceğim. Yol boyunca size elektronik devrenin nasıl oluşturulacağını ve ne kadar farklı olduğunu göstereceğim
Arduino'nuzu Bluetooth Üzerinden Android Cihazla Programlayın: 6 Adım (Resimlerle)
Arduino'nuzu Bluetooth Üzerinden Bir Android Cihazla Programlayın: Merhaba dünya, bu Eğitim Tablosunda size Arduino Uno'nuzu Android cihazınızla Bluetooth üzerinden nasıl programlayacağınızı göstermek istiyorum. Çok basit ve çok ucuz. Ayrıca kablosuz bluetooth üzerinden Arduino'muzu istediğimiz yere programlayabilmemizi sağlıyor… Yani
Java'da Kendi Tic Tac Toe Oyununuzu Yazın: 6 Adım
Java'da Kendi Tic Tac Toe Oyununuzu Yazın: Eminim hepiniz klasik Tic Tic Toe oyununu biliyorsunuzdur. Tic Tac Toe ilkokul yıllarımdan beri arkadaşlarımla oynadığım popüler bir oyundu. Oyunun basitliğine her zaman hayran olmuşumdur. İlk yılımda, benim