Cara Membuat Game Minisweeper di Microsoft Excel 2016

Sekarang kita bernostalgia sejenak untuk bermain Game lawas, game ini pada masanya pernah teristall di windows bawaan yaitu Game Minisweeper.

Kali ini kita akan membuat sendiri sekaligus memainkannya.Dimana kita akan membuatnya? tentu jawabannya ya di Excel 2016.

Game Minisweeper di Excel 2016

Berikut adalah langkah-langakah Cara Membuat Game Minisweeper di Microsoft Excel 2016 :

1. Buka Excel

2. Wajib ganti nama Sheet dengan "Game"

3. Blok Kolom B2 sampai Kolom K11, ubah lebar dan tinggi kolom jadi 4 dan 28

4.  Aktifkan Developer VBA (jika belum aktif)

Klik File >> Option >> Customize Ribbon >> Centang Developer >> Ok

5. Developer akan muncul di Menu Tab, klik tab Developer >> Visual Basic (atau Alt+F11)

6. Muncul jendela VBA Editor, tambahkan Module : Insert >> Module >> Kemudian copy di Module1 kode dibawah ini :

Option Explicit


Public Const GRID_SIZE As Integer = 10

Public Const TOTAL_MINES As Integer = 15


Public Mines(1 To GRID_SIZE, 1 To GRID_SIZE) As Boolean

Public OpenedCell(1 To GRID_SIZE, 1 To GRID_SIZE) As Boolean

Public Flags(1 To GRID_SIZE, 1 To GRID_SIZE) As Boolean


' ======= NEW GAME =======

Sub NewGame()

    Dim i As Integer, j As Integer

    Dim ws As Worksheet

    Set ws = ThisWorkbook.Sheets("Game")


    ' Bersihkan isi saja

    ws.Range("B2:K11").ClearContents


    ' Tampilan kotak tertutup

    With ws.Range("B2:K11")

        .Interior.Color = RGB(180, 180, 180)

        .Borders.LineStyle = xlContinuous

        .Borders.Weight = xlThin

        .HorizontalAlignment = xlCenter

        .VerticalAlignment = xlCenter

        .Font.Size = 14

        .Font.Color = vbBlack

    End With


    ' Reset data array

    For i = 1 To GRID_SIZE

        For j = 1 To GRID_SIZE

            Mines(i, j) = False

            OpenedCell(i, j) = False

            Flags(i, j) = False

        Next j

    Next i


    ' Acak bom

    Randomize

    Dim placed As Integer

    Do While placed < TOTAL_MINES

        i = Int(Rnd * GRID_SIZE) + 1

        j = Int(Rnd * GRID_SIZE) + 1

        If Not Mines(i, j) Then

            Mines(i, j) = True

            placed = placed + 1

        End If

    Loop

End Sub


' ======= HITUNG BOM SEKITAR =======

Function CountMines(r As Integer, c As Integer) As Integer

    Dim i As Integer, j As Integer

    For i = r - 1 To r + 1

        For j = c - 1 To c + 1

            If i >= 1 And i <= GRID_SIZE And j >= 1 And j <= GRID_SIZE Then

                If Mines(i, j) Then CountMines = CountMines + 1

            End If

        Next j

    Next i

End Function


' ======= BUKA SEL =======

