2048 Oyunu

Başlatan johoguz, 19 Kasım 2014 - 12:25:22

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

johoguz

Java üzerinde 2048 oyununu yazmam lazım eclipste çalıştırılmak üzere yani işin sadece kod kısmı önemli benim için fakat iki boyutlu dizilerde bu kodu yazamadım.Bu konuyla alakalı bilgisi olan java üzerinde deneyimli biri yardımcı olabilirse çok sevinirim.Şimdiden teşekkürler.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 19 Kasım 2014 - 14:54:46

Örnek bir çıktı da şu şekilde:

. . . .
. 2 . .
. . . 2
. . . .
Skor : 0
Komutu giriniz : Sola
. . . .
2 . . .
2 . . .
. 4 . .
Skor : 0
Komutu giriniz : Yukarı
4 4 . .
. . . .
. . . .
4 . . .
Skor : 4
Komutu giriniz : Sola
8 . . .
. . . 2
. . . .
4 . . .
Skor : 12
.
.
Oyun bitti. Skor : 3424

travego0403

2048 oyununu bilmiyorum öncelikle onu belirteyim. Programın temel algoritması şöyle olabilir.

4x4 bir dizi(matris) tanımla.
komutu al
sol veya sağ ise satırlardaki değerleri topla yazılması gereken yere yaz.
aşağı veya yukarı ise sütunlardaki değerleri topla gereken yere yaz.
diğer komutu bekle.

Siz bir şeyler yapmaya çalışın kodu buraya yazın. Yapamadığınız yerleri belirtirseniz yardımcı olunacaktır.
Bu tarz yardım isteklerinde çalışan kodun verilmesinden yana değilim.
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman

ersinkandemir

1-11-21-31-4
2-12-22-32-4
3-13-23-33-4
4-14-24-34-4

  • Oyun başlangıcında rastgele 2 hücre seçilip 2 taşı koyulur.
  • Sağa veya sola hamlelerde sütun numarası, yukarı ve aşağı hamlelerde satır numarası dikkate alınır.
  • Örneğin sağa hamle yapıldığı zaman aşağıdaki hücrelerdeki taşlar taranır:

    1-11-21-31-4
    2-12-22-32-4
    3-13-23-33-4
    4-14-24-34-4
    Yukarı hamle yapıldığı zaman:

    1-11-21-31-4
    2-12-22-32-4
    3-13-23-33-4
    4-14-24-34-4

  • Bu şekilde hücrelerdeki her bir taş için hareket yönüne doğru hücreler taranır ve hareket yönündeki en yakınındaki taş bulunur. Bu taşın değeri aynı ise o hücrede toplamlarının değerinde bir taş oluşturulur; değilse en yakındaki taşın bir öncesindeki hücreye taşınır.
  • Her bir hamle sonunda rastgele boş bir hücreye 2 veya 4 taşı konulur. 4 taşının rastgele seçimde kullanılması için taşların toplamının belli bir sayıyı geçmesi şartını koyabilirsiniz mesela.
Genel olarak bu. Kuralları basit aslında.
Where there's a shell, there's a way.



johoguz

@travego0403 sizinle aynı fikirdeyim bende kodun direk verilmesi taraftarı değilim bu öğrenme aşamasını direk atlamak demek ama ben sadece başlangıç aşamasında dahi bazı sorular vardı kafamda ama sizin ve @ersinkandemir in yönlendirmeleri biraz daha anlamamı sağladı dediğiniz gibi uğraşıp yine içinden çıkamadığım bir durum olduğunda yardımlarınıza başvurmak isterim. Cevaplarınız ve yardımlarınız için teşekkür ederim.

johoguz

Selamlar; şu an kodda tek eksik kaldı yada bug diyebilirim o eksik de şu ki :
                                                                                                           * * * *
                                                                                                       * * 4 2
                                                                                                       * * * 2
                                                                                                       * * * *
  Bu durumda sağ yapınca hiçbir şey yapmaması lazım fakat yeni bir sayı oluşturuyor bunun kontrolünü nasıl yapabilirim bu aşamadan sonra nereye ve ne şekilde ekleme yapmalıyım?

public static String[][] dizi = new String[4][4];

