+5

Viblo Battle: Hành trình xây dựng game matrix

Viblo Matrix Game

Mở đầu

Viblo Matrix game một trong những vệ tinh của Viblo, ra mắt vào tháng 6 năm 2022 với mục tiêu ban đầu tạo ra một nơi giúp mọi người giải trí hoặc rèn luyện tư duy thuật toán bằng việc code ra những chú bot thông minh để mang đi chinh chiến với những bot khác trong một tựa game logic hoàn toàn mới.

Về ý tưởng, game Matrix đã được Product Owner của Viblo nghĩ ra và chơi cùng bạn bè từ khi còn ngồi trên ghế nhà trường. Chỉ với giấy, bút, vẽ ra những bảng trắng 9x9 và những block 3 số từ 7-10 ngẫu nhiên, 2 người chơi lần lượt điền các block vào bảng trắng, sau đó tính điểm (ý tưởng khá tương tự với cờ caro và bingo) và game Matrix đã được sinh ra như vậy.

Từ ý tưởng đó, đội ngũ phát triển của Viblo đã bắt đầu triển khai một game hội tụ các yếu tố:

  • Tính điểm.
  • Có tính cạnh tranh.
  • Dễ chơi.

Sau nhiều lần họp bàn, cải tổ cùng nhiều phiên bản ra đời khác nhau, đội ngũ phát triển Viblo đã hoàn thiện trò chơi như hiện tại với các tính năng:

  • Bàn chơi có kích thước 9x9.
  • Mỗi lượt có 1 block 1x3 chứa 3 số random từ 7-10 (chế độ dễ), 6-10 (chế độ trung bình), 5-10 (chế độ khó)
  • Tính điểm theo hàng, cột, đường chéo với mỗi N (N>=3) số giống nhau liên tiếp.
  • Các người chơi sẽ có cùng block của mỗi lượt.
  • Gồm các chế độ chơi: hard, medium, easy, bot vs bot, human vs human, human vs bot

Nội dung chính

Luật chơi

Matrix là một Game Logic, trong đó mỗi người chơi sẽ chơi trên một bảng vuông có kích thước 9x9 gồm 81 ô trống.

81 ô này được chia thành 27 mảnh ghép, mỗi mảnh có kích thước 1x3, được đánh số thứ tự từ 0 đến 26 như hình sau:

Khi bắt đầu chơi, mỗi lượt đi, người chơi phải đặt 1 mảnh kích thước 1x3 (gồm 3 con số ngẫu nhiên được hệ thống tạo ra có giá trị từ 5 đến 10 tùy theo chế độ) vào một trong 27 vị trí trong bảng của mình để ghi điểm.

Cách tính điểm Game Matrix

Với mỗi đường dọc, đường ngang và 2 đường chéo, nếu có tối thiểu 3 ô liền kề nhau có cùng giá trị thì các ô liền kề nhau đó sẽ được tính điểm.

Các ô được tính điểm được thể hiện trên giao diện bằng đường thẳng gạch qua các ô đó.

Điểm của mỗi ô thoả mãn điều kiện tính điểm được tính theo công thức = Giá trị của ô x Số đường gạch qua ô đó

Tổng điểm của người chơi được tính bằng tổng điểm của tất cả các ô kể trên.

Ví dụ

Tổng điểm hiện tại sẽ là tổng điểm của tất cả các ô có đường thẳng gạch qua: 8x1 + 8x1 + 8x1 + 8x2 + 8x1 = 48

Trong đó 8x2 là điểm của ô chính giữa bảng và có 2 đường thẳng đi qua.

Người/bot chiến thắng sẽ là người/bot có số điểm lớn nhất sau khi sắp xếp hết 27 mảnh ghép vào bảng vuông, trong thời gian quy định.

Các công nghệ sử dụng

  • Vì là 1 web game nên đội ngũ phát triển đã quyết định tách biệt phần xử lý game và phần hoạt động của trang web làm 2 phần riêng biệt. Trong đó:
    • RUSTReatjs đảm nhận việc vận hành và hiển thị của trò chơi.
    • LaravelVuejs đảm nhận việc vận hành và hiển thị của trang web.

RUST

  • Vậy tại sao lại là RUST mà không phải là một công nghệ khác:

    • Những ưu điểm của RUST :
      • Tốc độ xử lý nhanh, hiệu suất cao.
      • Giúp ngăn chặn việc tràn bộ nhớ.
      • Có khả năng tương thích tốt.
      • Viêc quản lý bộ nhớ thủ công.
    • RUST cũng là một công nghệ mới mà đội ngũ phát triển muốn áp dụng vào các sản phẩm trong tương lai.

=> Do đó mà RUST đã được lựa chọn để làm backend cho việc xử lý logic của matrix.

REACTJS

  • Ưu điểm:
    • Hiệu suất cao.
    • Quản lý trạng thái dễ dàng.
    • Cộng đồng lớn.

=> ReactJS đã giúp cho việc xử lý logic cũng như hiển thị trở nên dễ dàng và nhanh chóng hơn.

