Kelime oyun tahtası uygulaması?


12

Ben libgdx kullanarak android için bir boggle türü oyun üzerinde çalışıyorum. Kullanıcıya 4x4 harf ızgarası sunulur ve kelimeleri parmağınızı harfler üzerinde sürükleyerek bulmalıdır.

Boggle'ın aksine kullanılmış harflerin kaybolmasını istiyorum. Kalan harfler düşer (panonun altına, ekran yönü sabittir) ve tahta üstten doldurulur. Kullanıcılar, stratejik kelime seçimiyle harfleri daha iyi bir yere koymaya çalışmak için tahtayı döndürebilirler.

Bir örnek:

d g a o
u o r T
h v R I
d G n a

GRIT kelimesini seçersem, bu harfler kaybolur ve geri kalanlar düşer:

d
u g a
h o r o
d v n a

ve sonra yeni harflerle değiştirilir

d w x y
u g a z
h o r o
d v n a

Tahta ve fayansların nasıl temsil edileceğini bulmakta sıkıştım.

Seçili fayansları ve geçerli hareketleri ve bir matriste saklanan fayansları takip etmek için tahtayı bir matris olarak temsil etmeyi denedim, böylece kolay bir eşleme vardı. Bu işe yarıyor, ama tahta döndürmek için bazı kıvrımlı kod yazmak zorunda kaldı.

Diğer oyunlar bu sorunu nasıl ele alıyor?

EDIT: Bu yüzden düşünüyorum, gerçekten sadece dokunma noktası tahta dönme göre işlemek gerekir böylece hücreler sabit kalır. Düşündüğüm şeyin bir resmini ekledim.Ekran yönüne dokunarak tahta yönü asla değişmez


1
Yani, hangi harflerin düştüğü yön cihaz yönüne bağlı mı? Ayrıca size demek istiyorsunuz o açar mısınız "Ben fayans döndürmek istediğinizde berbat" .
Petr Abdulin

Bir rotasyon yaptıktan sonra tahta konumundan kiremit konumuna eşlememin çok kıvrımlı olduğunu söyledim. Ancak, eğer kurulu tüm fayans değişen yerler yerine bir koordinat sisteminin kökeni hakkında dönen olarak düşünürsem bu sorunu çözebilirim ...
andy mcevoy

Güncelleme için teşekkürler. Sorunun kendisini güncellemek genellikle daha iyidir, bu nedenle başkalarının değerli bilgiler için yorum yapması gerekmez. Hala rotasyonun nasıl yapıldığını (şimdi), sonucunun ne olduğunu ve izlemeyi gerçekten nasıl zorlaştırdığını hala net değil. Tam tahtanın döndürülüp döndürülmediği veya yalnızca tek tek fayans olup olmadığı net değildir. Genellikle kod parçaları eklemek sorunu anlamak için çok yardımcı olur.
Petr Abdulin

Sorunun tamamen yanlış gittiğini düşünüyorum, kullanıcıların temas noktasını rotasyona göre işlemek, tahtayı statik bir nesne olarak düşünmemi sağlayacak.
andy mcevoy

Lütfen bunu bir cevaba koyun ve probleminizin çözümünü bulduysanız cevabınızı kabul edin; aksi halde% 100 emin değilseniz bunu açık tutabilirsiniz. Önerilen çözümünüzü tanımlamak için kullanılan terim "alan çevirisi" dir, yani temas noktanızı ekran alanı ve (döndürülmüş) pano alanı arasında çeviriyorsunuzdur.
Mühendis

Yanıtlar:


1

Bunun için dizileri hiç kullanmayacağım çünkü onu yönetmek gittikçe daha karmaşık hale gelecektir. Komşularına referansları olan Düğümlerle özel bir Board veri yapısı oluşturun. Bu temelde çok boyutlu bir LinkedList Düğümüdür. Bu şekilde, bir düğümün harfi kaldırılırsa, diğer düğümler bunu kapsüllenmiş bir şekilde görüntüleyebilir. Bu karmaşık dizi aritmetiğini önler. Her şeyi doğru bir şekilde bağlamak için büyük bir işleve ihtiyacınız olacak, ancak bağlandıktan sonra mantığın çalışması çok daha kolay olmalıdır.

Kenar düğümlerinizin komşuları olarak ayarlanacaktır null, bu nedenle bunu Düğüm sınıfındaki komşularınıza başvurması gereken yöntemlerinizde uygun şekilde ele aldığınızdan emin olun.

Conway'in Hayat Oyunu'nu uygulamak için bu yaklaşımı kullandım ve kurduktan sonra, komşulara göre bir Düğümün durumunu değiştiren mantık eklemenin karmaşıklığını önemli ölçüde azaltır.

Panodaki düğümleri nasıl işlediğinize bağlı olarak, bir sonraki durumu veya eylemi yinelemek ve belirlemek ve bunu her düğümde kaydetmek için bir tahta yöntemine ihtiyacınız olabilir. Ardından her düğümü tekrarlayarak ve yeni duruma getirerek bunu izleyin. Bu, daha önce değişen düğümlere bakarak düğümlerin bir sonraki durumlarını belirlemelerini önler.

resim açıklamasını buraya girin


-2

Evet çözüm, matrisiniz veya dizinizden değer almak ve geçici dizi veya matris için bu değeri ayarlamak ve sonra oradan ayarlanan değeri size döndürme girdinizi göstermek. Aşağıdaki kodu ekledim, onun size yardımcı olduğunu düşünüyorum

    int MAX_GRID = 4;
    int[][] main_array = new int[MAX_GRID][MAX_GRID];
    int[][] temp_array = new int[MAX_GRID][MAX_GRID];

    /** This method for clockwise **/
    int mainRow = MAX_GRID - 1;
    for (int c = 0; c < MAX_GRID; c++) {
        for (int r = 0; r < MAX_GRID; r++) {
            temp_array [mainRow][c] = main_array [r][c];
            Log.i("TAG", "R C : [ " + mainRow + " " + c + " ]" + " => [ "
                    + r + " " + c + " ]");
            mainRow--;
        }
    }
    main_array = temp_array;

    /** This method for anti-clockwise **/
    int mainCol = 0;
    for (int c = MAX_GRID - 1; c >= 0; c--) {
        for (int r = MAX_GRID - 1; r >= 0; r--) {
            temp_array [r][mainCol] = main_array [c][r];
            Log.i("TAG", "R C : [ " + r + " " + mainCol + " ]" + " => [ "
                    + c + " " + r + " ]");
        }
        mainCol++;
    }
    main_array = temp_array;

    // Now you can set main_array value then its rotate
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.