Implementasi Algoritma Greedy Pada Game Summy

47

LAMPIRAN A
LAMPIRAN HASIL EVALUASI GAME SUMMY DENGAN METODE BLACK
BOX TESTING

a. Hasil evaluasi pada Tampilan Halaman Menu Utama

Tabel Hasil Evaluasi Tampilan Halaman Menu Utama
No.
1.

2.

3.

4.

5.

Sasaran

Pengujian
Tampilan
ketika
aplikasi
dieksekusi
Pemilihan
menu Mulai
Pemilihan
menu
Bantuan
Pemilihan
menu
Tentang
Pemilihan
menu
Keluar

Hasil yang
Diharapkan
Aplikasi

menampilkan
halaman Menu
Utama
Aplikasi
menampilkan
halaman Games
Aplikasi
menampilkan
halaman Bantuan
Aplikasi
menampilkan
halaman Tentang
Aplikasi berhenti

Hasil Pengujian

Kesimpulan

Aplikasi berhasil
menampilkan

halaman Menu
Utama
Aplikasi berhasil
menampilkan
halaman Games
Aplikasi berhasil
menampilkan
halaman Bantuan
Aplikasi berhasil
menampilkan
halaman Tentang
Aplikasi berhasil
berhenti

Valid

Valid

Valid


Valid

Valid

b. Hasil Evaluasi pada Tampilan Halaman Game

Tabel Hasil Evaluasi Tampilan Halaman Game
No.
1.

2.

Sasaran
Pengujian
Giliran awal
bermain

Selot kotakkotak milik
pemain dan
komputer


Hasil yang
Diharapkan
Aplikasi
mengacak giliran
bermain pada awal
halaman Game
ditampilkan
Aplikasi
membagikan
masing-masing 8
kotak untuk

Hasil Pengujian

Kesimpulan

Aplikasi berhasil
mengacak giliran
bermain dan

menampilkan
pesannya di layar
Aplikasi berhasil
membagikan
masing-masing 8
kotak untuk
pemain dan

Valid

Valid

48

pemain dan
komputer

3.

Selot kotakkotak milik

pemain

4.

Pemilihan
menu Swap
/ Delete

5.

Pemilihan
menu
Cancel

6.

Pemilihan
menu Next /
End Turn


Pemain dapat
memindahkan
kotak-kotak
miliknya ke papan
game pada saat
gilirannya
Pemain dapat
mengganti satu
atau semua kotakkotak miliknya
dengan kotak yang
ada pada
tumpukkan pada
saat gilirannya

Pemain dapat
mengembalikan
kotak miliknya
yang baru saja
diletakkan pada
papan game ke

selot miliknya
pada saat
gilirannya
Pemain dapat
mengakhiri
gilirannya

komputer
ditunjukkan
dengan
berkurangnya
jumlah kotak yang
tersisa
Pemain berhasil
memindahkan
semua kotak dari
selot miliknya ke
papan game pada
saat gilirannya
Pemain berhasil

mengganti satu
atau semua kotak
miliknya dengan
men-drag and
drop kotak
miliknya baik pada
selot maupun yang
baru saja
diletakkan pada
papan game ke
atas menu swap /
delete pada saat
gilirannya
Pemain berhasil
mengembalikan
kotak miliknya
yang baru saja
diletakkan pada
papan game ke
selot miliknya

pada saat
gilirannya
Pemain berhasil
mengakhiri
gilirannya baik
dengan
memberikan
langkah terbaiknya
maupun hanya
untuk skip
gilirannya dengan
muncul pesan
notifikasi berganti
ke giliran
komputer

Valid

Valid

Valid

Valid

49

7.

Komputer
berhasil
menemukan
solusi pada
saat
gilirannya

8.

Komputer
gagal
menemukan
solusi pada
saat
gilirannya

9.

Pengecekan
papan game
setelah
giliran
pemain atau
komputer
berakhir

10.

Skor Game

Komputer dapat
mencari langkah
terbaik dari kotak
miliknya dan
meletakkannya
pada papan game
dan giliran
permainan
berganti ke
pemain
Aplikasi dapat
menampilkan
informasi jika
kesempatan skip
miliknya telah
berkurang 1 kali
dan giliran
permainan
berganti ke
pemain
Aplikasi dapat
mengecek langkah
valid yang telah
dilakukan pemain
atau komputer
sesaat setelah
gilirannya
berakhir.

