Pemrograman Berorientasi Objek pada VB.Net Oleh : Hendra, ST.

Program Kongkret

option explicit on imports sistem imports sistem.drawing imports sistem.windows.forms imports microsoft.visualbasic

public class tetris : inherits sistem.windows.forms.form

<sistem.STAThread> _

public shared sub main()

randomize() application.run( new tetris)

end sub

private withevents gtimer as new sistem.windows.forms.timer private labelscore as new label private labelgameover as new label private gtgrid as new tgrid

'instance class tgrid

'instance class tshape private g as graphics

private gtshape as new tshape

private x,y as integer

'posisi x,y shape pada grid

private score as integer

'score permainan

public sub new () me .text = "Program Tetris" me .size = new size(450, 600)

labelscore.location = new point(61,30) me .controls.add(labelscore) labelgameover.location = new point(200,30) me .controls.add(labelgameover) g= me .creategraphics() score = 0 printscore() nextshape()

'persiapkan shape berikutnya end sub

'metoda mempersiapkan shape berikutnya private sub nextshape() gtimer.interval = 200

'set interval 200 millidetik gtimer.enabled = true

'mengaktifkan timer gtshape.generatenextshape() redrawnextshape()

'cetak shape berikutnya x=7

'koordinat awal di 7,0 y=0 end sub

'memindahkan shape keposisi x,y private sub movexy(dx,dy) clearshape()

'hapus gambar sebelumnya x = x + dx

'ubah posisi x,y y = y + dy drawshape()

'gambar diposisi baru end sub

'metoda untuk mencetak score dilayar private sub printscore() labelscore.text = "Score : " & score.tostring() end sub

'metoda untuk mencetak gameover private sub printgameover() labelgameover.text = "Game Over" end sub

'mengerakan shape ke bawah dengan interval waktu tertentu private sub gtimer_tick(sender as object ,e as eventargs) _ handles gtimer.tick 'apakah shape bisa turun kebawah if gtgrid.testshape(x,y+1,gtshape) then

movexy(0,1) 'pindah shape 1 baris ke bawah else gtgrid.putshape(x,y,gtshape)

'tempatkan shape kegrid score = score + gtgrid.checkgrid() 'periksa baris yang lengkap redrawgrid()

'cetak ulang grid printscore()

'cetak score

'jika shape tertahan di baris 3, artinya game over if y<3 then

gtimer.enabled = false 'matikan timer karena gameover printgameover()

'tampil pesan gameover else nextshape()

'persiapkan gambar berikutnya end if end if end sub

'deteksi penekanan tombol dengan event keydown pada form private sub tetris_keydown(sender as object ,e as keyeventargs) _

handles mybase .keydown

select case e.keyvalue case

38, 104, 12,101 : 'Panah atas, 8, 5 gtshape.rotate()

'rotasi

'apakah hasil rotasi dapat ditempatkan diposisi x,y if gtgrid.testshape(x,y,gtshape) then

'kalau ya, rotasi balik kembali gtshape.derotate() clearshape()

'hapus animasi shape

gtshape.rotate() 'rotasi drawshape()

'gambar shape ke layar

else gtshape.derotate() end if

case

37, 100 : 'Panah kiri, 4

'jika shape dapat ditempatkan kekiri if gtgrid.testshape(x-1,y,gtshape) then

movexy(-1,0)

'pindah ke kiri

end if

case

39, 102 : 'Panah kanan, 6

if gtgrid.testshape(x+1,y,gtshape) then movexy(1,0)

end if

case 40, 98 : 'Panah bawah, 2 interval dipercepat case 40, 98 : 'Panah bawah, 2 interval dipercepat

end select end sub

'menggambar sel dari suatu shape private sub drawsel(pen as pen, brush as brush, _

x as integer ,y as integer ,_ w as integer ,h as integer )

if y>2 then g.fillrectangle(brush,x*21,y*21,w,h) g.drawrectangle(pen,x*21,y*21,w,h)

end if end sub

'mengambar shape secara sementara private sub drawshape() dim i as integer

dim pen as new pen(color.white,1)

