Thực hành tin học

Mục tiêu sinh viên cần đạt được:

 Hiểu và sử dụng được hệ điều hành Win9x ở mức độ cơ bản.

 Sử dụng tốt tiện ích Windows Explorer trong các thao tác quản lý hệ thống file (thư mục - folder & file).

Quy ước ký hiệu và thuật ngữ trong tài liệu:

 Khi nói về menu, ký hiệu a.b.c nghĩa là chọn menu a, rồi chọn option b, rồi chọn option c trong danh sách dropdown của submenu b.

 Dùng dấu '/' miêu tả sự tùy chọn phần tử bên trái hay bên phải (a/b nghĩa là a hoặc b).

 Dùng dấu + để thể hiện việc bấm giữ đồng thời nhiều phím. VD: Ctrl + C nghĩa là ấn giữ phím Ctrl rồi ấn thả phím C rồi thả phím Ctrl.

 Về cách sử dụng chuột: click nghĩa là bấm-thả phím chuột trái, right click nghĩa là bấm-thả phím chuột phải, double-click nghĩa là click nhanh 2 lần liên tiếp (nhanh hơn thông số qui định về Mouse trong Control Panel của Windows.

 

doc143 trang | Chia sẻ: NamTDH | Lượt xem: 1229 | Lượt tải: 0download
Bạn đang xem trước 20 trang nội dung tài liệu Thực hành tin học, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ý sự kiện chọn menu View.StatusBar Private Sub mnuViewStatusBar_Click() mnuViewStatusBar.Checked = Not mnuViewStatusBar.Checked sbStatusBar.Visible = mnuViewStatusBar.Checked End Sub ' Thủ tục xử lý sự kiện chọn menu View.ToolBar Private Sub mnuViewToolbar_Click() mnuViewToolbar.Checked = Not mnuViewToolbar.Checked tbToolBar.Visible = mnuViewToolbar.Checked End Sub ' Thủ tục xử lý sự kiện chọn menu File.Exit Private Sub mnuFileExit_Click() 'unload the form Unload Me End Sub BÀI THỰC HÀNH THÊM Ở NHÀ (Số 3) Mục tiêu sinh viên cần đạt được: Thiết kế trực quan được các phần tử giao diện của chương trình dạng SDI. Tạo được các thủ tục xử lý biến cố và viết code cho các thủ tục này. Dùng được các hàm vẽ ảnh, thay đổi kích thước đối tượng giao diện. Dùng được các thủ tục xử lý sự kiện cơ bản như MouseDown, ... Chương trình thực hành : trò chơi Caro giữa người và máy : Chi tiết các menu như sau : Qui trình thực hiện : 1. Chạy VB bằng 1 trong các cách đã biết. 2. Khi cửa sổ New Project hiển thị, chọn icon "VB Application Wizard" như hình trên và ấn button Open. 3. Bạn có thể chọn file "profile" chứa các thông tin cấu hình cần dùng (đã thiết lập sẵn cho các Project trước) rồi ấn button Next để thực hiện bước tiếp theo của qui trình Wizard. 4. Bạn chọn checkbox SDI, nhập tên Project "Caro" rồi ấn button Next để thực hiện bước tiếp theo của qui trình Wizard. 5. Bạn có thể xây dựng trực quan menu (trong thí dụ này bạn không cần làm gì ở bước này) rồi ấn button Next để thực hiện bước tiếp theo của qui trình Wizard. 6. Bạn có thể xây dựng trực quan toolbar (trong thí dụ này bạn không cần làm gì ở bước này) rồi ấn button Next để thực hiện bước tiếp theo của qui trình Wizard. 7. Bạn có thể giữ nguyên thiết lập của cửa sổ này rồi ấn button Next để thực hiện bước tiếp theo của qui trình Wizard. 8. Bạn có thể giữ nguyên thiết lập của cửa sổ này (vì không cần truy xuất Internet) rồi ấn button Next để thực hiện bước tiếp theo của qui trình Wizard. 9. Bạn chọn checkbox About Box để VB tự động tạo form AboutBox dùm bạn rồi ấn button Next để thực hiện bước tiếp theo của qui trình Wizard. 10. Bạn có thể tạo 1 hay nhiều data form truy xuất database (nhưng ứng dụng này không cần) rồi ấn button Next để thực hiện bước tiếp theo của qui trình Wizard. 11. Bạn có thể chọn file profile và cất các thông số vừa thiết lập lên đó (để dùng lại cho các ứng dụng khác) rồi ấn button Finish để kết thúc qui trình Wizard. 12. Cửa sổ ban đầu của Project vừa tạo ra có dạng của hình trên. Trước hết hãy ấn kép vào tên frmAbout trong cửa sổ Project để hiển thị form AboutBox của chương trình rồi hiệu chỉnh lại theo ý muốn, thí dụ theo dạng sau : 13. Ấn kép chuột vào tên frmMain trong cửa sổ Project để hiển thị cửa sổ chính của chương trình. Chọn menu Tool.Menu Editor để hiệu chỉnh lại menu của chương trình theo đặc tả đề nghị ở phần mục đích. Sau đó, xóa Toolbar, comboBox trên frmMain (chỉ giữ lại đối tượng ImageList). Cuối cùng cửa sổ chính có dạng sau : 14. Dùng trình soạn thảo đồ họa (như Paint, Corel Draw!,...) + trình screen capture để vẽ/copy 5 bitmap miêu tả trạng thái các ô cờ (trắng, ô X, ô O, ô X nhấp nháy, ô O nhấp nháy) rồi cất từng ảnh icon lên file bitmap tương ứng (nên cất vào cùng thư mục của Project), thí dụ ta vẽ 5 ảnh bitmap 15*15 như sau : : blanc.gif : X.gif : O.gif : FlashX.gif : FlashO.gif 15. Ấn phải chuột vào đối tượng ImageList, chọn mục Properties để hiển thị cửa sổ thuộc tính của nó hầu hiệu chỉnh lại theo mong muốn. Sau khi chọn tab Images trên cửa sổ thuộc tính, cửa sổ Properties có dạng như sau : 16. Ta chọn từng images rồi ấn button "Remove Picture" để xóa nó đến khi không còn images nào trong danh sách, lúc này cửa sổ thuộc tính có dạng sau : 17. Ấn button "Insert Picture" đế thêm từng images vào danh sách, cửa sổ sau được hiển thị để ta duyệt file và chọn file image cần thêm vào danh sách : 18. Chọn file blanc.gif miêu tả ô cờ trống rồi chọn button Open để thêm nó vào danh sách, cửa sổ thuộc tính sẽ có dạng sau : 19. Nhập danh hiệu nhận dạng image vào textbox "Key", mỗi lần code chương trình cần truy xuất 1 icon trong ImageList, ta có thể dùng chỉ số (Index) hay danh hiệu Key của nó để gợi nhớ hơn. Tiếp tục thêm từng image khác và đặt tên cho nó cho đến khi đã thêm đủ 5 images theo yêu cầu. Lúc này cửa sổ thuộc tính có dạng sau : 20. Ấn button OK để hoàn tất việc hiệu chỉnh ImageList và trở về cửa sổ chính của chương trình. Đặt lại tên imageList là ImageList1. 21. Tạo các thủ tục xử lý biến cố cho 2 option Start và Setup... rồi viết code cho chúng như sau : Option Explicit 'Định nghĩa các hằng gợi nhớ được dùng Private Const USERID = 1 Private Const COMPID = 2 Private Const BLANC_IMG = 0 Private Const X_IMG = 1 Private Const O_IMG = 2 Private Const FLASHX_IMG = 3 Private Const FLASHO_IMG = 4 'Định nghĩa các biến được dùng trong module Private blnDangchoi As Boolean ' Trang thai choi/chua choi Private Board() As Integer ' Ma tran trang thai cac o Private Score() As Integer ' Ma tran diem trong so cac o Private intRowsBoard As Integer ' so hang o Private intColsBoard As Integer ' so cot o Private blnThang(2) As Boolean ' Trang thai thang cua tung phan tu choi Private picImage(0 To 4) As Object ' day cac image can dung Private intMaxscore(2) As Integer ' day diem trong so cua phan tu choi Private win_row As Integer, win_rinc As Integer Private win_col As Integer, win_cinc As Integer Private intBaseX As Integer, intBaseY As Integer ' tọa độ trên trái của bàn cờ Private intPicXWidth As Integer, intPicXHeight As Integer ' kích thước từng ô Private intUserD As Integer, intUserC As Integer Private intCompD As Integer, intCompC As Integer Private mdong As Integer Private mcot As Integer '------------------------------------------------------------------ ' Các thủ tục xử lý sự kiện của form Caro '------------------------------------------------------------------ ' Thủ tục xử lý sự kiện Load form Private Sub Form_Load() intRowsBoard = 20 intColsBoard = 20 intPicXWidth = 15 intPicXHeight = 15 intBaseX = 4 intBaseY = 4 Call InitBoard End Sub ' Thủ tục xử lý sự kiện ấn chuột form Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) Dim row As Integer, col As Integer If Not blnDangchoi Then Exit Sub ' Kiểm tra vị trí ấn chuột nằm trong bàn cờ không ? If intBaseX > x Or x > intBaseX + intColsBoard * intPicXWidth Or _ intBaseY > y Or y > intBaseY + intRowsBoard * intPicXHeight Then Exit Sub ' Tính vị trí ô cờ được ấn col = (x - intBaseX) \ intPicXWidth row = (y - intBaseY) \ intPicXHeight ' Nếu vị trí ô cờ được ấn đã dùng rồi thì thôi If Board(row, col) 0 Then Exit Sub ' Ghi nhận vị trí ô cờ được ấn cho người dùng Board(row, col) = USERID ' Hiển thị vị trí ô cờ có dấu X DisplayElem row, col, X_IMG ' Kiểm tra xem user thắng chưa ? If KiemtraThang(row, col, USERID) Then blnDangchoi = False FlashDisplay (USERID) MsgBox ("Hoan ho! Ban da thang toi.") Exit Sub End If ' Tìm nước đi kế tiếp cho máy Call Timnuocke Board(mdong, mcot) = COMPID DisplayElem mdong, mcot, O_IMG ' Kiểm tra xem máy thắng chưa ? If KiemtraThang(row, col, COMPID) Then blnDangchoi = False FlashDisplay (COMPID) MsgBox ("Rat tiec! Ban da thua toi.") Exit Sub End If End Sub ' Thủ tục xử lý sự kiện vẽ lại form Private Sub Form_Paint() Dim row As Integer, col As Integer For row = 0 To intRowsBoard - 1 For col = 0 To intColsBoard - 1 DisplayElem row, col, Board(row, col) Next col, row End Sub ' Thủ tục xử lý sự kiện chọn Options.Setup Private Sub mnuOptionsSetup_Click() CaroSetup.txtRowsBoard = CStr(intRowsBoard) CaroSetup.txtColsBoard = CStr(intColsBoard) CaroSetup.Show vbModal intRowsBoard = Val(CaroSetup.txtRowsBoard) intColsBoard = Val(CaroSetup.txtColsBoard) Call InitBoard End Sub ' Thủ tục xử lý sự kiện chọn Options.Start Private Sub mnuOptionsStart_Click() Call InitBoard Call Form_Paint End Sub ' Thủ tục xử lý sự kiện chọn Help.About Private Sub mnuHelpAbout_Click() frmAbout.Show vbModal, Me End Sub ' Thủ tục xử lý sự kiện chọn Options.Exit Private Sub mnuFileExit_Click() Unload Me End Sub '----------------------------------------------------------------------------------------- ' Cac thu tuc dich vu cap 1 : duoc goi khi ban an chuot vao form ' Ta dùng tam vuc Public de phan biet voi cac thu tuc dich vu cap 2 '----------------------------------------------------------------------------------------- 'Ham khoi dong trang thai tro choi moi lan choi Public Sub InitBoard() Dim row As Integer, col As Integer ReDim Board(intRowsBoard - 1, intColsBoard - 1) ReDim Score(intRowsBoard - 1, intColsBoard - 1) 'blnInit = False blnDangchoi = True blnThang(USERID) = False blnThang(COMPID) = False For row = 0 To intRowsBoard - 1 For col = 0 To intColsBoard - 1 Board(row, col) = 0 Score(row, col) = 0 Next col, row Me.ScaleMode = vbPixels Me.Width = Me.ScaleX(intColsBoard * intPicXWidth + intBaseX * 4, vbPixels, vbTwips) Me.Height = Me.ScaleY(intRowsBoard * intPicXHeight + intBaseY * 2 + 45, vbPixels, vbTwips) 'Me.Width = (intColsBoard * intPicXWidth + intBaseX * 2) 'Me.Height = (intRowsBoard * intPicXHeight + intBaseY + 20 + intBaseX) * 16 End Sub 'Ham kiem tra phan tu choi id thang chua Public Function KiemtraThang(h As Integer, c As Integer, ByVal id As Integer) As Boolean If id = COMPID Then KiemtraThang = blnThang(COMPID) Exit Function End If intMaxscore(USERID) = EvaluatePosition_5(USERID) intUserD = mdong intUserC = mcot KiemtraThang = blnThang(USERID) End Function 'Ham tim nuoc di ke cho may Public Sub Timnuocke() intMaxscore(COMPID) = EvaluatePosition_5(COMPID) intCompD = mdong intCompC = mcot If intMaxscore(USERID) = 0 And intMaxscore(COMPID) = 0 Then blnDangchoi = False MsgBox ("Hue!") Exit Sub End If ' tim vi tri di cua may If (intMaxscore(USERID) <= intMaxscore(COMPID)) Then mdong = intCompD mcot = intCompC ElseIf priority(intMaxscore(USERID), intMaxscore(COMPID)) Then mdong = intUserD mcot = intUserC Else mdong = intCompD mcot = intCompC End If End Sub 'Ham hien thi 5 o thang (chi moi to dam) Public Sub FlashDisplay(ByVal id As Integer) Dim i As Integer For i = 0 To 4 If id = USERID Then DisplayElem win_row + win_rinc * i, win_col + win_cinc * i, FLASHX_IMG Else DisplayElem win_row + win_rinc * i, win_col + win_cinc * i, FLASHO_IMG End If Next i End Sub '----------------------------------------------------------------------------------------------------- ' Cac thu tuc dich vu cap 2 : ' chi duoc dung boi cac thu tuc dich vu cap 1 ' Ta dùng tam vuc Private de phan biet voi cac thu tuc dich vu cap 1 '----------------------------------------------------------------------------------------------------- Private Function priority(ByVal m1 As Integer, ByVal m2 As Integer) As Boolean Dim tam As Integer, n1 As Integer, n2 As Integer Dim diem As Integer diem = 100 n1 = m1 \ diem n2 = m2 \ diem If n1 0 Or n2 0 Then priority = n1 > n2 Exit Function End If diem = diem \ 10 n1 = m1 \ diem n2 = m2 \ diem If n1 0 Or n2 0 Then priority = n1 > n2 Exit Function End If diem = diem \ 10 n1 = m1 \ diem n2 = m2 \ diem If n1 0 Or n2 0 Then priority = n1 > n2 Exit Function End If priority = True End Function '------------------------------------------------ 'Xoa ma tran tinh diem Score Private Sub ZeroScores() Dim row As Integer, col As Integer For row = 0 To intRowsBoard - 1 For col = 0 To intColsBoard - 1 Score(row, col) = 0 Next col Next row End Sub '------------------------------------------------ ' Tim diem lon nhat Private Function FindMaxScore() Dim MaxScore As Integer Dim row As Integer, col As Integer MaxScore = -1 For row = 0 To intRowsBoard - 1 For col = 0 To intColsBoard - 1 If Score(row, col) > MaxScore Then mdong = row mcot = col MaxScore = Score(row, col) End If Next col Next row FindMaxScore = MaxScore End Function '---------------------------------------------------- Private Function SixInLine(ByVal row As Integer, ByVal col As Integer, ByVal rinc As Integer, ByVal cinc As Integer, ByVal player As Integer) As Boolean Dim d_row As Integer, d_col As Integer, c_row As Integer, c_col As Integer d_row = row - rinc d_col = col - cinc c_row = row + 5 * rinc c_col = col + 5 * cinc SixInLine = False If d_row = intRowsBoard Or d_col >= intColsBoard Then If c_row >= intRowsBoard Or c_col >= intColsBoard Or c_row < 0 Or c_col < 0 Then Exit Function End If If Board(c_row, c_col) = player Then SixInLine = True Exit Function End If If c_row >= intRowsBoard Or c_col >= intColsBoard Or c_row < 0 Or c_col < 0 Then If Board(d_row, d_col) = player Then SixInLine = True Exit Function End If If Board(d_row, d_col) = player Or Board(c_row, c_col) = player Then SixInLine = 1 Else SixInLine = 0 End If End Function '------------------------------------------------ 'ham evaluateline cho luat choi "5 an" 'Tính so diem cua nguoi va may trong hang Private Function EvaluateLine_5(ByVal row As Integer, ByVal rinc As Integer, ByVal col As Integer, cinc As Integer, player As Integer) As Integer Dim tot1 As Integer Dim tot2 As Integer Dim select1 As Integer Dim intScore As Integer Dim i As Integer tot1 = 0 tot2 = 0 EvaluateLine_5 = 0 For i = 0 To 4 Select Case Board(row, col) Case 1 tot1 = tot1 + 1 Case 2 tot2 = tot2 + 1 End Select row = row + rinc col = col + cinc Next i 'If the line has markers from both players then it has score 0 If tot1 > 0 And tot2 > 0 Then Exit Function 'Score according to how many markers player 1 or player 2 has in the line intScore = 0 If (player = 1) Then select1 = tot1 Else select1 = tot2 End If Select Case select1 Case 1 intScore = 1 Case 2 intScore = 10 Case 3 intScore = 100 Case 4 If Not SixInLine(row - 5 * rinc, col - 5 * cinc, rinc, cinc, player) Then If player = COMPID Then If Not blnThang(COMPID) Then blnThang(COMPID) = True win_row = row - 5 * rinc win_rinc = rinc win_col = col - 5 * cinc win_cinc = cinc EvaluateLine_5 = 2000 Exit Function End If Else intScore = 1000 End If Else intScore = -100 End If Case 5 If Not SixInLine(row - 5 * rinc, col - 5 * cinc, rinc, cinc, player) Then blnThang(player) = True win_row = row - 5 * rinc win_rinc = rinc win_col = col - 5 * cinc win_cinc = cinc End If End Select EvaluateLine_5 = intScore End Function '------------------------------------------------ 'ham AddToLine_5 cho luat choi "5 an" 'Them diem vao moi o trong trong day. Private Sub AddToLine_5(ByVal sinc As Integer, ByVal row As Integer, ByVal rinc As Integer, ByVal col As Integer, ByVal cinc As Integer) Dim i As Integer For i = 0 To 4 If Board(row, col) = 0 Then Score(row, col) = Score(row, col) + sinc row = row + rinc col = col + cinc Next i End Sub '---------------------------------------------------------- 'ham EvaluatePosition_5 cho luat choi "5 an" 'Khao sat vi tri bang cach tim day 5 o duoc danh lien tiep Private Function EvaluatePosition_5(ByVal player As Integer) As Integer Dim row As Integer, col As Integer Dim rinc As Integer, cinc As Integer Dim intScore As Integer Dim intDir As Integer Call ZeroScores ' Khao sat tung o tren board For row = 0 To intRowsBoard - 1 For col = 0 To intColsBoard - 1 'For each square look at the three five-in-a-rows that start from it 'One along the row, one along the column, and along the diagonal 'Whoops -- along BOTH diagonals! For intDir = 0 To 3 'check for the cases where we are too close to the board edges 'intDir==0 checks the five in a row along this row If intDir = 0 And col > intColsBoard - 5 Then GoTo Continue 'intDir==0 checks the five in a row along this column If intDir = 1 And row > intRowsBoard - 5 Then GoTo Continue 'intDir==2 checks the five in a row along the right diagonal If intDir = 2 And (col > intColsBoard - 5 Or row > intRowsBoard - 5) Then GoTo Continue 'intDir==3 checks the five in a row along the left diagonal If intDir = 3 And (col intRowsBoard - 5) Then GoTo Continue Select Case intDir Case 0 rinc = 0 cinc = 1 Case 1 rinc = 1 cinc = 0 Case 2 rinc = 1 cinc = 1 Case 3 rinc = 1 cinc = -1 End Select intScore = EvaluateLine_5(row, rinc, col, cinc, player) AddToLine_5 intScore, row, rinc, col, cinc Continue: Next intDir Next col Next row EvaluatePosition_5 = FindMaxScore() End Function 'Hien thi o co imgCode o vi tri (row,col) Private Sub DisplayElem(row As Integer, col As Integer, imgCode As Integer) Dim x As Integer, y As Integer Dim curPic As Object ScaleMode = vbPixels x = intBaseX + col * intPicXWidth y = intBaseY + row * intPicXHeight PaintPicture ImageList1.ListImages.Item(imgCode + 1).Picture, x, y, intPicXWidth, intPicXHeight, 0, 0, , , vbSrcCopy End Sub BÀI THỰC HÀNH THÊM Ở NHÀ (Số 4) Mục tiêu sinh viên cần đạt được: Thiết kế trực quan được các phần tử giao diện của chương trình dạng SDI. Tạo được các thủ tục xử lý biến cố và viết code cho các thủ tục này. Dùng được các hàm vẽ ảnh, thay đổi kích thước đối tượng giao diện. Dùng được các thủ tục xử lý sự kiện cơ bản như MouseDown, ... Chương trình thực hành : trò chơi dò mìn có dạng sau : Chi tiết các menu như sau : Qui trình thực hiện : 1-20. Thực hiện các bước từ 1-20 giống y như bài Caro với 1 vài khác biệt : Các image được dùng trong trò chơi dò mìn là : : BlancInit.jpg : MineInactive.jpg : MineActive.jpg : BlancFin.jpg : One.jpg : Two.jpg : Three.jpg : Four.jpg : Five.jpg : Six.jpg : Seven.jpg : eight.jpg Như vậy cửa sổ tạo ImageList như sau : Cửa sổ thiết lập các thông số có 3 textbox nhận 3 giá trị : số hàng, số cột của bãi mìn và số mìn trong bãi mìn. 21. Tạo các thủ tục xử lý biến cố cho 2 option Start và Setup... rồi viết code cho chúng như sau : Option Explicit ' Lưu ý các image trong ImageList phải có đúng chỉ số được qui định ở đây Private Const BLANCINIT_IMG = 1 Private Const MINEINACTIVE_IMG = 2 Private Const MINEACTIVE_IMG = 3 Private Const BLANCFIN_IMG = 4 'Private Const ONE_IMG = 5 'Private Const TWO_IMG = 6 'Private Const THREE_IMG = 7 'Private Const FOUR_IMG = 8 'Private Const FIVE_IMG = 9 'Private Const SIX_IMG = 10 'Private Const SEVEN_IMG = 11 'Private Const EIGHT_IMG = 12 Private blnDangchoi As Boolean ' Trạng thái chơi/ chưa chơi Private intRowsBoard As Integer ' số hàng của bãi mìn Private intColsBoard As Integer ' số cột của bãi mìn Private intMineCount As Integer ' số mìn trong bãi mìn Private intPicXWidth As Integer, intPicXHeight As Integer ' kích thước từng ô Private intBaseX As Integer, intBaseY As Integer ' tọa độ trên trái của bãi mìn Private intOdado As Integer ' số ô đã đạp được Private DataBoard() As Integer ' ma trận dữ liệu mìn Private StatusBoard() As Boolean ' ma trận trạng thái đạp mìn '------------------------------------------------------------------ ' Các thủ tục xử lý sự kiện của form MyMine '------------------------------------------------------------------ Private Sub Form_Load() ' Thiết lập các thông số ban đầu của trò chơi intRowsBoard = 8 intColsBoard = 8 intMineCount = 10 intPicXWidth = 17 intPicXHeight = 17 intBaseX = 4 intBaseY = 4 Call InitBoard End Sub ' Thủ tục xử lý sự kiện ấn chuột form Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) Dim row As Integer, col As Integer If Not blnDangchoi Then Exit Sub ' Kiểm tra vị trí ấn chuột nằm trong bàn cờ không ? If intBaseX > x Or x > intBaseX + intColsBoard * intPicXWidth Or _ intBaseY > y Or y > intBaseY + intRowsBoard * intPicXHeight Then Exit Sub ' Tính vị trí ô cờ được ấn col = (x - intBaseX) \ intPicXWidth row = (y - intBaseY) \ intPicXHeight ' Đạp mìn ở vị trí (row,col) Call Domin(row, col) End Sub ' Thủ tục xử lý sự kiện vẽ lại form Private Sub Form_Paint() Dim row As Integer, col As Integer Dim cnt As Integer For row = 0 To intRowsBoard - 1 For col = 0 To intColsBoard - 1 If Not StatusBoard(row, col) Then Call DisplayElem(row, col, BLANCINIT_IMG) ElseIf DataBoard(row, col) = 1 Then Call DisplayElem(row, col, MINEINACTIVE_IMG) Else cnt = MineCount(row, col) Call DisplayElem(row, col, cnt + 4) End If Next col, row End Sub ' Thủ tục xử lý sự kiện chọn menu Help.About MyMine Private Sub mnuHelpAbout_Click() frmAbout.Show vbModal, Me End Sub ' Thủ tục xử lý sự kiện chọn menu Options.Exit Private Sub mnuOptionsExit_Click() 'unload the form Unload Me End Sub ' Thủ tục xử lý sự kiện chọn menu Options.Setup... Private Sub mnuOptionsSetup_Click() MyMineSetup.txtRowsBoard = CStr(intRowsBoard) MyMineSetup.txtColsBoard = CStr(intColsBoard) MyMineSetup.txtMineCount = CStr(intMineCount) MyMineSetup.Show vbModal intRowsBoard = Val(MyMineSetup.txtRowsBoard) intColsBoard = Val(MyMineSetup.txtColsBoard) intMineCount = Val(MyMineSetup.txtMineCount) If intRowsBoard < 8 Then intRowsBoard = 8 If intColsBoard < 8 Then intColsBoard = 8 If intMineCount = intRowsBoard * intColsBoard Then intMineCount = 10 Call InitBoard End Sub ' Thủ tục xử lý sự kiện chọn menu Options.Start Private Sub mnuOptionsStart_Click() Call InitBoard Call Form_Paint End Sub '----------------------------------------------------------------------------------------- ' Các thủ tục dịch vụ cấp 1 : được gọi khi bạn ấn chuột vào form ' Ta dùng tầm vực Public để phân biệt với các thủ tục dịch vụ cấp 2 '----------------------------------------------------------------------------------------- 'Thủ tục khởi động các thông số ban đầu của trò chơi Public Sub InitBoard() Dim row As Integer, col As Integer Dim i As Integer ReDim DataBoard(intRowsBoard - 1, intColsBoard - 1) ReDim StatusBoard(intRowsBoard - 1, intColsBoard - 1) 'blnInit = False blnDangchoi = True intOdado = 0 For row = 0 To intRowsBoard - 1 For col = 0 To intColsBoard - 1 DataBoard(row, col) = 0 StatusBoard(row, col) = False Next col, row Me.ScaleMode = vbPixels ' Chỉnh lại kích thước form để hiển thị vừa đủ bãi mìn Me.Width = Me.ScaleX(intColsBoard * intPicXWidth + intBaseX * 4, vbPixels, vbTwips) Me.Height = Me.ScaleY(intRowsBoard * intPicXHeight + intBaseY * 2 + 64, vbPixels, vbTwips) ' Xếp ngẫu nhiên intMineCount trái mìn vào bãi mìn i = 0 Call Randomize While i < intMineCount row = (intRowsBoard - 1) * Rnd col = (intColsBoard - 1) * Rnd If DataBoard(row, col) = 0 Then DataBoard(row, col) = 1 i = i + 1 End If Wend End Sub ' Đạp mìn ở vị trí (h,c) Public Sub Domin(ByVal h As Integer, ByVal c As Integer) Dim cnt As Integer Dim row As Integer, col As Integer If StatusBoard(h, c) Then Exit Sub If DataBoard(h, c) = 1 Then 'Dap trung min ' hien thi cac vi tri min For row = 0 To intRowsBoard - 1 For col = 0 To intColsBoard - 1 If DataBoard(row, col) = 1 Then Call DisplayElem(row, col, MINEINACTIVE_IMG) Next col, row Call DisplayElem(h, c, MINEACTIVE_IMG) MsgBox ("Ban da thua vi dap trung min roi!") blnDangchoi = False Else 'do trung cho khong co min cnt = MineCount(h, c) StatusBoard(h, c) = True If cnt = 0 Then Call DisplayElem(h, c, BLANCFIN_IMG) Call Doquanh(h, c) Else Call DisplayElem(h, c, cnt + 4) End If intOdado = intOdado + 1 End If If intOdado = intRowsBoard * intColsBoard - intMineCount Then MsgBox ("Hoan ho, Ban da thang!") blnDangchoi = False End If End Sub '----------------------------------------------------------------------------------------------------- ' Các thủ tục dịch vụ cấp 2 : chỉ được gọi bởi các thủ tục dịch vụ cấp 1 ' Ta dùng tầm vực Private để phân biệt với các thủ tục dịch vụ cấp 1 '----------------------------------------------------------------------------------------------------- 'Hiển thị ô mìn ở vị trí (row,col) có mã ảnh imgCode Private Sub DisplayElem(ByVal row As Integer, ByVal col As Integer, ByVal imgCode As Integer) Dim x As Integer, y As Integer Dim curPic As Object ScaleMode = vbPixels x = intBaseX + col * intPicXWidth y = intBaseY + row * intPicXHeight PaintPicture ImageList1.ListImages.Item(imgCode).Picture, x, y, intPicXWidth, intPicXHeight, 0, 0, , , vbSrcCopy End Sub ' Tính số mìn xung quanh vị trí (h,c) Private Function MineCount(ByVal h As Integer, ByVal c As Integer) As Integer Dim cnt As Integer If h - 1 >= 0 And c - 1 >= 0 Then If DataBoard(h - 1, c - 1) = 1 Then cnt = cnt + 1 End If If h - 1 >= 0 Then If DataBoard(h - 1, c) = 1 Then cnt = cnt + 1 End If If h - 1 >= 0 And c + 1 < intColsBoard Then If DataBoar

Các file đính kèm theo tài liệu này:

  • docbaithuchanh_7261.doc
Tài liệu liên quan