Cụ thể hơn, trong dự án này,việc tạo ra một trò chơi thì cần phải phân tích thành nhiều phần nhỏ để có thể đưamột trò chơi tối ưu nhất cho người dùng, một bài lập trình ngắn gọn, dễ nhìn
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
ĐẠI HỌC KINH TẾ THÀNH PHỐ HỒ CHÍ MINH KHOA CÔNG NGHỆ THÔNG TIN KINH DOANH
-BÁO CÁO ĐỒ ÁN CUỐI KÌ MÔN: CƠ SỞ LẬP TRÌNH
Giảng viên hướng dẫn: Lê Hữu Thanh Tùng
Sinh viên thực hiện: Nguyễn Thảo Trân 31231026116
Phạm Duy Hoàng 31231026117
Võ Nguyên Bảo 31231021638 Đặng Lê Khánh Ly 31231022099 Biện Bùi Duy Quang 31231025156 Trần Thành Đạt 31231021353
Lớp học phần: 23C1lNF50900509
Ngành: Khoa học máy tính
Khóa /Hệ: K49, Đại học chính quy
Thành phố Hồ Chí Minh, tháng 12 năm 2023
1
Trang 2BẢNG PHÂN CÔNG CÔNG VIỆC
1 Nguyễn Thảo Trân 31231026116 Lên ý tưởng trò chơi, nối code, tìm lỗi của
chương trình, chỉnh sửa và định dạng output
2 Phạm Duy Hoàng 31231026117 Nhập dữ liệu ban đầu: mô tả trò chơi, lên ý
tưởng bộ skills cho trò chơi
3 Biện Bùi Duy Quang 31231025156
4 Đặng Lê Khánh Ly 31231022099
Viết chương trình, chỉnh sửa và thêm hiệu ứng skills, sửa lỗi logic
5 Võ Nguyên Bảo 31231021638
6 Trần Thành Đạt 31231021353
Trang 3Mục Lục
I ĐẶT VẤN ĐỀ: 3
1 Giới thiệu 3
2 Mục tiêu 3
3 Cơ sở lý thuyết 4
3.1 Phần mềm hỗ trợ VISUAL STUDIO 4
3.2 Tổng quan về ngôn ngữ lập trình C# 4
II PHÂN TÍCH VÀ THIẾT KẾ 4
1 Phân tích 4
1.1 Khái niệm và lợi ích: 4
1.2 Mục tiêu đồ án: 5
1.3 Các phần phân tích: 5
2 Thiết kế 5
2.1 Khai báo thư viện: 5
2.2 Mô tả trò chơi: 5
2.3 Nhập dữ liệu ban đầu: 6
2.4 Vòng lặp và lượt đi: 7
2.5 Kết thúc trò chơi: 14
2.6 Tùy chỉnh thêm cho trò chơi: 16
III KẾT QUẢ ĐẠT ĐƯỢC 16
1 Tính ứng dụng và tương tác người chơi 16
2 Học hỏi và đánh giá 18
3 Tương lai và tiềm năng phát triển 18
IV KẾT LUẬN 18
2
Trang 4I ĐẶT VẤN ĐỀ:
1 Giới thiệu
Nói đến Công Nghệ Thông Tin, chúng ta không thể không nghĩ đến một môi trường phát triển năng động bậc nhất trên toàn thế giới hiện nay Nó được ứng dụng vào mọi mặt của đời sống của con người, từ công việc cho tới giải trí Đi cùng với các xu hướng công nghệ hiện đại hiện nay là các lập trình viên Lập trình viên là những người tạo ra các sản phẩm tiện ích giúp con người làm việc hiệu quả hơn khi thao tác với thiết bị công nghệ Để tạo ra một sản phẩm công nghệ thì bạn cần phải biết những ngôn ngữ lập trình kết nối giữa người dùng và máy tính Cùng với sự phát triển vượt bậc của Công Nghệ Thông Tin, con người đã xây dựng, phát triển và bảo trì các trang thông tin được lưu trữ trên internet dưới nhiều hình thức Trước nhu cầu giải trí của con người sau những giờ làm việc căng thẳng thì các trò chơi được tạo ra để giải quyết vấn đề ấy Nhưng một vấn đề mới được sinh ra cho các lập trình viên là làm sao để đáp ứng nhu cầu của người chơi và cải thiện đời sống tinh thần của họ
Chính vì thế, nhóm em đã tạo ra một trò chơi để phục vụ cho nhu cầu giải trí của người dùng Thay vì bỏ nhiều thời gian hay tiền bạc để giải trí bản thân thì bây giờ, chúng ta có thể ngồi tại nhà để thưởng thức các trò chơi thú vị, không tốn quá nhiều chi phí, thao tác đơn giản và trên hết là đáp ứng đủ nhu cầu cơ bản Hơn thế nữa, không chỉ để giải trí mà người chơi còn có thể học thêm nhiều kỹ năng qua các trò chơi chuyên về giáo dục Đó cũng là lí do nhóm chúng em quyết định chọn
đề tài " xây dựng và lập trình trò chơi" cho đồ án nghiên cứu lần này
2 Mục tiêu
Trò chơi của chúng em được tạo ra với mục tiêu lớn nhất là phục vụ nhu cầu giải trí cơ bản của người dùng Ngoài ra, nhóm em còn đáp ứng được các mục tiêu như sau:
• Giải trí tại nhà, tiện lợi, an toàn
• Tiết kiệm tiền, không cần phải đến những khu vui chơi giải trí khác
• Thao tác đơn giản, dễ sử dụng
• Giao diện thân thiện với người dùng
Trang 53 Cơ sở lý thuyết
3 1 Phần mềm hỗ trợ VISUAL STUDIO
Visual studio là một phần mềm hỗ trợ đắc lực hỗ trợ công việc lập trình website Công cụ này được tạo ra vào năm 2003 và thuộc quyền sở hữu của ông lớn công nghệ Microsoft
Visual Studio là hệ thống tập hợp tất cả những gì liên quan tới phát triển ứng dụng, bao gồm trình chỉnh sửa mã, trình thiết kế, sửa lỗi Tức là, bạn có thể viết code, sửa lỗi, chỉnh sửa thiết kế ứng dụng dễ dàng chỉ với 1 phần mềm Visual Studio Không dừng lại ở đó, người dùng còn có thể thiết kế giao diện, trải nghiệm trong Visual Studio như khi phát triển ứng dụng Xamarin, UWP bằng XAML hay Blend vậy
3.
2 Tổng quan về ngôn ngữ lập trình C#
C# ( C Sharp, đọc là "xi-sáp") là một ngôn ngữ lập trình hướng đối tượng đa
năng, mạnh mẽ được phát triển bởi Microsoft, dựa trên C++ và Java và nó được miêu tả là ngôn ngữ có được sự cân bằng giữa C++, Visual Basic, Delphi và Java
II.PHÂN TÍCH VÀ THIẾT KẾ
1 Phân tích
1.1 Khái niệm và lợi ích:
Phân tích là một phương pháp nghiên cứu, chia nhỏ thành nhiều phần từ một vấn đề hoặc dự án lớn, và từ những thành phần nhỏ đó sẽ xử lý và đưa ra kết luận, rồi xâu chuỗi những kết luận từ phần nhỏ, từ đó ta có kết quả thu được Phương pháp này sẽ giúp chúng ta hiểu rõ được vấn đề, dự án hơn, hoặc có thể giúp chúng
ta đưa ra được những hướng đi mới, giải pháp mới, Cụ thể hơn, trong dự án này, việc tạo ra một trò chơi thì cần phải phân tích thành nhiều phần nhỏ để có thể đưa một trò chơi tối ưu nhất cho người dùng, một bài lập trình ngắn gọn, dễ nhìn nhất cho người lập trình
4
Trang 61.2 Mục tiêu đồ án:
Mục tiêu của đồ án này chủ yếu là để nâng cấp, cải thiện kỹ năng tư duy, lập trình, tính toán và tạo giải thuật, sử dụng kết hợp các hàm chức năng nối ghép với nhau, nối ghép những phần nhỏ để tạo thành phần hoàn chỉnh đó chính là chương trình trò chơi
1.3 Các phần phân tích:
Trong bài dự án lập trình trò chơi này sẽ được chia thành hai phần: nhập dữ liệu ban đầu và thuật toán
Nhập dữ liệu ban đầu: đối với người lập trình sẽ là phần đặt tên biến, kiểu dữ liệu biến hoặc những hàm chức năng nhỏ, ví dụ như: “int player1HP = 100;”,
“static void Trò chơi() ”, Còn đối với người chơi, người chơi chỉ cần nhập tên cho nhân vật và thực hiện theo lệnh đã được lập trình sẵn
Thuật toán là một quy trình hoặc phương pháp để giải quyết một vấn đề, nhiệm
vụ nào đó, cụ thể hơn trong dự án trò chơi này, thuật toán được người lập trình sử dụng trong việc thiết lập trò chơi để tính toán, xác định người chiến thắng
2 Thiết kế
Trò chơi trong dự án này sẽ được thiết kế bằng chương trình Visual Studio 2022
và bằng ngôn ngữ C# Dựa vào phần phân tích đã được đề cập ở trên, thiết kế của trò chơi cũng được chia làm nhiều mục nhỏ
2.1 Khai báo thư viện:
Để có thể lập trình ra trò chơi theo dự án, phần khai báo thư viện là không thể thiếu trong đoạn mã lập trình Các thư viện sẽ được sử dụng ở hình 1
Hình 1: Khai báo thư viện
Trang 72.2 Mô tả trò chơi:
Trò chơi trong dự án này được lấy ý tưởng từ các trò chơi đối kháng đời đầu, sẽ
có hai nhân vật trong trò chơi là người chơi và máy, hai nhân vật sẽ chiến đấu với nhau, mỗi bên sẽ có một bộ kĩ năng để đấu, nhưng người chơi sẽ chọn ngẫu nhiên một số từ một đến mười để tung kĩ năng nhưng không được biết trước kĩ năng đó
ra sao cả, và nhân vật máy cũng vậy, người lập trình trò chơi sẽ thiết lập máy chọn ngẫu nhiên một kĩ năng để đối đầu với người chơi trong mỗi lượt Nếu như bên nào có chỉ số máu bằng không trước thì sẽ thua cuộc và phần thắng cuộc sẽ dành cho bên còn lại (Xem cụ thể ở hình 2.)
Hình 2: Mô tả trò chơi
Ở dòng 19, “Console.OutputEncoding = Encoding.UTF8;” cho phép người lập trình có thể lập trình và xuất ra màn hình chữ Tiếng Việt có dấu
2.3 Nhập dữ liệu ban đầu:
Theo hình 3.1, trò chơi bắt đầu bằng việc nhập tên của người chơi (dòng 52,53)
và cho người chơi với máy một số chỉ số nhất định khi bắt đầu trò chơi (từ dòng
54 đến dòng 60) Dựa theo cơ chế may rủi của xúc xắc, cụ thể là tài/ xỉu để xác định lượt đi của người chơi đánh trước hay đánh sau ( từ dòng 63 đến dòng 75), ở đoạn này, người chơi sẽ nhập “tai” hoặc “xiu”, và máy chủ sẽ ngẫu nhiên tung một quả xúc xắc để đưa ra một số từ một đến sáu Ta có quy ước: “xỉu” tương ứng với con số “một”, “hai”, “ba” của quả xúc xắc, “tài” tương ứng với con số “bốn”,
“năm”, “sáu” Nếu như người chơi đoán trúng với khoảng số xúc xắc đổ ra thì người chơi sẽ được đi trước và ngược lại Ta có được kết quả như hình 3.2
6
Trang 8Hình 3.1: Nhập dữ liệu và xác định lượt đi của trò chơi.
Dòng lệnh “Thread.Sleep(500);” ở trên hình 3.1 có tác dụng giãn thời gian xuất hiện của dòng lệnh giữa các lệnh, góp phần tăng tính chân thật và để cho người chơi dễ dàng bắt kịp được nhịp của trò chơi
Hình 3.2: Mô tả trò chơi, nhập dữ liệu và xác định lượt đi
2.4 Vòng lặp và lượt đi:
Theo hình 5, một vòng lặp được sử dụng để biểu diễn lượt đi của cả người chơi
và máy, sử dụng lệnh “if (nguoiDoan == ketQua)” dành cho lượt của người chơi đi trước (được hiển thị trong hình 4.1 và 4.2), nếu người chơi đi sau thì đoạn mã lệnh
sẽ chạy trong phần else (được hiển thị trong hình 4.3 và 4.4) Vì lượt người chơi đi trước hay lượt của người chơi đi sau đều được thiết lập chung một cấu trúc lượt đi nên trong mục này chỉ đề cập đại diện lượt đi của người chơi đi trước
Trang 9Hình 4.1: Người chơi đoán trúng và lượt của người chơi
Hình 4.2: Người chơi đoán trúng và lượt của máy
Hình 4.3: Người chơi đoán trật và máy được đi trước
Hình 4.4: Người chơi đoán trật và lượt của người chơi
Lượt đi của người chơi.
Khi đến lượt, người chơi sẽ nhập vào một con số bất kì từ một đến mười để sử dụng kĩ năng, mỗi số tương ứng với một kĩ năng khác nhau Hàm Switch-case sẽ
là phương pháp tối ưu nhất cho trò chơi, mỗi một case sẽ đại diện cho một số mà người chơi nhập vào, để người lập trình có thể dễ quan sát và theo dõi lệnh, phần lượt đi của người chơi sẽ được đặt ở một nơi khác đó chính là “static void PlayerTurn(string player1Name, ref int targetHP, ref int targetDefend, ref int selfHP)”, các biến kiểu string và kiểu int được sử dụng để thi triển kĩ năng lên đối thủ Xem thêm chi tiết ở hình 4.5 và 4.6
8
Trang 10Hình 4.5: Bộ kĩ năng của người chơi
Hình 4.6: Bộ kĩ năng của người chơi
Nếu người chơi cố tình nhập dữ liệu ngoài khoảng từ một đến mười thì lượt đi
đó không hợp lệ và sẽ bị coi là mất lượt ( dòng 339 đến dòng 341 hình 4.6)
Lượt đi của máy:
Đến lượt của máy, người lập trình sẽ dùng hàm “random” để ngẫu nhiên chọn
ra một số cho máy (int machineChoice = new Random().Next(1, 11); được thể hiện như hình 4.2 và 4.4), từ số ngẫu nhiên đó sẽ tương ứng với một kĩ năng trong hàm Switch-case tương tự như lượt đi của người chơi (hình 4.7, 4.8, 4.9)
Trang 11Hình 4.7: Bộ kĩ năng của máy
Hình 4.8: Bộ kĩ năng của máy
Hình 4.9: Bộ kĩ năng của máy
Chi tiết các kĩ năng
Trừ máu theo phòng thủ
Ở các kĩ năng, lượng sát thương mà nhân vật có thể gây được cho đối thủ được tính bằng công thức (ví dụ: “(targetHP -= Math.Max(0, 40 – targetDefend)”), công thức trên sẽ lấy sát thương gốc trừ cho chỉ số phòng thủ có sẵn đối thủ sẽ cho được sát thương đầu ra Ví dụ như hình, máy có 100 máu, 10 phòng thủ và người chơi
10
Trang 12sử dụng kĩ năng gây 40 sát thương cho máy, nhưng máy có 10 chỉ số phòng thủ nên máy lúc này chỉ nhận vào 30 sát thương
Hình 4.10: Ví dụ về lượt đánh
Trừ máu qua mỗi lượt
Ở kĩ năng một và kĩ năng sáu, có cơ chế đặc biệt đó chính là gây hiệu ứng xấu qua mỗi lượt Ta sẽ đặt biến “soLuotThieuDotPlayer1” và
“soLuotDinhDocPlayer1” cho người chơi, và sẽ là Player2 cho máy Ví dụ (hình 4.15), người chơi sử dụng kĩ năng 1 vào máy đang có 100 máu, 10 phòng thủ, dựa vào phần trừ máu theo phòng thủ ở trên, máy sẽ nhận vào 15 máu và đồng thời bị gán hiệu ứng xấu( soLuotThieuDotPlayer2 = 2;) trong hai lượt tiếp theo (hình 4.12)
Hình 4.11: Đặt biến cho hiệu ứng xấu
Hình 4.12: Chi tiết về kĩ năng
Trang 13Hình 4.12: Hiệu ứng xấu được thực hiện
Khi bắt đầu của mỗi lượt mới, ta sẽ có các câu lệnh if ở đầu để hiệu ứng xấu diễn ra, nếu hiệu ứng xấu còn hiệu lực ( > 0) thì sẽ bị trừ máu theo phần hiệu ứng xấu được thực hiện (hình 4.12)
Hình 4.13: Ví dụ về hiệu ứng xấu
12
Trang 14Giải hiệu ứng và hồi phục
Khi người chơi hoặc máy chọn vào kĩ năng thứ tám này, trong lượt hành động này người sử dụng kĩ năng sẽ không gây lên người đối thủ mà thay vào đó là gây lên nhân vật bản thân, ngay lập tức được hồi phục 25 máu và xóa mọi hiệu ứng xấu, “giaiThua =1;” được sử dụng để đặt “soLuotThieuDotPlayer = -1;” và
“soLuotDinhDocPlayer = -1;” đồng nghĩa với việc bản thân sẽ không bị hiệu ứng xấu trong những lượt tiếp theo
Hình 4.14: Giải hiệu ứng và hồi phục
Hình 4.15: giaiThuat
Hiệu ứng choáng và mất lượt
Đối với người chơi chọn kĩ năng thứ chín này, sẽ gây một lượng sát thương cho máy và hiêu ứng choáng, khi máy bị choáng đồng nghĩa với việc lượt đi của máy lúc này sẽ không được thực hiện, thay vào đó người chơi sẽ được thực hiện lượt đi tiếp theo (hình 4.16) Ví dụ cụ thể khi in ra màn hình ở hình 4.17
Hình 4.16: Hiệu ứng choáng của người chơi
Hình 4.17: Màn hình hiệu ứng choáng
Trang 15Đối với lượt đi của máy nếu như chọn kĩ năng có hiệu ứng choáng này, máy sẽ
tự động chọn kĩ năng tiếp theo Như hình 4.18 và ví dụ cụ thể ở hình 4.19
Hình 4.18: Hiệu ứng choáng của máy
Hình 4.19: Màn hình hiệu ứng choáng của máy
2.5 Kết thúc trò chơi:
Người chơi chiến thắng:
Trải qua nhiều lượt đấu giữa người chơi và máy, bên nào có số máu bằng 0 trước thì sẽ là người thua cuộc, ngược lại người kia sẽ là người chiến thắng Như hình 5.1, dòng lệnh if sẽ đảm nhiệm vị trí này, nếu như “player2HP”( máu của nhân vật máy) về mức 0 thì máy sẽ được coi là thua cuộc, lúc này người chơi sẽ chiến thắng như hình 5.2
14
Trang 16Hình 5.1: Người chơi chiến thắng
Hình 5.2: Màn hình người chơi chiến thắng
Người chơi thất bại
Nếu như “player1HP” (máu của người chơi) bằng 0 trước, thì lúc này người chơi sẽ nhận được thông báo thất bại Như hình 5.3 và cụ thể ở hình 5.4
Hình 5.3: Người chơi thất bại
Hình 5.4: Màn hình người chơi thất bại
“Bạn có muốn chơi lại không?”
Ở bước cuối cùng của trò chơi, thay vì người chơi muốn chơi lại phải thoát ra
và chạy đoạn mã trò chơi, người lập trình đã thiết lặp vòng lặp “do-while” để giúp người chơi có thể chơi lại trò chơi mà không cần phải chạy đoạn mã trò chơi
Trang 17Hình 5.5: Chơi lại hoặc kết thúc trò chơi
Nếu như người chơi nhập “yes” thì trò chơi sẽ được thiết lập lại và bắt đầu một trò chơi mới, “no” thì trò chơi sẽ kết thúc
2.
6 Tùy chỉnh thêm cho trò chơi:
Ở đây (hình 6.1), người chơi có thể điều chỉnh được độ trễ của các dòng chữ thông qua lệnh “Thread.Sleep(30);” được đặt trong vòng lặp “foreach” Điều này
sẽ giúp cho các dòng chữ hiện ra trên màn hình không còn xuất hiện cùng một lúc nữa, mà thay vào đó là sẽ xuất hiện lần lượt từng chữ cái trông mượt mà và làm dễ chịu người chơi hơn Số được thiết lập trong lệnh “Thread.Sleep(30);” đó được tính theo đơn vị ms (millisecond), số càng nhỏ thì dòng chữ sẽ xuất hiện nhanh hơn và ngược lại
Hình 6.1: Tùy chỉnh thêm cho trò chơi
III KẾT QUẢ ĐẠT ĐƯỢC
1 Tính ứng dụng và tương tác người chơi
Hiểu rõ hơn về cách thức khai báo các thư viện, mô tả trò chơi cũng như nhập
dữ liệu ban đầu giúp người chơi cảm thấy thuận tiện và thích thú hơn.
16
Trang 18Biết cách sử dụng các cấu trúc rẽ nhánh: if…else, switch…case, cấu trúc vòng lặp: do…while để tạo ra những bộ kĩ năng trong trò chơi, tạo ra các hiệu ứng chi tiết cho từng kỹ năng, giúp trò chơi trở nên đa dạng, thú vị, cuốn hút hơn
Hình ảnh trên minh họa cho việc sử dụng cấu trúc rẽ nhánh tạo bộ kĩ năng cho
người chơi
2 Học hỏi và đánh giá
Học hỏi thêm được cách hoàn thiện một bài lập trình, biết cách giải thuật toán sao cho thuận tiện nhất
Cải thiện kỹ năng tư duy, lập trình, tính toán và tạo giải thuật, sử dụng kết hợp các hàm chức năng nối ghép với nhau, nối ghép những phần nhỏ để tạo thành phần hoàn chỉnh đó chính là chương trình trò chơi
Biết vận dụng kiến thức đã học để sửa những lỗi sai trong bài lập trình
Hình ảnh mô tả cách biết áp dụng tư duy, kiến thức để làm ra một trò chơi hoàn chỉnh