dim brush as new solidbrush(gtshape.currentcolor) for i=0 to 3 drawsel(pen,brush, _ x+gtshape.currentshapesel(i,0), _ y+gtshape.currentshapesel(i,1), _ 20,20)

next i end sub

'menghapus shape sementara private sub clearshape() dim i as integer

dim pen as new pen(color.black,1) dim brush as new solidbrush(color.black)

for i=0 to 3 drawsel(pen,brush, _ x+gtshape.currentshapesel(i,0), _ y+gtshape.currentshapesel(i,1),20,20)

next i end sub

'mengambar ulang nextshape private sub redrawnextshape dim i as integer

dim pen as new pen(color.black,1) dim brush as new solidbrush(color.black)

g.fillrectangle(brush,300,60,120,120) pen.color = color.white brush.color = gtshape.nextcolor

for i=0 to 3 drawsel(pen,brush, _ 16+gtshape.nextshapesel(i,0), _ 4+gtshape.nextshapesel(i,1), _ 20,20)

next i end sub

'mengambar ulang grid 'mengambar ulang grid

dim i,j as integer dim pen as new pen(color.white,1)

dim brush as new solidbrush(color.red)

for i=3 to 12 for j=3 to 22 if gtgrid.parr(i,j) <> 0 then 'Menggambar ulang isi grid pen.color = color.white brush.color = gtgrid.carr(i,j) drawsel(pen,brush,i,j,20,20)

else pen.color = color.black brush.color = color.black drawsel(pen,brush,i,j,20,20)

end if

next j next i pen.color = color.black g.drawrectangle(pen,3*21-1,3*21-1,10*21+1,20*21+1)

end sub

'melakukan overide terhadap sub onpaint pada base class 'untuk menggambar isi grid setiap proses refresh pada form

protected overrides sub onpaint(e as painteventargs)

redrawgrid() redrawnextshape()

end sub

end class

public class tgrid

'Array menyimpan isi sel pada grid public carr(15,25) as color

public parr(15,25) as integer

'Array menyimpan warna sel pada grid

'konstruktur class tgrid public sub new () dim

i, j as integer

for i=0 to 15 for j=0 to 25 parr(i,j) = 1

'isi bingkai

next j next i for i=3 to 12

for j=0 to 22 parr(i,j) = 0

'isi arena

next j next i end sub

'Mengembalikan nilai yang menunjukan apakah 'shape dapat ditempatkan pada grid diposisi x,y

public function testshape(x as integer ,y as integer ,s as tshape) _

as boolean

dim i as integer dim i as integer

y+s.currentshapesel(i,1)) > 0 then

return false

end if next i return true end function

'Menempatkan shape pada posisi x,y di grid public sub putshape(x as integer ,y as integer ,s as tshape) dim i as integer for i=0 to 3 parr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) = 1 carr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) = s.currentcolor next i end sub

'periksa apakah ada baris yang berhasil diselesaikan pemain

public function checkgrid() as integer dim i,j as integer dim b,k as integer

dim complete as integer

complete = 0 i = 22 do while i>3 j=3 do while parr(j,i) <> 0 and j < 13 j=j+1 loop if j = 13 then

beep 'sound beep complete = complete + 1

for b=i to 4 step -1

for k=3 to 12 parr(k,b) = parr(k,b-1) carr(k,b) = carr(k,b-1)

next k next b else i=i-1 end if loop return complete

end function end class

public class tshape

private currentshape as integer

'menyimpan nomor current shape

'menyimpan nomor next shape public currentcolor as color

private nextshape as integer

'menyimpan warna current shape public nextcolor as color

'menyimpan warna next shape

private currentstate as integer

'nomor rotasi shape

'Array 4 dimensi yang berisi nilai sel dari masing-masing bentuk 'serta bentuk rotasinya

