Word game - implementasi papan?

12

Saya sedang mengerjakan game jenis boggle untuk android, menggunakan libgdx. Pengguna disajikan dengan kotak surat 4x4 dan harus menemukan kata-kata dengan menyeret jari mereka ke atas huruf.

Tidak seperti boggle, saya ingin huruf yang digunakan menghilang. Surat yang tersisa akan jatuh (ke bagian bawah papan, orientasi layar tetap) dan papan diisi ulang dari atas. Pengguna dapat memutar papan untuk mencoba dan menempatkan sulit untuk menggunakan huruf di tempat yang lebih baik dengan pemilihan kata strategis.

Sebuah contoh:

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

Jika saya memilih kata GRIT, surat-surat itu akan hilang dan sisanya jatuh:

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

dan kemudian diganti dengan surat baru

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

Saya buntu mencari cara untuk mewakili papan dan ubin.

Saya mencoba mewakili papan sebagai matriks untuk melacak ubin yang dipilih dan gerakan yang valid dan ubin yang disimpan dalam matriks juga sehingga ada pemetaan yang mudah. Ini berfungsi, tetapi saya harus menulis beberapa kode berbelit-belit untuk memutar papan.

Bagaimana gim lain menangani masalah ini?

EDIT: Jadi memikirkannya, saya harus benar-benar hanya memproses titik sentuh saya sesuai dengan rotasi papan sehingga sel tetap konstan. Terlampir gambar apa yang saya pikirkan.Proses layar sentuh sehingga orientasi papan tidak pernah berubah

andy mcevoy
sumber
1
Maksud Anda, ke arah mana huruf-huruf jatuh, tergantung pada orientasi perangkat? Bisakah Anda juga menguraikan maksud Anda dengan "mengacaukan ketika saya ingin memutar ubin" .
Petr Abdulin
Maksud saya, pemetaan saya dari lokasi papan ke lokasi ubin sangat berbelit-belit begitu saya melakukan rotasi. Namun, saya pikir saya dapat menyelesaikan masalah ini jika saya menganggap papan sebagai berputar tentang asal-usul sistem koordinat alih-alih semua ubin mengubah tempat ...
andy mcevoy
Terima kasih atas pembaruannya. Biasanya lebih baik memperbarui pertanyaan itu sendiri, jadi orang lain tidak perlu menggali komentar untuk info berharga. Masih belum jelas bagi saya bagaimana rotasi dilakukan (sekarang), apa hasilnya, dan bagaimana sebenarnya membuat pelacakan menjadi sulit. Tidak jelas apakah papan penuh diputar atau ubin individual saja. Biasanya menambahkan fragmen kode sangat membantu untuk memahami masalah.
Petr Abdulin
Saya pikir saya salah tentang masalah, memproses titik sentuh pengguna sesuai dengan rotasi akan memungkinkan saya untuk memikirkan papan sebagai objek statis.
andy mcevoy
Harap berikan jawaban ini dan terima jawaban Anda jika Anda telah menemukan solusi untuk masalah Anda; jika tidak, Anda dapat tetap membuka ini jika Anda masih tidak yakin 100%. Istilah untuk menggambarkan solusi yang Anda usulkan adalah "terjemahan ruang", yaitu Anda menerjemahkan titik sentuh Anda antara ruang layar dan ruang papan (yang diputar).
Insinyur

Jawaban:

1

Saya tidak akan menggunakan array untuk ini sama sekali karena mengaturnya akan semakin kompleks. Buat struktur data Dewan khusus dengan Node yang memiliki referensi ke tetangga mereka. Ini pada dasarnya adalah multi-dimensi LinkedList of Nodes. Dengan cara itu, jika huruf sebuah node dihapus, node lain dapat melihatnya dengan cara enkapsulasi. Ini menghindari aritmatika array yang rumit. Anda akan membutuhkan satu fungsi besar untuk membuat semuanya terhubung dengan benar, tetapi begitu ditautkan, logika akan lebih mudah untuk dikerjakan.

Edge edge Anda akan memiliki tetangga yang ditetapkan null, jadi pastikan untuk menanganinya sesuai dengan metode Anda di kelas Node yang perlu merujuk ke tetangga.

Saya telah menggunakan pendekatan ini untuk mengimplementasikan Game Of Life Conway dan setelah Anda mengaturnya, secara drastis mengurangi kompleksitas menambahkan logika yang mengubah keadaan Node berdasarkan tetangga.

Bergantung pada bagaimana Anda memanipulasi node di papan, Anda mungkin memerlukan satu metode papan untuk mengulangi dan menentukan status atau tindakan selanjutnya dan menyimpannya dalam setiap node. Kemudian ikuti dengan iterasi dan komit setiap node ke negara baru. Ini menghindari node menentukan status mereka selanjutnya dengan melihat node yang sudah berubah.

masukkan deskripsi gambar di sini

Wisaya Tartle
sumber
-2

Ya solusinya adalah Anda mendapatkan nilai dari matriks atau array dan mengatur Nilai itu untuk temp array atau matriks dan kemudian mengatur nilai dari sana ini menunjukkan Anda rotate value gird. Saya menambahkan kode di bawah ini saya pikir ini membantu Anda

    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
Divyang Metalia
sumber