Komputer berhasil
mencari langkah
terbaik dari kotak
miliknya dan
meletakkannya
pada papan game
dengan muncul
pesan notifikasi
berganti ke giliran
pemain
Aplikasi berhasil
menampilkan
informasi jika
kesempatan skip
milik komputer
telah berkurang 1
kali

Valid

Valid

Aplikasi berhasil
Valid
mengecek langkah
valid yang telah
dilakukan pemain
atau komputer
sesaat setelah
gilirannya
berakhir.
Ditunjukkan
dengan perubahan
warna kotak
menjadi hijau dan
muncul notifikasi
skor yang didapat
Aplikasi dapat
Aplikasi berhasil
Valid
menampilkan total menampilkan total
skor dan skor yang skor dan skor yang
diperoleh pada
diperoleh pada
langkah valid yang langkah valid yang
didapatkan oleh
didapatkan oleh
pemain dan
pemain dan
komputer
komputer sesaat
setelah mengakhiri
gilirannya

50

11.

Pemilihan
menu Home

12.

Semua
kotak pada
tumpukkan
telah habis

Aplikasi dapat
menampilkan
menu pilihan
untuk mengulang
dari awal
permainan atau
kembali ke
halaman Menu
Utama
Aplikasi akan
menghentikan
permainan,
menghitung total
skor yang
didapatkan oleh
pemain dan
komputer dan
menentukan
pemenang
berdasarkan siapa
pemilik total skor
paling besar

Aplikasi berhasil
Valid
menampilkan
menu pilihan
untuk mengulang
dari awal
permainan atau
kembali ke
halaman Menu
Utama
Aplikasi berhasil
Valid
menghentikan
permainan,
menghitung total
skor yang
didapatkan, dan
menampilkan
siapa yang
menjadi pemenang
berdasarkan skor
yang paling besar.

c. Hasil Evaluasi Tampilan Halaman Bantuan

Tabel Hasil Evaluasi Tampilan Halaman Bantuan
No.
1.

2.

Sasaran
Pengujian
Tampilan
halaman
Bantuan
Tutup
halaman
Bantuan

Hasil yang
Diharapkan
Aplikasi dapat
menampilkan
halaman Bantuan
Aplikasi dapat
menutup halaman
Bantuan ketika
area luar halaman
Bantuan diklik

Hasil Pengujian

Kesimpulan

Aplikasi berhasil
menampilkan
halaman Bantuan
Aplikasi berhasil
menutup halaman
Bantuan ketika
area luar halaman
Bantuan diklik

Valid

Valid

51

d. Hasil Evaluasi Tampilan Halaman Tentang

Tabel Hasil Evaluasi Tampilan Halaman Tentang
No.
1.

2.

Sasaran
Pengujian
Tampilan
halaman
Tentang
Tutup
halaman
Bantuan

Hasil yang
Diharapkan
Aplikasi dapat
menampilkan
halaman Tentang
Aplikasi dapat
menutup halaman
Tentang ketika
area luar halaman
Tentang diklik

Hasil Pengujian

Kesimpulan

Aplikasi berhasil
menampilkan
halaman Tentang
Aplikasi dapat
menutup halaman
Tentang ketika
area luar halaman
Tentang diklik

Valid

Valid

e. Hasil Evaluasi Resolusi Layar Monitor terhadap Tampilan Summy
1. Resolusi Layar Monitor 800 x 600 Pixel (Terpotong)

Gambar Tampilan Summy pada resolusi monitor 800 x 600 pixel

52

2. Resolusi Layar Monitor 1024 x 720 Pixel (Terpotong)

Gambar Tampilan Summy pada resolusi monitor 1024 x 720 pixel

3. Resolusi Layar Monitor 1280 x 720 Pixel (Terpotong)

Gambar Tampilan Summy pada resolusi monitor 1280 x 720 pixel

53

4. Resolusi Layar Monitor 1366 x 768 Pixel (Tidak Terpotong)

Gambar Tampilan Summy pada resolusi monitor 1366 x 768 pixel

f. Hasil Evaluasi Performa pada Game Summy
Spesifikasi beberapa komputer yang akan digunakan dalam percobaan adalah
sebagai berikut:
1. Operating System : Windows 7 Ultimate 32-bit SP1
CPU

