Cấu trúc game Pikachu

Một phần của tài liệu Một số thuật toán tìm đường đi ngắn nhất và xây dựng ứng dụng GAME PIKACHU (Trang 41)

Luật chơi:

Game mô phỏng game Pikachu, nhiệm vụ của người chơi là chọn hai hình giống nhau, đường đi rẽ ít nhất hai lần và được nối với nhau bởi tối đa ba đoạn thẳng.

42

- Người chơi phải ẩn hết hình như trong thời gian quy định, nếu không thì người chơi sẽ thua.

Cấu trúc game Pikachu

- Giao diện game sẽ là những ô vuông có tất cả 16x9 ô vuông. Ma

trận 16x9 là để hiển thị trên màn hình, ma trận trong game là 18x11 ô. - Chọn 26 giá trị cho các ô vuông đó

Như vậy để cho game hiển thị những ô vuông nào trên màn hình thì sử dụng mảng hai chiều 18x11 để lưu giá trị từng ô.

Trong game mỗi loại hình xuất hiện ít nhất bốn lần và số lần xuất hiện phải là chẵn. Như vậy mỗi giái trị sẽ xuất hiện trong ma trận 18x11 và ô nào trống sẽ có giá trị là -1. -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 4 13 25 20 14 14 15 19 19 16 24 14 6 11 1 13 -1 -1 16 21 7 8 17 14 11 14 2 6 10 15 9 8 18 2 -1 -1 17 13 10 6 18 8 4 21 6 25 10 18 7 17 5 19 -1 -1 16 9 25 13 15 12 7 20 8 5 14 10 21 10 21 16 -1 -1 24 13 18 25 9 24 13 3 11 8 10 11 20 18 3 24 -1 -1 12 11 3 9 20 5 12 22 11 8 2 2 15 1 4 5 -1 -1 3 20 18 7 7 26 15 12 12 20 12 19 5 9 22 17 -1 -1 1 5 15 4 16 3 31 7 26 17 17 19 1 26 3 1 -1 -1 22 9 4 23 22 19 1 6 23 4 26 2 2 23 6 23 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1

Hình 3.1: Ma trận biểu diễn giá trị của các ô trong game

43 3.3. Cách xây dựng game Pikachu 3.3.1. Cơ sở lý thuyết

Các đường đi trong game Pikachu:

A A A B B B A A A A B B B B A A A A B B B B

Hình 3.2: Một số đường đi trong game Pikachu

Ý tưởng: Xuất phát từ 2 điểm A và B. Làm thế nào để nối A với B bằng tối đa là 3 đường thẳng?

Từ điểm A duyệt đi tất cả các hướng có thể đi (các ô trống xung quanh).Tại B ta cũng duyệt các hướng tương tự A.

Mỗi phía đã duyệt là sử dụng 1 đường thẳng, như vậy, đã mất 2 đường thẳng, nên khi nối 2 hướng chỉ được kẻ thêm 1 đường thẳng nữa.

Đi theo đường từ A vừa duyệt. Nếu gặp đường đi ra từ B tức là có đường đi, ngược lại là không có đường đi. Còn nếu đi theo đường đi từ B vừa duyệt gặp đường đi ra từ A đi ra thì có đường đi, ngược lại là không có đường đi.

44

3.3.2. Áp dụng thuật toán tìm kiếm theo chiều rộng Khi người chơi click chọn vào ô vuông thứ nhất: Khi người chơi click chọn vào ô vuông thứ nhất:

- Nếu click vào ô vuông thứ nhất sẽ lưu lại vị trí ô vuông đó và đánh dấu đã click chọn ô vuông thứ nhất.

- Để chọn được ô vuông thứ hai giống với ô vuông thứ nhất, áp dụng thuật toán tìm kiếm theo chiều rộng:

+ Tìm kiếm trong ma trận, hàng cùng mức với ô thứ nhất nếu tìm thấy ô vuông nào có giá trị giống ô vuông thứ nhất thì lưu lại.

