Bối cảnh và vấn đề nghiên cứu

  • Lý do chọn đề tài

    • Sự bùng nổ của công nghệ thông tin đã thay đổi phong cách làm việc và tạo ra nhu cầu giải trí trực tuyến.
    • HTML5 là nền tảng mới cho lập trình game trên Web, cho phép người chơi không cần cài đặt phần mềm.
    • Nhận thấy việc “Mô phỏng game bắn máy bay trên Web” là một cách thực tiễn để áp dụng các công nghệ HTML5, CSS3 và JavaScript trong lĩnh vực giải trí.
  • Mục tiêu và câu hỏi/nhiệm vụ nghiên cứu

    1. Tìm hiểu tổng quan các thành phần thiết kế Web (HTML, CSS, JavaScript, HTML5).
    2. Làm quen và triển khai một game chạy trên Web.
    3. Nghiên cứu các kỹ thuật lập trình game trên Web và mô phỏng được game bắn máy bay.
  • Đối tượng, phạm vi nghiên cứu

    • Đối tượng: Các thành phần và kỹ thuật lập trình game để xây dựng một game bắn máy bay trên Web.
    • Phạm vi:
      • Không gian: Phát triển trên nền HTML5 Canvas trong trình duyệt.
      • Thời gian: Thực hiện trong khoá luận tốt nghiệp năm 2016 (khoá 2012‑2016).

Cơ sở lý thuyết và phương pháp

  • Khung lý thuyết, khái niệm, văn bản pháp luật hoặc mô hình

    • HTML – ngôn ngữ đánh dấu siêu văn bản, xác định cấu trúc trang.
    • CSS3 – quy định cách trình bày, bao gồm các thuộc tính border-radius, gradient, box‑model.
    • JavaScript – ngôn ngữ kịch bản, xử lý sự kiện, vẽ trên Canvas.
    • HTML5 Canvas API – cho phép vẽ đồ họa 2‑D, xử lý pixel (RGBA) và sự kiện chuột, bàn phím.
    • Web Storage (localStorage) – lưu trữ điểm số cao nhất offline.
  • Phương pháp nghiên cứu thực tế

    • Phân tích‑tổng hợp: Thu thập tài liệu về HTML5, CSS3, JavaScript, Canvas.
    • Khảo sát tài liệu (n=?): Tìm kiếm và lựa chọn các nguồn tham khảo liên quan (các tài liệu được liệt kê trong mục “Tài liệu tham khảo”).
    • Lập trình, thử nghiệm: Thiết kế và triển khai mã nguồn JavaScript, HTML, CSS; kiểm thử các chức năng (va chạm, di chuyển, bắn đạn).
    • Đánh giá kết quả: So sánh hành vi game thực tế với mục tiêu đề ra; ghi nhận các lỗi và khắc phục.
  • Nguồn dữ liệu

    • Tài liệu học thuật và hướng dẫn lập trình Web.
    • Hình ảnh, video và audio mẫu (HTML5 <video>, <audio>).
    • Mã nguồn mẫu và các đoạn script được trích dẫn trong nội dung khóa luận.

Nội dung chính theo từng chương

Chương 1: Cơ sở lý thuyết

  • Giới thiệu HTML, CSS, JavaScript, HTML5, CSS3.
  • Trình bày cú pháp thẻ <canvas> và các thuộc tính width, height.
  • Giải thích các sự kiện DOM (chuột, bàn phím) và cách khai báo chúng.

Chương 2: Kỹ thuật lập trình game

Nội dung Mô tả chính
Vẽ ảnh và thao tác với pixel Sử dụng Image, drawImage(), quản lý mảng ImageData (RGBA).
Xử lý sự kiện chuột onclick, onmousemove, onmousedown… trên <canvas>.
Xử lý sự kiện bàn phím Đăng ký keydown, keyup, lưu trạng thái nhiều phím đồng thời.
Vòng lặp game Dùng setInterval(Xulygame, 25) hoặc requestAnimationFrame.
Kiểm tra va chạm Thuật toán cho hình chữ nhật – hình chữ nhật, hình tròn – hình tròn, hình tròn – hình chữ nhật.
Quản lý menu Định nghĩa lớp MenuItem và Screen để chuyển đổi giữa các màn hình.

Chương 3: Phân tích và thiết kế game bắn máy bay

  • Giới thiệu game: Máy bay người chơi di chuyển bằng bàn phím/chuột, máy bay địch xuất hiện ngẫu nhiên, bắn đạn, vụ nổ, âm thanh.
  • Xây dựng giao diện: Tệp HTML chứa <canvas id="gameCanvas" width="800" height="480">.
  • Tương tác người dùng: Sự kiện mousemove để di chuyển máy bay; keydown để bắn và di chuyển.
  • Vẽ và di chuyển máy bay: Sử dụng drawImage() với các đối tượng Image.
  • Xử lý va chạm: Kiểm tra vị trí offsetX, offsetY so với bounding box của máy bay địch và đạn.
  • Quản lý điểm: Biến diemso tăng dần mỗi vòng lặp; hiển thị bằng fillText.
  • Lưu trữ offline: Điểm cao nhất được lưu trong localStorage.

Thiết kế và triển khai

(Chỉ áp dụng vì đề tài là xây dựng phần mềm)