: Intel Mobile Core 2 Duo T5870 @ 2.00GHz

RAM

: 2,00GB

Motherboard

: ASUSTeK Computer Inc. K40IN

Graphics

: Generic PnP Monitor (1366x768@62Hz)
512MB NVIDIA GeForce G102M

Storage

: 232GB Seagate ST9250315AS ATA Device (SATA)

2. Operating System : Windows 7 Ultimate 64-bit SP1
CPU

: Intel Core i3 2310M @ 2.10GHz

RAM

: 4,00GB Dual-Channel DDR3 @ 665MHz

Motherboard

: ASUSTeK Computer Inc. K43E (CPU 1)

Graphics

: Generic PnP Monitor (1366x768@60Hz)
Intel HD Graphics 3000

Storage

: 465GB TOSHIBA MQ01ABF050 SCSI Disk Device

3. Operating System : Windows 10 Pro 64-bit

54

CPU

: Intel Core i5 4200U @ 1.60GHz

RAM

: 8,00GB Dual-Channel DDR3 @ 798MHz

Motherboard

: ASUSTeK COMPUTER INC. X450LCP

Graphics

: Generic PnP Monitor (1366x768@60Hz)
Intel HD Graphics Family (ASUStek Computer Inc)
2047MB NVIDIA GeForce GT 720M

Storage

: 465GB Hitachi HGST HTS545050A7E680

Tabel Hasil Evaluasi Performa pada Game Summy yang Dicoba pada Beberapa
Komputer Berbeda
Kotak di
tangan

Kotak di papan

Hasil
Bentuk

1,3,5,7,9,+,x,-

=

19x3=57

3,4,5,6,7,8,9,-

=

94-58=36

0,2,4,6,8,x,:,-

=

8-6=2

1,2,3,4,5,6,7,+

=

63+12=75

3,4,5,6,7,8,9,-

0,2,4,6,8,x,:,=

94-58=36

96:48=2

Komputer Waktu

FPS
terendah

1
2
3
1
2
3
1
2
3
1
2
3
1
2
3

0,017
0,017
0,017
0,217
0,217
0,200
0,017
0,017
0,017
0,233
0,267
0,217
0,283
0,217
0,167

44
60
60
20
28
32
44
60
60
12
28
56
20
40
60

1

0,170

24

2

0,170

56

3

0,050

56

55

1,3,5,7,9,+,-,=

1,2,3,4,5,6,7,=

4,5,6,7,8,9,=,+

93-78=15

76-45=31

679+5=684

1

0,217

24

2

0,017

32

3

0,017

56

1

1,850

12

2

3,117

20

3

3,567

56

1

1,950

32

2

1,100

48

3

1,433

56

56

LAMPIRAN B
LAMPIRAN PETUNJUK CARA BERMAIN PADA GAME SUMMY

Cara bermain pada game Summy:
1. Pada saat gilirannya bermain, pemain dapat memindahkan kotak dari selot
miliknya ke papan permainan dengan cara melakukan drag and drop.

57

2. Jika pemain ingin menukarkan salah satu kotak miliknya dengan kotak yang
lain, pemain dapat melakukan drag and drop kotak yang dimaksud ke menu
Tukar.

3. Jika pemain ingin mengembalikan kotak yang baru saja diletakkan pada papan
permainan ke selot miliknya lagi, pemain dapat mengklik menu Kembalikan.

58

4. Ketika pemain telah berhasil menyusun bentuk penjumlahan, pengurangan,
perkalian atau pembagian yang valid maka aplikasi akan mengubah warna kotak
tersebut menjadi hijau. Jika tidak valid akan berubah menjadi warna biru.

59

5. Pemain dapat mengakhiri gilirannya jika telah menyusun bentuk yang valid
untuk memperoleh poin atau jika ingin melewati gilirannya dengan cara
mengklik menu Lanjut.

6. Jika giliran pemain berakhir, maka giliran AI bermain. Hal ini ditunjukkan
dengan notifikasi di sudut atas halaman dan area milik pemain akan menjadi
gelap. Begitu pula sebaliknya saat berganti lagi giliran pemain.

60

61

62

7. Pemenang permainan akan ditentukan berdasarkan skor terbanyak yang diraih
saat tidak ada lagi tumpukkan kotak yang tersisa dan pemain dan AI tidak dapat
menyusun bentuk lagi.

