BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP HCM Game tìm hình giống nhau trên thiết bị di động SVTH Fan Melissa 16058931 Võ Sĩ Luân 16052601 GVHD Châu Thị Bảo Hà TP Hồ Chí Minh Năm 2020 KHÓA LUẬN TỐT.
Trang 1BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP.HCM
Game tìm hình giống nhau trên thiết bị di động
SVTH: Fan Melissa 16058931
Võ Sĩ Luân 16052601 GVHD: Châu Thị Bảo Hà
TP.Hồ Chí Minh - Năm 2020
KHÓA LUẬN TỐT NGHIỆP
Trang 2Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
2
Major : Software Technology
INDUSTRIAL UNIVERSITY OF HO CHI MINH CITY FACULTY OF INFORMATION TECHNOLOGY
VO SI LUAN - FAN MELISSA
CONNECT ANIMAL GAME ON MOBLIE
Supervisor : Chau Thi Bao Ha
HO CHI MINH CITY , 2020
Trang 3Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
3
Currently the game making work on Android is widely and popularly used
on mobile devices to meet the entertainment needs of people Realizing the strong development with the purpose of learning, the group decided to explore and implement the topic "The same picture search game on mobile devices"
The game must meet the necessary functions such as: applying and processing the algorithm to find two identical images, when selecting any one, changing the image color so that it is easy to identify and draw the path from image after picture, the game must have sound and be adjustable, be able to calculate the score and save the highest score, make a countdown timer to calculate the end time
of the game
First of all, you need to complete the game function with the basic features of the game such as connecting two identical animals and being able to connect with each other by up to 3 lines without being obstructed by other animals
Completed functions players can play games with two different modes: traditional and expansion mode, complete game sound system, sound effects at play, functions calculate points and save the highest points, store functions to buy and use items purchased, functions to select the level of play for expansion
Through this topic, the team gained more knowledge about what it is like to make a game, approach new game engine, use c# language that the group has not learned before, capable of developing a game product While it was difficult to learn about the new game engine's algorithms and operations due to limitations in documentation and information, the team did their best to complete the project as well as possible Since then the ability to find documents and solve problems is improved
Trang 4Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
4
MỤC LỤC
MỤC LỤC 4
DANH MỤC CÁC HÌNH VẼ 7
DANH MỤC CÁC BẢNG BIỂU 9
LỜI MỞ ĐẦU 11
CHƯƠNG 1 : GIỚI THIỆU 13
1.1.Tổng quan 13
1.2.Mục tiêu đề tài 13
1.3.Phạm vi đề tài 14
1.4 Mô tả yêu cầu chức năng 14
CHƯƠNG 2 : CƠ SỞ LÝ THUYẾT 16
2.1 Tổng quan về Unity: 16
Unity là gì ? [3] 16
Sự hình thành của Unity 16
Kiến trúc tổng quan.[3] 17
Đối tượng của Unity [4] 17
2.2 Thuật toán 19
Thuật toán tìm hai hình giống nhau 19
Hàm hiển thị ảnh lên màn hình 24
Hàm lấy hình ngẫu nhiên 24
Hàm tự động tráo hình khi không còn cặp hình hợp lệ 25
Hàm nhảy vị trí hình 25
CHƯƠNG 3 : PHÂN TÍCH 34
Trang 5Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
5
3.1.Sơ đồ use case 34
3.2 Danh sách use case và các mô tả 34
3.3 Đặc tả yêu cầu chức năng 35
A001_Chọn kiểu cổ điển 35
A002_Chọn kiểu mở rộng 38
A003_Chọn cấp độ 39
A004_Cập nhật kết quả trò chơi 42
A005_ Sử dụng vật phẩm 44
A006_ Tạm dừng trò chơi 47
A007_ Chơi lại từ đầu 49
A008_ Chơi tiếp trò chơi 51
A009_Thoát trò chơi 53
A010_ Hướng dẫn trò chơi 55
A011_ Mua vật phẩm 57
A012_ Tắt/Bật nhạc nền 59
A013_ Chơi trò chơi cổ điển 61
A014_ Chơi trò chơi mở rộng 64
CHƯƠNG 4: THIẾT KẾ VÀ HIỆN THỰC 67
4.1.Sơ đồ 67
4.1.1.Sơ đồ class 67
4.1.2.Sơ đồ màn hình 68
4.2.Hiện thực 68
CHƯƠNG 5: KẾT LUẬN 72
5.1 Kết quả đạt được 72
Trang 6Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
6
5.2 Hạn chế của đồ án 725.3 Hướng phát triển 72TÀI LIỆU THAM KHẢO 73
Trang 7Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
7
DANH MỤC CÁC HÌNH VẼ
Hình 2-1 Hình ma trận 19
Hình 2-2 Trường hợp 1 20
Hình 2-3 Trường hợp 2 20
Hình 2-4 Trường hợp 3 21
Hình 2-5 Trường hợp 4 21
Hình 2-6 Trường hợp 5.1 22
Hình 2-7 Trường hợp 5.2 22
Hình 2-8 Trường hợp 6.1 23
Hình 2-9 Trường hợp 6.2 23
Hình 2-10 Hình thức lưu hình trong đề tài 24
Hình 2-11 Hình ảnh hiển thị trên màn hình trò chơi 24
Hình 2-12 Hình ảnh hiển thị trong thuật toán 24
Hình 2-13 Hình ma trận trước khi nhảy phải 25
Hình 2-14 Hình ma trận sau khi nối hai hình giống nhau 26
Hình 2-15 Hình ma trận sau khi nhảy phải 26
Hình 2-16 Hình kết quả ma trận sau khi nhảy trái 27
Hình 2-17 Hình ma trận trước khi nhảy trái 27
Hình 2-18 Hình ma trận sau khi nối hai hình giống nhau 28
Hình 2-19 Hình ma trận sau khi nhảy trái 28
Hình 2-20 Hình kết quả ma trận sau khi nhảy trái 29
Hình 2-21 Hình ma trận trước khi nhảy lên trên 29
Trang 8Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
8
Hình 2-22 Hình ma trận sau khi nhảy nối hai hình 30
Hình 2-23 Hình ma trận sau khi nhảy lên trên 30
Hình 2-24 Hình kết quả ma trận sau khi nhảy lên trên 31
Hình 2-25 Hình ma trận trước khi nhảy xuống dưới 31
Hình 2-26 Hình ma trận sau khi nối hai hình 32
Hình 2-27 Hình ma trận sau khi nhảy xuống dưới 32
Hình 2-28 Hình kết quả ma trận sau khi nhảy xuống dưới 33
Hình 3-1 Sơ đồ usecase 34
Hình 3-2 Biểu đồ activity chọn kiểu cổ điển 37
Hình 3-3 Biểu đồ sequence chọn kiểu cổ điển 37
Hình 3-4 Biểu đồ activity chọn kiểu mở rộng 39
Hình 3-5 Biểu đồ sequence chọn kiểu mở rộng 39
Hình 3-6 Biểu đồ activity chọn cấp độ 41
Hình 3-7 Biểu đồ sequence chọn cấp độ 41
Hình 3-8 Biểu đồ activity cập nhật kết quả 43
Hình 3-9 Biểu đồ sequence cập nhật kết quả 44
Hình 3-10 Biểu đồ activity sử dụng vật phẩm 46
Hình 3-11 Biểu đồ sequence sử dụng vật phẩm 46
Hình 3-12 Biểu đồ activity tạm dừng 48
Hình 3-13 Biểu đồ sequence tạm dừng trò chơi 48
Hình 3-14 Biểu đồ activity chơi lại từ đầu 50
Hình 3-15 Biểu đồ sequence chơi lại từ đầu 50
Hình 3-16 Biểu đồ activity chơi tiếp 52
Trang 9Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
9
Hình 3-17 Biểu đồ sequence chơi tiếp 52
Hình 3-18 Biểu đồ activity thoát trò chơi 54
Hình 3-19 Biểu đồ sequence thoát trò chơi 54
Hình 3-20 Biểu đồ activity hướng dẫn trò chơi 56
Hình 3-21 Biểu đồ sequence hướng dẫn trò chơi 56
Hình 3-22 Biểu đồ activity mua vật phẩm 58
Hình 3-23 Biểu đồ sequence mua vật phẩm 58
Hình 3-24 Biểu đồ activity tắt/bật nhạc nền 60
Hình 3-25 Biểu đồ sequence tắt/bật nhạc nền 60
Hình 3-28 Biểu đồ sequence chơi trò chơi cổ điển 63
Hình 3-29 Biểu đồ sequence chơi trò chơi mở rộng 66
Hình 0-1 Sơ đồ class 67
Hình 0-2 Màn hình chính 68
Hình 0-3 Màn hình chọn kiểu chơi 69
Hình 0-4Màn hình hướng dẫn trò chơi 69
Hình 0-5 Màn hình chơi theo kiểu cổ điển 70
Hình 0-6 Màn hình chọn cấp độ 70
Hình 0-7 Màn hình chơi theo kiểu mở rộng 71
DANH MỤC CÁC BẢNG BIỂU Bảng 3-1 Bảng danh sách use case 35
Bảng 3-2 Bảng chọn kiểu cổ điển 36
Trang 10Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
10
Bảng 3-3 Bảng chọn kiểu mở rộng 38
Bảng 3-4 Bảng chọn cấp độ 40
Bảng 3-5 Bảng cập nhật kết quả trò chơi 42
Bảng 3-6 Bảng sử dụng vật phẩm 45
Bảng 3-7 Bảng tạm dừng trò chơi 47
Bảng 3-8 Bảng chơi lại từ đầu 49
Bảng 3-9 Bảng chơi tiếp trò chơi 51
Bảng 3-10 Bảng thoát trò chơi 53
Bảng 3-11 Bảng hướng dẫn trò chơi 55
Bảng 3-12 Bảng mua vật phẩm 57
Bảng 3-13 Bảng Tắt/Bật nhạc nền 59
Bảng 3-15 Bảng chơi trò chơi cổ điển 61
Bảng 3-16 Bảng chơi trò chơi mở rộng 64
Trang 11Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
11
LỜI MỞ ĐẦU
1 Tổng quan tình hình nghiên cứu thuộc lĩnh vực của đề tài
Ngày nay, mọi người đã quá quen với những chiếc điện thoại di động luôn ở bên mình mọi lúc mọi nơi, đơn giản vì sự hữu ích của nó Chúng ta có thể nghe, gọi, nhắn tin, lướt web, xem video, nghe nhạc, học tập, chụp ảnh… Điện thoại di động cũng đang ngày càng trở nên thông minh hơn bởi sức sáng tạo không ngừng của con người
Hiện nay, cùng với sự phát triển của công nghệ đi động đã bùng nổ trong nhiều năm qua, các thiết bị cầm tay thông minh đã trở nên rất mạnh mẽ và phổ biến Trong vài năm trở lại đây Hệ điều hành Android ra đời và trở thành nền tảng điện thoại thông minh phổ biến nhất thế giới Hầu như tất cả các điện thoại thông minh
sử dụng hệ điều hành Android đều dễ sử dụng, đơn giản, tùy biến theo sở thích cá nhân Theo báo cáo do Google và Temasek công bố trong tháng 11-2018, thị trường game di động tại Việt Nam tăng trưởng hơn 50% trong năm 2018 Đến năm 2025, ước tính nền kinh tế internet của Việt Nam sẽ là một động cơ tăng trưởng trị giá 33
tỷ USD, lớn thứ 3 khu vực Đông Nam Á và lớn gấp 11 lần so với năm 2015 Một số
dữ liệu thống kê lạc quan do App Annie công bố về thị trường di động năm 2018 trong khu vực càng cho thấy hệ sinh thái di động tại Việt Nam đang đứng trước cơ hội phát triển Theo báo cáo, trung bình mỗi người Việt cài đặt đến 85 ứng dụng di động trên điện thoại của mình và thường sử dụng 37 ứng dụng để chơi game là chủ yếu
Bên cạnh đó, nhóm đã tìm hiểu được hai đề tài game Pikachu của hai nhóm đó
là của Phạm Thị Đoàn Hân và Nguyễn Thị Ánh Tuyết Theo như nhóm quan sát thì hai đề tài đều có sự đổi mới về hình cũng như màu sắc làm cho trò chơi thêm sinh động, đồng thời sáng tạo thêm nhiều chức năng mới như phân chia nhiều chủ đề,
Trang 12Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
12
bảng xếp hạng điểm, hướng dẫn người chơi và các hình ảnh trong trò chơi cũng đa dạng nhưng cả hai vẫn có khuyết điểm chung đó là vẫn giữ lối chơi của game Pikachu truyền thống với giao diện 9 hàng 16 cột, không lưu lại cấp độ trò chơi và cũng chưa khai thác nhiều về chức năng tính điểm
2 Ý nghĩa khoa học và thực tiễn của đề tài
Hiện nay việc làm trình game trên Android được ứng dụng nhiều và phổ biến trên thiết bị di động để đáp ứng nhu cầu giải trí cho con người Nhận thấy được sự phát triển mạnh mẽ cùng với mục đích học tập nên nhóm đã quyết định tìm hiểu và thực hiện đề tài “Game tìm hình giống nhau trên thiết bị di động”
Trang 13Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
“Connect Animal Game” có giao diện chính của trò chơi là các ô hình thú không sắp xếp theo trật tự hàng hay cột mà sẽ có quy luật ngẫu nhiên riêng Trò chơi có nhiều màn chơi và được phân chia theo cấp độ từ dễ dến khó, có hệ thống tính điểm
và tính sao cho người chơi, có giới hạn thời gian theo từng cấp độ chơi và cuối cùng
là có cửa hàng để mua vật phẩm dùng để hỗ trợ người chơi
1.2.Mục tiêu đề tài
Để xây dựng được trò chơi tìm hình giống nhau trên thiết bị di động thì nhiệm
vụ đặt ra là phải phát triển được trò chơi này trên Unity và cài đặt được trên thiết bị
di động Ngoài ra, trò chơi phải đáp ứng những chức năng cần có như là : áp dụng
và xử lý thuật toán tìm hai hình giống nhau, khi chọn một hình bất kỳ thì đổi màu hình đó để dễ nhận biết, vẽ được đường đi từ hình này đến hình khác, trò chơi phải
có âm thanh và có thể điều chỉnh được, có khả năng tính được điểm và lưu lại điểm cao nhất, làm được đồng hồ đếm ngược để tính toán thời gian kết thúc trò chơi
Trang 14Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
14
1.3.Phạm vi đề tài
Nhóm chọn phát triển trò chơi trên Unity vì nó là một game engine được phát triển bởi Unity Technologies như một hệ sinh thái (Engine) đa nền tảng để phát triển game và có các chức năng cơ bản như: cung cấp công cụ dựng hình (kết xuất
đồ họa) cho các hình ảnh 2D hoặc 3D, công cụ vật lý (tính toán và phát hiện va chạm), âm thanh, mã nguồn, hình ảnh động, trí tuệ nhân tạo, phân luồng, tạo dò nguồn dữ liệu xử lý, quản lý bộ nhớ, dựng ảnh đồ thị và kết nối mạng Unity là engine đáp ứng đầy đủ các yêu cầu đó
Ngoài những chức năng cơ bản của một hệ sinh thái đó, Unity còn có những
ưu việt vượt trội so với các engine khác: sử dụng ngôn ngữ lập trình phổ biến tại Việt Nam là C#, hỗ trợ đa nền tảng, dễ sử dụng, ngay cả với lập trình viên nghiệp
dư, thư viện phong phú và cộng đồng lớn mạnh
1.4 Mô tả yêu cầu chức năng
Trước hết phải hoàn thiện được chức năng chơi game với những tính năng cơ bản của trò chơi như nối hai con vật giống nhau và có thể kết nối với nhau bởi tối đa
3 đường thẳng mà không bị cản trở bởi các con vật khác
Mục tiêu tiếp theo của trò chơi là giới hạn được thời gian của mỗi màn chơi để
có thể tính điểm và sao cho người chơi Số sao càng nhiều thì thưởng điểm càng cao (1 sao thưởng 100 điểm, 2 sao thưởng 300 điểm, 3 sao thưởng 500 điểm) Điểm tích được ở mỗi màn chơi sẽ được dùng để mua vật phẩm trong cửa hàng Cửa hàng sẽ bán những vật phẩm như cộng thêm 10 giây vào màn chơi (có giá là 1000 điểm), cộng thêm 20 giây vào màn chơi (có giá là 2000 điểm)
Trong mỗi màn chơi sẽ có chức năng Tạm dừng trò chơi Ngoài ra còn có chức năng chơi lại từ đầu, chơi tiếp, thoát trò chơi Chức năng tạm dừng trò chơi có nghĩa là thời gian sẽ ngừng và người dùng không thể tiếp tục chơi cho đến khi chọn chức năng chơi tiếp Chức năng chơi lại từ đầu có nghĩa là người chơi sẽ được chơi
Trang 15Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
đồ thứ tư có 10 màn với độ khó khác nhau Ở bản đồ thứ nhất thì tự động mở, bản
đồ thứ hai cần bảy sao, bản đồ thứ ba cần 24 sao, bản đồ thứ tư cần 43 sao
Ở chế độ chơi theo kiểu cổ điển, màn thứ nhất có 6 dòng và 10 cột, màn thứ hai có 6 dòng 12 cột, màn thứ ba có 7 dòng 12 cột, màn thứ tư có 7 dòng 14 cột và
từ màn thứ năm có 7 dòng 16 cột Bên cạnh đó, nhảy vị trí hình bắt đầu từ màn thứ hai với nhảy vị trí sang trái, màn thứ ba nhảy vị trí sang phải, màn thứ tư và sáu nhảy vị trí sang trái và xuống dưới, màn thứ năm nhảy vị trí sang phải và xuống dưới, màn thứ bảy nhảy vị trí sang trái và lên trên, từ màn thứ tám trở đi nhảy vị trí sang phải và lên trên
Ở chế độ chơi theo kiểu mở rộng, màn thứ nhất có 4 dòng 5 cột, màn thứ hai
có 4 dòng 6 cột, màn thứ ba có 5 dòng 6 cột, màn thứ tư có 6 dòng 7 cột, màn thứ năm có 6 dòng 8 cột, màn thứ sáu có 6 dòng 12 cột và từ màn thứ 7 trở đi có 6 dòng
13 cột Bên cạnh đó, nhảy vị trí hình bắt đầu từ màn thứ tư với nhảy vị trí sang trái, màn thứ năm nhảy vị trí sang phải và xuống dưới, màn thứ sáu nhảy vị trí sang trái
và xuống dưới, màn thứ bảy nhảy vị trí sang trái và lên trên, từ màn thứ tám trở đi nhảy vị trí sang phải và lên trên
Trang 16Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
và hào hứng trong từng chuyển động, tương lai công nghệ này được áp dụng vào game Việt Nam và mở ra một trang mới cho thế giới game 2D, 3D
Unity được dùng để làm video game hoặc những nội dung có tính tương tác như thể hiện kiến trúc, hoạt hình 2D, 3D thời gian thực Unity là một trong những engine được giới làm game không chuyên cực kỳ ưa chuộng vì khả năng tuyệt vời của nó đó là phát triển trò chơi đa nền Trình biên tập có thể chạy trên Windows và Mac OS và có thể xuất ra game cho Windows, Mac, Wii, IOS, Android
Unity có thể tạo ra được nhiều loại game 2D, 3D đa dạng, dễ sử dụng với những người làm game chưa chuyên nghiệp, chất lượng cao, chạy hầu hết trên các
hệ điều hành Trong Unity chúng ta có thể import trực tiếp các file mô hình đang thiết kế và sẽ thiết kế tiếp nếu chưa xong trong khi việc import chỉ diễn ra một lần Ngoài ra Unity còn cho chúng ta trực tiếp tạo mô hình nếu muốn và việc đặt các thuộc tính vật lý cũng cực kỳ dễ dàng, hỗ trợ sẵn nhiều chức năng
Sự hình thành của Unity
Phần lõi của Unity ban đầu được viết bởi Joachim Ante vào năm 2001 và sau
đó được công ty hình thành vào năm 2005 với phiên bản 1.0 Đến năm 2007, Unity được nâng lên phiên bản 2.0 Unity bắt đầu hỗ trợ Iphone vào năm 2008 Vào tháng
Trang 17Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
Kiến trúc tổng quan.[3]
Engine Unity hỗ trợ cho chúng ta UnityAPI đế viết script game UnityAPI là API lập trình game trong Unity rất mạnh, chứa các đối tượng và phương thức hỗ trợ hầu hết các đối tượng, thành phần trong Unity Trong một scene thường có nhiều đối tượng game, mỗi đối tượng này có thể có hoặc không có đoạn script nào gắn lên
đó Nếu muốn gắn script vào đối tượng ta bắt buộc phải kế thừa lớp MonoBehavior của UnityAPI và tên class phải tùng với tên file script Mỗi script gắn lên đối tượng game đều được xem như một thành phần bên trong và được cấp phát vùng nhớ khi chạy game
Bên trong UnityAPI chứa rất nhiều lớp hỗ trợ lập trình game, trong đó có một
số lớp quan trọng như MonoBehavior (tất cả các script muốn gắn vào đối tượng bắt buộc phải kế thừa lớp này), GameObject (lớp cha của tất cả các thực thể trong scene), Component (lớp cha của tất cả thành phần có thể gắn vào đối tượng)
Đối tượng của Unity [4]
2.1.4.1 GameObject
Unity định nghĩa GameObject là đối tượng đại diện cho các Assets trong game như nhân vật, cây cỏ, công cụ, đạo cụ, camera, hiệu ứng Các GameObject đều chứa một thuộc tính cơ bản là Transform, dùng để thiết lập vị trí, hướng và kích thước của GameObject
Trang 18Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
18
2.1.4.2 Components
Components là các thuộc tính thêm vào GameObject như là Animation, âm thanh, mô hình 3D, hiệu ứng, … nhằm xây dựng, kết hợp các yếu tố khác nhau để xác định các hình thái, hành vi, hiệu ứng, của đối tượng mong muốn trong game
2.1.4.3 Scenes
Trong Unity, Scene là một cảnh game, không gian game nơi thiết lập bố cục của các GameObjects, hoặc là một phần chứa các thiết lập giao diện như các menu trong game Tạo ra nhiều Scenes sẽ giúp linh hoạt trong việc phân phối tối ưu tài nguyên, quản lý các phân đoạn trong game một cách độc lập
2.1.4.4 Scripts
Scripts là một Component trong Unity Đây là thành phần thiết yếu dùng để tương tác với các hành động của người chơi, hoặc quản lý các sự kiện để thay đổi chiều hướng của game tương ứng với kịch bản game Unity cung cấp cho lập trình viên khả năng viết Script bằng ngôn ngữ C#
2.1.4.5 Prefabs
Prefabs là một GameObject hoàn chỉnh sau khi thêm các thuộc tính và được lưu trữ lại để tái sử dụng Các GameObject được nhân bản từ một prefab sẽ giống nhau hoàn toàn Để tạo ra một prefab, ta chỉ cần kéo một GameObject từ cửa sổ Hierarchy vào cửa sổ Project
2.1.4.6 Camera
Camera trong Unity dùng để thể hiện khung hình, góc nhìn mà người chơi có thể nhìn thấy được trong game Trong một game có thể thiết lập nhiều camera để chia nhỏ màn hình người chơi, tạo các hiệu ứng, hoặc tùy chỉnh như nhìn được từ phía sau, bản đồ thu nhỏ, …
Trang 19Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
Trong đó giá trị 0 tượng trưng cho đường bao quanh mang ý nghĩa cho phép
đi Các cặp hình sau khi được nối thì sẽ mất và mang giá trị là 0 Các giá trị khác 0 tượng trưng cho vật cản và là giá trị riêng cho từng hình, nếu như số giống nhau thì hình sẽ giống nhau
Thuật toán tìm hai hình giống nhau
- Trường hợp 1: public bool checkLineX(int y1, int y2, int x)
Hai điểm xét cùng thuộc một hàng (đường thẳng theo trục x) và giữa 2 điểm không có vật cản.[2] Nếu hai điểm A,B có cùng tọa độ x thì sẽ tìm đường thẳng nối
từ điểm A đến điểm B
Trang 20Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
20
Hình 2-2 Trường hợp 1
- Trường hợp 2 : public bool checkLineY(int x1, int x2, int y)
Hai điểm xét cùng thuộc một cột (đường thẳng theo trục y) và giữa 2 điểm không có vật cản [2] Nếu hai điểm A,B có cùng tọa độ y thì sẽ tìm đường thẳng nối từ điểm A đến điểm B
Hình 2-3 Trường hợp 2
- Trường hợp 3 : public int checkRectX(Vector3Int p1, Vector3Int p2)
Xét duyệt các đường đi theo chiều ngang trong phạm vi hình chữ nhật [2] Duyệt từ A.x đến B.x kiểm tra xem có một cột y nào đó trống hay không, nếu có thì nối A với B thông qua đường thẳng y
Trang 21Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
21
Hình 2-4 Trường hợp 3
- Trường hợp 4 : public int checkRectY(Vector3Int p1, Vector3Int p2)
Xét duyệt các đường đi theo chiều dọc [2] Duyệt từ A.y đến B.y kiểm tra xem có một dòng x nào đó trống hay không, nếu có thì nối A với B thông
qua đường thẳng x
Hình 2-5 Trường hợp 4
- Trường hợp 5 : public int checkMoreLineX(Vector3Int p1, Vector3Int p2, int type)
Trang 22Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
22
Xét mở rộng theo chiều ngang [2] Với 2 điểm A,B ta xác định xem điểm nào
có tọa độ y lớn hơn đặt tên là Ymax.y, còn lại là Ymin.y Duyệt từ cột Ymax trở lên cho đến khi gặp đường bao quanh và kiểm tra xem có một cột y nào trống hay không và sau đó nối từ điểm A đến điểm C, từ điểm C đến điểm D
và từ điểm D đến điểm B
Hình 2-6 Trường hợp 5.1
Hình 2-7 Trường hợp 5.2
Trang 23Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
y nào trống hay không và sau đó nối từ điểm A đến
Hình 2-8 Trường hợp 6.1
Hình 2-9 Trường hợp 6.2
Trang 24Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
24
Hàm hiển thị ảnh lên màn hình
Đặt tên tất cả các hình hiện có thành các số nguyên có giá trị tăng dần, sau đó tạo một ma trận số nguyên với số dòng và số cột được cho trước, giá trị được gán vào ma trận là tên của hình tương ứng Ví dụ :
Với các hình được lưu như sau
Hình 2-10 Hình thức lưu hình trong đề tài
Thì khi hiển thị các hình lên giao diện trò chơi thì sẽ được ma trận tương ứng
Hình 2-11 Hình ảnh hiển thị trên màn hình trò chơi
Hình 2-12 Hình ảnh hiển thị trong thuật toán
Hàm lấy hình ngẫu nhiên
Số cột/dòng sẽ thay đổi theo từng cấp độ cho nên số hình hiển thị sẽ thay đổi theo, đế giới hạn số lượng hình lấy ra nên sẽ có hình hiển thị 2 lần hoặc 4 lần trên màn hình được qui định như sau :
Số hình hiển thị 4 lần: x4 = ((số dòng – 2) * (số cột – 2)) / 4 – cấp độ
Số hình hiển thị 2 lần: x2= ((số dòng – 2) * (số cột – 2) – (x4 * 4)) / 2
Trang 25Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
Hàm tự động tráo hình khi không còn cặp hình hợp lệ
Dùng thuật toán tìm hình giống nhau quét ma trận hiện tại xem còn cặp hình nào hợp lệ hay không, nếu hết thì sẽ lấy hết tất cả hình hiện có trên màn hình bỏ vào một List<>() sau đó trộn và đưa lại lên màn hình theo thứ tự từ đầu đến cuối List sao cho thỏa mãn có ít nhất hai cặp giống nhau khi có tổng số hình lớn hơn sáu và một cặp hình khi tổng số hình nhỏ hơn sáu
Hàm nhảy vị trí hình
Nhảy vị trí hình sang phải (public void GoRightButton()): khi một cặp hình giống nhau được nối thì giá trị của hai cặp hình này sẽ bằng -1 Quét ma trận hiện tại xem vị trí nào có giá trị là -1 thì hình đó sẽ đổi vị trí sang trái với các hình cùng hàng cho đến cuối hàng thì dừng Sau khi đổi vị trí xong thì quét lại ma trận một lần nữa xem vị trí nào có giá bằng -1 thì đổi giá trị lại bằng 0
Hình 2-13 Hình ma trận trước khi nhảy phải
Trang 26Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
26
Hình 2-14 Hình ma trận sau khi nối hai hình giống nhau
Hình 2-15 Hình ma trận sau khi nhảy phải
Trang 27Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
27
Hình 2-16 Hình kết quả ma trận sau khi nhảy trái
Nhảy vị trí hình sang trái (public void GoLeftButton()): khi một cặp hình giống nhau được nối thì giá trị của hai cặp hình này sẽ bằng -1 Quét ma trận hiện tại xem vị trí nào có giá trị là -1 thì hình đó sẽ đổi vị trí sang phải với các hình cùng hàng cho đến cuối hàng thì dừng Sau khi đổi vị trí xong thì quét lại ma trận một lần nữa xem vị trí nào có giá bằng -1 thì đổi giá trị lại bằng 0
Hình 2-17 Hình ma trận trước khi nhảy trái
Trang 28Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
28
Hình 2-18 Hình ma trận sau khi nối hai hình giống nhau
Hình 2-19 Hình ma trận sau khi nhảy trái
Trang 29Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
29
Hình 2-20 Hình kết quả ma trận sau khi nhảy trái
Nhảy vị trí hình lên trên (public void GoTopButton()) : khi một cặp hình giống nhau được nối thì giá trị của hai cặp hình này sẽ bằng -1 Quét ma trận hiện tại xem
vị trí nào có giá trị là -1 thì hình đó sẽ đổi vị trí xuống dưới với các hình cùng cột cho đến cuối cột thì dừng Sau khi đổi vị trí xong thì quét lại ma trận một lần nữa xem vị trí nào có giá bằng -1 thì đổi giá trị lại bằng 0
Hình 2-21 Hình ma trận trước khi nhảy lên trên
Trang 30Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
30
Hình 2-22 Hình ma trận sau khi nhảy nối hai hình
Hình 2-23 Hình ma trận sau khi nhảy lên trên
Trang 31Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
31
Hình 2-24 Hình kết quả ma trận sau khi nhảy lên trên
Nhảy vị trí hình xuống dưới (public void GoBottomtButton()): khi một cặp hình giống nhau được nối thì giá trị của hai cặp hình này sẽ bằng -1 Quét ma trận hiện tại xem vị trí nào có giá trị là -1 thì hình đó sẽ đổi vị trí lên trên với các hình cùng cột cho đến cuối cột thì dừng Sau khi đổi vị trí xong thì quét lại ma trận một lần nữa xem vị trí nào có giá bằng -1 thì đổi giá trị lại bằng 0
Hình 2-25 Hình ma trận trước khi nhảy xuống dưới
Trang 32Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
32
Hình 2-26 Hình ma trận sau khi nối hai hình
Hình 2-27 Hình ma trận sau khi nhảy xuống dưới
Trang 33Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
33
Hình 2-28 Hình kết quả ma trận sau khi nhảy xuống dưới
Trang 34Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
34
CHƯƠNG 3: PHÂN TÍCH
3.1.Sơ đồ use case
Hình 3-1 Sơ đồ usecase
3.2 Danh sách use case và các mô tả
A001 Chọn kiểu cổ điển Người chơi chọn kiểu cổ điển để chơi theo kiểu
tìm hình pikachu cổ điển
A002 Chọn kiểu mở rộng Người chơi chọn kiểu chơi mở rộng để chơi
theo kiểu tìm hình muông thú kiểu mới
A003 Chọn cấp độ Khi người chơi chọn kiểu chơi mở rộng phải
chọn cấp độ trước khi bắt đầu chơi
A004 Cập nhật kết quả
trò chơi
Khi màn chơi kết thúc thì hệ thống sẽ tự cập nhật kết quả trò chơi
A005 Sử dụng vật phẩm Khi đang trong màn chơi người chơi có thể sử
Trang 35Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
35
dụng vật phẩm đã mua để hỗ trợ trong việc chơi
A006 Tạm dừng trò chơi Khi đang ở trong một màn chơi, sẽ có nút tạm
dừng để người chơi chọn dừng chơi
A007 Chơi lại từ đầu Sau khi chọn tạm dừng, sẽ hiện nút Chơi lại từ
đầu cho người chơi chọn khi cần
A008 Chơi tiếp trò chơi Sau khi chọn tạm dừng, sẽ hiện nút Chơi tiếp
game cho người chơi chọn khi cần
A009 Thoát trò chơi Sau khi chọn tạm dừng, sẽ hiện nút Thoát trò
chơi cho người chơi chọn khi cần
A010 Hướng dẫn trò chơi
Khi mới bắt đầu vào trò chơi sẽ hiện nút Thông tin game, trong đó sẽ hiện những thông tin cơ bản
mô tả game
A011 Mua vật phẩm
Khi người chơi tìm được quyền trợ giúp phù hợp với nhu cầu thì có thể nhấn nút Mua (mua bằng điểm tích được ở mỗi màn)
A012 Tắt/Bật nhạc nền Chức năng này hỗ trợ người chơi có thể
Bảng 3-1 Bảng danh sách use case
3.3 Đặc tả yêu cầu chức năng
A001_Chọn kiểu cổ điển
3.1.1.1 Mô tả use case A001
Use case: Chọn kiểu cổ điển
Trang 36Khóa tốt nghiệp chuyên ngành Kỹ Thuật Phần Mềm
36
Mục đích: Chức năng này giúp bắt đầu màn chơi theo kiểu cổ điển
Mô tả: Người chơi chọn kiểu cổ điển để chơi theo kiểu tìm hình
pikachu cổ điển
Điều kiện trước:
Điều kiện sau: Người chơi chọn được kiểu chơi mong muốn
3 Người chơi chọn kiểu
Cổ điển
4 Hệ thống hiển thị giao diện chơi theo kiểu cổ điển