Java

Java Hafıza Oyunu Nasıl Yapılır ?

Java hafıza oyunu, Java programlama dilini yeni öğrenen yazılımcı adaylarının faydalanabileceği basit bir örnektir. Bu örneği sizlerle paylaşmak istedik. Java hafıza oyunu kodlarını inceleyerek sizlerin de tekrar yazmanız öğrenmek açısından oldukça faydalı olacaktır.

Java Hafıza Oyunu

Java hafıza oyunu, karışık halde her karttan iki tane bulunan ve bu kartları tahmin edip yerlerini hafızamızda tutarak aynı kartları tahmin etmeye çalıştığımız basit ve eğlenceli bir oyundur. Hadi Java hafıza oyunu kodlarını bir kaç adımda yazalım.

1.Adım : Kart Sınıfı 

Başlangıç olarak Kart adında bir nesne oluşturuyoruz. Kart nesnemiz içerisinde iki tane veri tutuyor. Daha önce bu oyunu oynadıysanız hatırlarsınız ki genellikle kartın üzerine resim koyulurdu. Biz konsol uygulaması yaptığımız için bu resimler yerine harfleri kullanmayı tercih ettik. Birinci verimiz char veri tipindeki “deger” isimli değişkende tuttuğumuz bu harfler olacak. İkinci verimiz ise bu kartların açılıp açılmadığının verisini tutan boolean veri tipindeki “tahmin” değişkenimiz olacak.

public class Kart {

    public char deger;
    public boolean tahmin=false;

    public Kart(char deger) {
        this.deger = deger;
    }

    public char getDeger() {
        return deger;
    }

    public void setDeger(char deger) {
        this.deger = deger;
    }

    public boolean isTahmin() {
        return tahmin;
    }

    public void setTahmin(boolean tahmin) {
        this.tahmin = tahmin;
    }
}

2.Adım : Peki Java hafıza oyunu nasıl görünecek ?

Konsol üzerinden bir oyun yaptığımız için çok fazla görsellik bekleyemeyiz. Bunun için iç içe for döngüsü kullanarak 4×4 bir matris görüntüsü oluşturmaya çalıştık. Kodları tekrar tekrar yazmamak için oyunTahtası isimli bir metot oluşturuyoruz. Bu oyunTahtası isimli metodumuz çağrıldığı yerde oluşturduğumuz görüntüyü konsol ekranında gösterecek.

public static void oyunTahtası(){

    System.out.println();
    System.out.println(" ------------------");
    for(int i = 0; i < 4 ; i++){

        for(int j = 0 ; j < 4 ; j++){

            if (kartlar[i][j].isTahmin()){

                System.out.print(" |"+ kartlar[i][j].getDeger()+"| ");

            }else{

                System.out.print(" | | ");

            }
        }
        System.out.println();
        System.out.println(" ------------------");
    }
}

3.Adım : Oyunu nasıl oynayacağız ?

Artık oyun ekranımızı tasarladığımıza göre tahmin etme işlemine geçebiliriz. Bu kısımda kullanıcıdan hangi kartı seçmek istedikleri bilgisini istiyoruz. Önce satır sonra sütun numaralarını kullanıcıdan alıyoruz. Aldığımız satır ve sütun değerlerinin denk geldiği “Kart” nesnesinin “tahmin” değişkeninde ki false olan değeri true yapıyoruz. Yani artık true olduğu için içerisindeki harfin ne olduğu konsol ekranında görülebilir. Eğer ki ikinci tahminimizde aynı harfi tahmin edebilirsek iki kart da açılmış oluyor. Yanlış tahmin yapılırsa seçilen kartların tahmin değerlerini false yapıp kartları tekrardan kapatıyoruz.