63

LAMPIRAN C
LAMPIRAN LISTING PROGRAM

Kode Program Class GreedyProcess:
Imports System.Text
Imports System.Threading.Tasks
Class GreedyProcess
Private Function PermutasiDikurangi(Data() As String, DaftarYangDihapus As
String) As String()
Dim DataKandidat = Data.ToList
Dim Dftr = DaftarYangDihapus.Split("/"c)
For Each dft In Dftr
If dft "" Then
DataKandidat.Remove(dft)
End If
Next
Return DataKandidat.ToArray
End Function
Structure JenisList
Friend ListNumerik() As String
Friend ListOperator() As String
End Structure
Private
Dim
Dim
Dim
Dim
Dim
For

Function PisahNumerik(Data() As String) As JenisList
T As List(Of String) = Data.ToList
D() As String = T.ToArray
TipeList As New JenisList
i = 0
j = 0
Each S In D
If Integer.TryParse(S, 0) Then
ReDim Preserve TipeList.ListNumerik(i)
TipeList.ListNumerik(i) = S
i += 1
Else
ReDim Preserve TipeList.ListOperator(j)
TipeList.ListOperator(j) = S
j += 1
End If

Next
Return TipeList
End Function
Friend Sub SusunKandidatParalelDanSetUpHasil(Data() As String,
KandidatSource As GamePlay.KandidatCPUBaseKoordinat, Kpbntu As List(Of
Vector2), IsHorizontal As Boolean, TileYangDipegang As TileBoard(), TileBoard
As TileBoard(,), loopState As ParallelLoopState)
Dim TempData = Data
If AktifCPU AndAlso Not CPUPlaceSet AndAlso
CInt(TimeSpan.FromSeconds(WaktuTungguBerjalan).ToString("mm")) <
BatasWaktuTunggu Then
Array.Sort(TempData)

64

Array.Reverse(TempData)
If Not TempData Is Nothing AndAlso TempData.Contains("=") And
TempData.Count > 0 Then
'SyncLock kunci
SusunKandidatDanSetUpHasilnya(TempData, KandidatSource, Kpbntu,
IsHorizontal, TileYangDipegang, TileBoard, loopState)
'End SyncLock
End If
End If
End Sub
Private Sub SusunKandidatDanSetUpHasilnya(Data() As String, KandidatSource
As GamePlay.KandidatCPUBaseKoordinat, Kpbntu As List(Of Vector2), IsHorizontal
As Boolean, TileYangDipegang As TileBoard(), TileBoard As TileBoard(,),
loopState As ParallelLoopState)
If Not AktifCPU Then
Exit Sub
End If
Dim TipeList As JenisList = PisahNumerik(Data)
For Each t In TipeList.ListOperator
If t.Count >= 2 Then
Exit Sub
End If
Next
'Dim OPTerpakai As New StringBuilder
Dim A As New List(Of String)
SyncLock Kunci1
A = Permutasi(2, TipeList.ListNumerik)
End SyncLock
For i = 0 To A.Count - 1
If Not AktifCPU Or CPUPlaceSet Or
CInt(TimeSpan.FromSeconds(WaktuTungguBerjalan).ToString("mm")) >=
BatasWaktuTunggu Then
Exit For
End If
Dim BExtract = PermutasiDikurangi(TipeList.ListNumerik, A(i))
If BExtract.Count > 0 Then
Dim B As New List(Of String)
SyncLock Kunci2
B = Permutasi(2, BExtract)
End SyncLock
If B.Count > 0 AndAlso B.First "" Then
For j = 0 To B.Count - 1
If Not AktifCPU Or CPUPlaceSet Or
CInt(TimeSpan.FromSeconds(WaktuTungguBerjalan).ToString("mm")) >=
BatasWaktuTunggu Then
Exit For
End If
Dim CExtract = PermutasiDikurangi(TipeList.ListNumerik,
A(i) & B(j))
If CExtract.Count > 0 Then
Dim C As New List(Of String)
SyncLock Kunci3
C = Permutasi(2, CExtract)
End SyncLock
If C.Count > 0 AndAlso C.First "" Then
For k = 0 To C.Count - 1
If Not AktifCPU Or CPUPlaceSet Or
CInt(TimeSpan.FromSeconds(WaktuTungguBerjalan).ToString("mm")) >=
BatasWaktuTunggu Then
Exit For

