Đề tài: Thiết kế trò chơi dò mìn trong Visual Foxpro

- 0 / 0
(Tài liệu chưa được thẩm định)
Nguồn:
Người gửi: Đỗ Trung Thành (trang riêng)
Ngày gửi: 13h:01' 24-03-2009
Dung lượng: 209.5 KB
Số lượt tải: 369
Nguồn:
Người gửi: Đỗ Trung Thành (trang riêng)
Ngày gửi: 13h:01' 24-03-2009
Dung lượng: 209.5 KB
Số lượt tải: 369
Số lượt thích:
0 người
NỘI DUNG
I. Thiết kế trò chơi
1. Giao diện của trò chơi như sau: 2. Cách chơi: Nhấn vào nút bắt đầu
- Khi người chơi Nhấn chuột trái vào một ô, có ba trường hợp xảy ra:
+ Nếu 8 ô xung quanh ô đó không có mìn thì 8 ô xung quanh nó được lật ra. Nếu những ô xung quanh của ô vừa được lật ra lại không có mìn nó lại tiếp tục lật 8 ô xung quanh ô đó.
+ Nếu 8 ô xung quanh ô đó có ít nhất một ô có mìn thì chỉ ô đó được lật ra và khi lật ra ô đó sẽ hiện ra một con số thông báo số mìn có xung quanh ô đó.
+ Nếu ô đó là ô có mìn, mìn nổ đồng thời tất cả các ô có mìn được lật ra. Người chơi thua cuộc, khi đó những ô được đánh dấu là có mìn (những ô mà người chơi nhấn chuột phải) được giữ nguyên. Trong đó, những ô có mìn vẫn hiện nguyên lá cờ màu đỏ, còn những ô không có mìn hiện lên lá cờ màu đen.
- Khi người chơi dự đoán có mìn ở ô nào thì nhấn chuột phải vào ô đó, ô đó hiện lên một lá cờ. Lúc này hiện lên số mìn còn lại chưa được đánh dấu.
- Nếu tất cả các ô không có mìn đều được lật thì người chơi thắng cuộc.
II. Phương pháp giải quyết
Để xây dựng trò chơi dò mìn, em đã tiến hành thực hiện những công việc cụ thể như sau:
1) Tạo một đối tượng Form làm giao diện chính của chương trình
2) Tạo một đối tượng Class bao gồm hai Container:
a) Một Container chứa ô mìn đáp ứng hai sự kiện khi người sử dụng nhấn trái và phải chuột vào ô mìn
b) Một Container để tạo ra một bãi mìn chứa các ô mìn và đáp ứng các sự kiện khi người sử dụng thực hiện trò chơi.
3) Tạo một Menu và một chương trình để thực thi trò chơi
4) Để viết các chương trình cần sử dụng các kiến thức về lập trình như: mảng 2 chiều, thuật toán loang, thuật toán bit, tạo số ngẫu nhiên, ...
III. Các thuật toán chủ yếu
Để thực hiện chương trình này em đã sử dụng 4 thuật toán cơ bản sau đây:
1)Thuật toán Loang
Thuật toán này được sử dụng để giải quyết vấn đề khi người sử dụng nhấn chuột trái vào 1 ô, nếu ô đó không có mìn nó sẽ loang ra các ô xung quanh không có mìn. Nội dung của thuật toán này như sau:
- Thuật toán Loang xuất phát từ một ô (x, y) có số mìn bằng 0 (tức là 8 ô xung quanh nó không có quả mìn nào). Khi người sử dụng nhấn chuột trái vào ô đó, 8 ô xung quanh nó được lật nắp và trong 8 ô vừa được lật, nếu xung quanh ô nào đó lại có số mìn bằng 0 nó lại tiếp tục lật 8 ô xung quanh nó, ...
- Để thực hiện được điều này, khi lật được một ô nếu nó lại không có mìn ta cho nó vào một ngăn xếp (Stack) để đến bước tiếp theo ta lấy nó ra để loang tiếp.
- Để tránh vòng lặp vô hạn, mỗi khi đưa một ô vào ngăn xếp (Stack) ta kiểm tra xem nó đã được loang chưa bằng cách kiểm tra giá trị mảng Da_loang (đã loang) và đã có trong ngăn xếp (Stack) chưa nhờ hàm ASCAN( ).
2) Thuật toán Bit
Trong chương trình này chúng ta lưu trữ vào một mảng số mìn gồm 16 dòng, 16 cột và trong số 256 ô có chứa ngẫu nhiên 40 quả mìn. Thuật toán Bit sẽ giải quyết được các vấn đề sau:
- Xác định số mìn có xung quanh ô(i,j).
- Xác định ô(i,j) có mìn hay không có mìn.
- Xác định xem người sử dụng đã cắm cờ vào ô(i,j) hay chưa.
Để giải quyết được vấn đề này, ta sử dụng mảng so_min(16, 16) có các phần tử là số nguyên nhỏ hơn 128 lưu trữ chung các dữ liệu về các ô như sau:
Giả sử so_min(i,j) = k. Trong đó, k có biểu diễn nhị phân k = k5k4k3k2k1k0. Khi đó, ta xác định như sau:
+ 4 bit cuối bên phải k3 k2 k1 k0 của số k là số mìn có xung quanh ô(i,j). Số này dễ dàng tính được bằng phép toán Mod(k, 16).
+ Bít k4 bằng 1 nếu ô(i
I. Thiết kế trò chơi
1. Giao diện của trò chơi như sau: 2. Cách chơi: Nhấn vào nút bắt đầu
- Khi người chơi Nhấn chuột trái vào một ô, có ba trường hợp xảy ra:
+ Nếu 8 ô xung quanh ô đó không có mìn thì 8 ô xung quanh nó được lật ra. Nếu những ô xung quanh của ô vừa được lật ra lại không có mìn nó lại tiếp tục lật 8 ô xung quanh ô đó.
+ Nếu 8 ô xung quanh ô đó có ít nhất một ô có mìn thì chỉ ô đó được lật ra và khi lật ra ô đó sẽ hiện ra một con số thông báo số mìn có xung quanh ô đó.
+ Nếu ô đó là ô có mìn, mìn nổ đồng thời tất cả các ô có mìn được lật ra. Người chơi thua cuộc, khi đó những ô được đánh dấu là có mìn (những ô mà người chơi nhấn chuột phải) được giữ nguyên. Trong đó, những ô có mìn vẫn hiện nguyên lá cờ màu đỏ, còn những ô không có mìn hiện lên lá cờ màu đen.
- Khi người chơi dự đoán có mìn ở ô nào thì nhấn chuột phải vào ô đó, ô đó hiện lên một lá cờ. Lúc này hiện lên số mìn còn lại chưa được đánh dấu.
- Nếu tất cả các ô không có mìn đều được lật thì người chơi thắng cuộc.
II. Phương pháp giải quyết
Để xây dựng trò chơi dò mìn, em đã tiến hành thực hiện những công việc cụ thể như sau:
1) Tạo một đối tượng Form làm giao diện chính của chương trình
2) Tạo một đối tượng Class bao gồm hai Container:
a) Một Container chứa ô mìn đáp ứng hai sự kiện khi người sử dụng nhấn trái và phải chuột vào ô mìn
b) Một Container để tạo ra một bãi mìn chứa các ô mìn và đáp ứng các sự kiện khi người sử dụng thực hiện trò chơi.
3) Tạo một Menu và một chương trình để thực thi trò chơi
4) Để viết các chương trình cần sử dụng các kiến thức về lập trình như: mảng 2 chiều, thuật toán loang, thuật toán bit, tạo số ngẫu nhiên, ...
III. Các thuật toán chủ yếu
Để thực hiện chương trình này em đã sử dụng 4 thuật toán cơ bản sau đây:
1)Thuật toán Loang
Thuật toán này được sử dụng để giải quyết vấn đề khi người sử dụng nhấn chuột trái vào 1 ô, nếu ô đó không có mìn nó sẽ loang ra các ô xung quanh không có mìn. Nội dung của thuật toán này như sau:
- Thuật toán Loang xuất phát từ một ô (x, y) có số mìn bằng 0 (tức là 8 ô xung quanh nó không có quả mìn nào). Khi người sử dụng nhấn chuột trái vào ô đó, 8 ô xung quanh nó được lật nắp và trong 8 ô vừa được lật, nếu xung quanh ô nào đó lại có số mìn bằng 0 nó lại tiếp tục lật 8 ô xung quanh nó, ...
- Để thực hiện được điều này, khi lật được một ô nếu nó lại không có mìn ta cho nó vào một ngăn xếp (Stack) để đến bước tiếp theo ta lấy nó ra để loang tiếp.
- Để tránh vòng lặp vô hạn, mỗi khi đưa một ô vào ngăn xếp (Stack) ta kiểm tra xem nó đã được loang chưa bằng cách kiểm tra giá trị mảng Da_loang (đã loang) và đã có trong ngăn xếp (Stack) chưa nhờ hàm ASCAN( ).
2) Thuật toán Bit
Trong chương trình này chúng ta lưu trữ vào một mảng số mìn gồm 16 dòng, 16 cột và trong số 256 ô có chứa ngẫu nhiên 40 quả mìn. Thuật toán Bit sẽ giải quyết được các vấn đề sau:
- Xác định số mìn có xung quanh ô(i,j).
- Xác định ô(i,j) có mìn hay không có mìn.
- Xác định xem người sử dụng đã cắm cờ vào ô(i,j) hay chưa.
Để giải quyết được vấn đề này, ta sử dụng mảng so_min(16, 16) có các phần tử là số nguyên nhỏ hơn 128 lưu trữ chung các dữ liệu về các ô như sau:
Giả sử so_min(i,j) = k. Trong đó, k có biểu diễn nhị phân k = k5k4k3k2k1k0. Khi đó, ta xác định như sau:
+ 4 bit cuối bên phải k3 k2 k1 k0 của số k là số mìn có xung quanh ô(i,j). Số này dễ dàng tính được bằng phép toán Mod(k, 16).
+ Bít k4 bằng 1 nếu ô(i
Đề tài này còn có cả phần Mã nguồn tôi vừa đưa lên. Xin mời các bạn tải phần Mã nguồn Tại đây
Thành giỏi thật mỗi ngày 1 sáng tạo.
Chào bạn. Mỗi ngày một câu chuyện mới cho đỡ nhàm chán Thanh ạ. Biển học là vô bờ mà, làm sao khai thác hết được, biết cái gì thì chia sẻ cùng mọi người. Và từ đó mình cũng học hỏi được nhiều điều mà.
Chúc thầy mọi điều hạnh phúc, thành công.
Nhờ thầy góp ý cho nhà em với
Cảm ơn thầy Nguyễn Ngọc Thành. Chúc thầy vui, khỏe, hạnh phúc!
Chào bạn. Chúc bạn luôn vui vẻ, nhờ bạn xem giúp trang này được ko







Các ý kiến mới nhất