+ Nếu trong hàng cùng mức với ô vuông thứ nhất mà không có giá trị nào giống ô vuông đó ta sẽ chuyển xuống mức tiếp theo và tiếp tục quá trình tìm kiếm cho đến khi tìm được ô vuông nào có giá trị giống với ô vuông đó.

Khi click chọn vào ô vuông thứ hai:

- Nếu hai ô vuông đó giống nhau và được nối với nhau tối đa ba đường thẳng thì sẽ hai ô vuông đó sẽ ẩn đi.

- Hai ô vuông có giá trị khác nhau sẽ không làm gì.

- Hai ô vuông có giá trị bằng nhau và hết đường đi thì sẽ đổi lại bài chơi. - Hai ô vuông giống nhau và ẩn hết các ô vuông thì sẽ qua màn chơi. Có thể mô tả như sau:

- Khi ô vuông đầu tiên được chọn, dùng một biến lấy tọa độ mà khi đã chọn. Sau đó:

+ Lưu vị trí được chọn và tính toán ra vị trí trong ma trận. + Cho hệ thống biết người chơi chọn ô vuông đầu tiên.

+ Vẽ lại game, lúc này sẽ có khung vuông trên hình được chọn. + Dùng một biến khác lưu tọa độ ô vuông thứ hai đã chọn.

Như vậy trong game sẽ lấy sự kiện chọn và tính toán vị trí trong ma trận - Quá trình tìm diễn ra như vậy cho đến khi giá trị hai vị trí này bằng nhau, sau đó:

45

+ Gán cho hai vị trí này bằng -1 để hai vị trí này trống để hàm tìm đường đi có thể đi được.

+ Gọi hàm tìm đường đi đưa vào tham số là hai vị trí.

+ Gán giá trị lại cho hai vị trí được chọn (vì nếu không tìm thấy đường đi thì không được xóa hai hình này).

+ Khi hai hình được chọn giống nhau và được nối với nhau không quá ba đường thẳng. Khi đó sẽ tìm ra đường đi ngắn nhất:

 Số lượng ô vuông được chọn sẽ giảm xuống hai.

 Xóa hai ô vuông này và gán hai vị trí này bằng -1.

 Vẽ đường đi hai hình lại với nhau và cho game ngừng 3 giây để người chơi nhìn thấy đường đi.

- Cứ tiếp tục như vậy cho tới khi số lượng ô vuông giảm xuống 0. - Nếu chưa hết ô vuông mà hết đường đi khi đó sẽ đưa ra thông báo thay đổi bài chơi.

Tìm đường đi ngắn nhất là phần quan trọng nhất của game Pikachu vì nó quy định luật chơi của game. Để tìm đường đi ngắn nhất trong game dùng thuật toán tìm kiếm theo chiều rộng.

Tìm vị trí từ ô vuông thứ nhất sang ô vuông thứ hai:

- Nếu vị trí đang chạy nằm trong vùng trống và rẽ ít hơn hai lần thì sẽ có đường đi sang vị trí ô vuông thứ hai.

- Nếu chạy đến ô vuông cần tìm thì lưu lại quãng đường và so sánh quãng đường nào ngắn nhất.

Mô tả thuật toán tìm kiếm theo chiều rộng để tìm đường đi ngắn nhât: - Nếu vị trí đang chạy ra khỏi ma trận trong game thì thoát.

- Nếu rẽ hơn hai lần thì thoát.

- Tăng chiều dài lên 1 và đánh dấu lại vị trí đã qua sẽ không đi lại đường này nữa.

46

- Nếu tìm được đến ô vuông thứ hai thì kiểm tra xem chiều dài đường đi nào ngắn nhất thì lưu lại đường đi đó.

- Nếu chưa tìm được đường đi đến ô vuông thứ hai khi đó sẽ tiếp tục tìm kiếm ở các mức tiếp theo của ma trận.

Thuật toán này sẽ chạy nhiều hướng khắp ma trận. Chạy xong sẽ kiểm tra đường nào ngắn nhất sẽ lưu lại đường đó. Như vậy sẽ tìm được đường đi ngắn nhất từ ô vuông thứ nhất sang ô vuông thứ hai.