65

End If
For Each OP In TipeList.ListOperator
'If Not
OPTerpakai.ToString.Contains(OP) Then
Select Case OP
Case "+"
If CDbl(A(i).Replace("/", ""))
+ CDbl(B(j).Replace("/", "")) = CDbl(C(k).Replace("/", "")) Then
'OPTerpakai.Append(OP)
Dim tempstr As
StringBuilder = New StringBuilder
tempstr.Append(A(i).Replace("/", ""))
tempstr.Append("+")
tempstr.Append(B(j).Replace("/", ""))
tempstr.Append("=")
tempstr.Append(C(k).Replace("/", ""))
Dim Arr() As Char =
tempstr.ToString.ToCharArray
Dim TN As Integer = 0
For Each Ar In Arr
If Integer.TryParse(Ar,
0) Then
TN += Val(Ar)
End If
Next
CekKePapanPermainan(tempstr.ToString, KandidatSource, Kpbntu, IsHorizontal,
TileYangDipegang, TileBoard, loopState)
End If
Case "-"
If CDbl(A(i).Replace("/", ""))
- CDbl(B(j).Replace("/", "")) = CDbl(C(k).Replace("/", "")) Then
'OPTerpakai.Append(OP)
Dim tempstr As
StringBuilder = New StringBuilder
tempstr.Append(A(i).Replace("/", ""))
tempstr.Append("-")
tempstr.Append(B(j).Replace("/", ""))
tempstr.Append("=")
tempstr.Append(C(k).Replace("/", ""))
Dim Arr() As Char =
tempstr.ToString.ToCharArray
Dim TN As Integer = 0
For Each Ar In Arr
If Integer.TryParse(Ar,
0) Then
TN += Val(Ar)
End If
Next
CekKePapanPermainan(tempstr.ToString, KandidatSource, Kpbntu, IsHorizontal,
TileYangDipegang, TileBoard, loopState)
End If
Case "x"

66

If CDbl(A(i).Replace("/", ""))
* CDbl(B(j).Replace("/", "")) = CDbl(C(k).Replace("/", "")) Then
'OPTerpakai.Append(OP)
Dim tempstr As
StringBuilder = New StringBuilder
tempstr.Append(A(i).Replace("/", ""))
tempstr.Append("x")
tempstr.Append(B(j).Replace("/", ""))
tempstr.Append("=")
tempstr.Append(C(k).Replace("/", ""))
Dim Arr() As Char =
tempstr.ToString.ToCharArray
Dim TN As Integer = 0
For Each Ar In Arr
If Integer.TryParse(Ar,
0) Then
TN += Val(Ar)
End If
Next
CekKePapanPermainan(tempstr.ToString, KandidatSource, Kpbntu, IsHorizontal,
TileYangDipegang, TileBoard, loopState)
End If
Case ":"
If CDbl(A(i).Replace("/", ""))
/ CDbl(B(j).Replace("/", "")) = CDbl(C(k).Replace("/", "")) Then
'OPTerpakai.Append(OP)
Dim tempstr As
StringBuilder = New StringBuilder
tempstr.Append(A(i).Replace("/", ""))
tempstr.Append(":")
tempstr.Append(B(j).Replace("/", ""))
tempstr.Append("=")
tempstr.Append(C(k).Replace("/", ""))
Dim Arr() As Char =
tempstr.ToString.ToCharArray
Dim TN As Integer = 0
For Each Ar In Arr
If Integer.TryParse(Ar,
0) Then
TN += Val(Ar)
End If
Next
CekKePapanPermainan(tempstr.ToString, KandidatSource, Kpbntu, IsHorizontal,
TileYangDipegang, TileBoard, loopState)
End If
End Select
'End If
Next
Next
End If
End If
Next
End If

67