public static void tahminEt(){

    while(true) {

        oyunTahtası();

        Scanner sc = new Scanner(System.in);

        System.out.println("Birinci tahmininizin satırını giriniz :");

        int i1 = sc.nextInt() - 1;

        if (sayiKontrol(i1)) {

            System.out.println("Birinci tahmininizin sütununu giriniz :");

            int j1 = sc.nextInt() - 1;

            if(sayiKontrol(j1)) {

                kartlar[i1][j1].setTahmin(true);

                oyunTahtası();

                System.out.println("İkinci tahmininizin satırını giriniz :");

                int i2 = sc.nextInt() - 1;

                if (sayiKontrol(i2)) {

                    System.out.println("İkinci tahmininizin sütununu giriniz :");

                    int j2 = sc.nextInt() - 1;

                    if(sayiKontrol(j2)) {

                        if (kartlar[i1][j1].getDeger() == kartlar[i2][j2].getDeger()) {

                            System.out.println("Doğru Tahmin");
                            kartlar[i2][j2].setTahmin(true);
                            break;
                        } else {

                            System.out.println("Yanlış tahmin");
                            kartlar[i1][j1].setTahmin(false);
                            break;
                        }
                    }
                }
            }
        }
    }
}

4.Adım : Olası hataları kontrol edelim 

Basit bir örnek yaptığımız için çok fazla kontrol yapmıyoruz. Örnek olması açısından bir hatamızı kontrol edelim. Kullanıcı bizim matrisimizin boyutlarından fazla bir sayı veya negatif bir sayı girebilir. Bu durum oyunumuzda hataya yol açar. Bu sorunu gidermek için ” sayiKontrol “ isimli bir metot oluşturduk.Bu metot boolean tipinde bir olduğu için true veya false değer dönecek. Biz de bu şekilde bir hata olmadığını kontrol etmiş olacağız.

public static boolean sayiKontrol(int sayi){

    if(0 <= sayi && sayi < 4 ){

        return true;
    }else {
        System.out.println("Lütfen satır,sütun değerlerinin dışında sayı girmeyiniz...");
        return false;
    }
}

5.Adım : Oyun ne zaman sona erecek ?

Oyunumuzun bitip bitmediğini kontrol ettiğimiz bir metot yazalım. İç içe for döngüsü kullanarak bütün kartların “tahmin” değişkenlerindeki verilerin true olup olmadığını kontrol ediyoruz. Bütün değerler true ise tüm kartlar açılmış, yani oyun bitmiş demektir.

public static boolean oyunBittimi() {

    for (int i = 0; i < 4; i++) {

        for (int j = 0; j < 4; j++) {

            if (kartlar[i][j].isTahmin() == false) {
                return false;
            }
        }

    }
    return true;
}

6.Adım : Son olarak Main sınıfımızı yazalım

Artık “Main” sınıfımızı yazabiliriz. Kartlarımızın verilerini tutacak olan iki boyutlu diziyi oluşturuyoruz. Daha sonra yeni “Kart” nesneleri oluşturarak oluşturduğumuz nesneleri diziye ekliyoruz. Oyunun bitene kadar tahmin edilebilmesi için while ile döngü oluşturuyoruz. Son olarak da oyunun bittiğini kullanıcıya bildiren bir mesaj yazarak programımızı bitiriyoruz.

public class Main {

    private static Kart[][] kartlar = new Kart[4][4];

    public static void main(String[] args) {

        kartlar[0][0]= new Kart('E');
        kartlar[0][1]= new Kart('A');
        kartlar[0][2]= new Kart('B');
        kartlar[0][3]= new Kart('F');
        kartlar[1][0]= new Kart('G');
        kartlar[1][1]= new Kart('A');
        kartlar[1][2]= new Kart('D');
        kartlar[1][3]= new Kart('F');
        kartlar[2][0]= new Kart('C');
        kartlar[2][1]= new Kart('C');
        kartlar[2][2]= new Kart('D');
        kartlar[2][3]= new Kart('H');
        kartlar[3][0]= new Kart('E');
        kartlar[3][1]= new Kart('G');
        kartlar[3][2]= new Kart('B');
        kartlar[3][3]= new Kart('H');

        while(oyunBittimi()==false) {

            tahminEt();
        }
        System.out.println("Tebrikler.Oyunu başarıyla tamamladınız...");
    }
Java hafıza oyunu örneğini size basit olarak anlatmaya çalıştık. Kodun tüm halini aşağıda bulabilirsiniz. Sorularınız veya önerileriniz olursa bize yorum atabilirsiniz.

Main sınıfını tek parça görmek için tıklayınız.

import java.util.Scanner;

public class Main {

