Đề tài Thiết kế trò chơi dò mìn trong visual foxpro - Pdf 22

Chuyên đề lập trình hướng đối tượng: Thiết kế trò chơi dò mìn trong Visual Foxpro
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.
Người thực hiện: Đỗ Trung Thành. Hướng dẫn: Thầy giáo Nguyễn Hữu Dung
Trang 3
Chuyên đề lập trình hướng đối tượng: Thiết kế trò chơi dò mìn trong Visual Foxpro
- 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:

- 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 = k
5
k
4
k
3
k
2
k
1
k
0
. Khi đó, ta xác
định như sau:
+ 4 bit cuối bên phải k
3
k
2
k
1
k
0
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 k
4
bằng 1 nếu ô(i,j) có mìn và bằng 0 nếu ô này không có mìn. Bit k

1) Tạo một Container với Name = Bang. Trong đó có chứa
a) 3 Label thể hiện các thông tin về trò chơi.
b) 1 TextBox có Name = txtso_min_con (Hiển thị số mìn còn lại chưa đánh dấu)
c) 4 Command với Name lần lượt là: CmdNew (Bài mới), CmdMo (Mở nắp), CmdDong
(Đóng nắp), CmdThoat (Thoát).
2) Tạo một Container thứ hai với Name = Khung hiển thị thông tin người thiết kế trò chơi.
Trong đó có chứa 2 label, và 1 Image.
3) Đặt vào Form 3 đối tượng Timer để tạo chữ chuyển động và hiển thị thời gian trên
Caption của Form.
4) Ngoài ra còn một số thuộc tính khác được bổ xung vào Form các thuộc tính và phương
thức sau:
a) Một Method (phương thức) có tên là tao_bai_min.
b) 4 Property (tính chất) là i
1
, i
2
, st, st
1
là các biến tạo ra chữ chuyển động.
Bước 2: Tạo một đối tượng Class có Name = “do_min” bao gồm:
1) Class o_min từ Class cơ sở Container với các Property (Bổ xung vào 2 tính chất dg,
cot) cơ bản như sau:
Width=20 Height=20 Name=“o_min” BackStyle=0 dg = 1 cot = 1
Thêm vào 3 đối tượng: 1 label có name = “Nen”, 1 Command có Name = “Nap” và 1
Image có Name = “Tranh”.
2) Class Bai_min được tạo từ Class cơ sở Container. Ta bổ xung thêm các tính chất sau
cho Class Bai_min:
So_dg =1 So_cot =1 Unit = 20 So_min[16,16] Tg_so_min=40 So_min_con=.0.
Người thực hiện: Đỗ Trung Thành. Hướng dẫn: Thầy giáo Nguyễn Hữu Dung
Trang 5

.bang.setFocus
.bang.txtso_min_con.value=.baimin1.so_min_con
ENDWITH
thisform.LockScreen =.F.
c) Thủ tục CreatMap của bãi mìn: Bố trí các ô mìn vào bãi mìn
DIMENSION This.so_min(this.so_dg, this.so_cot)
SET Class To do_min.vcx && Thiết lập thư viện Class “do_min”
FOR i=1 To This.so_dg
FOR j=1 To This.so_cot
cName="O"+Padl(i,2,'0')+Padl(j,2,'0')
lCname = "This." + cName
IF Type(cName)<>"O"
this.AddObject(cName,"o_Min")
ENDIF
WITH this.&cName
.Visible=.T.
.nap.visible=.T.
.nap.enabled = .T.
.nap.Caption = ""
.tranh.visible=.F.
Người thực hiện: Đỗ Trung Thành. Hướng dẫn: Thầy giáo Nguyễn Hữu Dung
Trang 6
Chuyên đề lập trình hướng đối tượng: Thiết kế trò chơi dò mìn trong Visual Foxpro
.Top=3+(i-1)*this.unit
.Left=3+(j-1)*this.unit
.Width= this.unit
.Height= this.unit
.dg=i
.Cot=j
ENDWITH