private sarr(,,,) as integer = {{{{1,0},{1,1},{1,2},{1,3}}, _ {{0,1},{1,1},{2,1},{3,1}}, _ {{1,0},{1,1},{1,2},{1,3}}, _ {{0,1},{1,1},{2,1},{3,1}}}, _

'konstrutor untuk class tshape public sub new () generateshape(nextshape, nextcolor) end sub

'Membuat next shape berikutnya, dan menset current shape public sub generatenextshape() currentshape = nextshape currentcolor = nextcolor currentstate = 0

'rotasi ke 0 generateshape(nextshape, nextcolor)

'buat nextshape baru end sub

'Membuat bentuk dan mengembalikan melalui parameter shape dan shapecolor

private sub generateshape( byref shape as integer ,_ byref shapecolor as color)

dim c as integer shape = int(rnd*6)

'random untuk shape c = int(rnd*8)

'random untuk shape color select case c case 0 : shapecolor = color.red case 1 : shapecolor = color.green case 2 : shapecolor = color.blue case 3 : shapecolor = color.orange case 4 : shapecolor = color.pink case 5 : shapecolor = color.cyan case 6 : shapecolor = color.gray

case else shapecolor = color.magenta case else shapecolor = color.magenta

'Rotasi ke bentuk berikutnya public sub rotate() currentstate = currentstate + 1

'Rotasi berikutnya if currentstate = 4 then currentstate = 0

'Kembali ke bentuk awal end sub

'Rotasi ke bentuk sebelumnya public sub derotate() currentstate = currentstate - 1

'Rotasi sebelumnya if currentstate = -1 then currentstate = 3 end sub

'Mengembalikan sel i,j dari current shape public function currentshapesel(i as integer ,j as integer ) return sarr(currentshape,currentstate,i,j) end function

'Mengembalikan sel i,j dari next shape public function nextshapesel(i as integer ,j as integer ) return sarr(nextshape,0,i,j)

'Bentuk awal end function

end class

Kompilasi Program

Vbc tetris.vb /r:sistem.dll /r:sistem.drawing.dll /r:sistem.windows.forms.dll

!&

Dokumen yang terkait

Analisis komparatif rasio finansial ditinjau dari aturan depkop dengan standar akuntansi Indonesia pada laporan keuanagn tahun 1999 pusat koperasi pegawai

15 355 84

Analisis korelasi antara lama penggunaan pil KB kombinasi dan tingkat keparahan gingivitas pada wanita pengguna PIL KB kombinasi di wilayah kerja Puskesmas Sumbersari Jember

11 241 64

ANALISIS PENGARUH PENERAPAN PRINSIP-PRINSIP GOOD GOVERNANCE TERHADAP KINERJA PEMERINTAH DAERAH (Studi Empiris pada Pemerintah Daerah Kabupaten Jember)

37 330 20

FREKWENSI PESAN PEMELIHARAAN KESEHATAN DALAM IKLAN LAYANAN MASYARAKAT Analisis Isi pada Empat Versi ILM Televisi Tanggap Flu Burung Milik Komnas FBPI

10 189 3

SENSUALITAS DALAM FILM HOROR DI INDONESIA(Analisis Isi pada Film Tali Pocong Perawan karya Arie Azis)

33 290 2

Analisis Sistem Pengendalian Mutu dan Perencanaan Penugasan Audit pada Kantor Akuntan Publik. (Suatu Studi Kasus pada Kantor Akuntan Publik Jamaludin, Aria, Sukimto dan Rekan)

136 695 18

DOMESTIFIKASI PEREMPUAN DALAM IKLAN Studi Semiotika pada Iklan "Mama Suka", "Mama Lemon", dan "BuKrim"

133 700 21

Representasi Nasionalisme Melalui Karya Fotografi (Analisis Semiotik pada Buku "Ketika Indonesia Dipertanyakan")

53 338 50

PENERAPAN MEDIA LITERASI DI KALANGAN JURNALIS KAMPUS (Studi pada Jurnalis Unit Aktivitas Pers Kampus Mahasiswa (UKPM) Kavling 10, Koran Bestari, dan Unit Kegitan Pers Mahasiswa (UKPM) Civitas)

105 442 24

DAMPAK INVESTASI ASET TEKNOLOGI INFORMASI TERHADAP INOVASI DENGAN LINGKUNGAN INDUSTRI SEBAGAI VARIABEL PEMODERASI (Studi Empiris pada perusahaan Manufaktur yang Terdaftar di Bursa Efek Indonesia (BEI) Tahun 2006-2012)

12 142 22