    private static Kart[][] kartlar = new Kart[4][4];

    public static void main(String[] args) {

        kartlar[0][0]= new Kart('E');
        kartlar[0][1]= new Kart('A');
        kartlar[0][2]= new Kart('B');
        kartlar[0][3]= new Kart('F');
        kartlar[1][0]= new Kart('G');
        kartlar[1][1]= new Kart('A');
        kartlar[1][2]= new Kart('D');
        kartlar[1][3]= new Kart('F');
        kartlar[2][0]= new Kart('C');
        kartlar[2][1]= new Kart('C');
        kartlar[2][2]= new Kart('D');
        kartlar[2][3]= new Kart('H');
        kartlar[3][0]= new Kart('E');
        kartlar[3][1]= new Kart('G');
        kartlar[3][2]= new Kart('B');
        kartlar[3][3]= new Kart('H');

        while(oyunBittimi()==false) {

            tahminEt();
        }
        System.out.println("Tebrikler.Oyunu başarıyla tamamladınız...");
    }

    public static void tahminEt(){

        while(true) {

            oyunTahtası();

            Scanner sc = new Scanner(System.in);

            System.out.println("Birinci tahmininizin satırını giriniz :");

            int i1 = sc.nextInt() - 1;

            if (sayiKontrol(i1)) {

                System.out.println("Birinci tahmininizin sütununu giriniz :");

                int j1 = sc.nextInt() - 1;

                if(sayiKontrol(j1)) {

                    kartlar[i1][j1].setTahmin(true);

                    oyunTahtası();

                    System.out.println("İkinci tahmininizin satırını giriniz :");

                    int i2 = sc.nextInt() - 1;

                    if (sayiKontrol(i2)) {

                        System.out.println("İkinci tahmininizin sütununu giriniz :");

                        int j2 = sc.nextInt() - 1;

                        if(sayiKontrol(j2)) {

                            if (kartlar[i1][j1].getDeger() == kartlar[i2][j2].getDeger()) {

                                System.out.println("Doğru Tahmin");
                                kartlar[i2][j2].setTahmin(true);
                                break;
                            } else {

                                System.out.println("Yanlış tahmin");
                                kartlar[i1][j1].setTahmin(false);
                                break;

                            }
                        }

                    }
                }

            }
        }
    }

    public static boolean oyunBittimi() {

        for (int i = 0; i < 4; i++) {

            for (int j = 0; j < 4; j++) {

                if (kartlar[i][j].isTahmin() == false) {
                    return false;
                }
            }

        }
        return true;
    }

    public static void oyunTahtası(){


        System.out.println();
        System.out.println(" ------------------");
        for(int i = 0; i < 4 ; i++){

            for(int j = 0 ; j < 4 ; j++){

                if (kartlar[i][j].isTahmin()){

                    System.out.print(" |"+ kartlar[i][j].getDeger()+"| ");

                }else{

                    System.out.print(" | | ");

                }
            }
            System.out.println();
            System.out.println(" ------------------");
        }
    }

    public static boolean sayiKontrol(int sayi){

        if(0 <= sayi && sayi < 4 ){

            return true;

        }else {

            System.out.println("Lütfen satır,sütun değerlerinin dışında sayı girmeyiniz...");
            return false;
        }
    }
}

Kart sınıfını görmek için tıklayınız.

public class Kart {

    public char deger;
    public boolean tahmin=false;

    public Kart(char deger) {
        this.deger = deger;
    }

    public char getDeger() {
        return deger;
    }

    public void setDeger(char deger) {
        this.deger = deger;
    }

    public boolean isTahmin() {
        return tahmin;
    }

    public void setTahmin(boolean tahmin) {
        this.tahmin = tahmin;
    }
}

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu
Kapalı