Sub OpenCell(r As Integer, c As Integer)

    Dim ws As Worksheet

    Set ws = ThisWorkbook.Sheets("Game")


    If OpenedCell(r, c) Or Flags(r, c) Then Exit Sub


    OpenedCell(r, c) = True

    ws.Cells(r + 1, c + 1).Interior.Color = RGB(230, 230, 230)


    ' ==== Game Over jika bom ====

    If Mines(r, c) Then

        ws.Cells(r + 1, c + 1).Value = "??"

        ws.Cells(r + 1, c + 1).Font.Color = vbRed

        MsgBox "?? Game Over! Board akan di-reset.", vbCritical

        Call NewGame

        Exit Sub

    End If


    ' ==== Tampilkan angka jika ada bom di sekitar ====

    Dim count As Integer

    count = CountMines(r, c)


    If count > 0 Then

        ws.Cells(r + 1, c + 1).Value = count

        Select Case count

            Case 1: ws.Cells(r + 1, c + 1).Font.Color = vbBlue

            Case 2: ws.Cells(r + 1, c + 1).Font.Color = vbGreen

            Case 3: ws.Cells(r + 1, c + 1).Font.Color = vbRed

            Case 4: ws.Cells(r + 1, c + 1).Font.Color = RGB(0, 0, 128)

            Case Else: ws.Cells(r + 1, c + 1).Font.Color = vbBlack

        End Select

    Else

        ' ==== Rekursi buka sel kosong di sekitarnya ====

        Dim i As Integer, j As Integer

        For i = r - 1 To r + 1

            For j = c - 1 To c + 1

                If i >= 1 And i <= GRID_SIZE And j >= 1 And j <= GRID_SIZE Then

                    If Not OpenedCell(i, j) Then

                        OpenCell i, j

                    End If

                End If

            Next j

        Next i

    End If


    ' ==== Cek apakah menang ====

    If CheckWin Then

        MsgBox "?? Selamat! Kamu menang!", vbInformation

        Call NewGame

    End If

End Sub


' ======= CEK MENANG =======

Function CheckWin() As Boolean

    Dim r As Integer, c As Integer

    Dim countOpen As Integer

    countOpen = 0

    

    For r = 1 To GRID_SIZE

        For c = 1 To GRID_SIZE

            If OpenedCell(r, c) Then countOpen = countOpen + 1

        Next c

    Next r

    

    If countOpen = (GRID_SIZE * GRID_SIZE - TOTAL_MINES) Then

        CheckWin = True

    Else

        CheckWin = False

    End If

End Function


7. Masih di Jendela VBA Editor dobel klik nama Sheet1(Game), lalu hapus semua kode jika ada dan ganti dengan kode dibawah ini :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Target.Cells.count > 1 Then Exit Sub

    If Target.Column < 2 Or Target.Column > 11 Then Exit Sub

    If Target.Row < 2 Or Target.Row > 11 Then Exit Sub


    Application.EnableEvents = False


    ' Pertahankan background

    Target.Interior.Color = Target.Interior.Color


    OpenCell Target.Row - 1, Target.Column - 1


    Application.EnableEvents = True

End Sub


Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

    If Target.Column < 2 Or Target.Column > 11 Then Exit Sub

    If Target.Row < 2 Or Target.Row > 11 Then Exit Sub


    Cancel = True


    Dim r As Integer, c As Integer

    r = Target.Row - 1

    c = Target.Column - 1


    If OpenedCell(r, c) Then Exit Sub


    If Flags(r, c) Then

        Flags(r, c) = False

        Target.Value = ""

    Else

        Flags(r, c) = True

        Target.Value = "??"

    End If

End Sub


8. Masih dijendela VBA Edito tekan CTRL+G muncul kotak immediate (posiinya dibagian bawah)  lalu ketikan kata dibawah ini :

Application.EnableEvents = True

9. Tekan Enter

10. Langkah terakhir tutup semua jendela VBA Editor

11. Kembali ke Excel

12. Tambahkan Tombol Play 

  • Pilih tab Developer >> Insert >> Button (Form Control)
  • Tempatkan tombol diarea (B1:K11) ubah nama tombol jadi "Play"
  • Klik kanan Tombol Play pilih >>Assign Macro >> ketik pada Macro Name :NewGame (wajib)

13. Selesai


Saatnya Main :

  • Klik tombol Play
  • Klik area Kotak

Penting !:

Simpan dengan Nama File :namafileanda.Macro-Enabled Workbook

Demikianlah artikel Excel hari tentang Cara Membuat Game Minisweeper di Microsoft Excel 2016, semoga artikel ini bermanfaat buat kita semua.Amin

Selamat mencoba dan selamat bermain.

Post a Comment for "Cara Membuat Game Minisweeper di Microsoft Excel 2016"