&&Đếm theo từng ô có mìn
For i=1 To .so_dg
For j=1 To .so_cot
If Bitand(.so_min(i,j),16) <>0
If i>1 And j>1
.so_min(i-1,j-1)=.so_min(i-1,j-1)+1
Endif
If i>1
.so_min(i-1,j)=.so_min(i-1,j)+1
Endif
If i>1 And j<.so_cot
.so_min(i-1,j+1)=.so_min(i-1,j+1)+1
Endif
If j>1
.so_min(i,j-1)=.so_min(i,j-1)+1
Người thực hiện: Đỗ Trung Thành. Hướng dẫn: Thầy giáo Nguyễn Hữu Dung
Trang 7
Chuyên đề lập trình hướng đối tượng: Thiết kế trò chơi dò mìn trong Visual Foxpro
Endif
If j<.so_cot
.so_min(i,j+1)=.so_min(i,j+1)+1
Endif
If i<.so_dg And j>1
.so_min(i+1,j-1)=.so_min(i+1,j-1)+1
Endif
If i<.so_dg
.so_min(i+1,j)=.so_min(i+1,j)+1
Endif
If i<.so_dg And j<.so_cot
.so_min(i+1,j+1)=.so_min(i+1,j+1)+1

mau= Rgb(0,128,0)
Case so=6
mau= Rgb(64,0,0)
Case so=7
mau= Rgb(128,128,128)
Case so=8
mau= Rgb(128,128,128)
Otherwise
mau= .Parent.BackColor
Endcase
.nen.ForeColor =mau
.tranh.Visible=.F.
.nen.Visible=.T.
.nen.FontName = "Tahoma"
Else && Có mìn
Người thực hiện: Đỗ Trung Thành. Hướng dẫn: Thầy giáo Nguyễn Hữu Dung
Trang 8
Chuyên đề lập trình hướng đối tượng: Thiết kế trò chơi dò mìn trong Visual Foxpro
.tranh.Visible=.T.
.nen.Visible=.F.
Endif
Endwith
Next
Next
Endwith
g) Thủ tục rai_min của Bãi mìn: Rải mìn vào các ô của bãi mìn
With This
.combinrandom
.so_min_con = .tg_so_min
Thisform.bang.txtso_min_con.value=.so_min_con

.Parent.so_min(x1,y1)=Mod(.Parent.so_min(x1,y1),32) && đổi k
5
về 0
ENDIF
IF Bitand(.Parent.so_min(x1,y1),32)<>0 && Khi nhấn chuột phải
This.fontBold=.T.
this.Caption="O" && Hiện lá cờ
.Parent.so_min_con=.Parent.so_min_con-1
ELSE
this.Caption=""
Người thực hiện: Đỗ Trung Thành. Hướng dẫn: Thầy giáo Nguyễn Hữu Dung
Trang 9
Chuyên đề lập trình hướng đối tượng: Thiết kế trò chơi dò mìn trong Visual Foxpro
.Parent.so_min_con=.parent.so_min_con+1
ENDIF
thisform.bang.txtSo_min_con.Value=.parent.so_min_con
thisform.bang.cmdnew.SetFocus
ENDWITH
ENDIF
c) Thủ tục Loang của bãi mìn: Đáp ứng sự kiện người dùng Click vào một ô mà xung
quanh ô đó không có mìn.
LPARAMETERS x1,y1
IF Mod(This.So_min(x1,y1),16)=0 &&Nếu không có mìn ở xung quanh ô này
DIMENSION stack(256),da_loang(this.so_dg,this.so_cot) &&Khởi tạo Stack(),da_loang()
s=1
stack(s)=(x1-1)*this.so_cot + y1-1
DO While s>0
x = Int(stack(s)/this.so_cot)+1
Y = mod(stack(s),this.so_cot) +1
da_loang(x,y)=.T.

