Trò chơi chữ - thực hiện bảng?


12

Tôi đang làm việc trên một trò chơi kiểu boggle cho Android, sử dụng libgdx. Người dùng được cung cấp một lưới các chữ cái 4 x 4 và phải tìm các từ bằng cách kéo ngón tay của họ qua các chữ cái.

Không giống như boggle tôi muốn các chữ cái được sử dụng biến mất. Các chữ cái còn lại sẽ rơi xuống (xuống dưới cùng của bảng, hướng màn hình được cố định) và bảng được nạp lại từ đầu. Người dùng có thể xoay bảng để thử và đặt các chữ cái ở vị trí tốt hơn bằng cách chọn từ chiến lược.

Một ví dụ:

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

Nếu tôi chọn từ GRIT, các chữ cái đó sẽ biến mất và phần còn lại rơi xuống:

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

và sau đó được thay thế bằng các chữ cái mới

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

Tôi bị mắc kẹt tìm ra cách để đại diện cho bảng và gạch.

Tôi đã cố gắng biểu diễn bảng như một ma trận để theo dõi các ô được chọn và di chuyển hợp lệ và các ô được lưu trữ trong một ma trận để có một ánh xạ dễ dàng. Điều này hoạt động, nhưng tôi đã phải viết một số mã phức tạp để xoay bảng.

Làm thế nào để các trò chơi khác xử lý vấn đề này?

EDIT: Vì vậy, nghĩ về nó, tôi thực sự chỉ nên xử lý điểm chạm của mình theo vòng xoay bảng để các tế bào không đổi. Đính kèm một hình ảnh về những gì tôi đang nghĩ.Quá trình chạm màn hình để định hướng bảng không bao giờ thay đổi


1
Bạn có nghĩa là hướng đó, mà các chữ cái đang rơi, phụ thuộc vào hướng thiết bị? Bạn cũng có thể giải thích điều đó có nghĩa là "vặn vít khi tôi muốn xoay gạch" .
Petr Abdulin

Tôi có nghĩa là ánh xạ của tôi từ vị trí bảng đến vị trí gạch là rất phức tạp một khi tôi thực hiện một vòng quay. Tuy nhiên, tôi nghĩ rằng tôi có thể giải quyết vấn đề này nếu tôi nghĩ rằng hội đồng quản trị xoay quanh nguồn gốc của một hệ tọa độ thay vì tất cả các vị trí thay đổi gạch ...
andy mcevoy

Cảm ơn các cập nhật. Thông thường tốt hơn là tự cập nhật câu hỏi, vì vậy những người khác sẽ không cần phải tìm hiểu ý kiến ​​để có thông tin có giá trị. Tôi vẫn chưa rõ cách thức thực hiện xoay vòng (bây giờ), kết quả là gì và cách thực sự gây khó khăn cho việc theo dõi. Không rõ bảng đầy đủ chỉ được xoay hoặc gạch riêng. Thông thường việc thêm các đoạn mã là một sự trợ giúp tuyệt vời để hiểu vấn đề.
Petr Abdulin

Tôi nghĩ rằng tôi đã giải quyết vấn đề sai, xử lý điểm chạm của người dùng theo vòng xoay sẽ cho phép tôi nghĩ bảng là một đối tượng tĩnh.
andy mcevoy

Vui lòng đặt câu trả lời này và chấp nhận câu trả lời của bạn nếu bạn đã tìm ra giải pháp cho vấn đề của mình; nếu không, bạn có thể giữ điều này mở nếu bạn vẫn không chắc chắn 100%. Thuật ngữ để mô tả giải pháp được đề xuất của bạn là "dịch không gian", tức là bạn đang dịch điểm chạm của mình giữa không gian màn hình và không gian bảng (xoay).
Kỹ sư

Câu trả lời:


1

Tôi hoàn toàn không sử dụng mảng cho việc này vì việc quản lý nó sẽ ngày càng phức tạp hơn. Tạo cấu trúc dữ liệu Bảng tùy chỉnh với các Nút có tham chiếu đến hàng xóm của chúng. Đây thực chất là một LinkedList của Nodes đa chiều. Theo cách đó, nếu thư của một nút bị xóa, các nút khác có thể xem điều này theo cách được đóng gói. Điều này tránh số học mảng phức tạp. Bạn sẽ cần một chức năng lớn để có được mọi thứ được kết nối chính xác, nhưng một khi được liên kết, logic sẽ dễ dàng hoạt động hơn nhiều.

Các nút cạnh của bạn sẽ có hàng xóm được đặt thành null, vì vậy hãy đảm bảo xử lý điều đó cho phù hợp trong các phương thức của bạn trong lớp Node cần tham chiếu đến hàng xóm.

Tôi đã sử dụng phương pháp này để triển khai Trò chơi cuộc sống của Conway và một khi bạn đã thiết lập xong, nó sẽ giảm đáng kể sự phức tạp của việc thêm logic làm thay đổi trạng thái của Nút dựa trên hàng xóm.

Tùy thuộc vào cách bạn thao tác với các nút trong bảng, bạn có thể cần một phương thức bảng để lặp qua và xác định trạng thái hoặc hành động tiếp theo và lưu nó trong mỗi nút. Sau đó làm theo điều đó bằng cách lặp và cam kết mỗi nút sang trạng thái mới. Điều này tránh việc có các nút xác định trạng thái tiếp theo của chúng bằng cách xem xét các nút đã thay đổi.

nhập mô tả hình ảnh ở đây


-2

Có, giải pháp là bạn nhận được giá trị từ ma trận hoặc mảng của bạn và đặt Giá trị đó cho mảng tạm thời hoặc ma trận và sau đó đặt giá trị từ đó, điều này sẽ hiển thị cho bạn giá trị xoay của bạn. Tôi đã thêm mã dưới đây tôi nghĩ nó giúp bạn

    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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.