End If
Next
End Sub
Friend Function Permutasi(NPermutasi As Integer, Data() As String) As
List(Of String)
Dim DPermutasi As New List(Of String)
Dim Layak As Boolean
If Not Data Is Nothing AndAlso Data.Count > 0 Then
For n = NPermutasi To 0 Step -1
Dim Banyak(n) As Integer
Dim FPermutasi As Boolean = True
Do
SusunPermutasi(FPermutasi, Banyak, DPermutasi, Data, Layak)
If FPermutasi = False Then
Exit Do
End If
Loop
Next
End If
Return DPermutasi
End Function
Private Sub SusunPermutasi(ByRef FPermutasi As Boolean, ByRef Banyak() As
Integer, ByRef DPermutasi As List(Of String), ByVal Data() As String, ByVal
Layak As Boolean)
If FPermutasi Then
Layak = True
If Banyak.Count > 1 Then
For i = 0 To Banyak.Count - 1
If i < Banyak.Count - 1 Then
If (Banyak(i)) = (Banyak(i + 1)) Then
Layak = False
End If
Else
If (Banyak(i)) = (Banyak(0)) Then
Layak = False
End If
End If
If Layak = False Then
Exit For
End If
Next
End If
Dim TemP As New StringBuilder
If Layak = True Then
For d = Banyak.Count - 1 To 0 Step -1
TemP.Append(Data(Banyak(d)))
TemP.Append("/")
Next
If TemP.ToString = "0/" Then
Dim asda = TemP
End If
If TemP.ToString.Length 1
AndAlso TemP.ToString.Substring(0, 1) "0") Then
DPermutasi.Add(TemP.ToString)
End If
End If
For i = 0 To Banyak.Count - 1

68

If i > 0 Then
If Banyak(i - 1) > Data.Count - 1 Then
Banyak(i) += 1
Banyak(i - 1) = 0
End If
Else
Banyak(i) += 1
End If
If Banyak(Banyak.Count - 1) > Data.Count - 1 Then
FPermutasi = False
End If
Next
End If
End Sub
Private Sub CekKePapanPermainan(Solusi As String, KandidatSource As
GamePlay.KandidatCPUBaseKoordinat, KPbntu As List(Of Vector2), IsHorizontal As
Boolean, TileYangDipegang As TileBoard(), TileBoard As TileBoard(,), loopState
As ParallelLoopState)
Dim avb = AvaibleFormula(Solusi, KandidatSource, KPbntu, TileBoard)
Dim Cocok As Boolean = False
If avb >= 0 Then
Cocok = KelayakanCPU(avb, KandidatSource.Koordinat, Solusi, KPbntu,
IsHorizontal, TileYangDipegang, TileBoard)
End If
If Cocok Then
SyncLock Kunci
If AktifCPU And Not CPUPlaceSet Then
If Not loopState.ShouldExitCurrentIteration Then
CPU_LetakHasilTervalidasi(avb,
KandidatSource.Koordinat, Solusi, IsHorizontal, TileYangDipegang, TileBoard)
loopState.Stop()
CPUPlaceSet = True
End If
End If
End SyncLock
End If
End Sub
Private Function AvaibleFormula(HasilSolusi As String, KandidatSource As
GamePlay.KandidatCPUBaseKoordinat, KPembantu As List(Of Vector2), TileBoard As
TileBoard(,)) As Integer
Dim HslTemp = HasilSolusi.ToList
Dim indeks = -1
For Each c In HasilSolusi.ToList
If c = TileBoard(KandidatSource.Koordinat.X,
KandidatSource.Koordinat.Y).CharValue Then
indeks = HslTemp.IndexOf(c)
'cTemp.Remove(c)
Exit For
End If
Next
Return indeks
End Function
Private Function KelayakanCPU(avb As UInt16, Koordinat As Vector2, Solusi
As String, KPembantu As List(Of Vector2), IsBaris As Boolean, Player As
TileBoard(), TileBoard As TileBoard(,)) As Boolean
Dim Cocok As Boolean = False
Dim Kpem = KPembantu

69