This.&cName tranh.Visible=.T. && hình ảnh quả mìn
Else && Nếu ô không có mìn
This.&cName nen.Visible=.T.
Người thực hiện: Đỗ Trung Thành. Hướng dẫn: Thầy giáo Nguyễn Hữu Dung
Trang 10
Chuyên đề lập trình hướng đối tượng: Thiết kế trò chơi dò mìn trong Visual Foxpro
This.&cName tranh.Visible=.F.
Endif
Else && nếu người sử dụng đã cắm cờ vào những ô này
If Bitand(This.so_min(i,j),16)=0 && Nếu ô này không có mìn
This.&cName nap.Visible=.T.
This.&cName nap.Forecolor=RGB(0,0,0) && Chuyển lá cờ về màu đen
This.&cName nap.Caption="O"
This.&cName nen.Visible=.T.
This.&cName tranh.Visible=.F.
ELSE && Nếu ô có mìn
This.&cName nap.Visible=.T.
This.&cName nen.Visible=.F.
This.&cName tranh.Visible=.T.
Endif
Endif
Next
Next
This.Enabled=.F.
Bước 4: Viết chương trình tạo Menu và chương trình khởi động của trò chơi
1) Thủ tục Start : Tạo chương trình khởi động
Set Talk Off &&Không ghi các kết quả trung gian ra màn hình
Set date Italian &&Ngày tháng năm kiểu Italia
Set Century on &&/năm có 4 chữ số
AppPath=Sys(16)

Define Bar 1 Of About Prompt "\<Gioi thieu"
Define Bar 2 Of About Prompt "\<Tac gia"
Define Bar 3 Of About Prompt "\<Tiep tuc"
On Selection Bar 1 Of About ;
MESSAGEBOX("Tro choi do min thiet ke bang Visual Foxpro"+CHR(10)+;
" Chuc cac ban luon vui ve voi tro choi nay!","GIOI THIEU TRO CHOI")
Activate Menu cMenuName Nowait
On Selection Bar 2 Of AboutDo Tacgia In gmenu
On Selection Bar 3 Of AboutDo tieptuc In gmenu
Procedure Baimoi
With Do_min.baimin1
.rai_min
.Enabled =.T.
.Visible =.T.
Endwith
Procedure Monap
With do_min.baimin1
For i=1 To .so_dg
For j=1 To .so_cot
Cname="O"+Padl(i,2,'0')+Padl(j,2,'0')
.&Cname nap.Visible=.F.
Next
Next
Endwith
Procedure Dongnap
With do_min.baimin1
For i=1 To .so_dg
For j=1 To .so_cot
Cname="O"+Padl(i,2,'0')+Padl(j,2,'0')
.&Cname nap.Visible=.T.

.Timer3.Enabled= .F.
Endwith
WITH thisform.baimin1
FOR i=1 to .so_dg
FOR j=1 to .so_cot
Cname="O"+padl(i,2,'0')+padl(j,2,'0')
.&Cname nap.forecolor=RGB(255,0,0)
NEXT
NEXT
ENDWITH
b) Thủ tục CmdMo_Click()
WITH thisform.baimin1
FOR i=1 to .so_dg
FOR j=1 to .so_cot
Cname="O"+padl(i,2,'0')+padl(j,2,'0')
.&Cname nap.visible=.F.
NEXT
NEXT
ENDWITH
c) Thủ tục CmdDong_Click()
WITH thisform.baimin1
FOR i=1 to .so_dg
FOR j=1 to .so_cot
Cname="O"+padl(i,2,'0')+padl(j,2,'0')
.&Cname nap.visible=.T.
NEXT
NEXT
ENDWITH
d) Thủ tục CmdThoat_Click()
With Do_min

.i2 = .i2 + 1
.khung.Label1.Caption = Left(.st1,.i2)
Else
.i2 = 0
Endif
Endwith
&&Dòng chữ xuất hiện từ phải qua trái trong Bảng
With Thisform
If .i1<Len(.st)
.i1 = .i1 + 1
.bang.Label3.Caption = Left(.st,.i1)
Else
.i1 = 0
Endif
Endwith
b) Thủ tục Timer1_Timer(): Tạo thời gian trên Caption của Form
Thisform.Caption="Hom nay, Ngay " + Padl(Day(Date()),2,'0')+;
" / " + Padl(Month(Date()),2,'0')+;
" / "+ Str(Year(Date()),4)+". Bay gio la: " + Time()
Người thực hiện: Đỗ Trung Thành. Hướng dẫn: Thầy giáo Nguyễn Hữu Dung
Trang 14
Chuyên đề lập trình hướng đối tượng: Thiết kế trò chơi dò mìn trong Visual Foxpro
Người thực hiện: Đỗ Trung Thành. Hướng dẫn: Thầy giáo Nguyễn Hữu Dung
Trang 15


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status