Lập trình hướng đối tượng c++ GAME bắn BÓNG

19 20 0
Lập trình hướng đối tượng c++ GAME bắn BÓNG

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG KHOA CÔNG NGHỆ ĐA PHƯƠNG TIỆN BÁO CÁO MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG C++ Contents I MỞ ĐẦU 3 II MÔ HÌNH LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG 4 1 GIỚI THIỆU VỀ LẬP TRÌNH HƯỚ.

HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG KHOA CƠNG NGHỆ ĐA PHƯƠNG TIỆN BÁO CÁO MƠN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG C++ Contents I MỞ ĐẦU .3 II MƠ HÌNH LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG GIỚI THIỆU VỀ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG NHỮNG KHÁI NIỆM CƠ BẢN VỀ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG .4 2.1 Đối tượng 2.2 Lớp (class) 2.3 Lớp (subclass) .5 2.5 Phương Thức (method) 2.6 Thuộc tính (attribute) 2.7 Thực thể (instance) .6 2.10 Bảo tồn (protected) 2.11 Đa kế thừa (muliple inheritance) III GIỚI THIỆU TỔNG QUAN VỀ GAME BẮN BÓNG Giai đoạn tiền sản xuất Game 1.1 Game Idea 1.2 Concept 1.3 Game Design Document 1.4 Pitch .8 Tuổi số ESRB Nền tảng vận hành & yêu cầu phần cứng: .9 1.5 Điều Khiển đặc tính nhân vật 1.6 Storyboard Phương pháp tiếp cận giải vấn đề 10 2.1 Phương pháp tiếp cận giải vấn đề 10 2.2 Mơ hình tổng quan hệ thống .10 2.4 Kỹ Thuật Điều Khiển Vòng Lặp Chính 13 2.5 Kiến Trúc Actor Component Game 13 2.6 Quản lý kiện 14 2.7 Xử Lý Âm Thanh .14 2.8 Xử lý hình ảnh 14 2.9 Xử Lý Nhập Xuất Trong Game 14 2.10 Lập trình giao diện 14 2.11 Biểu đồ lớp .15 IV TÍNH HƯỚNG ĐỐI TƯỢNG CỦA GAME BẮN BĨNG .16 Tính đóng gói 16 1.1 Khái niệm 16 1.2 Demo Project 16 Tính kế thừa 18 2.1 Khái Niệm 18 2.2 Demo Project 18 Tính đa hình .18 3.1 Khái Niệm 19 3.2 Demo Project 19 V Kết luận 19 LỜI CẢM ƠN 20 I MỞ ĐẦU Trong thời đại CNTT phát triển nay, nhà lập trình ln phải suy nghĩ xem làm để tạo chương trình hay, tiện ích Vàmột thứ hỗ trợ người lập trình ngơn ngữ lập trình Có số phương pháp lập trình truyền thống lập trình tuyến tính, lập trình cấu trúc Với lập trình tuyến tính số ứng dụng phức tạp thực Trong với lập trình cấu trúc, khơng quản lý thay đổi liệu có nhiều chương trình sử dụng biến chung, khơng tiết kiệm tài nguyên Để khắc phục số hạn chế trên, người ta xây dựng số mô hình lập trình tiên tiến như: Lập trình hàm, lập trình logic, lập trình trực quan, lập trình tương tranh, lập trình phân tán, lập trình hướng đối tượng II MƠ HÌNH LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG GIỚI THIỆU VỀ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Lập trình hướng đối tượng (Object Oriented Programming - gọi tắt OOP) hay chi tiết Lập trình định hướng đối tượng, phương pháp lập trình lấy đối tượng làm tảng để xây dựng thuật giải, xây dựng chương trình Thực chất khơng phải phương pháp mà cách nhìn việc lập trình Để phân biệt, với phương pháp lập trình theo kiểu cấu trúc mà quen thuộc trước đây, hay gọi phương pháp lập trình hướng thủ tục (Procedure-Oriented Programming), người lập trình phân tích nhiệm vụ lớn thành nhiều cơng việc nhỏ hơn, sau chi tiết, cụ thể hố để vấn đề đơn giản, để tìm cách giải vấn đề dạng thuật giải cụ thể rõ ràng qua dễ dàng minh hoạ ngơn ngữ giải thuật (hay cịn gọi thuật giải chương trình con) Cách thức phân tích thiết kế gọi nguyên lý lập trình từ xuống (top-down), để thể trình suy diễn từ chung cụ thể NHỮNG KHÁI NIỆM CƠ BẢN VỀ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG 2.1 Đối tượng Đối tượng (object): Các liệu thị kết hợp vào đơn vị đầy đủ tạo nên đối tượng Đơn vị tương đương với chương trình đối tượng chia thành hai phận chính: phần phương thức (method) phần thuộc tính (property) Trong thực tế, phương thức đối tượng hàm thuộc tính biến, tham số hay nội đối tượng (hay nói cách khác tập hợp liệu nội tạo thành thuộc tính đối tượng) Các phương thức phương tiện để sử dụng đối tượng thuộc tính mơ tả đối tượng có tính chất 2.2 Lớp (class) Một lớp hiểu kiểu liệu bao gồm thuộc tính phương thức định nghĩa từ trước Đây trừu tượng hóa đối tượng Một đối tượng xác lập thực thể hóa từ lớp Khác với kiểu liệu thơng thường, lớp đơn vị (trừu tượng) bao gồm kết hợp phương thức thuộc tính Để có đối tượng (mà xem biến) hoạt động việc thực thể hóa bao gồm việc cài đặt giá trị ban đầu thuộc tính việc đăng kí nhớ, mà cơng việc thường giao cho phương thức gọi “máy kết cấu” (constructor) hay hàm dựng Ngược lại đối tượng thuộc lớp khơng cịn sử dụng có phương thức để xử lý gọi “máy hủy diệt” (destructor) hay hàm hủy Như vậy, để có đối tượng người lập trình OOP cần phải thiết kế lớp đối tượng cách xây dựng thuộc tính phương thức có đặc tính riêng Mỗi phương thức hay thuộc tính đầy đủ lớp gọi tên thành viên (member) lớp 2.3 Lớp (subclass) Lớp lớp thơng thường có thêm tính chất kế thừa phần hay tồn đặc tính lớp khác Lớp mà chia kế thừa gọi lớp phụ mẫu (parent class) 2.4 Lớp trừu tượng hay lớp sở trừu tượng (abstract class) Lớp trừu tượng lớp mà khơng thể thực thể hóa thành đối tượng thực dụng Lớp thiết kế nhằm tạo lớp có đặc tính tổng qt thân lớp chưa có ý nghĩa (hay khơng đủ ý nghĩa) để tiến hành viết mã cho việc thực thể hóa (xem thí dụ) Thí dụ: Lớp “hinh_phang” định nghĩa khơng có liệu nội có phương thức (hàm nội tại) “tinh_chu_vi”, “tinh_dien_tich” Nhưng lớp hình_phẳng chưa xác định đầy đủ đặc tính (cụ thể biến nội tọa độ đỉnh đa giác, đường bán kính toạ độ tâm hình trịn, …) nên viết thành lớp trừu tượng Sau đó, người lập trình tạo lớp chẳng hạn lớp “tam_giac”, lớp “hinh_tron”, lớp “tu_giac”,… Và lớp người viết mã cung cấp liệu nội (như biến nội r làm bán kính số nội Pi cho lớp “hinh_tron” sau viết mã cụ thể cho phương thức “tinh_chu_vi” “tinh_dien_tich”) 2.5 Phương Thức (method) Là hàm nội lớp (hay đối tượng) Tùy theo đặc tính mà người lập trình gán cho, phương pháp gọi bên hàm khác lớp đó, cho phép câu lệnh bên ngồi lớp gọi tới nó, hay cho phép lớp có quan hệ đặc biệt quan hệ lớp con, quan hệ bạn bè (friend) phép gọi tới Mỗi phương pháp có kiểu trả về, chúng trả kiểu liệu cổ điển hay trả kiểu lớp định nghĩa từ trước Một tên gọi khác phương pháp lớp hàm thành viên Người ta định nghĩa thêm vài loại phương pháp đặc biệt: - Hàm dựng (constructor) hàm dùng để cài đặt giá tri ban đầu cho biến nội đơi cịn dùng để khai báo việc xử dụng nhớ Hàm hủy (destructor) hàm dùng vào việc làm nhớ hủy bỏ tên đối tượng sau dùng xong, bao gồm việc xóa trỏ nội trả phần nhớ mà đối tượng dùng Trong số trường hợp hàm hủy hay hàm dựng tự động hóa ngơn ngữ OOP trường hợp Visual C++, C# - Tiện ích (utility) hàm họat động bên lớp mà khơng cho phép mơi trường bên ngồi gọi tới Các hàm tính tốn trung gian nội đối tượng mà xét thấy khơng cần thiết phải cho giới bên ngồi đối tượng biết 2.6 Thuộc tính (attribute) Thuộc tính lớp bao gồm biến, hằng, hay tham số nội lớp Ở đây, vai trị quan trọng thuộc tính biến chúng bị thay đổi suốt trình hoạt động đối tượng Các thuộc tính xác định kiểu kiểu chúng kiểu liệu cổ điển lớp định nghĩa từ trước Như ghi, lớp thực thể hố thành đối tượng cụ thể tập họp giá trị biến nội làm thành trạng thái đối tượng Giống trường hợp phương pháp, tùy theo người viết mã, biến nội dùng bên phương pháp lớp đó, cho phép câu lệnh bên lớp, hay cho phép lớp có quan hệ đặc biệt quan hệ lớp con, (và quan hệ bạn bè (friend) C++) phép dùng tới (hay thay đổi giá trị nó) Mỗi thuộc tính lớp cịn gọi thành viên liệu lớp 2.7 Thực thể (instance) Thực thể hóa (instantiate) trình khai báo để có tên (có thể xem biến) trở thành đối tượng từ lớp Một lớp sau tiến hành thực thể hóa để có đối tượng cụ thể gọi thực thể Hay nói ngược lại thực thể đối tượng riêng lẽ lớp định trước Như biến thông thường, hai thực thể lớp có trạng thái nội khác (xác định giá trị có biến nội tại) hồn tồn độc lập khơng có u cầu đặc biệt từ người lập trình 2.8 Cơng cộng (public) Cơng cộng tính chất dùng để gán cho phương pháp, biến nội tại, hay lớp mà khai báo người lập trình cho phép câu lệnh bên đối tượng khác phép dùng đến Thí dụ: Trong C++ khai báo public: int my_var; biến my_var có hai tính chất tính cơng cộng integer hai tính chất hợp thành đặc tính biến my_var khiến xử dụng hay thay đổi giá trị (bởi câu lệnh) nơi bên lẫn bên lớp 2.9 Riêng tư (private) lớp) Khi dùng tính chất gán cho biến, phương pháp biến hay phương pháp sử dụng bên lớp mà chúng định nghĩa.Mọi nỗ lực dùng đến chúng từ bên qua câu lệnh hay từ lớp bị phủ nhận hay bị lỗi 2.10 Bảo tồn (protected) Tùy theo ngơn ngữ, có vài điểm nhỏ khác cách hiểu tính chất Nhìn chung tính chất mà mà dùng để áp dụng cho phương pháp, biến nội tại, hay lớp có nội lớp hay lớp (hay nội gói Java) phép gọi đến hay dùng đến phương pháp, biến hay lớp So với tính chất riêng tư tính bảo tồn rộng rãi nghĩa chia sẻ liệu hay chức Nó cho phép số trường hợp dùng tới đặc tính lớp (từ lớp chẳng hạn) 2.11 Đa kế thừa (muliple inheritance) Đây tính chất cho phép lớp có khả kế thừa trực tiếp lúc nhiều lớp khác Vài điểm cần lưu ý viết mã dùng tính chất đa kế thừa: Khi muốn có kế thừa từ nhiều lớp phụ mẫu lớp cần phải độc lập đặc biệt tên liệu hay hàm cho phép kế thừa phải có tên khác để tránh lỗi “ambiguilty” Bởi lúc phần mềm chuyển dịch xác định lớp thừa kế tên lớp phụ mẫu Không phải ngôn ngữ OOP loại phân lớp hỗ trợ cho tính chất Ngồi khái niệm trên, tùy theo ngơn ngữ, có chức OOP riêng biệt cấp thêm vào III GIỚI THIỆU TỔNG QUAN VỀ GAME BẮN BÓNG Giai đoạn tiền sản xuất Game 1.1 Game Idea Ý tưởng: Xây dựng game bắn súng với góc nhìn từ xuống Game dành cho người chơi, người chơi làm điều khiển bóng có kỹ di chuyển bắn Nhiệm vụ người chơi khám phá giới đến mục tiêu nhanh nhất, đống thời phải tiêu diệt kẻ địch để bảo vệ thân 1.2 Concept Target: Game Top-Down Shooter Concept art:  Đồ họa 2D  Màu tối giản 1.3 Game Design Document Player Control:  Người chơi điều khiển hình trịn  Di chuyển chuột để thay đổi hướng nhìn camera nhân vật  Di chuyển WASD phím mũi tên  Ấn chuột trái để bắn đạn Gameplay  Trong trình chơi, hình tròn màu hồng khác liên tục sinh ra, tìm mục tiêu để tiêu diệt  Nhiệm vụ người chơi bắn hình trịn màu hồng, đồng thời di chuyển đến đích Challenge:  Người chơi phải liên tục di chuyển qua lại tiêu diệt kẻ thù, đống thời phải tới đích Sound&Effect:  Trị chơi xun suốt có nhạc  Khi người chơi bán đạn, có sound effect particle effect bật lên  Khi người chơi bắn trúng mục tiêu, có sound effect thơng báo trúng đạn  Khi đạn trúng tường, có sound effect particle effect bật lên 1.4 Pitch Tên game : Bắn bóng Thể loại: Game người chơi, 2D, góc nhìn xuống Câu chuyện : bóng khám phá giới , đến mục tiêu nhanh nhất, đống thời phải tiêu diệt kẻ địch để bảo vệ thân Gameplay:  Trị chơi dành cho người chơi, Góc nhìn xuống  Cơ chế lần chơi qua màn, bắn phá mục tiêu di chuyển  Di chuyển chuột bàn phím để di chuyển bắn mục tiêu Tuổi số ESRB  Tuổi : – 45  Chỉ số ESRB dự kiến : E (Everyone) Chứa hình ảnh, hoạt cảnh, ngơn ngữ bạo lực trò chơi nhẹ nhàng Nền tảng vận hành & yêu cầu phần cứng:  Nền tảng vận hành : Window 7,8,10  Yêu cầu phần cứng : Máy tính laptop RAM 100mb trở lên Ngày phát hành dự kiến : 15/12/2021 1.5 Điều Khiển đặc tính nhân vật Người chơi dùng nút A, S, W, D để di chuyển chuột trái để bắn 1.6 Storyboard - Màn Hình Game Phương pháp tiếp cận giải vấn đề 2.1 Phương pháp tiếp cận giải vấn đề  Phương pháp hướng đối tượng  Sử dụng Game Engine : Unity  Ngơn ngữ lập trình C# 2.2 Mơ hình tổng quan hệ thống - Nguyễn lí hoạt động Quy trình phát triển game 2.3 Kiến trúc phần mềm lớp - Game application  Phụ trách quản lý làm việc với input device (đọc liệu đầu vào từ thiết bị tay cầm, bàn phím) , khởi tạo điều khiển vịng lặp Gam e, hệ điều hành , vòng đời game  Tạo tải game logic, game view  Gửi yêu cầu đến game logic để thể trạng thái game view (thắng, thua,….) - Game logic  Quản lý trạng thái kiện như: người chơi bị chết, , người chơi qua màn, người chơi đích  Dữ liệu đối tượng game Game Logic xử lý, VD điểm số, xếp hạng trả lớp giao diện  Quản lý kiện vật lý đối tượng: viên đạn trúng người chơi, trúng địch, trúng tường, tốc độ thay đổi  Game logic xử lý logic để thể trạng thái game view - Game view  Human: trạng thái, kiện Game hiển thị, gồm hình ảnh giao diện điều khiển, đối tượng người chơi, viên đạn,kẻ địch,…Âm môi trường hiển thị  AI: Tương tác với game logic để cập nhật thay đổi hành vi lên giao diện 2.4 Kỹ Thuật Điều Khiển Vịng Lặp Chính + PlayController : nhận Input từ bàn phím để di chuyển , nhận Input tọa độ chuột để thay đổi góc nhìn , nhận click chuột trái để bắn + Game Manager : Điều khiển vịng lặp game , kiểm tra trạng thái player , thay đổi trạng thái game , qua + Enemy Controller : Điểu khiển logic đuổi theo người chơi 2.5 Kiến Trúc Actor Component Game + GameObject Player : Sprite render , Rigibody , Colider, Play Controller ( Script nhận Input điều khiển người chơi , Input thao tác + Gameobject Enemy : Sprite Render , Rigibody , Colider , Enemy Controller ( Scirpt logic đuổi theo người chơi , hành động AI , + Gameobject GameController : Game Controller ( Script quản lý vịng lặp game ) +Gameobject SoundManager : AudioSource , SoundManager ( Scirpt quản lý âm , phát âm cho game ) + Gameobject SpawnEnemy : Sprite Render , RigiBody , SpawnEnemy ( Script để gọi kẻ thù truy đuổi người chơi + Gameobject Bullet : Sprite Render , Rigibody , Colider , Trial Renderer , Bullet ( Logic viên đạn bay ) 2.6 Quản lý kiện  Event : Các Physics Event gọi OnTriggerEnter2D dùng để xử lí va chạm vật lý  Initiazation Events: Hàm Update() gọi gameplay, hàm Start() gọi trước frame hay lần cập nhật thành phần vật lý đầu tiên, hàm Awake() gọi cho Object scence thời điểm scence load  Fixed Update() gọi trước thành phần vật lý update Vì việc update thành phần vật lý frame diễn với tần suất khác nên ta nhận kết xác từ physics code ta đặt hàm Fixed Update, việc đặt hàm Update  Hàm OnCollisionEnter2D dùng để kiểm tra có phải người chơi không 2.7 Xử Lý Âm Thanh - Sử dụng Audio Listener Component Unity hỗ trợ sẵn tự tạo script để thiết lập âm hiệu ứng - Sử dụng Audio Source Component - Trong script: sử dụng hàm OnTriggerEnter2D để thiết lập âm va chạm xảy 2.8 Xử lý hình ảnh - Sử dụng kỹ thuật key frame tạo animation tham khảo số animation có sẵn - Cụ thể Sprite Editor Sprite Editor giúp cắt sprite thành nhiều phần nhỏ gọi keyframe Từ đó, thay đổi keyframe để animation 2.9 Xử Lý Nhập Xuất Trong Game - Sử dụng phương án: Gọi lại thông báo (Callbacks or Message) để nắm bắt giá trị người dùng truyền vào di chuyển trái, phải … để di chuyển gameObject theo ý muốn người dùng - Cụ thể:  Hàm GetAxis để nhận action từ nút người dùng bấm  Dùng hàm GetAxis để lấy giá trị từ action người dùng sau xử lý logic cho nhân vật chuyển 2.10 Lập trình giao diện - Sử dụng hình ảnh có sẵn từ Asset Store Unity - Thiết kế UI sử dụng Canvas, Text, Image, Button, Trong Canvas: thiết lập thành phần:  Image: Backgound Image, Player, Chest, Coin, Chest, Cloud, trees, stones …  Button: Play Game Button, Option Button, Quit Button  Text: Chest Text, Coin Text, … - Hiển thị giao diện: Canvas thiết lập Render Mode chế độ Screen SpaceOverlay 2.11 Biểu đồ lớp Theo phương pháp trích xuất danh từ - Tìm lớp dự kiến: user, bóng, viên đạn, kẻ địch, map, chương trình, giao diện, hình - Trích chọn danh từ tìm class: bóng, viên đạn, kẻ địch IV TÍNH HƯỚNG ĐỐI TƯỢNG CỦA GAME BẮN BĨNG Tính đóng gói 1.1 Khái niệm : Tính đóng gói cho phép che giấu thơng tin tính chất xử lý bên đối tượng Các đối tượng khác tác động trực tiếp đến liệu bên làm thay đổi trạng thái đối tượng mà bắt buộc phải thông qua phương thức cơng khai đối tượng cung cấp Tính chất giúp tăng tính bảo mật cho đối tượng tránh tình trạng liệu bị hư hỏng ngồi ý muốn 1.2 Demo Project - Bullet private void OnCollisionEnter2D(Collision2D collision) { if (collision.collider.IsTouchingLayers(LayerMask.NameToLayer("Enemy"))) { SoundManager.Instance.PlaySound(SoundName.EnemyHit); ParticleSystem littleExpose = Instantiate(littleExposePartical, this.transform.position, Quaternion.identity); Destroy(littleExpose.gameObject, 4); } if (collision.collider.IsTouchingLayers(LayerMask.NameToLayer("Wall"))) { SoundManager.Instance.PlaySound(SoundName.WallHit); ParticleSystem littleExpose = Instantiate(littleExposePartical, this.transform.position, Quaternion.identity); Destroy(littleExpose.gameObject, 4); } } } Destroy(gameObject); OncollisionEnter2D tính chất đối tượng class Bullet Như đối tượng khác tác động trực tiếp làm thay đổi trạng thái tác động thông qua method Bullet - CameraCinemachineTrack private void Awake() { Instance = this; } private void Start() { camera = GetComponent(); channelPerlin = camera.GetCinemachineComponent(); } public void SetShake(float intensity, float time) { channelPerlin.m_AmplitudeGain = time; channelPerlin.m_FrequencyGain = intensity; lastIntensity = intensity; lastTime = time; } private void Update() { if(channelPerlin.m_AmplitudeGain > 0) { channelPerlin.m_AmplitudeGain -= Time.deltaTime; channelPerlin.m_FrequencyGain = Mathf.Lerp(0, lastIntensity , channelPerlin.m_AmplitudeGain / lastTime); } } if(channelPerlin.m_AmplitudeGain

Ngày đăng: 26/11/2022, 11:19

Tài liệu cùng người dùng

Tài liệu liên quan