بازی مین یاب در اکسل می تواند هم توان VBA شما را افزایش دهد و هم شما را تا حدودی سرگرم کند ، اگر از کاربران قدیمی ویندوز باشید این بازی محبوب را به یاد دارید ، حالا می خواهیم این بازی را در اکسل پیاده سازی کنیم .
مراحل ساخت بازی مین یاب در اکسل
ابتدا یک فیال جدید اکسل باز کنید و محدوه A1:J10 آن را به عرض و ارتفاع دلخواه تغییر دهید ، البته این محدوده پیشنهادی بوده و شما می توانید محدوده خود را ایجاد نمائید .
- برای این محدوده حاشیه در نظر بگیرید و Gridline اکسل را غیر فعال کنید
- کلیدهای Alt + W + V + G خطهای اکسل را مخفی می کند .
- به صورت تصادفی در برخی از خانه های محدوده ایجاد شده حرف B را وارد کنید .
- این کار را با کدهای زیر انجام دهید .
Sub SetupGameBoard() Dim i As Integer, j As Integer Dim numRows As Integer, numCols As Integer numRows = 10 numCols = 10 For i = 1 To numRows For j = 1 To numCols Cells(i, j).Value = "" Cells(i, j).Interior.Color = RGB(255, 255, 255) Next j Next i For i = 1 To 10 Dim rowNum As Integer, colNum As Integer rowNum = Int((numRows * Rnd) + 1) colNum = Int((numCols * Rnd) + 1) Cells(rowNum, colNum).Value = "B" Next i End Sub
با اجرای کدهای بالا در محدوده A1:J10 به صورت تصادفی 10 حرف B قرار میگیرد ، اگر میخواهید بازی سخت تر شود می تواند عدد 10 را افزایش دهید.
خب در ادامه باید اعداد راهنما را کنار حروف B که همان مین ها هستند قرار دهیم ، برای این منظور هم از کد زیر استفاده می کنیم .
Sub CalculateAdjacentBombs() Dim i As Integer, j As Integer, x As Integer, y As Integer Dim numRows As Integer, numCols As Integer, bombCount As Integer numRows = 10 numCols = 10 For i = 1 To numRows For j = 1 To numCols If Cells(i, j).Value <> "B" Then bombCount = 0 For x = -1 To 1 For y = -1 To 1 If (i + x > 0 And i + x <= numRows) And _ (j + y > 0 And j + y <= numCols) Then If Cells(i + x, j + y).Value = "B" Then bombCount = bombCount + 1 End If End If Next y Next x If bombCount > 0 Then Cells(i, j).Value = bombCount End If End If Next j Next i End Sub
با اجرای دو کد بالا ما شرایط بازی را آماده کرده ایم و حالا باید در رویداد SelectionCHange شیت خود کدهایی را بنویسیم که اگر کاربر در محدوده A1:J10 کلیک کرد اگر محتوای آن حرف B بقیه سلولهای محدوده را هم نمایش دهد و اگر B نبود محتوای آن را نمایش دهد که این کارها با تغییر رنگ و فونت انجام می شود .
در ادامه کدهای مربوط به تکمیل بازی مین یاب در اکسل آورده شده است ، خودتان اولین بازی را در اکسل ایجاد کنبد .
نتیجه اجرای دو قطعه کد بالا برای ساخت بازی مین یاب در اکسل را می بینید ، در ادامه باید رنگ فونت نوشته ها و پس زمینه آنها سفید شود که دیده نشود و با کلیک روی آنها اگر حرف B نبود پس زمینه آن خاکستری شود و اگر B بود پس زمینه B ها قرمز و مابقی سبز شود .
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim currentPlayerRow As Long Dim currentScore As Integer currentPlayerRow = ThisWorkbook.Sheets("Sheet1").Range("N1").Value If Not Intersect(Target, Range("A1:J10")) Is Nothing Then If Target.Cells.CountLarge > 1 Then Exit Sub If Target.Value = "B" Then If isFirstClick Then ThisWorkbook.Sheets("Sheet1").Cells(currentPlayerRow, "M").Value = 0 End If MsgBox "خسته نباشيد 🙂 براي يادگيري اکسل " & vbCrLf & vbCrLf & " يه سر به Officebaz.ir بزن", vbOKOnly Or vbExclamation Or vbMsgBoxRtlReading Or vbMsgBoxRight, " بازی مین یاب در اکسل " Call RevealAllCells Exit Sub End If isFirstClick = False Target.Font.Color = RGB(0, 0, 0) Target.Interior.Color = RGB(200, 200, 200) currentScore = CalculateScore() ThisWorkbook.Sheets("Sheet1").Cells(currentPlayerRow, "M").Value = currentScore End If End Sub
کدهای دیگری هم برای تکمیل بازی مین یاب در اکسل می توانید اضافه کنید مثلا ، من برای اینکه نام شرکت کننده ها را داشته باشیم و امتیاز آنها را ثبت کنیم ، کدهایی اضافه کردم که کارهای زیر را انجام می دهد.
- با یک InputBox نام کاربر را می گیرد.
- نام کاربر را در اولین ردیف خالی ستون L قرار میدهد .
- در رویداد SelectionChange هم کدهایی وجود دارد که به ازای هر کلیک صحیح یک امتیاز در ستون M قرار می دهد.
- بالاترین امتیاز کسب شده در ستون L را سب میکند که با قالبدهی شرطی انجام می شود .
سعی می کنیم پس از این در این سایت سرگرمی های اکسل را بیشتر قرار دهیم و بازی مین یاب در اکسل شروعی برای این هدف است .
چرا که همواره انجام سرگرمی هم نیاز انسان است و هم در یادگیری و درک VBA اکسل توانایی های آن کمک کننده می باشد.