Dùng phím mũi tên đi lên để xoay mẫu hình, kiểm tra nếu mẫu hình xoay đợc thì sẽ xoay 90 độ. Dùng mũi tên đi xuống để mẫu hình rơi nhanh xuống đáy hộp.. Mỗi khi mẫu hình rơi xuống t
Trang 12 ý nghĩa của một hệ chuyên gia.
a) u điểm của việc xây dựng một hệ chuyên gia ứng dụng.
Xây dựng thành công một hệ chuyên gia ứng dụng có trình độ cao là rất có ý nghĩa trong thực
tế Bởi vì một số tính năng u việt sau :
• Khả năng làm việc độc lập cao, không phụ thuộc vào không gian, thời gian, tình huống và có thể làm việc theo chế độ thời gian thực (Real time)
• Dễ chuyển giao
• Dễ t liệu hoá
• Nhanh tróng đa ra kết luận
• Việc suy diễn, diễn giải cứng nhắc khuôn sáo, không linh động
• Không có những “kinh nghiệm” tự đúc kết trong công việc nh chuyên gia con ngời
• Ngôn ngữ giao tiếp chỉ dừng ở mức độ “tựa tự nhiên” sẽ gây ra sự cản trở đối với những ngời sử dụng không chuyên
• Phạm vi bài toán hẹp
• Tri thức cập nhật không đầy đủ hoặc thiếu chính xác sẽ gây ra hiện tợng không thể đa
ra kết quả hoặc cho kết quả sai
Trang 23 cấu trúc hệ chuyên gia.
a) Cơ sở tri thức :
b) Mô tơ suy diễn:
Cơ sở tri thức
Cơ sở sự kiệnCơ sở luật
Người sử dụng
Tài liệu chuyên môn
(Tri thức sâu) (Tri thức nông)Chuyên gia
Trang 3 Dùng phím mũi tên đi lên để xoay mẫu hình, kiểm tra nếu mẫu hình xoay đợc thì sẽ xoay 90 độ.
Dùng mũi tên đi xuống để mẫu hình rơi nhanh xuống đáy hộp
Mỗi khi mẫu hình rơi xuống thì kiểm tra xem dòng nào phía dới bị kín sẽ biến mất Mỗi lần một dòng biến mất, ngời chơi sẽ đợc thêm 10 điểm Khi ngời chơi tăng thêm đợc
200 điểm thì vận tốc rơi của mẫu hình sẽ tăng lên ( 100 điểm 1 cửa )
Trên cửa sổ chơng trình cho phép hiện hoặc ẩn mẫu hình kế tiếp Ngoài ra còn cho hiện điểm số và số cửa đang chơi
Trò chơi kết thúc khi hộp bị đầy các mẫu hình
II Phân tích:
Vẽ các mẫu hình: Trong chơng trình có 8 mẫu hình với hình dạng khác nhau Quan sát các mẫu hình ta có thể hình dung ra cách quản lý những mẫu hình này bằng một mảng 2 chiều 4x4 (=16 ô)
Khai báo mảng quản lý từng mẫu hình trên:
Dim MItem (4, 4) As Byte
- Tùy theo hình dạng của mẫu hình mà ô nào trong 16 ô đó đợc tô, ta quản lý mẫu hình theo chuỗi, qui ớc ô đợc tô = 1, ô không đợc tô = 0
Ví dụ: Xét mẫu hình "Mẫu 1" trong bảng mẫu hình : ta có thể quản lý nó bằng một chuỗi
"100011000100000" (Đọc theo thứ tự từ trái sang phải, từ trên xuống dới)
Khai báo mảng lu 8 mẫu hình trên:
Dim PicShapes (8) As String
Trang 4- Khi chơng trình cần sử dụng mẫu hình nào thì phần tử PicShapes tơng ứng sẽ đợc lấy để phân tích và gán vào mảng MItem Mảng MItem (J, I) sẽ ứng với ký tự thứ (J - 1) * 4 + I Ta xây dựng thủ tục CreateItem để giải quyết việc này.
- Thể hiện mẫu hình trên hộp và rơi trong phạm vi hộp thì hộp này phải là một ma trận, giả sử hộp này có chiều ngang 10 ô và chiều dọc là 20 ô ( Ma trận 20x10) Mỗi ô trong hộp sẽ là một đối t -ợng Image để quản lý mẫu hình theo từng màu riêng biệt Khi một ô đợc vẽ nghĩa là thuộc tính Picture của Image đợc gán là mẫu hình, ngợc lại thuộc tính Picture là Nothing Thủ tục CreateCell sẽ thực hiện việc chia ô lới cho hộp, mỗi ô có kích thớc 18x18
- Để vẽ một mẫu hình lên vị trí nào đó trên ô lới, ta phải đặt giá trị truy xuất là ô thứ mấy Ví
dụ : lấy ô vị trí (2,7) (dòng 2, cột 7) thì thứ tự của ô trong ô lới là 27 Công thức tổng quát: vị trí ô (Dòng, Cột) truy xuất ô thứ (Dòng * số cột trên 1 hàng + Cột) Xây dựng thủ tục DrawItem để vẽ
- Khi mẫu hình chuyển động thì vị trí của nó liên tục thay đổi và sẽ xóa đi vị trí cũ, tạo thủ tục ClearItem để xóa
- Khi lập một mẫu hình mới, hình sẽ đợc đặt vào mảng, mẫu hình đợc lấy ngẫu nhiên và ứng với một mẫu hình sẽ cho một màu riêng biệt Thủ tục NewItem làm điều này
- Khi một mẫu hình đợc đặt trên bề mặt hộp thì sẽ xuất hiện mẫu hình sẽ ra kế tiếp nó, ta cần phân tích chuỗi đã lấy ngẫu nhiên tơng ứng và đặt giá trị của nó vào mảng thể hiện mẫu hình kế Thủ tục CreateNext làm việc này
- Khi thực hiện xoay mẫu hình với một góc 90 độ, nghĩa là đổi các phần tử trong mảng với nhau, ta dùng công thức:
Jx = 4 + I * Cos (Pi / 2) - J * Sin (Pi / 2)
Ix = 4 + I * Sin (Pi / 2) - J * Cos (Pi / 2)
Xây dựng thủ tục RotateItem để xoay
- Xét mẫu hình sau khi xoay, các phần tử ở hàng trên cùng là 0 thì mẫu hình sẽ dời lên cho đến khi hàng trên cùng không trống Điều này tạo cảm giác khi xoay, mẫu hình không bị dời tọa độ xuống dới Thủ tục MoveUp để dời
- Xét trong quá trình rơi và di chuyển của mẫu hình, nó có bị chạm vào các cạnh hộp hay ô nào
đã bị kín trong hộp hay không, ô bị kín đợc xác định bằng thuộc tính Tag = 1, ngợc lại thuộc tính Tag = 0
Xét mẫu hình đang di chuyển có chạm trái hay cha, nghĩa là phần tử ở cột thứ X xét với
ô lới thứ X-1 cùng hàng Nếu phần tử ở cột X trong mẫu hình = 1, ô X - 1 có thuộc tính Tag = 1 thì chạm Hàm MoveLeft kiểm tra việc này, nếu chạm trả về True
Xét mẫu hình đang di chuyển có chạm phải hay cha, nghĩa là phần tử ở cột thứ X xét với ô lới thứ X+1 cùng hàng Nếu phần tử ở cột X trong mẫu hình = 1, ô X + 1 có thuộc tính Tag = 1 thì chạm Hàm MoveRight kiểm tra việc này, nếu chạm trả về True
Xét mẫu hình đang di chuyển có chạm dới hay cha, nghĩa là phần tử ở hàng cuối của mẫu hình
ở hàng thứ Y xét với hàng thứ Y+1 của ô lới Nếu phần tử ở hàng thứ Y trong mẫu hình = 1, hàng Y+1 của ô lới có thuộc tính Tag = 1 thì chạm Hàm Touch kiểm tra việc này, nếu chạm trả về True
Xét mẫu hình có thể xoay hay không khi hàng cuối cùng của mẫu hình đợc tô có chạm hay không Hàm Rotate kiểm tra việc này, nếu có thể xoay trả về True
- Thủ tục StopDown đặt mẫu hình nằm yên trong hộp khi đã chạm
- Nếu không tác động đến các phím di chuyển trên bàn phím thì mẫu hình sẽ rơi thẳng xuống phía dới đáy hộp cho đến khi bị chạm dới Thủ tục DropItem làm việc này
Xét một hàng đã kín hay cha, ta xét các ô cùng hàng có thuộc tính Tag = 1 thì hàng kín Hàm
RowFull làm việc này Nếu hàng đã kín, mẫu hình trong hàng sẽ biến mất bằng cách gán các ô trong hàng kín bằng các ô trên nó Thủ tục ClearRow giải quyết việc này
- Khi một mẫu hình rơi xuống có thể có nhiều hàng kín nên phải xét tất cả các hàng, thủ tục Check kiểm tra điều này
Trang 5 Hộp đầy khi mẫu hình vừa xuất hiện đã chạm dới, lúc này trò chơi kết thúc Thủ tục StopGame
thực hiện việc kết thúc trò chơi
- Khi trò chơi bắt đầu thì đối tợng Timer tmrTime mới hoạt động, lúc này có thể màn hình đã xuất hiện nhng trò chơi cha bắt đầu nên thuộc tính Enabled gán bằng False Khi chọn Start Game trên thanh trình đơn thì trò chơi bắt đầu và thuộc tính này bằng True
Trang 6Dim MItem(M, M) As Byte
Dim PicShapes(8) As String
Dim Px, Py As Integer
Dim Color As Integer
Dim NextShape As Integer
Dim NextColor As Integer
Dim Score As Long
Dim Level As Integer
Dim Start As Boolean
Định nghĩa các thủ tục :
Thủ tục CreateItem(I As Integer): Thủ tục này phân tích chuỗi PicShapes, sau đó gán giá trị vào mảng chứa mẫu hình MItem, tham số I cho biết số thứ tự của hình đem ra phân tích
Private Sub CreateItem(Index As Integer)
Dim I, J As Integer
For J = 1 To M
For I = 1 To M
MItem(J, I) = Val(Mid(PicShapes(Index), (J - 1) * M + I, 1)) Next I
Next J
End Sub
Thủ tục CreateCell(): Chia hộp thành các ô lới tơng ứng với số hàng và cột, mỗi ô có kích thớc là 18x18
Thủ tục DrawItem(ByVal X, Y As Integer): Vẽ mẫu hình lên vị trí cột X, hàng Y trên hộp
Thủ tục ClearItem(ByVal X, Y As Integer): Xóa mẫu hình đang hiện hành tại tọa độ cột X, hàng Y trong hộp sau khi hình dịch chuyển
Thủ tục NewItem(): Lấy hình dạng cho mẫu hình và đặt màu tơng ứng
Thủ tục CreateNext(): Phân tích chuỗi tơng ứng của mẫu hình kế và gán giá trị vào mảng chứa mẫu hình kế tiếp
Thủ tục RotateItem(): Xoay mẫu hình
Trang 7 Thủ tục MoveUp(): Dồn hàng có phần tử đợc tô lên trên cùng của mảng, nó thi hành khi hàng trên cùng trong mảng không có phần tử nào bị tô.
Hàm MoveLeft(): Kiểm tra khả năng di chuyển sang trái có thể đợc hay không, nếu đợc trả về True
Hàm MoveRight(): Kiểm tra khả năng di chuyển sang phải có thể đợc hay không, nếu
đ-ợc trả về True
Hàm Touch(): Kiểm tra mẫu hình đã chạm dới hay cha
Hàm Rotate(): Kiểm tra mẫu hình có xoay đợc hay không
Thủ tục StopDown(): Đặt mẫu hình nằm yên trong hộp khi đã bị chạm dới
Thủ tục DropItem(): Thực hiện công việc cho mẫu hình rơi thẳng xuống phía dới
Thủ tục mnuStart_Click(): Thủ tục này đợc thi hành để bắt đầu trò chơi
Thủ tục mnuRestart_Click(): Thi hành việc bắt đầu lại trò chơi khi trò chơi đang cha có dấu hiệu kết thúc
Thủ tục mnuStop_Click(): Kết thúc trò chơi
Private Sub mnuStop_Click()
StopGame
End Sub
Thủ tục mnuShowNext(): Cho phép hiện hoặc ẩn mẫu hình kế tiếp
Private Sub mnuShowNext_Click()
Thủ tục tmrTime_Timer(): Thủ tục thực hiện khi có sự kiện về thời gian xảy ra
Thủ tục Form_Load(): Định nghĩa các dạng mẫu hình và khởi tạo mẫu hình khi xuất hiện là ngẫu nhiên
Private Sub Form_Load()
Trang 8Dim MItem(M, M) As Byte
Dim PicShapes(8) As String
Dim Px, Py As Integer
Dim Color As Integer
Dim NextShape As Integer
Dim NextColor As Integer
Dim Score As Long
Dim Level As Integer
Dim Start As Boolean
Private Sub CreateCells()
Dim i, J As Integer
Dim Indx As Integer
ScaleMode = ((ScaleMode + 1) Mod 7) + 1
Trang 9X = 4 + Fix(i * Cos(Pi / 2) - J * Sin(Pi / 2))
Y = 1 + Fix(i * Sin(Pi / 2) - J * Cos(Pi / 2))
Trang 10If (Indx < Rows * Cols) Then
If imgCell(Indx).Tag <> 1 And (MItem(J, i) = 1) Then imgCell(Indx).Picture = Nothing
NextShape = Int(Rnd * 100) Mod 8 + 1
Select Case NextShape
Case "1"
Trang 11Dim Indx As Integer
Dim Found As Boolean
Dim Indx As Integer
Dim Found As Boolean
If Px = 0 Then
Found = True
Trang 12Indx = CellAt(Px - 1, Py, J, i)
Found = CBool((MItem(J, i) = 1) And (imgCell(Indx).Tag = 1))
End If
J = J - 1
Loop Until Found Or J < 1
i = i + 1
Loop Until Found Or (i > M)
MoveLeft = Not Found
End If
End Function
Private Function MoveRight() As Boolean
Dim i, J As Integer
Dim Indx As Integer
Dim Found As Boolean
Indx = CellAt(Px + 1, Py, J, i)
Found = CBool((MItem(J, i) = 1) And (imgCell(Indx).Tag = 1))
Loop Until Found Or (i < 1)
MoveRight = Not Found
Trang 13Indx = CellAt(Px, Py, J, i)
If Indx < Rows * Cols Then
Private Sub DropItem()
Do While Not Touch
Dim Indx As Integer
Dim RFull As Boolean
RFull = True
For i = 0 To Cols - 1
Indx = Num * Cols + i
RFull = RFull And CBool(imgCell(Indx).Tag = 1) Next i
Trang 15 Private Sub mnucaculate_Click()
Shell "c:\windows\CALC.EXE", vbNormalFocus
End Sub
Private Sub mnucleanmgr_Click()
Shell "c:\windows\CLEANMGR.EXE", vbNormalFocus
End Sub
Private Sub mnuclock_Click()
MsgBox "Ch¬ng tr×nh cha hoµn thiÖn b¹n ph¶i chê thêi gian n÷a !", vbInformation, "Th«ng B¸o"End Sub
Private Sub mnuDefrag_Click()
Shell "c:\windows\DEFRAG.EXE", vbNormalFocus
End Sub
Private Sub mnudemo_Click()
MsgBox "Ch¬ng tr×nh cha hoµn thiÖn b¹n ph¶i chê thêi gian n÷a !", vbInformation, "Th«ng B¸o"End Sub
Private Sub mnudosprompt_Click()
Shell "c:\windows\DOSPRMPT.exe", vbNormalFocus
End Sub
Private Sub mnuduchung_Click()
frmabout.Show
End Sub
Private Sub mnuEXPLORER_Click()
Shell "c:\windows\explorer.exe", vbNormalFocus
End Sub
Private Sub mnuhung0_Click()
frmabout.Show
End Sub
Private Sub mnuimaging_Click()
Shell "c:\windows\KODAKIMG.EXE", vbNormalFocus
End Sub
Private Sub mnumediaplayer_Click()
Shell "c:\windows\MPLAYER.EXE", vbNormalFocus
End Sub
Trang 16 Private Sub mnumsconfig_Click()
Shell "c:\windows\system\msconfig.exe", vbNormalFocus
End Sub
Private Sub mnumucdo_Click()
MsgBox "Ch¬ng tr×nh cha hoµn thiÖn b¹n ph¶i chê thêi gian n÷a !", vbInformation, "Th«ng B¸o"End Sub
Private Sub mnuNOTEPAD_Click()
Shell "c:\windows\notepad.exe", vbNormalFocus
End Sub
Private Sub mnupassword_Click()
Frmpassword.Show
End Sub
Private Sub mnuprogram_Click()
MsgBox "Ch¬ng tr×nh cha hoµn thiÖn b¹n ph¶i chê thêi gian n÷a !", vbInformation, "Th«ng B¸o"End Sub
Private Sub mnureadme_Click()
Shell "explorer.exe c:\windows\readme.htm", vbNormalFocus
End Sub
Private Sub mnureg_Click()
Shell "c:\windows\regedit.exe", vbNormalFocus
Private Sub mnuscandisk_Click()
Shell "c:\windows\SCANDSKW.EXE", vbNormalFocus
End Sub
Trang 17 Private Sub mnuscanregw_Click()
Shell "c:\windows\SCANREGW.EXE", vbNormalFocus
End Sub
Private Sub mnusckey_Click()
frmTip.Show
End Sub
Private Sub mnutaskman_Click()
Shell "c:\windows\TASKMAN.EXE", vbNormalFocus
End Sub
Private Sub picBox_KeyDown(KeyCode As Integer, Shift As Integer)
If Not Start Then
Exit Sub
End If
Select Case KeyCode
Case vbKeyLeft, vbKeyNumpad4
Private Sub Form_Load()
Dim getpass As String
getpass = GetSetting("zentrix", "symantech", "login")
Trang 19 Private Sub Timer1_Timer()
Public LoginSucceeded As Boolean
Private Sub cmdCancel_Click()
'set the global var to false
'to denote a failed login
LoginSucceeded = False
Unload Me
End Sub
Private Sub cmdOK_Click()
Dim pw$, temp$, login$
pw = GetSetting("zentrix", "symantech", "password")
temp = GetSetting("zentrix", "symantech", "name")
login = GetSetting("zentrix", "symantech", "login")
If txtPassword.Text = pw And txtUserName.Text = temp And login = "1" Then
Trang 20Private Sub Check1_Click()
SaveSetting "zentrix", "symantech", "login", "*H+U+N+G+F*"
Me.Hide
End Sub
Private Sub cmdOK_Click()
SaveSetting "zentrix", "symantech", "name", "nguyen duc hung"
SaveSetting "zentrix", "symantech", "password", Txtname.Text
SaveSetting "zentrix", "symantech", "login", "1"
Txtname.Text = ""
Me.Hide
End Sub
Private Sub Form_Load()
Frmpassword.Caption = "Password * " & Date & " - " & Time
Trang 22II Ch ¬ng II Ph©n tÝch
1 Yªu cÇu ……… 3
2 Ph©n tÝch ……… 3 III Ch ¬ng III ThiÕt kÕ vµ x©y dùng ch¬ng tr×nh
1 ThiÕt kÕ ……… 5
2 C¸c thñ tôc cho ch¬ng tr×nh ……… 5
3 M· nguån cña ch¬ng tr×nh ……… 7