lOMoARcPSD|15978022
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC NHA TRANG
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO BÀI TẬP NHÓM
Thiết kế game trên giao diện Winform bằng ngôn ngữ C#
Giảng viên hướng dẫn:
Sinh viên thực hiện:
ThS. Phạm Thị Kim Ngoan
1. Nguyễn Phước Bảo Khoa
2. Trần Hoàng Trọng
3. Nguyễn Tiến Đạt
4. Vũ Minh Thịnh
Khánh Hoà - Tháng 12/2022.
lOMoARcPSD|15978022
MỤC LỤC
I.Giới thiệu ........................................................................................ 2
II. Nêu bài toán: ................................................................................ 2
1.Giới thiệu về game thẻ bài:................................................................................... 2
2.Yêu cầu thực hiện: ................................................................................................ 2
III. Phân công công việc: .................................................................. 2
IV.Mô tả thiết kế game ..................................................................... 3
1.Luật chơi: ............................................................................................................. 3
2.Giới thiệu hình ảnh và các thao tác cơ bản trong game:....................................... 3
3.Hướng giải quyết .................................................................................................. 4
4.Quy trình thiết kế ứng dụng .................................................................................. 5
V. Đánh giá các thành viên ............................................................. 11
1
lOMoARcPSD|15978022
BÀI TẬP NHÓM
I.Giới thiệu
1. Tên đề tài: Lập trình game “RevelationCard” trên giao diện Windows Form bằng ngôn
ngữ C#.
2. Tên nhóm: Mùa đông không lạnh
3. Tên game: Thủ lĩnh thẻ bài ( dựa trên game BattleShip )
4. Lĩnh vực nghiên cứu: Ứng dụng Windows Form
5. Loại hình nghiên cứu: Game
6. Thời gian thực hiện: Tháng 12/2022
II. Nêu bài toán:
1.Giới thiệu về game thẻ bài:
- Game thẻ bài là gì?
Ý tưởng: là trò chơi mô phỏng theo game Tàu chiến (BattleShip) – một tựa game đã là
tuổi thơ của rất nhiều thế hệ. Có 2 phe, mỗi phe sẽ chọn 3 thẻ bài bí mật để ẩn đi, và
nhiệm vụ của đối phương là tìm ra 3 thẻ bài đó.
2.Yêu cầu thực hiện:
- Tạo giao diện của game bao gồm: bản đồ của người chơi và địch, danh sách các tên
thẻ bài của địch mà người chơi sẽ thăm dò, nút thăm dò.
-Khi đã chọn đúng thẻ bài bí mật thì sẽ hiển thị hình đã chọn đúng và cộng điểm thêm
1, ngược lại hiển thị hình ảnh đã chọn sai.
- Game kết thúc khi round = 0 hoặc điểm số = 3, phe nào có số điểm cao hơn sẽ chiến
thắng
III. Phân công công việc:
Công việc
1.Lựa chọn và phân tích đề tài:
2.Ý tưởng và thiết kế giao diện, chức năng
3.Giải quyết bài toán
4.Tiến hành code mã nguồn
5.Tiến hành kiểm thử
6.Viết báo cáo và tổng hợp
7.Trình bày sản phẩm
Thành viên tham gia
Trần Hoàng Trọng
Cả nhóm
Cả nhóm
Trần Hoàng Trọng
Nguyễn Tiến Đạt
Vũ Minh Thịnh
Nguyễn Phước Bảo Khoa
Nguyễn Tiến Đạt
Nguyễn Tiến Đạt
Nguyễn Phước Bảo Khoa
Trần Hoàng Trọng
Vũ Minh Thịnh
2
lOMoARcPSD|15978022
IV.Mô tả thiết kế game
1.Luật chơi:
- Có 10 vòng chơi, tối đa 3 điểm, người nào đạt đủ 3 điểm trước hoặc điểm cao hơn
đối phương sau 10 vòng chơi là người thắng cuộc.
- Người chơi và địch(máy) sẽ được một bản đồ với kích thước là 4x4 ô.
- Người chơi sẽ được chọn 3 vị trí bất kỳ để giấu thẻ bài của mình.
- Sau khi chọn vị trí để đặt thẻ của bản thân thì có thể chọn một vị trí bất kỳ trong
khu vực của địch để điều tra.
- Nếu người chơi chọn và điều tra được thẻ của địch thì sẽ được cộng 1 điểm cho bản
thân và tương tự như của địch.
2.Giới thiệu hình ảnh và các thao tác cơ bản trong game:
-Một số hình về các nút lệnh trong game:
+Vùng bản đồ của người chơi: gồm 16 ô là các Button được đặt tên như hình:
+Vùng bản đồ của địch : cũng gồm 16 ô là các Button được đặt tên như hình:
3
lOMoARcPSD|15978022
+Vùng
tấndòcông:
Vị trí người
chơi
tìm thẻ
bài địch
Vị trí địch dò tìm thẻ bài
người chơi
Nút điều tra
+Hình ảnh khi chọn đúng thẻ bài
+Hình ảnh khi chọn sai thẻ bài
3.Hướng giải quyết
- Lựa chọn lập trình trên Winform của C# (Visual Studio): đơn giản, dễ sử dụng.
- Dựa vào yêu cầu thực hiện bài toán, ta xử lí như sau:
+ Tạo ra các 16 Buttons ở mỗi bên, người chơi phải chọn 3 vị trí trí bất kì để ẩn thẻ
bài rồi mới có thể tiến hành bước thăm dò địch; địch (máy) sẽ chọn ngẫu nhiên 3 vị
trí để ẩn thẻ bài ( sử dụng hàm Random để xử lý)
+ Tạo danh sách(List) để lưu trữ vị trí dò tìm:
Phe ta: tạo 1 List danh sách các vị trí thuộc bản đồ địch ( tạo 1 ComboBox lưu các
phần tử trong List để người chơi có thể chọn vị trí), sau khi chọn xong mới có thể
nhấn được nút “Probe”
Phe địch: tạo 1 List danh sách các vị trí thuộc bản đồ của người chơi, cho địch chọn
1 vị trí ngẫu nhiên ở bản đồ của người chơi dò tìm ( sử dụng hàm Random để làm
việc này),vị trị được chọn sẽ hiện thị vào ô “Enemy’s investigation”.
+ Tạo ô hiển thị điểm số (textbox) khi chọn đúng thì điểm tăng thêm 1.
+Tạo ô hiển thị vòng chơi (textbox), mỗi bên có 10 lượt chọn, khi người chơi và địch
đã chọn 1 vị trí ở bản đồ của đối phương thì số vòng chơi giảm đi 1.
4
lOMoARcPSD|15978022
+Game kết thúc khi round = 0 hoặc điểm số tăng lên 3( sử dụng sự kiện của toolbox
Timer ).
4.Quy trình thiết kế ứng dụng
B1. Lập trình tính năng xử lý cơ bản
B2. Định hướng xây dựng tính năng bổ sung
B3. Hoàn tất giao diện:
*Hàm thiết lập cho địch ẩn 3 thẻ bài
B1:Lập trình tính năng xử lý cơ bản:
-Vị trí địch lựa chọn: Đặt điều kiện để không bị chọn trùng ô.
Biến index: Chọn 1 ô ngẫu nhiên trong vị trí của địch.
+ Vị trí của địch sẽ được chọn ngẫu nhiên 3 ô từ w1 đến z4
+ Nếu vị trí ô đó chưa được chọn và chưa được gán nhãn thì ta sẽ gán nhãn là:
“enemyCard”.
+ Nếu không thỏa điều kiện thì sẽ quay ngẫu nhiên vị trí tiếp theo.
+ Debug: Hiển thị vị trí được máy random trong debug.
*Hàm khởi động trò chơi:
+ Khởi tạo danh sách các nút cho vị trí người chơi từ w1 đến z4.
+ Khởi tạo danh sách các nút cho vị trí của địch từ a1 đến d4.
+ Khởi tạo ô chọn vị trí của địch bằng “null”.
+ Thông báo cho người chơi biết phải chọn 3 ô khác nhau để bắt đầu trò chơi.
+ Ở vòng for đầu tiên ta khởi tạo trạng thái ban đầu của vị trí của địch.
+ Ở vòng for đầu tiên ta khởi tạo trạng thái ban đầu của vị trí của người chơi.
+ Gọi hàm thiết lập cho địch ẩn 3 thẻ bài (EnemyLocationPicker()).
+ Khi Restart Game thì nút Probe sẽ không được phép nhấn.
5
lOMoARcPSD|15978022
*Hàm ẩn thẻ bài của người chơi:
+ Nếu tổng số thẻ bài lớn hơn 0 thì:
Để 1 biến cục bộ “button” bằng tham số sender để chuyển “sender” thành kiểu dữ liệu
Button(nút).
Nếu người chơi nhấn chọn nút thì chính nút đó sẽ bị vô hiệu hóa..
Màu nền của nút đã được chọn sẽ chuyển thành xám để phân biệt rõ ràng giữa trạng thái
của các nút.
Sau đó những nút được chọn sẽ được gán nhãn thành “playerCard” để nhận biết thẻ đó
đã được sắp đặt.
Sau mỗi lần chọn nút thì số lượng thẻ giảm đi 1.
+ Nếu tổng số thẻ bằng 0 :
Cho btnProde.Enable = true (nút Probe trên giao diện) để có thể nhấn vào.
Sau đó dòng chữ gợi ý sẽ được chuyển để cho người chơi biết được bước tiếp theo để
làm gì.
6
lOMoARcPSD|15978022
*Hàm thiết lập lượt chơi của địch:
1.Xử lí lượt chơi của địch
- Khi vòng chơi còn lớn 0
Máy sẽ chọn ngẫu nhiên 1 vị trí ở bản đồ của người chơi ( xử lý nhờ hàm Random)
Biến index là 1 biến để chọn ngẫu nhiên vị trí bên vị trí người chơi.
+ Nếu máy chọn đúng vị trí có thẻ bài đã ẩn của người chơi
(playerPositionButtons[index].Tag == “enemyCard”)
Hiển thị hình thẻ chọn đúng => ta xử lý chèn hình ảnh vào như sau:
playerPositionButtons[index].BackgroundImage = Properties.Resources.Card (Card là
tên file ảnh )
Vị trí được máy chọn để tấn công sẽ hiện lên trên ô “enemyMove”.
Ô được chọn sẽ được vô hiệu hoá.
Sau đó ô đó sẽ được xóa thuộc tính đã chọn khỏi danh sách.
Cộng điểm của máy lên 1
Sau đó hàm dừng lại.
+ Ngược lại nếu máy chọn sai:
Hiển thị hình thẻ chọn sai => xử lý chèn hình ảnh tương tự như khi chọn đúng:
playerPositionButtons[index].BackgroundImage = Properties.Resources.x (x là tên file
ảnh )
Vị trí được máy chọn để tấn công sẽ hiện lên trên ô “enemyMove”.
Ô được chọn sẽ được vô hiệu hoá.
Sau đó ô đó sẽ được xóa thuộc tính đã chọn khỏi danh sách.
Sau đó hàm dừng lại.
2. Xử lý kết thúc game:
-Khi số vòng bé hơn 1 hoặc điểm của địch bằng 3 hoặc điểm của người chơi bằng 3 thì:
+ Nếu điểm người chơi lớn hơn điểm của máy thì:
Hiển thị ra thông báo người chơi đã thắng.
Khởi động lại game mới.
+ Nếu điểm máy lớn hơn điểm của người chơi thì:
Hiển thị ra thông báo máy đã thắng.
Khởi động lại game mới.
7
lOMoARcPSD|15978022
+ Nếu điểm máy bằng điểm của người chơi thì:
Hiển thị ra thông báo hòa.
Khởi động lại game mới.
*Hàm thiết lập người chơi dò tìm thẻ bài của địch:
+ Nếu danh sách chọn vị trí tấn công của địch đã có vị trí sẽ tấn công thì:
Biến provePosition lưu các giá trị sau khi chuyển đổi thành chữ thường ở
EnemyLocationListbox (vd:W1->w1) => Mục đích là để so sánh với các “name” ở List
enermyPositionButtons (danh sách các ô bên bản đồ của địch) có giống nhau không.
Biến index lưu chỉ số những phần tử có “nam” giống nhau. => sử dụng phương thức Findindex
kết hợp với biểu thức lambda để thực thi.
+ Nếu ô vị trí của địch chưa được chọn và số vòng chơi lớn hơn 0 thì:
Số vòng chơi sẽ trừ đi 1
+ Nếu người chơi chọn đúng ô địch đã chọn thì:
Ô của địch bị chọn đúng sẽ bị vô hiệu hoá.
Hiển thị hình thẻ chọn đúng(tương tự như của địch).
Điểm người chơi sẽ tăng lên 1
Sau đó đến lượt chơi của địch
+ Nếu người chơi chọn sai thì:
Ô của địch bị chọn đúng sẽ bị vô hiệu hoá.
Hiển thị hình thẻ chọn sai(tương tự như của địch).
Sau đó đến lượt chơi của địch
+ Nếu người chơi chưa chọn ô để tấn công thì sẽ có một cảnh báo nhắc người chơi chọn ô
để tấn công.
8
lOMoARcPSD|15978022
9
Downloaded by Quang Quang (
[email protected])
lOMoARcPSD|15978022
B2. Định hướng xây dựng tính năng bổ sung
- Có thể định hướng bổ sung một số tính năng để game tối ưu hơn như sau:
+ Khi người chọn vị trị đặt thẻ bài, nếu chọn nhầm có thể chọn lại bằng cách click chuột
thêm 1 lần nữa.
+ Thêm hiệu ứng âm thanh vào game để người chơi cảm thấy thú vị hơn.
B3. Hoàn tất giao diện:
-Giao diện game khi chưa bắt đầu:
- Game bắt đầu khi người chơi đã chọn xong 3 vị trí để ẩn thẻ bài và đã chọn vị trí người
chơi muốn dò tìm.
10
Downloaded by Quang Quang (
[email protected])
lOMoARcPSD|15978022
V. Đánh giá các thành viên ( Rất tích cực A, tích cực B, còn hạn chế C)
Nguyễn Tiến Đạt : A
Trần Hoàng Trọng : A
Vũ Minh Thịnh : B
Nguyễn Phước Bảo Khoa : A
11
Downloaded by Quang Quang (
[email protected])
lOMoARcPSD|15978022
*Tài liệu tham khảo:
- Kiến thức lập trình Windows Form (học phần lập trình hướng đối tượng C#) đã học.
- Phân tích và hướng dẫn làm game:
https://www.youtube.com/watch?v=ZMppynIIqKs&t=2775s
12
Downloaded by Quang Quang (
[email protected])