Kamis, 15 Desember 2011

Tutorial pembuatan game sederhana Snake

Untuk tutorial pembuatan game ini saya akan menggunakan Visual Basic 2010 Express, untuk
membuat tampilan snake yang menarik. Dalam pembuatan game ini digunakan juga, Graphics yang
telah dijelaskan pada artikel sebelumnya. Berikut langkah - langkah pembuatannya :

1. Buat sebuah form untuk form utama di mana permainan berlangsung, dengan tampilan :



  Setelah Label score, speed dan lives terdapat label yang terlihat masing - masing   
bernama scoreLabel, speedLabel dan livesLabel.
   Di dalam Menu File terdapat New Game (shortcut : F2), Exit (shortcut : Alt + F4).
   Di dalam Menu Help terdapat Controls (F1), About

2. Setelahnya untuk kode-kode yang digunakan bisa dilihat di bawah beserta keteranganya :



Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Drawing.Graphics


Public Class Form1
    'Variabel untuk menyimpan nilai, kecepatan dan nyawa
    Dim score, speed, live As Integer
    'Deklarasi Graphics
    Dim g As Graphics
    'Array x dan y digunakan untuk menyimpan posisi snake, dimana x(0) dan y(0) merupakan posisi kepala snake
    'ukuran maksimum snake = 1000
    Dim x(1000), y(1000) As Integer
    'ax dan ay digunakan untuk menyimpan perubahan gerak snake
    Dim ax, ay As Integer
    'aw digunakan untuk menyimpan lebar dari snake
    'ah digunakan untuk menyimpan panjang dari snake
    'p digunakan untuk menyimpan panjang dari snake
    Dim aw, ah, p As Integer
    'tx dan ty merupakan posisi dari target
    Dim tx, ty As Integer
    'tol untuk menyimpan toleransi posisi snake dan target
    Dim tol As Integer
    Dim flag As Integer

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'Inisialisasi awal permainan
        score = 0
        speed = 1
        live = 3
        scoreLabel.Text = score
        speedLabel.Text = speed
        livesLabel.Text = live
        Button1.Visible = False
        Button1.Enabled = False
        tol = 10
        flag = 0

        'Inisialisasi awal snake
        x(0) = 350
        y(0) = 270
        ax = 0
        ay = 0
        p = 1
        aw = 10
        ah = 10

        'Inisialisasi awal target
        Randomize()
        tx = Rnd() * 500 + 50 'Random posisi x target dari 50 - 549
        ty = Rnd() * 250 + 30 'Random posisi y target dari 30 - 280

        'Inisialisasi Graphics
        g = Me.CreateGraphics
        g.Clear(Me.BackColor)

        'Inisialisasi Timer
        Timer1.Interval = 100 / speed
        Timer1.Enabled = True
    End Sub

    Private Sub AboutToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AboutToolStripMenuItem.Click
        'Memberikan informasi pembuat game apabila About diclick
        Timer1.Enabled = False
        MsgBox("This game is made by Aaron", MsgBoxStyle.Information, "Snake ver. 1.0")
        Timer1.Enabled = True
    End Sub

    Private Sub ExitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExitToolStripMenuItem.Click
        'Bila menu exit diclick, hentikan program
        End
    End Sub

    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        'Mengecek tombol yang ditekan pada Form

        'untuk mengetahui kode yang tombol yang ditekan bisa menggunakan perintah di bawah
        'MsgBox(e.KeyCode)

        '38 adalah keycode untuk tanda atas
        'Snake tidak bisa langsung menuju atas dari bawah
        If e.KeyCode = 38 And ay = 0 Then
            ay = -10
            ax = 0
        End If
        '37 adalah keycode untuk tanda kiri
        'Snake tidak bisa langsung menuju kiri dari kanan
        If e.KeyCode = 37 And ax = 0 Then
            ay = 0
            ax = -10
        End If
        '39 adalah keycode untuk tanda kanan
        'Snake tidak bisa langsung menuju kanan dari kiri
        If e.KeyCode = 39 And ax = 0 Then
            ay = 0
            ax = 10
        End If
        '40 adalah keycode untuk tanda bawah
        'Snake tidak bisa langsung menuju bawah dari kiri
        If e.KeyCode = 40 And ay = 0 Then
            ay = 10
            ax = 0
        End If
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        'Pada saat timer1 berjalan

        'Gambar target dengan posisi tx, ty dan ukuran 10 x 10
        g.FillEllipse(Brushes.Red, New Rectangle(tx, ty, 10, 10))

        'Gambar snake dengan panjang p sesuai posisinya
        Dim i As Integer
        For i = 0 To p
            g.FillRectangle(Brushes.DarkOrange, New Rectangle(x(i), y(i), aw, ah))
        Next
        'Hapus bagian ekor
        g.FillRectangle(Brushes.Black, New Rectangle(x(p), y(p), aw, ah))
        'Gambar bagian kepala
        g.FillRectangle(Brushes.LightGoldenrodYellow, New Rectangle(x(0), y(0), aw, ah))

        'Ubah posisi ekor dari ular mengikuti posisi ekor yang didepannya
        For i = p To 1 Step -1
            x(i) = x(i - 1)
            y(i) = y(i - 1)
        Next
        'Posisi kepala diubah sesuai perubahan gerakan
        x(0) = x(0) + ax
        y(0) = y(0) + ay

        'Mengecek apakah kepala snake telah mencapai target dengan toleransi posisi tol
        If ((x(0) > tx - tol And x(0) < tx + tol) And (y(0) > ty - tol And y(0) < ty + tol)) Then
            'Panjang snake bertambah 1
            p = p + 1

            'Score bertambah 10
            score = score + 10
            scoreLabel.Text = score

            'Hapus target
            g.FillEllipse(Brushes.Black, New Rectangle(tx, ty, 10, 10))

            'Merandom kembali posisi target
            tx = Rnd() * 500 + 50
            ty = Rnd() * 250 + 30

            'Menambah speed apabila score merupakan kelipatan 100
            flag = 0
            If (score Mod 100 = 0 And flag = 0) Then
                flag = 1
                If speed < 10 Then speed = speed + 1
                speedLabel.Text = speed
                Timer1.Interval = 100 / speed

                'Tambah nyawa apabila score merupakan kelipatan 100
                live = live + 1
                livesLabel.Text = live
            End If
        End If

        'Mengecek apakah snake melewati batas
        If (x(0) < 0 Or x(0) > 685 Or y(0) < 0 Or y(0) > 485) Then
            p = 1
            x(0) = 350
            y(0) = 270
            ax = 0
            ay = 0
            live = live - 1
            livesLabel.Text = live
            g.Clear(Color.Black)
            g.FillRectangle(Brushes.LightGoldenrodYellow, New Rectangle(x(0), y(0), aw, ah))
        End If

        'Mengecek apakah snake menabrak ekornya atau tidak
        For i = 2 To p
            If (x(0) = x(i) And y(0) = y(i)) Then
                p = 1
                x(0) = 350
                y(0) = 270
                ax = 0
                ay = 0
                live = live - 1
                livesLabel.Text = live
                g.Clear(Color.Black)
                g.FillRectangle(Brushes.LightGoldenrodYellow, New Rectangle(x(0), y(0), aw, ah))
                Exit For
            End If
        Next

        'Mengecek jika nyawa sudah habis
        If live = 0 Then
            scoreLabel.Text = ""
            speedLabel.Text = ""
            livesLabel.Text = ""
            g.Clear(Color.Black)
            Timer1.Enabled = False
            MsgBox("Game OVER !!" & vbNewLine & "Your Score is : " & score, MsgBoxStyle.OkOnly, "Snake ver. 1.0")
            Button1.Visible = True
            Button1.Enabled = True
        End If
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        'Ubah warna latar menjadi hitam
        Me.BackColor = Color.Black

        'Ubah warna setiap label dalam panel menjadi putih
        For Each Label In Panel1.Controls
            Label.ForeColor = Color.White
        Next

    End Sub

    Private Sub NewGameToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NewGameToolStripMenuItem.Click
        Dim ans
        Timer1.Enabled = False
        ans = MsgBox("Are you really sure want to start a new game ?", MsgBoxStyle.YesNo, "Snake ver. 1.0")
        If ans = vbYes Then
            scoreLabel.Text = ""
            speedLabel.Text = ""
            livesLabel.Text = ""
            g.Clear(Color.Black)
            Button1.Visible = True
            Button1.Enabled = True
        Else
            Timer1.Enabled = True
        End If
    End Sub
End Class


3. Apabila anda ingin mencoba game snake yang telah jadi ini langsung, bisa di download di:

http://www.mediafire.com/download.php?pv15gkd6lfaz65n

Tidak ada komentar:

Posting Komentar