30/09/2018, 18:39

Tạo 1 con rắn gồm 3 ô?

Xin chào mọi người,
Mình đang tìm hiểu cách để làm 1 game snake cơ bản (không ăn mồi để dài ra):

  • 1 snake (gồm 3 ô vuông, kích thước mỗi ô do mình tự quy định : 20x20)
  • Vì kích thước của con rắn khá nhỏ nên mình lên ý tưởng thuật toán như sau :
  • Vẽ tất cả các trường hợp di chuyển có thể có của con rắn (Ảnh) trong 1 class Panel.

Sau đó ở class Frame mình dùng hotkey để set cho nó chạy : ví dụ như đang ở trường hợp (1) mà nhấn Right thì nó sẽ set lại trường hợp (2), đang trong trường hợp (3) mà nhấn Down thì nó sẽ vào trường hợp (4), …

Đó là ý tưởng của mình, mình không biết với 1 con rắn dài 4 ô, 5 ô, … n ô thì có thuật toán nào tối ưu không ? Mong mọi người giúp đỡ

huong viết 20:40 ngày 30/09/2018

Bạn thử khai báo 1 biến huongdi (1,2,3,4) cho con rắn , Mỗi lần nhấn phím thì tương ứng với 1 hướng đi, Con rắn cứ theo hướng đi đó mà lần lượt đổi hướng từng ô một.

Ví dụ bạn có con rắn 4 ô đang đi lên (huongdi = 1 chẳng hạn), bạn bấm sang phải, huongdi của rắn sẽ set lại bằng 2.

  • bắt đầu o thứ 0 nhận hướng đi là 2 và di chuyển
  • Ô thứ 1 thấy ô thứ 0 chuyển hướng, cũng chuyển hướng theo ở frame sau
  • tiếp tục các ô sau chuyển hướng theo ô trước nó ở các frame tiếp theo
  • Bao giở các ô có hướng đi giống như ô đầu(Tức huong đi của rắn) thì thôi.

Tóm lại là Nguyên con rắn có 1 biến hướng đi. Mỗi ô cũng có 1 biến hướng đi. Hướng đi sẽ truyền lần lượt cho các ô sau.
Mình cũng chỉ nghĩ vậy thôi chứ chưa làm.

... viết 20:53 ngày 30/09/2018

Về thân con rắn thì cứ đặt cho nó

List<Point> snake = new ArrayList<>();
Point head = new Point(3, 1);
//push 3 origin point of snake into snake variable
//started at top left corner as UI coordinate
snake.add(head); //this point used for head of snake
snake.add(new Point(2, 1));
snake.add(new Point(1, 1)); //this point used for tail of snake

Khi di chuyển thì sử dụng 4 biến hướng đi như trên.
Ví dụ di chuyển sang phải:

head.x++;
//gán lại snake[0] là head
//gán lại snake[1] là snake[0]
//gán lại snake[2] là snake[1]
// sử dụng vòng for nếu rắn dài
Bài liên quan
0