Dim Sol As List(Of Char) = Solusi.ToList
Dim Plyr = Player.ToList
If AktifCPU Then
If avb = 0 Then
If If(IsBaris, Koordinat.Y, Koordinat.X) - 1 >= 0 Then
If TileBoard(Koordinat.X - If(Not IsBaris, 1, 0),
Koordinat.Y - If(IsBaris, 1, 0)).Value 127 Then
Return False
End If
End If
End If
'Batas Atas
If avb - 1 >= 0 And If(IsBaris, Koordinat.Y, Koordinat.X) - 1 >= 0
Then
For i = avb - 1 To 0 Step -1
If i = 0 Then
If If(IsBaris, Koordinat.Y, Koordinat.X) - (avb + 1 i) >= 0 Then
If TileBoard(Koordinat.X - If(Not IsBaris, (avb + 1
- i), 0), Koordinat.Y - If(IsBaris, (avb + 1 - i), 0)).Value 127 Then
Return False
End If
End If
End If
'Cek Kpembantu (Tile yang telah ada dipapan permainan)
For Each k In Kpem
If Solusi(i) = TileBoard(k.X, k.Y).CharValue And
If(IsBaris, Koordinat.Y - k.Y, Koordinat.X - k.X) = avb - i Then
Kpem.Remove(k)
Sol.Remove(Solusi(i))
i -= 1
Exit For
End If
Next
If i = 0 Then
If If(IsBaris, Koordinat.Y, Koordinat.X) - (avb + 1 i) >= 0 Then
If TileBoard(Koordinat.X - If(Not IsBaris, (avb + 1
- i), 0), Koordinat.Y - If(IsBaris, (avb + 1 - i), 0)).Value 127 Then
Return False
End If
End If
End If
If i < 0 Then
Continue For
End If
'Cek Tile yang ada ditangan Player CPU
For Each p In Plyr
If (Solusi(i) = p.CharValue And If(IsBaris,
Koordinat.Y, Koordinat.X) - (avb - i) >= 0) AndAlso
(TileBoard(Koordinat.X - If(Not IsBaris, (avb i), 0), Koordinat.Y - If(IsBaris, (avb - i), 0)).Value = 127 And
Not TileBoard(Koordinat.X - If(Not IsBaris,
(avb - i), 0), Koordinat.Y - If(IsBaris, (avb - i), 0)).IsBlocked) Then
Plyr.Remove(p)
Sol.Remove(Solusi(i))
Exit For

70

End If
Next
Next
End If
If avb = Solusi.Length - 1 Then
If If(IsBaris, Koordinat.Y, Koordinat.X) + 1 <
TileBoard.GetLength(0) Then
If TileBoard(Koordinat.X + If(Not IsBaris, 1, 0),
Koordinat.Y + If(IsBaris, 1, 0)).Value 127 Then
Return False
End If
End If
End If
'Batas Bawah
If avb + 1 < Solusi.Length And If(IsBaris, Koordinat.Y,
Koordinat.X) + 1 < TileBoard.GetLength(0) Then
For i = avb + 1 To Solusi.Length - 1
If i = Solusi.Length - 1 Then
If If(IsBaris, Koordinat.Y, Koordinat.X) + (i + 1 avb) < TileBoard.GetLength(0) Then
If TileBoard(Koordinat.X + If(Not IsBaris, (i + 1 avb), 0), Koordinat.Y + If(IsBaris, (i + 1 - avb), 0)).Value 127 Then
Return False
End If
End If
End If
'Cek Kpembantu (Tile yang telah ada dipapan permainan)
For Each k In Kpem
If Solusi(i) = TileBoard(k.X, k.Y).CharValue And
If(IsBaris, k.Y - Koordinat.Y, k.X - Koordinat.X) = i - avb Then
Kpem.Remove(k)
Sol.Remove(Solusi(i))
i += 1
Exit For
End If
Next
If i = Solusi.Length - 1 Then
If If(IsBaris, Koordinat.Y, Koordinat.X) + (i + 1 avb) < TileBoard.GetLength(0) Then
If TileBoard(Koordinat.X + If(Not IsBaris, (i + 1 avb), 0), Koordinat.Y + If(IsBaris, (i + 1 - avb), 0)).Value 127 Then
Return False
End If
End If
End If
If i >= Solusi.Length Then
Continue For
End If
'Cek Tile yang ada ditangan Player CPU
For Each p In Plyr
If (Solusi(i) = p.CharValue And If(IsBaris,
Koordinat.Y, Koordinat.X) + (i - avb) < TileBoard.GetLength(0)) AndAlso
(TileBoard(Koordinat.X + If(Not IsBaris, i avb, 0), Koordinat.Y + If(IsBaris, i - avb, 0)).Value = 127 And
Not TileBoard(Koordinat.X + If(Not IsBaris,
i - avb, 0), Koordinat.Y + If(IsBaris, i - avb, 0)).IsBlocked) Then

71