public static void main(String[] args) {
Scanner klavye = new Scanner(System.in);

for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
dizi[i][j] = ".";
}
}
sayiSalla();
sayiSalla();
diziYazdir();

System.out.println("Oyun başladı.");
do {
String s = klavye.next();
if (s.equalsIgnoreCase("u")) {
int a;
int[] hesap = new int[4];

for (int j = 0; j < 4; j++) {
a = 0;
for (int x = 0; x < 4; x++) {
hesap[x] = 0;
}
for (int i = 0; i < 4; i++) {

if (!(dizi[i][j].equals("."))) {
hesap[a] = Integer.parseInt(dizi[i][j]);
a++;
}
}
switch (a) {
case 0:
for (int i = 0; i < 4; i++) {
dizi[i][j]=".";
}
break;
case 1:
dizi[0][j]=("" + hesap[0]);
for (int i = 1; i < 4; i++) {
dizi[i][j]=".";
}
break;
case 2:
if (hesap[0] == hesap[1]) {
dizi[0][j]=("" + (hesap[0] + hesap[1]));
for (int i = 1; i < 4; i++) {
dizi[i][j]=".";
}
} else {
dizi[0][j]=("" + hesap[0]);
dizi[1][j]=("" + hesap[1]);
for (int i = 2; i < 4; i++) {
dizi[i][j]=".";
}
}
break;
case 3:
if (hesap[0] == hesap[1]) {
dizi[0][j]=("" + (hesap[0] + hesap[1]));
dizi[1][j]=("" + hesap[2]);
dizi[2][j]=".";
dizi[3][j]=".";
} else if (hesap[1] == hesap[2]) {
dizi[0][j]=("" + hesap[0]);
dizi[1][j]=("" + (hesap[1] + hesap[2]));
dizi[2][j]=".";
dizi[3][j]=".";
} else {
dizi[0][j]=("" + hesap[0]);
dizi[1][j]=("" + hesap[1]);
dizi[2][j]=("" + hesap[2]);
dizi[3][j]=".";

}
break;
case 4:
if ((hesap[0] == hesap[1]) && (hesap[2] == hesap[3])) {
dizi[0][j]=("" + (hesap[0] + hesap[1]));
dizi[1][j]=("" + (hesap[2] + hesap[3]));
} else if (hesap[1] == hesap[2]) {
dizi[0][j]=("" + hesap[0]);
dizi[1][j]=("" + (hesap[1] + hesap[2]));
dizi[2][j]=("" + hesap[3]);
} else if (!(hesap[0] == hesap[1])
&& (hesap[2] == hesap[3])) {
dizi[2][j]=("" + (hesap[2] + hesap[3]));
} else if ((hesap[0] == hesap[1])
&& !(hesap[2] == hesap[3])) {
dizi[0][j]=("" + (hesap[0] + hesap[1]));
}
break;
}
}
sayiSalla();

} else if (s.equalsIgnoreCase("d")) {
int a;
int[] hesap = new int[4];

for (int j = 0; j < 4; j++) {
a = 0;
for (int x = 0; x < 4; x++) {
hesap[x] = 0;
}
for (int i = 0; i < 4; i++) {

if (!(dizi[i][j].equals("."))) {
hesap[a] = Integer.parseInt(dizi[i][j]);
a++;
}
}
switch (a) {
case 0:
for (int i = 0; i < 4; i++) {
dizi[i][j]=".";
}
break;
case 1:
dizi[3][j]=("" + hesap[0]);
for (int i = 0; i < 3; i++) {
dizi[i][j]=".";
}
break;
case 2:
if (hesap[0] == hesap[1]) {
for (int i = 0; i < 3; i++) {
dizi[i][j]=".";
}
dizi[3][j]=("" + (hesap[0] + hesap[1]));

} else {
for (int i = 0; i < 2; i++) {
dizi[i][j]=".";
}
dizi[2][j]=("" + hesap[0]);
dizi[3][j]=("" + hesap[1]);

}
break;
case 3:
if (hesap[0] == hesap[1]) {
dizi[0][j]=".";
dizi[1][j]=".";
dizi[2][j]=("" + (hesap[0] + hesap[1]));
dizi[3][j]=("" + hesap[2]);

} else if (hesap[1] == hesap[2]) {
dizi[0][j]=".";
dizi[1][j]=".";
dizi[2][j]=("" + hesap[0]);
dizi[3][j]=("" + (hesap[1] + hesap[2]));

} else {
dizi[0][j]=".";
dizi[1][j]=("" + hesap[0]);
dizi[2][j]=("" + hesap[1]);
dizi[3][j]=("" + hesap[2]);

}
break;
case 4:
if ((hesap[0] == hesap[1]) && (hesap[2] == hesap[3])) {
dizi[0][j]=".";
dizi[1][j]=".";
dizi[2][j]=("" + (hesap[0] + hesap[1]));
dizi[3][j]=("" + (hesap[2] + hesap[3]));
} else if (hesap[1] == hesap[2]) {
dizi[0][j]=".";
dizi[1][j]=("" + hesap[0]);
dizi[2][j]=("" + (hesap[1] + hesap[2]));
dizi[3][j]=("" + hesap[3]);
} else if (!(hesap[0] == hesap[1])
&& (hesap[2] == hesap[3])) {
dizi[0][j]=".";
dizi[1][j]=("" + hesap[0]);
dizi[2][j]=("" + hesap[1]);
dizi[3][j]=("" + (hesap[2] + hesap[3]));
} else if ((hesap[0] == hesap[1])
&& !(hesap[2] == hesap[3])) {
dizi[0][j]=".";
dizi[1][j]=("" + (hesap[0] + hesap[1]));
dizi[2][j]=("" + hesap[2]);
dizi[3][j]=("" + hesap[3]);
}
break;
}
}
sayiSalla();

} else if (s.equalsIgnoreCase("l")) {
int a;
int[] hesap = new int[4];

for (int i = 0; i < 4; i++) {
a = 0;
for (int x = 0; x < 4; x++) {
hesap[x] = 0;
}
for (int j = 0; j < 4; j++) {

if (!(dizi[i][j].equals("."))) {
hesap[a] = Integer.parseInt(dizi[i][j]);
a++;
}
}
switch (a) {
case 0:
for (int j = 0; j < 4; j++) {
dizi[i][j] = ".";
}
break;
case 1:
dizi[i][0] = ("" + hesap[0]);
for (int j = 1; j < 4; j++) {
dizi[i][j] = ".";
}
break;
case 2:
if (hesap[0] == hesap[1]) {
dizi[i][0] = ("" + (hesap[0] + hesap[1]));
for (int j = 1; j < 4; j++) {
dizi[i][j] = ".";
}
} else {
dizi[i][0] = ("" + hesap[0]);
dizi[i][1] = ("" + hesap[1]);
for (int j = 2; j < 4; j++) {
dizi[i][j] = ".";
}
}
break;
case 3:
if (hesap[0] == hesap[1]) {
dizi[i][0] = ("" + (hesap[0] + hesap[1]));
dizi[i][1] = ("" + hesap[2]);
dizi[i][2] = ".";
dizi[i][3] = ".";
} else if (hesap[1] == hesap[2]) {
dizi[i][0] = ("" + hesap[0]);
dizi[i][1] = ("" + (hesap[1] + hesap[2]));
dizi[i][2] = ".";
dizi[i][3] = ".";
} else {
dizi[i][0] = ("" + hesap[0]);
dizi[i][1] = ("" + hesap[1]);
dizi[i][2] = ("" + hesap[2]);
dizi[i][3] = ".";

}
break;
case 4:
if ((hesap[0] == hesap[1]) && (hesap[2] == hesap[3])) {
dizi[i][0] = ("" + (hesap[0] + hesap[1]));
dizi[i][1] = ("" + (hesap[2] + hesap[3]));
} else if (hesap[1] == hesap[2]) {
dizi[i][0] = ("" + hesap[0]);
dizi[i][1] = ("" + (hesap[1] + hesap[2]));
dizi[i][2] = ("" + hesap[3]);
} else if (!(hesap[0] == hesap[1])
&& (hesap[2] == hesap[3])) {
dizi[i][2] = ("" + (hesap[2] + hesap[3]));
} else if ((hesap[0] == hesap[1])
&& !(hesap[2] == hesap[3])) {
dizi[i][0] = ("" + (hesap[0] + hesap[1]));
}
break;
}
}
sayiSalla();
} else if (s.equalsIgnoreCase("r")) {
int a;
int[] hesap = new int[4];

for (int i = 0; i < 4; i++) {
a = 0;
for (int x = 0; x < 4; x++) {
hesap[x] = 0;
}
for (int j = 0; j < 4; j++) {

if (!(dizi[i][j].equals("."))) {
hesap[a] = Integer.parseInt(dizi[i][j]);
a++;
}
}
switch (a) {
case 0:
for (int j = 0; j < 4; j++) {
dizi[i][j]=".";
}
break;
case 1:
dizi[i][3]=("" + hesap[0]);
for (int j = 0; j < 3; j++) {
dizi[i][j]=".";
}
break;
case 2:
if (hesap[0] == hesap[1]) {
for (int j = 0; j < 3; j++) {
dizi[i][j]=".";
}
dizi[i][3]=("" + (hesap[0] + hesap[1]));

} else {
for (int j = 0; j < 2; j++) {
dizi[i][j]=".";
}
dizi[i][2]=("" + hesap[0]);
dizi[i][3]=("" + hesap[1]);

}
break;
case 3:
if (hesap[0] == hesap[1]) {
dizi[i][0]=".";
dizi[i][1]=".";
dizi[i][2]=("" + (hesap[0] + hesap[1]));
dizi[i][3]=("" + hesap[2]);

} else if (hesap[1] == hesap[2]) {
dizi[i][0]=".";
dizi[i][1]=".";
dizi[i][2]=("" + hesap[0]);
dizi[i][3]=("" + (hesap[1] + hesap[2]));

} else {
dizi[i][0]=".";
dizi[i][1]=("" + hesap[0]);
dizi[i][2]=("" + hesap[1]);
dizi[i][3]=("" + hesap[2]);

}
break;
case 4:
if ((hesap[0] == hesap[1]) && (hesap[2] == hesap[3])) {
dizi[i][0]=".";
dizi[i][1]=".";
dizi[i][2]=("" + (hesap[0] + hesap[1]));
dizi[i][3]=("" + (hesap[2] + hesap[3]));
} else if (hesap[1] == hesap[2]) {
dizi[i][0]=".";
dizi[i][1]=("" + hesap[0]);
dizi[i][2]=("" + (hesap[1] + hesap[2]));
dizi[i][3]=("" + hesap[3]);
} else if (!(hesap[0] == hesap[1])
&& (hesap[2] == hesap[3])) {
dizi[i][0]=".";
dizi[i][1]=("" + hesap[0]);
dizi[i][2]=("" + hesap[1]);
dizi[i][3]=("" + (hesap[2] + hesap[3]));
} else if ((hesap[0] == hesap[1])
&& !(hesap[2] == hesap[3])) {
dizi[i][0]=".";
dizi[i][1]=("" + (hesap[0] + hesap[1]));
dizi[i][2]=("" + hesap[2]);
dizi[i][3]=("" + hesap[3]);
}
break;
}
}
sayiSalla();

}
diziYazdir();

} while (kontrol());

}

public static boolean kontrol() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (dizi[i][j].equals("2048")) {
return false;
}
}
}
return true;
}

public static void diziYazdir() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
System.out.print(dizi[i][j] + " ");
}
System.out.println();
}
}

public static void sayiSalla() {
int sayac = 0;
int i, j;
int sayac2 = 0;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
if (dizi[i][j].equals("."))
sayac2++;
}

}

do {
i = (int) (Math.random() * 4);
j = (int) (Math.random() * 4);
if (dizi[i][j].equals(".") && sayac < 1 && sayac < sayac2) {
int a = (int) (Math.random() + 0.86);
if (a == 0) {
dizi[i][j] = "4";
sayac++;
} else {
dizi[i][j] = "2";
sayac++;
}
}
} while (sayac < 1 && sayac < sayac2);
}

blackwidow

C de yazılmış'ı  var ama yazan abi sinyalleri çok kullanmış hatta çok spesifik bir de kütüphane kullanmış bilgi edinmek için ona bakabilirsin.