Thành phần Công nghệ / công cụ Chi tiết triển khai
Giao diện HTML5, CSS3 <canvas> cho khu vực game; stylesheet background:#8ED6FF; border:1px solid black; cursor:none;.
Logic game JavaScript (ES5) Sử dụng setInterval, requestAnimationFrame, addEventListener.
Đồ họa Canvas 2D API Vẽ máy bay, đạn, vụ nổ, điểm số.
Âm thanh HTML5 <audio> Các file music/SauTatCa.mp3, music/SauTatCa.ogg.
Lưu trữ Web Storage (localStorage) Lưu điểm cao nhất dưới khóa highScore.
Kiểm thử Thử nghiệm thủ công trên trình duyệt Chrome/Firefox Kiểm tra di chuyển, va chạm, lưu trữ điểm, hiển thị menu.

Kiểm thử chức năng

  • Va chạm máy bay người chơi với máy bay địch: hiển thị alert("Đã chạm vào máy bay địch").
  • Va chạm đạn với máy bay địch: dùng thuật toán hình tròn‑hình chữ nhật.
  • Lưu và tải điểm cao nhất: localStorage.setItem('highScore', diemso);.

Kết quả và đóng góp

  • Kết quả chính

    • Hoàn thành một game bắn máy bay chạy trên Web với các tính năng: di chuyển, bắn đạn, nhiều máy bay địch, vụ nổ, âm thanh, hiển thị điểm và lưu điểm cao nhất offline.
    • Thực hiện được các kỹ thuật: vẽ ảnh trên Canvas, xử lý sự kiện chuột và bàn phím, kiểm tra va chạm đa dạng, lưu trữ dữ liệu bằng localStorage.
  • Giải pháp/kiến nghị

    • Đề xuất mở rộng giao diện bằng CSS3 animation và WebGL để nâng cao hiệu suất đồ họa.
    • Sử dụng module pattern trong JavaScript để quản lý mã nguồn tốt hơn.
  • Đóng góp so với nghiên cứu trước

    • Nâng cao khả năng nghiên cứu và thực hành lập trình game trên Web cho sinh viên CNTT.
    • Đưa ra một giải pháp thực tế cho việc phát triển game HTML5, góp phần quảng bá đồ họa Web đến đông đảo người dùng.

Hạn chế và hướng nghiên cứu tiếp

  • Hạn chế

    • Menu chuyển đổi màn hình chỉ được khái thảo, chưa hoàn thiện.
    • Số lượng máy bay địch và tốc độ chúng tăng dần gây khó khăn cho người chơi khi không giới hạn.
    • Không có cơ chế đánh giá hiệu suất (FPS, độ trễ) trong bản hiện tại.
  • Hướng nghiên cứu tiếp

    • Hoàn thiện hệ thống menu và bổ sung chế độ cấu hình (độ khó, tốc độ).
    • Tối ưu hoá vòng lặp game bằng requestAnimationFrame để giảm tiêu thụ tài nguyên.
    • Tích hợp WebGL hoặc các thư viện game (ví dụ: Phaser) để mở rộng đồ họa 3D.
    • Thêm chế độ đa người chơi qua WebSocket.

Giá trị tham khảo

  • Đối tượng: Sinh viên các ngành Công nghệ Thông tin, Kỹ thuật phần mềm, hoặc những người đang thực hiện đề tài tương tự về lập trình game Web.
  • Phần đáng tham khảo:
    • Chương 1 (cơ sở lý thuyết HTML/CSS/JS) – nền tảng kiến thức.
    • Chương 2 (kỹ thuật lập trình game) – các mẫu xử lý pixel, sự kiện, vòng lặp.
    • Chương 3 (thiết kế game) – quy trình xây dựng giao diện, quản lý đối tượng, lưu trữ điểm.

Câu hỏi thường gặp

  1. Game sử dụng công nghệ nào để vẽ đồ họa?

    • Dựa vào HTML5 Canvas API và drawImage() để vẽ máy bay, đạn, và các hiệu ứng vụ nổ.
  2. Làm sao để lưu điểm cao nhất?

    • Điểm cao nhất được lưu trong Web Storage (localStorage.setItem('highScore', diemso)) và tải lại khi người chơi khởi động lại game.
  3. Kiểm tra va chạm giữa hai hình tròn được thực hiện như thế nào?

    • Tính khoảng cách tâm bằng công thức Pythagoras (c = sqrt(a² + b²)) và so sánh với tổng bán kính hai hình tròn.
  4. Game có hỗ trợ điều khiển bằng bàn phím không?

    • Có; các phím UP (38), DOWN (40), LEFT (37), RIGHT (39), A (65) được đăng ký qua keydown/keyup để di chuyển máy bay và bắn đạn.
  5. Có cơ chế nào để giảm số lượng máy bay địch xuất hiện quá nhanh?

    • Đề xuất giới hạn tần suất tạo máy bay bằng cách kiểm tra if (Math.random() < 0.05) (có trong phần “Giảm bớt số lượng máy bay địch”).

Kết luận

Khóa luận đã thiết kế và triển khai thành công một game bắn máy bay chạy trên nền Web, qua đó chứng minh khả năng áp dụng HTML5, CSS3 và JavaScript trong phát triển trò chơi. Kết quả cho thấy tiềm năng của Canvas cho các ứng dụng giải trí trực tuyến, đồng thời nêu bật những hạn chế cần khắc phục và các hướng mở rộng cho các nghiên cứu tiếp theo.