Game rắn săn mồi

Sử dụng micro:bit để làm game rắn săn mồi

Trong bài viết này chúng ta cùng sử dụng micro:bit để làm game mini rắn săn mồi. Sử dụng cảm biến gia tốc phát hiện hướng nghiêng để điều khiển cho rắn di chuyển theo hướng mong muốn. Hiển thị hình ảnh rắn và thức ăn của rắn bằng ma trận LED có trên micro:bit.

Chuẩn bị

Ý tưởng thực hiện

  • Sử dụng cảm biến gia tốc có trên micro:bit để phát hiện hướng nghiêng và điều khiển rắn di chuyển theo hướng nghiêng đó.
  • Sử dụng ma trận LED để hiển thị rắn và thức ăn của rắn, ngoài ra cũng cần thông báo khi kết thúc game, số điểm người chơi đạt được và level của người chơi đạt được.
  • Khi rắn có độ dài là 20, game sẽ thông báo người chơi đã chuyển sang level mới, đồng thời cho rắn trở lại độ dài là 1 và tăng tốc độ di chuyển của rắn.
  • Sử dụng 2 mảng (array) để lưu toạ độ X, tọa độ Y của rắn từ đầu tới đuôi rắn (phần tử đầu tiên của mảng lưu tọa độ đuôi, và phần tử cuối cùng của mảng lưu tọa độ đầu của rắn).
  • Khi rắn ăn được thức ăn, ta chèn tọa độ của thức ăn vào cuối của mảng lưu tọa độ rắn (làm rắn dài ra).
  • Nếu chưa ăn được thức ăn ta cho rắn di chuyển theo hướng nghiêng.
  • Trường hợp hướng đi của rắn vào trúng đuối rắn hoặc 4 biên của ma trận LED ta thông báo kết thúc game và hiển thị điểm số.

Bước 1: Khởi tạo giá trị ban đầu

Khi bắt đầu trò chơi ta cần khởi tạo các giá trị ban đầu như:

  • Độ dài của rắn là 1, tọa độ ban đầu của rắn là (2,4), hướng di chuyển ban đầu của rắn là đi lên trên.
  • Sinh ngẫu nhiên mồi, đặt độ sáng của mồi là 21.
  • Đặt level Game là 1, và đặt tốc độ Game với timeDelayGame.

Bước 2: Lấy giá trị từ cảm biến gia tốc

  • Ta sử dụng các biến acc_xacc_y để lấy giá trị từ cảm biến gia tốc, giá trị này có độ lớn trong khoảng -1024 đến 1024 tương ứng với góc nghiêng theo trục từ -90* đến 90* so với mặt phẳng ngang.
  • Sau đó ta so sánh giá trị này với ngưỡng 256 (tương ứng với góc nghiêng 22.5 độ) để đưa ra hướng di chuyển cho rắn.
  • Ta sử dụng các biến isWest, isNorth, isSouth, isEast để lưu hướng rắn cần di chuyển. Ví dụ nếu isEast == true thì rắn cần di chuyển sang phải.

Bước 3: Tính toán tọa độ đầu rắn ở bước di chuyển tiếp theo

  • Dựa vào vị trí trước đó của đầu rắn, và hướng di chuyển đã xác định ở bước 2, chúng ta sẽ xác định tọa độ đầu rắn ở bước tiếp theo.
  • Sử dụng 2 biến dxdy là vector chỉ hướng đi của con rắn. (dx,dy) = (-1,0) thì rắn sẽ phải di chuyển sang trái, (dx,dy) = (1,0) thì rắn sẽ phải di chuyển sang phải, (dx,dy) = (0,-1) thì rắn sẽ phải di chuyển lên trên, (dx,dy) = (0,1) thì rắn sẽ phải di chuyển xuống dưới.
  • Gọi px, py là tọa độ mới của đầu rắn. Khi đó px sẽ bằng tọa độ x trước đó của đầu rắn cộng cho dx, tương tự py sẽ bằng tọa độ y trước đó của đầu rắn cộng cho dy.

Bước 3: Xử lí khi rắn được mồi

  • Khi rắn ăn được mồi ta sẽ thêm tọa độ của thức ăn vào mảng chứa tọa độ của rắn (làm rắn dài ra), đồng thời tăng số điểm của người chơi lên 1, tăng độ sáng tại tọa độ thức ăn vừa mới được thêm vào, và cuối cùng là thực hiện việc sinh thức ăn ở tọa độ mới.

Bước 4: Xây dựng khối để sinh thức ăn ngẫu nhiên

  • Sử dụng hàm random để sinh ngẫu nhiên tọa độ thức ăn cho rắn, tuy nhiên cần phải kiểm tra xem tọa độ thức ăn được sinh ra có trùng vào tọa độ của rắn hay không, nếu trùng ta cần phải sinh lại.

Bước 5: Xử lí khi rắn đi vào phần đuôi hoặc đi vào tường.

  • Khi rắn đi vào phần đuôi của mình hoặc đi vào tường ta thông báo Game Over và thông báo điểm mà người chơi nhận được.

Bước 6: Cập nhật lại tọa độ của con rắn sau khi di chuyển.

  • Sau khi di chuyển theo hướng mà người chơi điều khiển, ta cần cập nhật lại tọa độ của tất cả những điểm thuộc con rắn.

Bước 7: Hiển thị rắn và vị trí mồi trên ma trận LED.

  • Sau khi hoàn tất các bước xử lí, ta hiện thị rắn và mồi bằng ma trận LED, với độ sáng của các LED hiển thị rắn là tối đa (255) và độ sáng của mồi thấp hơn (21).
  • Đầu tiên ta cần xóa màn hình ở trạng thái trước đó clear screen, sau đó thực hiện việc hiển thị trạng thái mới của game, cuối cùng là pause với timeDelayGame là tốc độ của game.

Bước 8: Xử lí khi người chơi qua level mới.

  • Khi độ dài của rắn là 20, game sẽ chuyển sang cấp (level) mới, lúc này độ dài của rắn sẽ trở về 1, tốc độ rắn cũng sẽ tăng theo để tăng độ khó của game.

Kết nối tổng quát

  • Tổng hợp các bước xử lí cần thiết, ta có được mô hình tổng quát.
  • Tham khảo chương trình mẫu: tại đây.

Kết quả

Sau khi thực hiện đầy đủ các bước như trên ta thu được kết quả như Video bên cạnh.