3.4. Một số giao diện và kết quả chạy chương trình 3.4.1. Giao diện chính của chương trình khi mới tạo 3.4.1. Giao diện chính của chương trình khi mới tạo

47 3.4.2. Giao diện khi chạy Auto Play

Chương trình tự động tìm 2 hình giống nhau, nối lại, đường đi là ngắn nhất tìm kiếm theo chiều rộng.

48 3.4.3. Giao diện khi người chơi tự chơi

49

KẾT LUẬN VÀ PHƯƠNG HƯỚNG PHÁT TRIỂN

1. Kết luận

Sau một thời gian tìm hiểu, nghiên cứu tài liệu cùng với sự giúp đỡ nhiệt tình của cô giáo Lưu Thị Bích Hương cùng nhiều thầy, cô giáo trong khoa Công nghệ Thông tin trường Đại học sư phạm Hà Nội 2 em đã hoàn thành khóa luận tốt nghiệp. Qua đề tài “Một số thuật toán tìm đường đi ngắn nhất và xây dựng ứng dụng game Pikachu”, khóa luận đã đạt được những kết quả sau:

- Tìm hiểu những kiến thức cơ bản về lý thuyết đồ thị. - Tìm hiểu về bài toán tìm đường đi ngắn nhất.

- Tìm hiểu một số thuật toán tìm đường đi ngắn nhất như: + Thuật toán tìm kiếm theo chiều rộng

+ Thuật toán tìm kiếm theo chiều sâu + Thuật toán tìm kiếm sâu dần

+ Thuật toán Dijkstra tìm đường đi ngắn nhất

- Xây dựng được chương trình minh họa game Pikachu qua thuật toán tìm đường đi ngắn nhất theo chiều rộng.

2. Hướng phát triển

Luận văn đã xây dựng được chương trình minh họa thuật toán tìm đường đi ngắn nhất và xây dựng ứng dụng game Pikachu, cụ thể đó là thuật toán tìm kiếm theo chiều rộng, được ứng dụng vào nhiều lĩnh vực trong thực tế như trò chơi trong trí tuệ.

Tuy nhiên không thể áp dụng tất cả các thuật toán tìm đường đi ngắn nhất để xây dựng game do mỗi thuật toán còn phức tạp. Hướng phát triển của đề tài trong thời gian tới là thực hiện thêm một số thuật toán tìm đường đi ngắn nhất để xây dựng game Pikachu, cải tiến thuật toán nhằm giảm thời gian xử lý, thiết kế thêm một số chức năng cho chương trình được hoàn thiện hơn, thiết kế chương trình để phát triển trên môi trường mạng. Tìm hiểu thêm các

50

ngôn ngữ khác để viết game Pikachu. Thiết kế giao diện thân thiện với người sử dụng hơn, hoàn thành các phần còn thiếu sót và hạn chế.

Em sẽ tiếp tục phát triển đề tài này bằng cách nghiên cứu thêm ngôn ngữ khác để kết hợp với các công cụ của ngôn ngữ lập trình C# nhằm làm cho giao diện đẹp hơn, thuận tiện hơn với người sử dụng và sản phẩm sẽ được đóng gói trước khi tới tay của người sử dụng.

Do thời gian thực hiện không dài và không được thực tế nhiều nên luận văn của em vẫn còn nhiều thiếu sót. Em rất mong được sự chỉ dẫn thêm của

51

TÀI LIỆU THAM KHẢO

[1] Ngọc Bích - Quỳnh Nga - Tường Thụy - C# dành cho người tự học - Nhà

Xuất Bản Thông Tin Truyền Thông.

[2] Nguyễn Thanh Thủy - Trí Tuệ Nhân Tạo - Nhà Xuất Bản Giáo Dục, 1995

- 1999

[3] Đinh Mạnh Tường - Giáo trình trí tuệ nhân tạo - Nhà xuất bản khoa học

kỹ thuật, 2002.

[4] Nguyễn Ngọc Bình Phương - Thái Thanh Phong - Các giải pháp lập trình

Một phần của tài liệu Một số thuật toán tìm đường đi ngắn nhất và xây dựng ứng dụng GAME PIKACHU (Trang 41)