Code xếp hình chạy trên console

Em xin phép trình bày, chả là năm nay em có bài tập lớn môn công nghệ java, và nhóm của em quyết định làm game puzzle.Thầy bảo là phải có cái logic game trước (cái này dùng ma trận thì em hiểu), để nó có thể chạy đọc lập mà không cần tới GUI ,và sau đó “phủ” lên đám logic đó là giao diện game, thầy bảo là để nếu java swing sau này có không hỗ trợ thì ta không phải code lại toàn bộ game.

Và cái em không hiểu ở đây là không biết cái “phủ” của thầy là ý gì? Mọi người có thể định hướng bước đi cho em không ạ, code trên mạng toàn phi thẳng vào GUI luôn thôi.

Như thầy của bạn nói, logic game không liên quan đến nền tảng console hay GUI gì hết.

Không biết game puzzle của bạn cụ thể về cái gì, mình ví dụ, 2 người chơi trên bảng 8 x 8. Dưới logic bạn tạo 1 mảng 8 x 8, mỗi phần tử là 1 trạng thái đen/ trắng/ rỗng. Trên GUI là 1 mảng 8 x 8, mỗi phần tử là 1 frame, frame có thể màu đen/ trắng/ màu nền.

Mã giả:

class GameBoardLogic {
    int board[][];
}

class GameBoardUI {
    Frame board[][];
}

class Game {
    void change_state(i, j, new_state) {
        gameBoardLogic.change(i, j, new_state);
        gameBoardUI.change(i, j, new_state);
    }
}
4 Likes

Thầy bạn nói đúng rồi đấy, lớp “phủ” ấy chỉ là những thứ liên quan đến xử lý dữ liệu mà không quan tâm đến giao diện hay bất kì thứ gì trực quan (nghe - nhìn). Nó là cốt lõi.
Ví dụ nhẹ vầy cho bạn nhé:

Viết 1 phương thức tính tổng của mảng và in ra màn hình Console.

public static void sumOfArray(int[] arr){
    long sum = 0;
    for(int i = 0; i < arr.length; ++i){
        sum += arr[i];
    }
    System.out.println("Sum: " + sum);
}

Vậy vấn đề ở đây là gì?
Nếu mình cũng yêu cầu tính tổng, nhưng lại yêu cầu in ra giao diện (GUI) khác thì sao? JOptionPane, JavaSwing, JavaFX, JavaWeb, Android?
Bạn phải sửa dòng System.out.println("Sum: " + sum); theo yêu cầu nữa? KHÔNG!
Vậy có cách nào tất cả đều có thể dùng chung (gọi) sumOfArray()?

public static long sumOfArray(int[] arr){
    long sum = 0;
    for(int i = 0; i < arr.length; ++i){
        sum += arr[i];
    }
    return sum;
}

Việc của phương thức chỉ là xử lý và trả về kết quả, bên trong nó không chứa bất kì đoạn mã nào liên quan đến giao diện này nọ (trừ các thông tin liên quan đến gỡ lỗi, ngoại lệ - nếu có).
Sau này, quá trình triển khai giao diện chỉ cần gọi đến nó sẽ có kết quả để hiển thị.
Các bộ thư viện có sẵn họ đều làm vậy, bởi thế bạn có thể in ra bất cứ đâu. Console, Swing, FX, Web,… mà không phải mất công kêu họ “sửa dòng này sang JavaSwing giùm em với”.

7 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?