Duy Huynh Duy Huynh

.

Series làm game AutoChess như Đấu Trường Chân Lý (TFT) nhưng mà đồ họa 2D - P1

Tổng quan

Vào một buổi tối nào đó tui nổi hứng và muốn làm con game này :D, Engine được dùng trong bài viết là Godot 4.3.

Thiết kế bao quát

Bàn cờ

Bàn cờ square (mỗi ô là một tam giác thay vì lục giác), vì thường 2D thì hình vuông sẽ dễ tính, còn 3D thì lục giác dễ tính hơn. Trong bài viết này mình sẽ làm game 2D.

Chess piece

  • Chỉ số: các chess piece sẽ có chỉ số hoàn toàn giống nhau (AD, AP, shields, magic, resists,…), nên có thể dùng 1 class chung cho các piece và inherit nó
  • Tộc hệ: mỗi tộc hệ sẽ là 1 class riêng, và một chess piece có thể nhận 1 list of các class tộc hệ để nhận buff (Composition instead of inheritance)
  • A.I: behavior tree: https://www.gamedeveloper.com/programming/behavior-trees-for-ai-how-they-work
  • Mana and abilities: Này để phần sau

Match

Điều khiển trận đấu, 1 vài thông tin cơ bản:

  • Vòng: 1.0, 1.1,…
  • Bảng Tộc hệ đã được kích của người chơi
  • Thông tin của nhiều người chơi

Triển khai

Để triển khai cho phần 1 này thì tui chỉ tập trung cho khung game cơ bản: Có 1 bàn cờ, có 1 piece, kích được 1 tộc hệ, lắp được behavior tree và các pieces đó đánh nhau được

Bàn cờ

  • 1 class Board, và 1 class Cell, Board.generate_board(X,Y) có thể vẽ một bàn cờ với kích thước X * Y, với mỗi ô là 1 Cell
  • Mỗi 1 cell sẽ có 2 loại tọa độ:
    • Tọa độ map, số đẹp 0,0 -> dòng 1 cột 1 bàn cờ 0,2 -> dòng 2 cột
    • Tọa độ khi vẽ = Tọa độ map * kích thước mỗi ô (16px)
      Vì mỗi ô có thể có kích thước là 16px (hay 32px…,64px,…) nên cần nhân kích thước mới ra được tọa độ chính xác trên màn hinh

Chess_Piece

  • 1 class ChessPiece gồm:
    • ChessStat: class ChessStat mình muốn đây là 1 class riêng, json hoặc Godot Resource để dễ load data Ví dụ chỉ số Cho’Gath: { “hp”: 10000, “attack”: 100, … }
    • Tộc hệ: mảng các tộc hệ của chess
    • BehaviorTree: Behavior của từng con mình sẽ tạo 1 file riêng, như vậy có thể lắp A.I con này vào con kia =))
    • Combat: Thực hiện đánh nhau, dùng chiêu trúng hitbox j đó thì ăn dame
      • Hitbox: Hitbox là 1 class để nhận biết thứ tấn công (đạn, đòn đánh tay, blahblah…)
      • Hurtbox: Hurtbox là 1 vùng khi Hitbox va vào thì sẽ ăn dame
      • Logic Tính dame thì dĩ nhiên sẽ do Chess Piece quản lý, nhiều con có thể chặn dame blahblah khá ảo nên ko thể đẩy đống logic đó xuống hitbox/hurtbox

Tộc hệ

  • Triển khai tộc đấu sĩ trước, tại vì nó chỉ buff chỉ số (máu) thôi, như trên thì 1 chess piece sẽ gồm 1 list các tộc hệ
  • Trong 1 class tộc hệ:
    • Có thể truy cập được Chess Piece (cha của nó) và tự kích hoạt khi đạt điều kiện
    • Ví dụ Đấu sĩ: vào trận buff máu