Laravel

  • Laravel là một framework không còn xa lạ gì với các lập trình viên về web, với nhiều ưu điểm và giúp tiết kiệm thời gian trong việc xử lý các vấn đề về auth.

Vuejs

  • Tại sao không sử dụng reactjs để làm luôn giao diện cho trang web mà phải dùng Vuejs?

Nguyên nhân đơn giản chỉ là muốn việc xử lý logic game và trang web được độc lập và bảo trì dễ dàng hơn nên Vuejs đã được lựa chọn để phục vụ việc hiển thị cho trang. Kết hợp với việc sử dụng các component để xây dựng nên các thành phần của trang nên việc áp dụng cũng dễ dàng mà không phải học gì nhiều.

Docker

  • Một công cụ quá quen thuộc để xây dựng môi trường làm việc cho các lập trình viên.
  • Với việc chỉ cần setup 1 lần và có thể chạy được trên các thiết bị khác mà không phải cài đặt các công nghệ mà dự án cần nên sẽ tiết kiệm thời gian cài đặt cũng như giúp cho các lập trình viên có một môi trường giống nhau để phát triển.

Khó khăn khi thực hiện

  • Lúc đầu Rust không có trong danh sách công nghệ, nhưng do laravel không đáp ứng được tốc độ random block nên Rust đã được thêm vào để đảm nhận nhiệm vụ xử lý logic của game.
  • Việc tách logic sang một công nghệ mới cũng gây ra khó khăn trong việc đảm bảo lịch sử các bước của người chơi cũng như người dùng không bị giả mạo.
  • Do RUST cũng là một công nghệ mới nên một vài lỗi tốn thời gian fix do cộng đồng tại thời điểm đó cũng chưa lớn.
  • Logic trở nên phức tạp hơn do có sự tham gia của nhiều services.
  • Việc xử lý biên dịch code bot và kết nối với trận đấu: do giới hạn của resource của server nên phải đảm bảo thời gian chạy bot không quá lâu và phải được xử lý song song với người chơi.

Testing và câu chuyện bữa ăn sáng

Bất kỳ dự án nào cũng cần trải qua quá trình testing. Với một trang game như Matrix, việc test cũng phức tạp hơn các phần như:

  • Giao diện, hiển thị trong trang game
  • Logic tính điểm của game
  • Giao diện, hiển thị trang chủ Matrix
  • Tạo trận đấu, tạo cuộc thi
  • Quản lý dữ liệu trong admin

Với một dự án phát triển game như Matrix, việc test lại càng cần sự cẩn thận, thời gian dành để test lại càng nhiều nên đôi khi sự nhàm chán là không thể tránh khỏi. Việc phải chơi đi chơi lại một game cả ngày thậm chí cả tuần khiến đội ngũ phát triển phải nghĩ ra những cách thức khác để làm cho những cuộc chơi thú vị hơn… Những kèo chơi BO3 Matrix ăn sáng đã ra đời từ đó. Việc test game không chỉ là công việc trong giờ hành chính, mà còn trở thành một trò chơi ngoài giờ để anh em “kiếm thêm”.

Đừng nghĩ là cờ bạc, vì chúng mình chỉ kiếm thêm.. bữa sáng thôi. Mỗi giờ nghỉ trưa, sau giờ tan làm là những giờ phút anh em lôi nhau ra “đấu matrix” ăn sáng, mở giải matrix với phần thưởng đặc biệt là những gói xôi xéo cho sáng ngày hôm sau. Có người may mắn cộng với chiến thuật sắc sảo thì có khi được ăn sáng miễn phí đến.. cả tuần, còn ai ma mới, bị dắt thì mua đồ ăn sáng cho các anh em còn lại mãi mới chơi giỏi hơn được.

Cũng nhờ những trận “đấu matrix ăn sáng” đó mà những bug từ giao diện đến logic, từ nhỏ đến to của game dần lộ diện và team phát triển cũng phát hiện và xử lý kịp thời trước khi game được ra mắt đến người dùng. Ngay cả sau khi ra mắt, mỗi tháng team vẫn dành thời gian để mở giải đấu, vừa để kiếm bữa sáng, vừa gắn kết mà cũng kiểm tra tính ổn định của hệ thống.

Nếu bạn cũng muốn thử “kiếm thêm”, hãy mời đồng nghiệp trải nghiệm thử game Matrix ngay tại đây nhé! https://battle.viblo.asia/matrix/home

Kết luận

Kết thúc phần 1, Viblo Engineering đã giới thiệu đến người dùng về Viblo Matrix, đồng thời chia sẻ về một số công nghệ đã được đội ngũ phát triển sử dụng trong quá trình xây dựng sản phẩm này. Hãy bắt đầu những trận đấu Matrix ăn sáng với bạn bè của mình và cùng chờ đón phần 2 với nội dung đi sâu hơn về logic của game Matrix nhé!


© Tác giả: Software Engineer Giang Nguyen, Hoang Linh & Hieu Pham


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí