Chi tiết phần mềm trò chơi Tower Defense: Cấu trúc và Tính năng

Đặc tả phần mềm game thủ thành: Tìm hiểu yêu cầu, tính năng và thiết kế chi tiết để xây dựng trò chơi tower defense hấp dẫn, tối ưu.

Tác giả

Nguyễn Minh Thái

Người đăng

Ẩn danh

Thể loại

Software Specification

2023

104
2
0

Phí lưu trữ

35 Point

Tóm tắt

I. Hướng dẫn xây dựng đặc tả phần mềm game thủ thành hoàn chỉnh

Việc xây dựng một đặc tả phần mềm game thủ thành là bước nền tảng quyết định sự thành công của dự án. Một tài liệu chi tiết không chỉ định hình tầm nhìn sản phẩm mà còn là kim chỉ nam cho đội ngũ phát triển, từ lập trình viên, họa sĩ đến người kiểm thử. Tài liệu này cần bắt đầu với việc xác định rõ vấn đề cốt lõi, như trong tài liệu gốc: "Implement a game called Tower Defense. In the game, the player can buy defenders to resist the monster’s attack". Đây là tuyên bố sứ mệnh, định rõ mục tiêu cơ bản. Từ đó, các tài liệu quan trọng như Software Requirements Specification (SRS)Game Design Document (GDD) được hình thành. SRS tập trung vào các yêu cầu chức năng và phi chức năng, mô tả hệ thống sẽ làm gì. GDD lại đi sâu vào trải nghiệm người chơi, bao gồm cốt truyện, cơ chế chơi, thiết kế màn chơi và nghệ thuật. Sự kết hợp giữa hai tài liệu này tạo ra một bộ khung vững chắc. Tài liệu đặc tả phần mềm game thủ thành phải định nghĩa rõ các thực thể trong game, ví dụ như trụ (Tower), đơn vị lính (Unit), kẻ tấn công (Attacker), và người phòng thủ (Defender). Mỗi thực thể cần được mô tả chi tiết về thuộc tính và hành vi. Ví dụ, lớp 'Tower' được mô tả là một lớp trừu tượng với các thuộc tính như damage, cooldown, range và các phương thức tấn công. Việc phân tích và định nghĩa rõ ràng các lớp đối tượng ngay từ đầu giúp đơn giản hóa quá trình phát triển và giảm thiểu rủi ro hiểu sai yêu cầu. Quá trình này đảm bảo mọi thành viên trong nhóm đều có chung một cách hiểu về sản phẩm cuối cùng.

1.1. Vai trò của tài liệu Software Requirements Specification SRS

Tài liệu Software Requirements Specification (SRS) là văn bản chính thức mô tả toàn diện về những gì phần mềm sẽ thực hiện và cách nó hoạt động. Trong bối cảnh phát triển game thủ thành, SRS là cầu nối giữa ý tưởng ban đầu và sản phẩm kỹ thuật. Nó phác thảo các yêu cầu chức năng, chẳng hạn như "người chơi có thể mua lính phòng thủ", "nâng cấp sức mạnh của trụ và lính", và "quái vật sẽ mạnh hơn theo thời gian". Bên cạnh đó, SRS cũng xác định các non-functional requirements (yêu cầu phi chức năng) như hiệu suất, khả năng tương thích trên các nền tảng, và độ ổn định của hệ thống. Một SRS tốt giúp hạn chế 'scope creep' (sự phình to phạm vi dự án), đảm bảo dự án đi đúng hướng và đáp ứng kỳ vọng của các bên liên quan. Nó là cơ sở để lập kế hoạch, ước tính chi phí và tạo ra các kịch bản kiểm thử (test cases).

1.2. Các thành phần cốt lõi trong một Game Design Document GDD

Nếu SRS là bộ xương kỹ thuật, thì Game Design Document (GDD) chính là linh hồn của trò chơi. GDD tập trung vào trải nghiệm của người chơi. Nó mô tả chi tiết về thế giới game, cốt truyện, nhân vật, và quan trọng nhất là các game mechanics (cơ chế gameplay). Ví dụ, tài liệu gốc mô tả cơ chế: "Có 3 loại trụ, mỗi loại có 3 cấp độ sức mạnh khác nhau. Có hai loại lính phòng thủ: đánh xa và cận chiến". GDD cũng bao gồm các tài liệu con như level design document, đặc tả cách thiết kế từng màn chơi, vị trí đặt trụ, và đường đi của quái vật. Ngoài ra, GDD còn định nghĩa về giao diện người dùng (UI), trải nghiệm người dùng (UX), phong cách nghệ thuật, và thiết kế âm thanh. Đây là tài liệu sống, liên tục được cập nhật trong suốt quá trình phát triển để phản ánh những thay đổi và cải tiến trong thiết kế.

II. Thách thức chính trong thiết kế và cân bằng game thủ thành

Thiết kế một game thủ thành hấp dẫn đối mặt với nhiều thách thức, trong đó nổi bật nhất là việc thiết kế các đợt tấn công của địch và duy trì sự cân bằng của trò chơi. Thách thức đầu tiên nằm ở việc tạo ra các kịch bản tấn công vừa thử thách vừa công bằng. Nếu quá dễ, người chơi sẽ nhanh chóng nhàm chán. Nếu quá khó, họ sẽ cảm thấy nản lòng và từ bỏ. Yếu tố cốt lõi là enemy wave design, đòi hỏi sự tính toán kỹ lưỡng về số lượng, loại quái, tốc độ di chuyển và sức mạnh của chúng qua từng đợt. Tài liệu gốc đề cập: "After turns, monsters will become stronger (attack, speed, defense)". Việc tăng tiến độ khó này phải được điều chỉnh một cách hợp lý. Thách thức thứ hai, và cũng là quan trọng nhất, là game balancing. Đây là nghệ thuật điều chỉnh mọi thông số trong game – từ sát thương của trụ, máu của quái vật, đến chi phí nâng cấp – để không có một chiến thuật nào trở nên quá vượt trội. Một hệ thống cân bằng tốt khuyến khích người chơi thử nghiệm nhiều loại trụ và chiến thuật khác nhau. Quá trình này đòi hỏi phải phân tích dữ liệu, chạy thử nghiệm liên tục và sử dụng các công thức toán học để mô hình hóa sức mạnh tương đối giữa người chơi và kẻ địch. Ví dụ, công thức Total Strength formula trong tài liệu gốc là một nỗ lực để lượng hóa sức mạnh, tạo cơ sở cho việc cân bằng tự động hoặc bán tự động.

2.1. Phân tích thiết kế đợt tấn công của địch enemy wave design

Thiết kế đợt tấn công của địch (enemy wave design) là một khoa học. Nó không chỉ đơn thuần là tăng số lượng quái vật. Một thiết kế tốt cần tạo ra nhịp độ cho trận đấu, với những khoảnh khắc căng thẳng xen kẽ những lúc tạm nghỉ. Tài liệu gốc nêu rõ: "When each turn ends, the player will have 5 seconds to prepare for the next turn". Khoảng nghỉ này cực kỳ quan trọng. Các nhà thiết kế phải xem xét sự kết hợp giữa các loại quái vật khác nhau (ví dụ: một con trùm máu trâu đi cùng một bầy quái nhỏ, nhanh nhẹn) để tạo ra các thử thách chiến thuật đa dạng. Lớp UnitSpawner (Wave Manager) trong tài liệu gốc chịu trách nhiệm quản lý việc này, sử dụng một hàng đợi (attackersQueue) và các biến số như StrengthPerWave để tự động tạo ra các đợt tấn công có độ khó tăng dần. Việc này đảm bảo tính tái chơi và giữ cho game luôn mới mẻ.

2.2. Bài toán cân bằng game game balancing qua các màn chơi

Cân bằng game (game balancing) là một quá trình lặp đi lặp lại nhằm đảm bảo trải nghiệm công bằng và thú vị. Mục tiêu là không để tồn tại một chiến lược "bá đạo" duy nhất. Trong game thủ thành, điều này liên quan đến việc điều chỉnh chi phí và hiệu quả của các loại trụ và nâng cấp. Ví dụ, một trụ gây sát thương diện rộng phải có tốc độ bắn chậm hơn hoặc chi phí cao hơn so với trụ bắn đơn mục tiêu. Tài liệu gốc cố gắng giải quyết bài toán này bằng cách định lượng hóa sức mạnh qua các phương thức như StrengtCaculation() trong lớp Unit. Các nhà phát triển thường sử dụng bảng tính (spreadsheet) để quản lý hàng trăm biến số và mô phỏng kết quả của các trận chiến. Việc thu thập dữ liệu từ người chơi thử (playtesters) cũng rất quan trọng để xác định các điểm mất cân bằng và thực hiện điều chỉnh kịp thời.

III. Phương pháp định nghĩa cơ chế gameplay và hệ thống tài nguyên

Định nghĩa cơ chế gameplay và hệ thống tài nguyên là trái tim của tài liệu đặc tả. Phần này phải mô tả cực kỳ chi tiết cách người chơi tương tác với thế giới game và các quy tắc chi phối những tương tác đó. Các game mechanics cơ bản của một game thủ thành bao gồm: đặt trụ, nâng cấp trụ, và sử dụng kỹ năng đặc biệt. Tài liệu gốc đã mô tả các cơ chế này, ví dụ như lớp Tower có phương thức Create() để đặt trụ và thuộc tính damage, cooldown, range để định nghĩa khả năng chiến đấu. Bên cạnh đó, các loại trụ khác nhau với các cấp nâng cấp riêng biệt tạo ra chiều sâu chiến thuật, buộc người chơi phải đưa ra lựa chọn dựa trên loại kẻ thù đang đối mặt. Hệ thống tài nguyên (resource management system) cũng quan trọng không kém. Trong hầu hết các game thủ thành, tài nguyên (thường là vàng hoặc năng lượng) được kiếm từ việc tiêu diệt kẻ thù và được dùng để xây dựng hoặc nâng cấp. Việc cân bằng lượng tài nguyên thu vào và chi ra ảnh hưởng trực tiếp đến nhịp độ trận đấu và độ khó của game. Ngoài ra, việc lựa chọn pathfinding algorithm (thuật toán tìm đường) cho các đơn vị địch là một quyết định kỹ thuật quan trọng, ảnh hưởng đến cả hiệu năng và tính chiến thuật của màn chơi. Một thuật toán hiệu quả như A* (A-star) sẽ đảm bảo quái vật di chuyển một cách thông minh và tối ưu đến mục tiêu.

3.1. Đặc tả chi tiết cơ chế game game mechanics và loại trụ

Đặc tả game mechanics phải rõ ràng và không mơ hồ. Nó cần định nghĩa từng hành động của người chơi và phản hồi của hệ thống. Ví dụ, khi người chơi nâng cấp một trụ, tài liệu phải nêu rõ: chi phí là bao nhiêu, chỉ số nào được tăng (sát thương, tốc độ bắn, tầm bắn), và hiệu ứng hình ảnh/âm thanh đi kèm. Tài liệu gốc đã phác thảo các lớp cơ sở như Unit, Attacker, Defender để chuẩn hóa các thuộc tính chung như Damage, HitPoints, Speed. Về tower types and upgrades, đặc tả cần liệt kê tất cả các loại trụ, mô tả điểm mạnh, điểm yếu và các nhánh nâng cấp của chúng. Ví dụ: Trụ Pháo (Archery) có tốc độ bắn nhanh nhưng sát thương thấp, hiệu quả với quái bay; Trụ Pháp Sư (Magic) gây sát thương lan nhưng tốc độ chậm, hiệu quả với nhóm quái bộ.

3.2. Xây dựng hệ thống quản lý tài nguyên resource management system

Một resource management system hiệu quả là yếu tố then chốt để tạo ra vòng lặp gameplay hấp dẫn. Đặc tả cần định nghĩa rõ: Nguồn thu tài nguyên (tiêu diệt quái, phần thưởng mỗi đợt, kỹ năng đặc biệt), và các khoản chi (xây trụ, nâng cấp, sửa chữa). Lớp Attacker trong tài liệu có thuộc tính GainedGold, cho thấy lượng vàng nhận được khi tiêu diệt đơn vị này. Tương tự, lớp DefenderUpGradedGold liên quan đến chi phí. Việc cân bằng các con số này quyết định tốc độ tiến triển của người chơi. Nếu tài nguyên quá dồi dào, game sẽ mất đi tính thử thách. Ngược lại, nếu quá khan hiếm, người chơi sẽ cảm thấy bị hạn chế và bất lực. Hệ thống này cần được thiết kế để khuyến khích quyết định chiến lược: nên tiết kiệm để nâng cấp một trụ mạnh hay xây nhiều trụ yếu hơn?

IV. Cách xây dựng kiến trúc hệ thống và tài liệu thiết kế kỹ thuật

Sau khi định hình gameplay, việc xây dựng kiến trúc hệ thống và Technical Design Document (TDD) là bước tiếp theo. TDD là tài liệu dành cho đội ngũ lập trình, dịch các yêu cầu từ GDD và SRS thành một kế hoạch kỹ thuật cụ thể. Nó mô tả system architecture (kiến trúc hệ thống), lựa chọn công nghệ, cấu trúc lớp, và các thuật toán sẽ được sử dụng. Tài liệu gốc cung cấp một cái nhìn sơ bộ về kiến trúc này thông qua việc mô tả các lớp chính như Tower, Unit, Attacker, Defender, UnitSpawner, và MenuMainManagement. Các lớp này thể hiện một cấu trúc hướng đối tượng, nơi mỗi thành phần của game được đóng gói thành các module độc lập và có thể tái sử dụng. Việc sử dụng UML diagrams for games, đặc biệt là sơ đồ lớp (Class Diagram), là một phương pháp hiệu quả để trực quan hóa mối quan hệ giữa các thành phần này. TDD cũng cần xác định game engine requirements, ví dụ như yêu cầu về phiên bản Unity, các gói phụ trợ cần thiết. Logic cốt lõi của trò chơi, hay game loop logic, cũng được định nghĩa ở đây. Vòng lặp này xử lý việc cập nhật trạng thái game, nhận đầu vào từ người chơi, và kết xuất đồ họa trong mỗi khung hình. Cuối cùng, TDD phải bao gồm đặc tả về asset pipeline – quy trình chuẩn hóa từ khâu thiết kế tài sản (hình ảnh, âm thanh) đến khi tích hợp vào game.

4.1. Mô hình hóa kiến trúc hệ thống system architecture với UML

Mô hình hóa system architecture giúp đảm bảo hệ thống được xây dựng một cách mạch lạc và dễ bảo trì. Việc sử dụng UML diagrams for games là tiêu chuẩn ngành. Sơ đồ lớp (Class Diagram) trong tài liệu gốc là một ví dụ điển hình, nó cho thấy lớp Tower là một lớp trừu tượng, kế thừa từ MonoBehaviour của Unity, và có các mối quan hệ với các lớp khác như TimerUnit. Sơ đồ tuần tự (Sequence Diagram) có thể được dùng để mô tả luồng tương tác, ví dụ như quá trình một trụ phát hiện, nhắm và bắn vào một kẻ địch. Sơ đồ trạng thái (State Diagram) lại hữu ích để mô tả các trạng thái của một đơn vị, chẳng hạn như: Idle (nhàn rỗi), Moving (di chuyển), Attacking (tấn công), Die (chết).

4.2. Yêu cầu về game engine và logic vòng lặp game game loop logic

Việc lựa chọn công nghệ là một quyết định quan trọng. Đặc tả game engine requirements phải nêu rõ game engine nào được sử dụng (ví dụ: Unity, Unreal Engine) và phiên bản cụ thể. Tài liệu gốc rõ ràng được viết cho Unity, thể hiện qua việc sử dụng các lớp như MonoBehaviour, GameObject, Collider2D. Về game loop logic, nó là vòng lặp vô hạn chạy xuyên suốt trò chơi. Trong mỗi vòng lặp, game thực hiện ba bước chính: xử lý đầu vào (input), cập nhật trạng thái (update), và kết xuất đồ họa (render). Các phương thức Start(), Update(), Awake() của Unity là các điểm neo để các lập trình viên móc nối logic của họ vào vòng lặp này. Lớp UnitSpawner sử dụng Update() để kiểm tra IsFinishWave(), là một ví dụ điển hình về việc tích hợp logic gameplay vào vòng lặp game.

4.3. Thiết lập quy trình xử lý tài sản game asset pipeline

Quy trình xử lý tài sản (asset pipeline) là một bộ quy tắc và công cụ để quản lý tài sản đồ họa và âm thanh. Một quy trình được định nghĩa tốt giúp giảm thiểu lỗi và tăng hiệu suất làm việc. Đặc tả cần quy định rõ các tiêu chuẩn như: định dạng file (ví dụ: .png cho hình ảnh 2D, .fbx cho model 3D), quy ước đặt tên file, kích thước texture, và cách nén tài sản. Tài liệu gốc đề cập đến việc sử dụng prefab (trong Unity) cho các đối tượng như prefabBanshee, prefabHarpy. Đây là một phần của asset pipeline, cho phép các nhà thiết kế tạo và cấu hình sẵn các đối tượng game, sau đó lập trình viên có thể sử dụng lại chúng một cách dễ dàng trong mã nguồn.

V. Bí quyết tối ưu hóa trải nghiệm người dùng và mô hình kinh doanh

Một trò chơi có kỹ thuật tốt và gameplay cân bằng vẫn có thể thất bại nếu trải nghiệm người dùng (UX) kém hoặc mô hình kinh doanh không phù hợp. Do đó, tài liệu đặc tả phải dành một phần quan trọng cho UI/UX specification. Giao diện người dùng (UI) phải trực quan, dễ hiểu, cho phép người chơi thực hiện các hành động mong muốn (như xây, nâng cấp) một cách nhanh chóng và thuận tiện. Ví dụ, lớp Game Click Manager trong tài liệu gốc cho thấy sự quan tâm đến việc quản lý các tương tác của người chơi, như chọn và kích hoạt kỹ năng. Trải nghiệm người dùng (UX) bao gồm toàn bộ cảm nhận của người chơi, từ hướng dẫn ban đầu, các phản hồi hình ảnh/âm thanh khi thực hiện hành động, cho đến màn hình kết thúc game. Một UX tốt làm cho người chơi cảm thấy quyền năng và được tưởng thưởng xứng đáng. Bên cạnh đó, monetization model spec (đặc tả mô hình kiếm tiền) cần được xem xét cẩn thận, đặc biệt với các game miễn phí (free-to-play). Mô hình này có thể bao gồm quảng cáo, mua vật phẩm trong game (in-app purchases), hoặc bán các gói nội dung mở rộng. Điều quan trọng là mô hình này không được phá vỡ sự cân bằng của game hay tạo cảm giác 'pay-to-win' (trả tiền để thắng). Việc tích hợp mô hình kinh doanh phải hài hòa với vòng lặp gameplay cốt lõi để đảm bảo sự phát triển bền vững của sản phẩm.

5.1. Xây dựng đặc tả UI UX cho giao diện game trực quan

Tài liệu UI/UX specification nên bắt đầu với wireframe hoặc mockup (bản phác thảo) của tất cả các màn hình trong game: menu chính, màn hình chơi game, cửa hàng, màn hình cài đặt, màn hình thua cuộc. Tài liệu gốc mô tả các màn hình này, chẳng hạn như "popup when click option button in game" và "Screen when lose game". Mỗi yếu tố trên giao diện, từ nút bấm, thanh máu đến biểu tượng kỹ năng, cần được mô tả rõ về vị trí, kích thước, và hành vi khi tương tác. Phản hồi cho người chơi là cực kỳ quan trọng. Khi một trụ được nâng cấp, cần có hiệu ứng hình ảnh và âm thanh để xác nhận hành động. Khi người chơi mất máu, màn hình có thể rung nhẹ hoặc chuyển sang màu đỏ. Những chi tiết nhỏ này tạo nên một trải nghiệm mượt mà và hấp dẫn.

5.2. Phân tích đặc tả mô hình kiếm tiền monetization model spec

Đối với monetization model spec, tài liệu cần trả lời các câu hỏi: Game sẽ kiếm tiền bằng cách nào? Người chơi có thể mua gì? Các vật phẩm trả phí có ảnh hưởng đến gameplay không? Một mô hình phổ biến là bán các vật phẩm trang trí (skins) không ảnh hưởng đến sức mạnh, hoặc bán các gói tài nguyên giúp đẩy nhanh tiến độ nhưng không phá vỡ cân bằng cốt lõi. Đặc tả cần định nghĩa rõ các loại tiền tệ trong game (ví dụ: vàng kiếm được khi chơi, kim cương mua bằng tiền thật), bảng giá các vật phẩm, và cách tích hợp cổng thanh toán. Điều quan trọng là phải minh bạch với người chơi và thiết kế mô hình kiếm tiền một cách có đạo đức, tôn trọng thời gian và công sức của họ.

Tóm tắt và mô tả trên trang này được tạo với sự hỗ trợ của AI. Nếu bạn thấy nội dung không chính xác hoặc có vấn đề, vui lòng Báo lỗi nội dung.

20/09/2025

Trích đoạn nội dung tài liệu

TOWER DEFENSE GAME Software Specification Project Code: TD Document Code: TD_ Software Specification_v02 Ha Noi, 10/06/2023 LEADER : Nguyễn Minh Thái REVIEWERS: TD Development Team 10/06/2023 APPROVAL: Bùi Thị Thùy 21/06/2023 TEAM MEMBER : STT RollNumber FullName 1 HE153666 Nguyễn Minh Thái 2 HE153145 Trần Đức Thuận 3 HE151215 Nguyễn Thế Vinh 4 HE153122 Nguyễn Tuấn Thành Table Of Contents Understand the Problem.13 Game Click Manager.16 Game state manager.4 Bullet Impact Tower.2 Place and control:.3 Upgrading and Summoning:.1 Total Strength formula:.2 Pseudocode for calculating strength of monsters and player over wave.3 Graph of strength over time.5 Popup when click option button in game.6 Screen when lose game.1 Interaction between Warrior and Harpy.2 Interaction between Warrior and Ogre.4 Interaction between Warrior and Banshee.5 Interaction between Archery and Harpy.6 Interaction between Archery and Ogre.7 Interaction between Archery and Minotaur.8 Interaction between Archery and Banshee. Interaction between Monster and Tower. Write Test Cases.92 Understand the Problem Implement a game called Tower Defense. In the game, the player can buy defenders to resist the monster’s attack.

Besides that, the user can move the defenders to the target position to attack the monsters. Players will receive support from the towers. And players can upgrade the power of towers and defenders. Upgrading turrets will cause turrets to take more damage and fire faster.

From there you can kill monsters easier. In addition, the player can upgrade the defender's strength stats. There are 3 types of turrets, each with 3 different power levels. There are two types of defenders: ranged and melee.

Monsters will get stronger over time. They will be spawned in turns. When each turn ends, the player will have 5 seconds to prepare for the next turn. After turns, monsters will become stronger (attack, speed, defense).

The player's points will be accumulated through the plays. Each monster turn is a turn. When the main house is destroyed, the player's score is the number of turns the monster has been destroyed. During the game, the player can go to the menu to save the game and keep playing or play a new game.

Design a Solution We’ll approach our design, implementation, and testing in five iterations. Specifically, we'll have iterations for basic gameplay, full gameplay, menus, sounds, and XML configuration data. It should be obvious why we're thinking of the full gameplay. The difficulty menu, and the pause menu as menus.

Perhaps less intuitively, we're also thinking of the high score menu as a menu because it will behave just like any other menu, with a clickable button to take some action (in this case, close the menu and return to the main menu. Just as we did in Chapter 17, we'll make our main menu and difficulty menu separate scenes in our game. Our pause menu will be a "popup menu" that appears above the gameplay scene, so we'll make that a prefab we can create and destroy as necessary. This is a different approach from the one we used in the previous chapter for our high score table, but recall that in our previous approach we included a canvas in the scene, then modified whether or not it was displayed as appropriate.

Although our game here only has one gameplay scene, you should be able to easily imagine a game with many gameplay scenes (e. We don't want to have to add the pause menu canvas to each of those scenes in the editor, so a prefab is the better way to go. Finally, our high score menu will also be a prefab. We'll display it both from the main menu and at the end of a game, so having a prefab we can use in both places will be a good approach.

Class Diagram Tower: Description: The "Tower" is an abstract class that describes the behavior and properties of a defensive tower object in a tower defense game. It inherits from MonoBehaviour, indicating that it's meant to be attached to a game object in the Unity environment. The Tower class outlines the core attack functionality of a defensive tower, including attack modes and targeting. Each tower instance can hold specific properties such as damage, cooldown, and range, and manage its own bullet instantiation.

Attributes: - targetRotation: A Quaternion that represents the rotation needed to aim at the current target. - bullet: A GameObject which is the bullet that the tower fires. - animator: An Animator that is responsible for handling animation. - cooldownTimerBullet: A Timer that handles the cooldown between bullet shots.

- finishedRotate: A Boolean to check if the tower has finished rotating towards the target. - colliders: A static list of GameObjects which holds all the colliders (presumably of potential targets) the tower can interact with. - isAttack: A Boolean indicating if the tower is currently attacking. - damage, cooldown, range: Double values representing the tower's attack properties, accessible via respective public properties (Damage, Cooldown, Range).

Methods: - Awake(): Unity lifecycle method overridden to initialize the cooldownTimerBullet object. - Initialize(): Configures the tower's range of detection for enemies by setting up a CircleCollider2D. - OnTriggerStay2D(): Determines the behavior of the tower when a collider (presumably of an enemy) stays in range. The tower can attack a specifically selected target or follow a general behavior.

- AttackSelectedMonster(): Handles the procedure of attacking a specific monster when selected by the user. - AttackMonsterWithLowestHitPoint(): A targeting behavior where the tower attacks the monster with the lowest hitpoints. - AttackClosestMonster(): A targeting behavior where the tower attacks the monster closest to it. - OnTriggerExit2D(): Method to handle when a collider exits the tower's range.

The attack flag is turned off. - Create(): An abstract method to be implemented by subclasses, used to create and place a tower at a specific position. Associations: - This class is associated with various other classes including GameObject, Timer, MonsterTargetClickManager, TowerModeAttackManager, TowerAttack, Unit, Attacker, AudioManager, and AudioClipName. Tower Attack Description: This class is responsible for managing the attack behavior of towers in the game.

It contains properties and methods to deal with the attack's range, damage, the target of the attack, and even the visualization of reaching the target with an animation. Properties: Range: A float indicating how far the attack can reach. sourceGameObject: The game object initiating the attack. targetDirection: The Vector2 direction towards which the attack is aimed.

targetGameObjectPrefab: A GameObject representing the prefab of the target object for the attack. targetGameObject: A reference to the unit that is the target of the attack. Damage: The amount of damage the attack can cause. reachingAnimation: A GameObject that serves to display an animation when the attack reaches its target.

Methods: Start(): A Unity engine method that sets up the count variable when the game starts. Update(): A Unity engine method that updates every frame, checking if the attack has reached its target, applying damage, and managing relevant animations and behaviors. DoesEffectBehaviour(): A virtual method that is meant to be overridden in derived classes to define specific behaviors/effects of the attack upon reaching the target. OnBecameInvisible(): A Unity engine method that destroys the game object when it becomes invisible to the camera, helping to manage resources and performance.

Unit Description: The Unit class represents a generic, controllable unit in the game. This class is abstract, indicating that it is not meant to be instantiated directly but should be used as a base for other, more specific unit types. Units can be thought of as the main entities participating in the game's battles or interactions. Properties: Fundamental attributes like Damage, HitPoints, Speed, AttackRange, CoolDown, and AttackType define the unit's basic capabilities.

Level and MaxHitPoint represent the unit's current experience level and maximum hit points, respectively. CooldownTimerBullet is a timer to control the rate at which the unit attacks. AtkRangeCollider and SelectedRangeCollider are two CircleCollider2D instances to manage the unit's attack range and selected range. AttackShape is a GameObject that likely represents the visual form of the unit's attacks.

HealthBar is a reference to the unit's health bar. IsAttack and StateAttack indicate whether the unit is currently attacking and the state of the attack. BaseDamage, BaseHitPoints, and BaseSpeed denote the fundamental attributes that are utilized to compute the actual attributes with respect to the unit's level. Methods: Initialize(float damageMultiplier, float hitpointMultiplier, float speedMultiplier): Initialize the unit with a multiplier for damage, hit points, and speed.

Attack(Unit target): Executes the unit's attack on a target unit. TakeDamage(float amount): Reduces the unit's hit points by a certain amount and updates the health bar accordingly, triggering the Die method if hit points fall to or below zero. LevelUp(): Increments the unit's level. StrengtCaculation(): Calculates and returns the unit's strength based on its damage, hit points, and speed.

Attacker Description: This class is responsible for managing the behavior of attacking units in a game. It contains properties and methods for dealing with the selection of target, range of attack, turning towards the target and controlling animations. It also has behaviors for attacking enemy units or towers, continuing the movement after killing a target, and flipping direction based on the position of the target. Properties: currentTarget: An instance of Defender indicating the current target of the attacker.

GainedGold: An integer representing the gold gained by the attacker. isAttack: A boolean to keep track if the attacker is currently attacking or not. agent: An instance of AgentMoventMentMonster class for controlling the movement of the attacker. threshold: A float for determining when to flip the direction of the attacker.

FlipDirection: A Vector3 to calculate the direction between attacker and its target. dotProduct: A float to calculate the dot product of FlipDirection and transform. Methods: Attacker(int level): The constructor for the Attacker class. It takes an integer level as a parameter.

OnTriggerStay2D(Collider2D other): A method that's called each frame while another collider is within the trigger. It checks for the type of collider and decides the behavior of the attacker. OnTriggerExit2D(Collider2D other): A method that's called when the Collider2D other has stopped touching the trigger. Attack(Unit target): A method that starts the attack on a target Unit.

Die(): A method that handles the death of the attacker. Strength2(): A method that calculates and returns the strength of the attacker. Defender Description: This class is responsible for managing the behavior of defending units in a game. It contains properties and methods for dealing with the selection of target, stopping and continuing movement, interacting with attackers, and handling the death of a defender.

Properties: currentTarget: An instance of Attacker indicating the current target of the defender. selection: A GameObject representing the selected unit. isInsideTrigger: A boolean to check if the defender is inside a trigger. stateAttack: An integer for tracking the attack state of the defender.

UpGradedGold: An integer representing the gold gained by upgrading the defender. Methods: Defender(int level): The constructor for the Defender class. It takes an integer level as a parameter. ContinueMoving(): A method to continue the movement of the defender using the AgentMoventMent component.

OnTriggerStay2D(Collider2D other): A method that's called each frame while another collider is within the trigger. It checks for the type of collider and decides the behavior of the defender. StrengthGold(): A method that calculates and returns the strength of the defender. Die(): A method that handles the death of the defender.

It calculates the value using StrengthGold method and destroys the game object. Game Click Manager Description: This class, 'SkillManager', handles the operations related to the skill management of the player character in the game. It contains properties and methods to choose and activate different skills, such as Hypnosis, Healing, and Meteo. Properties: chooseSkill: An integer to keep track of the selected skill.

skillCanvas: A GameObject representing the UI canvas for skills. btnHypnosis, btnHeal: Buttons for activating the Hypnosis and Heal skills respectively. Hypnosis, Health, Meteo: GameObjects representing the skills or effects associated with Hypnosis, Healing, and Meteo. mainCamera: An instance of the game's main camera.

isMoving: A boolean flag indicating if a Meteo object is currently moving. Methods: Start(): A Unity engine method that is called before the first frame update.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