1. Trang chủ
  2. » Luận Văn - Báo Cáo

Phân tích và thiết kế xây dựng chương trình

21 511 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Tài liệu tham khảo kỹ thuật công nghệ, chuyên ngành tin học Phân tích và thiết kế xây dựng chương trình

Trang 1

2 ý 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ựctế 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ìnhhuố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. Hành vi nhất quá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ể đara kết quả hoặc cho kết quả sai.

1

Trang 2

3 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ụngTài liệu chuyên môn

(Tri thức sâu)

Chuyên gia(Tri thức nông)

Cơ sở tri thức

Cơ chế suy diễn

Cơ chế lùi Cơ chế tiến Chọn h ớng suy diễn

Chiến l ợc ĐK

Giải quyết xung độtChuyên gia

Kỹ s tri thức

Thu nạp Tri thức

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 đợcthì 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ếnmấ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 đợc200 đ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òncho 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átcá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ều4x4 (=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 theochuỗ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

- 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ântí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ínhPicture 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.

3

Trang 4

- Để 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ụcClearItem để 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à ứngvớ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ầnphâ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ớinhau, 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 đếnkhi 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ínhTag = 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 = 1thì 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ớithứ 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ạmtrả 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ạmhay 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ốngphí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ụcCheck kiểm tra điều này.

 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.

Giải thích:

- Mảng imgNext dùng để hiển thị mẫu hình sẽ hiện ra kế tiếp trong hộp, số đối tợng tơng ứngvới số phần tử của mẫu hình, do đó phải đặt chỉ số của đối tợng imgNext chính xác từ trái sang phải,từ trên xuống dới.

- Đặt thuộc tính Index của imgCell là 0 để trong chơng trình khi viết mã lệnh có thể tạo mảngcho nó.

- Mảng imgColor dùng để tạo màu sắc cho mẫu hình, mỗi mẫu hình sẽ mang một màu sắcriêng biệt Các phần tử trong mảng này có thuộc tính Picture gọi đến các hình với màu sắc khácnhau Các hình này tự tạo ở ngoài môi trờng VB có kích thớc là 18x18 pixel.

- 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 Gametrên thanh trình đơn thì trò chơi bắt đầu và thuộc tính này bằng True.

Trang 6

Ch ơng III: Thiết kế và xây dựng chơng trình

Dim MItem(M, M) As ByteDim PicShapes(8) As StringDim Px, Py As Integer Dim Color As IntegerDim NextShape As IntegerDim NextColor As IntegerDim Score As LongDim Level As IntegerDim 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ântí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 JEnd 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ứamẫu hình kế tiếp.

 Thủ tục RotateItem(): Xoay mẫu hình

 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àngtrê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 đợctrả 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.

Trang 7

 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ấuhiệu kết thúc.

 Thủ tục mnuStop_Click(): Kết thúc trò chơi.Private Sub mnuStop_Click()

StopGameEnd Sub

 Thủ tục mnuShowNext(): Cho phép hiện hoặc ẩn mẫu hình kế tiếp.Private Sub mnuShowNext_Click()

Dim I As Integer For I = 0 To 15

imgeNext(I).Visible = Not imgNext(I).Visible Next I

mnuShowNext.Checked = imgNext(0).VisibleEnd Sub

 Thủ tục mnuExit_Click(): Kết thúc chơng trình.Private Sub mnuExit_Click()

StopGame EndEnd Sub

 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()

PicShapes(1) = "1000100011000000" PicShapes(2) = "0100010011000000" PicShapes(3) = "1000110001000000" PicShapes(4) = "0100110010000000" PicShapes(5) = "1100110000000000" PicShapes(6) = "1111000000000000" PicShapes(7) = "1100100000000000" PicShapes(8) = "1110010000000000" Randomize

CreateCellEnd Sub

 Thủ tục picBox_Keydown(): Thực hiện khi một phím di chuyển trên bàn phím đợc nhấn.

3 Mã nguồn của chơng trình :

Option ExplicitOption Base 1Const Rows = 20Const Cols = 10Const M = 4

7

Trang 8

Dim MItem(M, M) As ByteDim PicShapes(8) As StringDim Px, Py As IntegerDim Color As IntegerDim NextShape As IntegerDim NextColor As IntegerDim Score As LongDim Level As IntegerDim Start As Boolean

 Private Sub CreateCells() Dim i, J As Integer

Dim Indx As Integer

ScaleMode = ((ScaleMode + 1) Mod 7) + 1 picBox.ScaleMode = 3

picBox.Width = 20 * Cols picBox.Height = 20 * Rows With picBox

shpBox.Move Left - 2, Top - 2, ScaleWidth + 4, ScaleHeight + 4 End With

imgCell(0).Tag = 0

imgCell(0).Move 0, 0, 20, 20 For J = 0 To Rows - 1

For i = 0 To Cols - 1 Indx = J * Cols + i If Indx <> 0 Then Load imgCell(Indx)

imgCell(Indx).Move i * 20, J * 20 imgCell(Indx).Visible = True imgCell(Indx).Tag = 0 End If

Next i Next JEnd Sub

 Private Sub CreateItem(Ind As Integer) Dim i, J As Integer

For J = 1 To M For i = 1 To M

MItem(J, i) = Val(Mid(PicShapes(Ind), (J - 1) * M + i, 1)) Next i

Next JEnd Sub

 Private Sub MoveUp() Dim i, J As Integer

For J = 1 To M - 1 For i = 1 To M

MItem(J, i) = MItem(J + 1, i) Next i

Next J

For i = 1 To M MItem(M, i) = 0 Next

End Sub

Trang 9

 Private Sub RotateItem() Const Pi = 3.141592653 Dim i, J As Integer Dim X, Y As Integer Dim Temp(M, M) For J = 1 To M For i = 1 To M

Temp(J, i) = MItem(J, i) Next i

Next J

For J = 1 To M For i = 1 To M

X = 4 + Fix(i * Cos(Pi / 2) - J * Sin(Pi / 2)) Y = 1 + Fix(i * Sin(Pi / 2) - J * Cos(Pi / 2)) MItem(J, i) = Temp(Y, X)

Next i Next J

Do While MItem(1, 1) = 0 And MItem(1, 2) = 0 And MItem(1, 3) = 0 MoveUp

LoopEnd Sub

 Private Function CellAt(ByVal X As Integer, ByVal Y As Integer, ByVal J As Integer, ByVali As Integer) As Integer

CellAt = (Y + J - 1) * Cols + X + i - 1End Function

 Private Sub DrawItem(ByVal X As Integer, ByVal Y As Integer) Dim i, J As Integer

Dim Indx As Integer For J = 1 To M For i = 1 To M

Indx = CellAt(X, Y, J, i) If (Indx < Rows * Cols) Then If imgCell(Indx).Tag <> 1 Then If MItem(J, i) = 1 Then

imgCell(Indx).Picture = imgColor(Color).Picture Else

imgCell(Indx).Picture = Nothing End If

End If End If Next i Next JEnd Sub

 Private Sub ClearItem(ByVal X, Y As Integer) Dim i, J As Integer

Dim Indx As Integer For J = 1 To M For i = 1 To M

Indx = CellAt(X, Y, J, i) If (Indx < Rows * Cols) Then

If imgCell(Indx).Tag <> 1 And (MItem(J, i) = 1) Then imgCell(Indx).Picture = Nothing

End If

9

Trang 10

End If Next i Next JEnd Sub

 Private Sub CreateNext() Dim i As Byte

 Private Sub NewItem()Dim i As Integer

CreateItem NextShape Color = NextColor

Do

NextShape = Int(Rnd * 100) Mod 8 + 1 Select Case NextShape

Case "1" NextColor = 0 Case "2" NextColor = 1 Case "3" NextColor = 2 Case "4" NextColor = 3 Case "5" NextColor = 4 Case "6" NextColor = 5 Case "7" NextColor = 6 Case "8" NextColor = 7 End Select

Loop Until (NextShape > 0) And (NextShape <= 8)

CreateNext Px = 5 Py = 0End Sub

 Private Function Touch() As BooleanDim i, J As Integer

Dim Indx As IntegerDim Found As BooleanJ = 4

Found = FalseDo

i = 1 Do

Trang 11

If (Py + J + 1 <= Rows) Then Indx = CellAt(Px, Py + 1, J, i)

Found = CBool((MItem(J, i) = 1) And (imgCell(Indx).Tag = 1)) Else

Found = CBool(MItem(J, i) = 1) End If

Found = True Else

i = 1 Do J = 3 Do

If Py + J <= Rows Then

Indx = CellAt(Px - 1, Py, J, i)

Found = CBool((MItem(J, i) = 1) And (imgCell(Indx).Tag = 1)) End If

 Private Function MoveRight() As Boolean Dim i, J As Integer

Dim Indx As Integer Dim Found As Boolean i = M

Do J = M Do

If Px + i < Cols Then If Py + J <= Rows Then

Indx = CellAt(Px + 1, Py, J, i)

Found = CBool((MItem(J, i) = 1) And (imgCell(Indx).Tag = 1)) End If

Else

Found = CBool(MItem(J, i) = 1) End If

Trang 12

Indx = CellAt(Px, Py, J, i) If Indx < Rows * Cols Then If MItem(J, i) = 1 Then imgCell(Indx).Tag = 1 End If

End If Next i Next J CheckEnd Sub

 Private Sub DropItem() Do While Not Touch

ClearItem Px, Py Py = Py + 1 DrawItem Px, Py Loop

StopDown NewItem

DrawItem Px, PyEnd Sub

 Private Function RowFull(Num As Integer) Dim i As Integer

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

RowFull = RFullEnd Function

 Private Sub ClearRow(Num As Integer) Dim i, J, sl, slp As Integer

Ngày đăng: 21/11/2012, 10:01

Xem thêm: Phân tích và thiết kế xây dựng chương trình

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w