Plyr.Remove(p)
Sol.Remove(Solusi(i))
Exit For
End If
Next
Next
End If
If Sol.Count = 1 Then
Cocok = True
End If
End If
Return Cocok
End Function
Private Sub CPU_LetakHasilTervalidasi(avb As UInt16, Koordinat As Vector2,
Solusi As String, IsHorizontal As Boolean, TileYangDipegang As TileBoard(),
TileBoard As TileBoard(,))
Dim Plye = TileYangDipegang.ToArray
'Batas Atas
If avb - 1 >= 0 And If(IsHorizontal, Koordinat.Y, Koordinat.X) - 1 >= 0
Then
For i = avb - 1 To 0 Step -1
'Letak Tile yang ada ditangan Player CPU ke papan permainan
For Each p In Plye
If Not p.IsBlocked Then
If (Solusi(i) = p.CharValue And If(IsHorizontal,
Koordinat.Y, Koordinat.X) - (avb - i) >= 0) AndAlso
(TileBoard(Koordinat.X - If(Not IsHorizontal, (avb
- i), 0), Koordinat.Y - If(IsHorizontal, (avb - i), 0)).Value = 127 And
Not TileBoard(Koordinat.X - If(Not IsHorizontal,
(avb - i), 0), Koordinat.Y - If(IsHorizontal, (avb - i), 0)).IsBlocked) Then
p.IsBlocked = True
TileYangDipegang(Array.IndexOf(Plye, p)).IsBlocked
= True
TileBoard(Koordinat.X - If(Not IsHorizontal, (avb i), 0), Koordinat.Y - If(IsHorizontal, (avb - i), 0)).Value = p.Value
Exit For
End If
End If
Next
Next
End If
'Batas Bawah
If avb + 1 < Solusi.Length And If(IsHorizontal, Koordinat.Y,
Koordinat.X) + 1 < TileBoard.GetLength(0) Then
For i = avb + 1 To Solusi.Length - 1
'Letak Tile yang ada ditangan Player CPU ke papan permainan
For Each p In Plye
If Not p.IsBlocked Then
If (Solusi(i) = p.CharValue And If(IsHorizontal,
Koordinat.Y, Koordinat.X) + (i - avb) < TileBoard.GetLength(0)) AndAlso
(TileBoard(Koordinat.X + If(Not IsHorizontal, i
- avb, 0), Koordinat.Y + If(IsHorizontal, i - avb, 0)).Value = 127 And
Not TileBoard(Koordinat.X + If(Not IsHorizontal,
i - avb, 0), Koordinat.Y + If(IsHorizontal, i - avb, 0)).IsBlocked) Then
p.IsBlocked = True
TileYangDipegang(Array.IndexOf(Plye, p)).IsBlocked
= True
TileBoard(Koordinat.X + If(Not IsHorizontal, i avb, 0), Koordinat.Y + If(IsHorizontal, i - avb, 0)).Value = p.Value

72

Exit For
End If
End If
Next
Next
End If
End Sub
End Class

73

(REZA HIDAYAT BAYU PRABOWO)
DATA PRIBADI

Nama Lengkap
: Reza Hidayat Bayu Prabowo
Nama Panggilan
: Reza
Tempat/Tanggal Lahir: Labuhan Deli / 19 Januari 1991
Jenis Kelamin
: Pria
Agama
: Islam
Warga Negara
: Indonesia
Alamat
: Jl. Seser No. 48, Medan
HP
E-mail
Status

: 081534974535
: [email protected]
: belum menikah

RIWAYAT PENDIDIKAN

Sekolah Menengah Atas
SMA Negeri 3 Medan
2005-2008
Sekolah Menengah Pertama
SMP Negeri 45 Medan
2002-2005
Sekolah Dasar
SD Negeri 066657 Medan
1996-2002

KEMAMPUAN KOMPUTER

Programming: C++, C#, VB.Net
Database
: MySQL
IDE
: Visual Studio 2015, Visual Studio Code
Software
: Ms. Office
Game Engine : XNA Framework, Monogame

74

PENGALAMAN KERJA

No
1

Instansi/Lembaga
Freelancer

Jabatan/Posisi

Tahun

Programmer

2013-2015

SEMINAR

No.

Seminar

Tahun

1

Seminar Demo Software dan Diskusi Panel Integrasi Agent Based Model
(ABM) dan Geographic Information System (GIS)

2011

2

Seminar Nasional Creative Animation dan Gaming Industry

2013