Oleh :
Dosen Pembimbing :
SAMPUL
Oleh :
Dosen Pembimbing :
i
HALAMAN PENGESAHAN
Oleh :
Wais Al-Qonri Hanif
NRP. 7408 040 028
Disetujui oleh :
Mengetahui,
Ketua Program Studi D4 Teknik Informatika
Departemen Teknik Informatika dan Komputer
Politeknik Elektronika Negeri Surabaya
ii
ABSTRAK
iii
ABSTRACT
iv
KATA PENGANTAR
Penulis
v
UCAPAN TERIMA KASIH
vi
DAFTAR ISI
HALAMAN JUDUL......................................................................i
HALAMAN PENGESAHAN........................................................ii
ABSTRAK......................................................................................iii
ABSTRACT....................................................................................iv
KATA PENGANTAR....................................................................v
UCAPAN TERIMA KASIH..........................................................vi
DAFTAR ISI...................................................................................vii
DAFTAR GAMBAR......................................................................ix
DAFTAR TABEL...........................................................................xi
BAB I. PENDAHULUAN..............................................................1
1.1. Latar Belakang.........................................................................1
1.2. Perumusan Masalah.................................................................1
1.3. Batasan Masalah......................................................................2
1.4. Tujuan......................................................................................2
1.5. Metodologi...............................................................................2
1.6. Sistematika Penulisan..............................................................4
vii
3.6.2. Menggambar Tembok..................................................33
3.6.3. Menampilkan Pertanyaan.............................................35
3.6.4. Load Texture................................................................37
3.6.5. Menghitung Waktu.......................................................38
3.6.6. Menentukan Collision..................................................39
3.6.7. Menentukan Gerak Karakter........................................40
3.7. Skenario Game.........................................................................42
BAB V. PENUTUP........................................................................89
5.1. Kesimpulan..............................................................................89
5.2. Saran........................................................................................89
DAFTAR PUSTAKA.....................................................................91
LAMPIRAN....................................................................................93
BIODATA PENULIS.....................................................................95
viii
DAFTAR GAMBAR
ix
Gambar 3.30. Map Labyrinth Perang Diponegoro.........................62
Gambar 4.1. Grafik 5 Iterasi Terhadap Nilai Fitness....................69
Gambar 4.2. Grafik 10 Iterasi Terhadap Nilai Fitness..................69
Gambar 4.3. Grafik 15 Iterasi Terhadap Nialai Fitness................70
Gambar 4.4. Grafik Individu Terhadap Waktu.............................71
Gambar 4.5. Latar Belakang Berwarna Putih...............................77
Gambar 4.6. Latar Belakang Berwarna Coklat Kulit....................78
Gambar 4.7. Latar Belakang Berwarna Campuran (Putih, Coklat,
Hitam)......................................................................78
Gambar 4.8. Kondisi A.................................................................80
Gambar 4.9. Hasil Percobaan Kondisi A......................................80
Gambar 4.10. Kondisi B.................................................................81
Gambar 4.11. Hasil Percobaan Kondisi B......................................81
Gambar 4.12. Kondisi C.................................................................82
Gambar 4.13. Hasil Percobaan Kondisi C......................................82
Gambar 4.14. Kondisi A + B..........................................................83
Gambar 4.15. Hasil Percobaan Kondisi A + B...............................83
Gambar 4.16. Kondisi A + C..........................................................84
Gambar 4.17. Hasil Percobaan Kondisi A + C...............................84
Gambar 4.18. Kondisi B + C..........................................................85
Gambar 4.19. Hasil Percobaan Kondisi B + C...............................85
Gambar 4.20. Kondisi A + B + C...................................................86
Gambar 4.21. Hasil Percobaan Kondisi A + B + C........................86
Gambar 4.22. Kondisi Lampu Mati................................................87
Gambar 4.23. Hasil Percobaan Kondisi Lampu Mati.....................87
x
DAFTAR TABEL
xi
BAB I
PENDAHULUAN
1
Mac OS X dan untuk kedepannya dapat digunakan sebagai
referensi tambahan.
b. Bagaimana menerapkan prinsip-prinsip game desain ke dalam
game labyrinth 3D.
c. Bagaimana merancang dan membuat labyrinth 3D mulai dari
lantai, tembok-temboknya secara menarik agar player senang
memainkannya.
d. Bagaimana melakukan scalp color modeling yang menentukan
warna hitam, cokelat, dan putih.
e. Bagaimana membuat labyrinth 3D dengan deteksi kepala
menggunakan SSGA.
f. Bagaimana menentukan gerakan maju, kanan, kiri
menggunakan SSGA
1.4. Tujuan
Membuat suatu aplikasi game yang tidak selalu menggunakan
joystick atau keyboard untuk memainkannya, tetapi menggunakan
gerakan kepala. Player dengan daya eksplorasi yang tinggi
mungkin dapat dengan mudah menyelesaikan game ini.
1.5. Metodologi
Metodologi dari proyek akhir yang akan dikerjakan memiliki
beberapa tahapan yaitu:
2
Studi Literatur dan Pengambilan Data
Pembuatan Laporan
3
metode ini adalah karena prosesnya lebih
cepat.
Kemudian dilakukan penentuan maju, kanan,
dan kiri menggunakan SSGA.
Langkah terakhir adalah mengintegrasikan
dengan game.
4
BAB IV PENGUJIAN DAN ANALISA
Memuat tentang pengujian sistem dan analisa, yang
meliputi pembuatan perangkat lunak, pengujian perangkat
lunak, dan pembahasan penelitian.
BAB V PENUTUP
Memuat tentang kesimpulan dari pembahasan penelitian,
dan saran untuk pengembangan dan pemanfaatan hasil
penelitian lebih lanjut.
5
Halaman Ini Sengaja Dikosongkan
6
BAB II
TEORI PENUNJANG
7
2.2.1. Bitmap
Merupakan representasi dari gambar yang terdiri dari
baris dan kolom pada titik grafik gambar di komputer. Nilai
dari titik disimpan dalam satu atau lebih data bit. Tampilan
dari bitmap atau raster, menggunakan titik – titik berwarna
yang dikenal dengan sebutan piksel. Struktur bitmap terdiri
dari header, info header dan color table. Header merupakan
bagian dari file bitmap yang berisi informasi header dari file
gambar bitmap. Ukuran dari header ini 14 byte, masing –
masing terdiri dari signatur 2 byte (berisi “BM” sebagai
tanda gambar mempunyai format bmp), FileSize 4 byte
(besarnya ukuran gambar mempunyai satuan bytes,
Reserved 4 bytes (tidak digunakan atau sama diisi dengan
nilai nol) dan DataOffset 4 byte(file offset untuk raster
data).
8
banyak) yang bisa dibuat menjadi dua, tiga, atau empat
dimensi, dan primitif gambar seperti bitmaps.
b. Fungsi atribut, mengontrol tampilan dari primitif.
Fungsi ini menentukan warna, jenis garis, properti
material, sumber cahaya, dan tekstur.
c. Fungsi pandangan, menentukan properti kamera.
OpenGL menyediakan sebuah virtual kamera yang
bisa diposisikan dan diorientasikan relatif ke obyek
yang ditentukan dengan fungsi primitif. Lensa kamera
juga bisa dikendalikan sehingga bisa dihasilkan sudut
yang lebar dan pandangan telefoto (jarak jauh).
d. Fungsi windowing, fungsi ini mengendalikan windows
pada layar dan penggunaan dari mouse dan keyboard.
e. Fungsi kontrol, menghidupkan macam-macam fitur
OpenGL.
9
menarik untuk pengembangan lintas-platform aplikasi
grafis.
2.2.3. Translasi 3D
Transformasi translasi merupakan suatu operasi yang
menyebabkan perpindahan objek 3D dari satu tempat ke
tempat yang lain. Perubahan ini berlaku dalam arah yang
sejajar dengan sumbu x, sumbu y, dan sumbu z.
Dalam operasi translasi, setiap titik pada suatu entitas
yang ditranslasi bergerak dalam jarak yang sama.
Pergerakan itu dapat berlaku dalam arah sumbu x saja,
dalam arah sumbu y saja, dalam sumbu z saja, atau bisa
ketiganya.
Sekiranya titik asal P(x, y, z) ditranslasi ke titik baru
Q(x`, y`, z`) maka titik baru ini dapat dicari dengan rumus
berikut, (Sumber: Achmad Basuki, Nana Ramadijanti,
“Grafika Komputer”, Politeknik Elektronika Negeri
Surabaya-ITS, Surabaya, 2009, halaman 9).
x` = x+dx (2.4)
y` = y+dy (2.5)
z` = z+dz (2.6)
2.2.4. Rotasi 3D
Transformasi rotasi merupakan suatu operasi yang
menyebabkan perpindahan objek 3D dari titik P ke titik P`
yang berupa permindahan berputar sebesar sudut .
Perputaran ini berlaku searah terhadap sumbu x, sumbu y,
dan sumbu z.
Untuk proses rotasi 3 dimensi, terdapat tiga macam
rotasi, yaitu rotasi terhadap sumbu X (rotationXMTX),
rotasi terhadap sumbu Y (rotationYMTX) dan rotasi pada
10
sumbu Z (rotationZMTX). Perbedaan dari masing-masing
matriks rotasi ini adalah peletakan nilai cos() dan sin().
Berikut rumus rotasi terhadap sumbu x, (Sumber:
Achmad Basuki, Nana Ramadijanti, “Grafika Komputer”,
Politeknik Elektronika Negeri Surabaya-ITS, Surabaya,
2009, halaman 19).
0 0 0 0
Rx = 0 cos() -sin() 0 (2.7)
0 sin() cos() 0
0 0 0 1
cos() 0 -sin() 0
Ry = 0 0 0 0 (2.8)
sin() 0 cos() 0
0 0 0 1
cos() -sin() 0 0
Rz = sin() cos() 0 0 (2.9)
0 0 0 0
0 0 0 1
11
untuk memecahkan optimisasi mereka. Algoritma Genetika adalah
algoritma yang memanfaatkan proses seleksi alamiah yang dikenal
dengan proses evolusi. Dalam proses evolusi, individu secara terus-
menerus mengalami perubahan gen untuk menyesuaikan dengan
lingkungan hidupnya. “Hanya individu-individu yang kuat yang
mampu bertahan”. Proses seleksi alamiah ini melibatkan perubahan
gen yang terjadi pada individu melalui proses perkembangbiakan.
Dalam algoritma genetika ini, proses perkembangbiakan ini
menjadi proses dasar yang menjadi perhatian utama, dengan dasar
berpikir: “Bagaimana mendapatkan keturunan yang lebih baik”.
GA secara khusus dapat diterapkan untuk memecahkan masalah
optimisasi yang kompleks. Karena itu GA baik untuk aplikasi yang
memerlukan strategi pemecahan masalah secara adaptif. Salah satu
macam dari algoritma genetika adalah steady-state genetic
algorithm.
Steady state genetic algorithm ini awalnya dilakukan
pembangkitan individu, kemudian dilakukan penggantian beberapa
individu dalam beberapa generasi. Individu terburuk akan diganti
dengan individu baru hasil dari crossover dan mutasi. Untuk proses
crossover ini digunakan elitist crossover dimana secara acak
mendapatkan satu induk dan nilai gennya dikombinasikan dengan
individu terbaik. Untuk menghemat waktu komputasi, maka induk
yang dihasilkan secara acak diganti dengan individu terburuk.
Sedangkan untuk mutasi digunakan adaptive mutation yang
memang sangat baik untuk mencapai lokal optima. Dipilihnya
metode ini daripada metode GA yang lainnya karena prosesnya
sangat cepat.
2.4. Labyrinth
Labyrinth adalah salah satu bagian permainan teka-teki yang
memiliki percabangan yang kompleks dan pemain harus dapat
menemukan rute keluar. Sejak zaman dahulu, labyrinth telah
digunakan dalam berbagai kepentingan, mulai dari proteksi
keamanan hingga hiburan. Pada umumnya, labyrinth dibuat untuk
tujuan hiburan.
Labyrinth dalam dunia nyata banyak dibuat di taman atau
ruangan-ruangan dengan pembatas berupa pagar tanaman, tembok
atau pagar. Labyrinth ini secara tidak langsung menyesatkan orang
yang masuk ke dalamnya. Labyrinth untuk permainan biasanya
12
dicetak dalam sebuah kertas untuk diselesaikan oleh pemain.
Permainan dilakukan dengan cara menuliskan jalan yang telah
ditempuh menggunakan pensil atau hanya dengan menunjuk
jalannya menggunakan jari. Labyrinth terbagi menjadi beberapa
kategori sesuai jenisnya, yaitu labyrinth 2 dimensi, 3 dimensi,
berbentuk segitiga, persegi, dan masih banyak lagi.
13
Gambar 2.2. Sudut pandang player dalam game
Sumber : http://najicayuri.blogspot.com
(diakses pada tanggal 10 September 2011, jam 14.00)
14
Semua yang berada dalam wilayah FOV akan
diproyeksikan ke layar, dan hasilnya akan tampak seperti
gambar di bawah ini.
15
Halaman Ini Sengaja Dikosongkan
16
BAB III
PERENCANAAN DAN PEMBUATAN SISTEM
Generate Individu
Head Detection
Elitists Crossover
Head Tracking
Adaptive Mutation
Game Labyrinth
17
Kemudian gambar diproses awalnya dilakukan Scalp Color
Modeling untuk menentukan warna rambut (hitam), warna kulit
(cokelat) dan warna lainnya (putih). Kemudian dilakukan Head
Detection menggunakan metode SSGA, dari hasil SSGA akan
dilakukan Head Tracking dan dilakukan keputusan apakah gerakan
kepala maju, kiri, dan ke kanan melebihi nilai yang ditentukan
untuk menggerakkan karakter di dalam game.
IplImage
*img=cvCreateImage(cvSize(360,240),8,3);
CvCapture *capture = 0;
IplImage *frame = 0;
capture = cvCaptureFromCAM( 0 );
if ( !capture ) {
fprintf( stderr, "Cannot open
initialize webcam!\n" );
return1;
}
18
frame = cvQueryFrame( capture );
if( !frame ) break;
cvShowImage( "original", img);
19
warna merah sedangkan Cb menyatakan jarak intensitas terhadap
unsur warna biru. Dalam memodelkan warna kulit hanya informasi
Cr dan Cb yang dipakai, sehingga pengaruh perubahan intensitas
dapat dihilangkan. Pada daerah saturasi dari cahaya yang
tertangkap kamera, harga Cr dan Cb sangat stabil, sehingga nilai Cr
dan Cb merupakan informasi handal untuk proses klasifikasi
warna. Untuk mengubah citra berwarna yang mempunyai nilai
matrik masing-masing r, g, dan b menjadi citra warna YCrCb dapat
dilakukan dengan menghitung seperti pada persamaan (2.1), (2.2),
dan (2.3).
Berikut program mendeteksi warna kulit :
y =(int)(0.59*g+0.31*r+0.10*b);
cr = (int)(0.713*(r-y));
cb = (int)(0.564*(b-y));
jarak=sqrt(pow((cr-11),(double)2))+(pow((cb+11),
(double)2));
if(jarak<90) {
data[i * step + j * channel + 2]=230;
data[i * step + j * channel + 1]=190;
data[i * step + j * channel + 0]=100;
}
elseif(r>30 || g>30 || b>30)
{
data[i * step + j * channel + 2]=255;
data[i * step + j * channel + 1]=255;
data[i * step + j * channel + 0]=255;
}
else
{
data[i * step + j * channel + 2]=0;
data[i * step + j * channel + 1]=0;
data[i * step + j * channel + 0]=0;
}
20
Penjelasan program di atas sebagai berikut :
1. Pertama kita ambil nilai RGB dari setiap pixel.
2. Kemudian nilai-nilai RGB tadi kita rubah ke YCrCb
dengan rumus yang telah ditentukan.
3. Kemudian kita hitung jarak intensitas warna merah dan
biru.
4. Kemudian jika jarak < 90 kita rubah menjadi warna coklat
dengan nilai R=230, G=190, dan B=100, jika R>30,
G>30, dan B>30 maka kita rubah menjadi putih, dengan
merubah nilai RGB menjadi 255, selain ketentuan tadi
kita rubah RGBnya menjadi hitam dengan nilai RGB
menjadi 0.
21
START
Random Individu
For i < 5
Selection
Elitist Crossover
Adaptive Mutation
N
i>5
END
22
xi,yi
tinggii
lebari
Gambar 3.5. Individu yang dibangkitkan
23
Berikut program membangkitkan individu :
cvDrawRect(src,cvPoint(x[i],y[i]),cvPoint(xa[i],ya
[i]),cvScalar(255,0,0,0),1);
}
Penjelasan program di atas sebagai berikut :
24
dilakukan perhitungan nilai fitness. Untuk memodelkan kepala
manusia, maka perlu dibuat template dari kepala manusia seperti
berikut :
warna rambut
warna kulit
warna lain
Gambar 3.7. Template kepala manusia
ƒiHe=Ckulit
Kp
wajah
Kp
+ Crambut+ η1Kp.CKpkulit wajah
.CKp rambut
- η2Kp.CKp lainya
(3.1)
Dimana :
ƒiHe = nilai fitness
CKp = jumlah piksel warna kulit wajah
kulit wajah
Kp
Crambut = jumlah piksel warna rambut
CKp = jumlah piksel warna lainnya
lainya
25
η1Kp dan η2Kp = koefisien warna rambut, warna kulit dan warna
lain yang bernilai antara 0 sampai 1.
if(r==0&&g==0&&b==0)
hair++;
elseif(r==230&&g==190&&b==100)
skin++;
else
other++;
sum_hair[index][k][l]=hair;
sum_skin[index][k][l]=skin;
sum_other[index][k][l]=other;
fit_func[index][k][l]=(sum_hair[index][k][l]
+sum_skin[index][k][l]+(0.9*sum_hair[index][k]
[l]*sum_skin[index][k][l])-(0.1*sum_other[index]
[k][l]))/100;
Penjelasan program di atas sebagai berikut :
26
individu terbaik. Untuk menghemat waktu komputasi, maka induk
yang dihasilkan secara acak diganti dengan individu terburuk.
P=(double)rand()/(double)RAND_MAX;
if (P<PROB_CROSSOVER) {
arrayindi[i][0]=arrayindi[bestFitness][0];
arrayindi[i][1]=arrayindi[bestFitness][1];
arrayindi[i][2]=arrayindi[bestFitness][2];
arrayindi[i][3]=arrayindi[bestFitness][3];
arrayindi[i][4]=arrayindi[i]
[0]+arrayindi[i][2]; arrayindi[i]
[5]=arrayindi[i][1]+arrayindi[i][3];
}
Penjelasan program di atas sebagai berikut :
(
gi , j ← gi , j + ∝ j .
fit max−fit i
)
+ β . N (0 , 1)
fit max−fit min j
(3.2)
27
Dimana fiti adalah nilai fitness dari individu ke i, fitmax dan fitmin
adalah nilai fitness maksimal dan minimal dalam suatu populasi,
N(0,1) adalah nilai acak dari 0 sampai 1. αj dan βj adalah koefisien
dan offset. Proses mulai dari seleksi, crossover dan mutasi ini akan
berlangsung sampai nilai maksimal iterasi tercapai atau nilai fitness
yang dihasilkan tidak berubah.
P=(double)rand()/(double)RAND_MAX;
n=(double)rand()/(double)RAND_MAX;
a=(double)rand()/(double)RAND_MAX;
b=a+1;
if(P<PROB_MUTATION){
arrayindi[i][0]+=((a*((totfit[bestFitness]-
totfit[i])/(totfit[bestFitness]-
totfit[badFitness])))+b)*n;
arrayindi[i][1]+=((a*((totfit[bestFitness]-
totfit[i])/(totfit[bestFitness]-
totfit[badFitness])))+b)*n;
arrayindi[i][2]+=((a*((totfit[bestFitness]-
totfit[i])/(totfit[bestFitness]-
totfit[badFitness])))+b)*n;
arrayindi[i][3]+=((a*((totfit[bestFitness]-
totfit[i])/(totfit[bestFitness]-
totfit[badFitness])))+b)*n;
arrayindi[i][4]=arrayindi[i][0]+arrayindi[i]
[2];
arrayindi[i][5]=arrayindi[i][1]+arrayindi[i]
[3];
if(arrayindi[i][4]>=360)
arrayindi[i][4]=359;
if(arrayindi[i][5]>=240)
arrayindi[i][5]=239;
}
Penjelasan program di atas sebagai berikut :
28
2. Gen-gen dari individu yang buruk x,y, lebar dan tinggi
diganti dengan hasil dari proses perhitungan adaptive
mutation.
if(count!=4){
temp_gen[0]+=arrayindi[bestFitness][0];
temp_gen[1]+=arrayindi[bestFitness][1];
temp_gen[2]+=arrayindi[bestFitness][2];
temp_gen[3]+=arrayindi[bestFitness][3];
temp_gen[4]+=arrayindi[bestFitness][4];
temp_gen[5]+=arrayindi[bestFitness][5];
count++;
}else{
temp_gen[0]+=arrayindi[bestFitness][0];
temp_gen[1]+=arrayindi[bestFitness][1];
temp_gen[2]+=arrayindi[bestFitness][2];
temp_gen[3]+=arrayindi[bestFitness][3];
temp_gen[4]+=arrayindi[bestFitness][4];
temp_gen[5]+=arrayindi[bestFitness][5];
29
temp_gen[0]/=5;
temp_gen[1]/=5;
temp_gen[2]/=5;
temp_gen[3]/=5;
temp_gen[4]/=5;
temp_gen[5]/=5;
fix_gen[0]=temp_gen[0];
fix_gen[1]=temp_gen[1];
fix_gen[2]=temp_gen[2];
fix_gen[3]=temp_gen[3];
fix_gen[4]=temp_gen[4];
fix_gen[5]=temp_gen[5];
temp_gen[0]=0;
temp_gen[1]=0;
temp_gen[2]=0;
temp_gen[3]=0;
temp_gen[4]=0;
temp_gen[5]=0;
count=0;
}
cvDrawRect(img,cvPoint(fix_gen[0],fix_gen[1]),cvPo
int(fix_gen[4],fix_gen[5]),cvScalar(0,0,255,0),1);
Penjelasan program di atas sebagi berikut :
1. Awalnya gen-gen dari individu yang terbaik disimpan
dalam variabel temp_gen dan terus ditambahkan setiap
iterasi.
2. Jika sampai iterasi yang ditentukan, maka gen-gen
individu tadi dibagi sebanyak iterasi yang dilakukan.
3. Kemudian hasil bagi tadi ditampung dalam variabel
fix_gen dan variabel temp_gen dikembalikan ke 0 lagi
nilainya.
4. Barulah kita gambarkan hasil tadi untuk membentuk
koordinat baru.
if(fix_gen[0]>210){
yrot-=5.0f;
30
}
elseif(fix_gen[0]<30){
yrot+=5.0f;
}
elseif(fix_gen[1]<50){
xpos -= (float)sin(yrot*piover180) * 0.1f;
zpos -= (float)cos(yrot*piover180) * 0.1f;
}
Penjelasan program di atas sebagai berikut :
x
0 360
xi,yi
y
240
31
Peta dalam OpenGL dapat dibuat secara 2D atau 3D.
Pada game labyrinth ini peta yang dibuat adalah peta dalam
2D. Berikut program untuk membuat peta:
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -0.1f);
glBindTexture(GL_TEXTURE_2D, texture[71]);
glBegin(GL_QUADS);
glVertex3f(-0.049f, 0.006f, 0.0f);//1
glVertex3f( -0.0455f, 0.006f, 0.0f);
glVertex3f( -0.0455f, 0.0065f, 0.0f);
glVertex3f(-0.049f, 0.0065f, 0.0f);
glEnd();
glLoadIdentity();
glTranslatef(gerakpanahx, gerakpanahy, -
0.1f);
glRotatef(panahrot, 0.0f, 0.0f, 1.0f);
glBindTexture(GL_TEXTURE_2D, texture[103]);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-
0.0001f, 0.001f, 0.0f);//7
glTexCoord2f(1.0f, 0.0f); glVertex3f(
0.0001f, 0.001f, 0.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(
0.0008f, -0.001f, 0.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-
0.0008f, -0.001f, 0.0f);
glEnd();
Penjelasan program di atas sebagai berikut:
1. Program membuat kotak-kotak/persegi dengan
koordinat z = -0.1.
2. Kotak-kotak tersebut akan disusun sehingga
menyusun suatu peta.
3. Kemudian program membuat suatu segitiga
sebagai pengganti karakter pada peta yang
menunjukkan pergerakan.
4. glTranslatef men-translasi pada koordinat x dan
y dengan variabel gerakpanahx dan
gerakpanahy. Variabel tersebut dapat berubah
nilainya.
32
5. glRotate berfungsi untuk merotasi karakter,
karena nilai 1 diisi pada koordinat z, maka
karakter berotasi terhadap sumbu z.
Image *image1;
image1 = (Image *) malloc(sizeof(Image));
if (image1 == NULL) {
printf("Error allocating space for
image");
exit(0);
}
if (!
ImageLoad("/Users/wais/Desktop/labyrinth
buat progres/labyrinth/lantai1.bmp",
image1)) {
exit(1);
}
glGenTextures(1, &texture[0]);
33
glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG
_FILTER,GL_NEAREST); // scale cheaply when
image bigger than texture
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN
_FILTER,GL_NEAREST); // scale cheaply when
image smalled than texture
glTexImage2D(GL_TEXTURE_2D, 0, 3, image1-
>sizeX, image1->sizeY, 0, GL_RGB,
GL_UNSIGNED_BYTE, image1->data);
glClear(GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT);
glBindTexture(GL_TEXTURE_2D, texture[1]);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-0.5f,
0.0f, -2.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f( 0.5f,
0.0f, -2.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 0.5f,
0.3f, -2.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-0.5f,
0.3f, -2.0f);
glEnd();
Penjelasan program di atas sebagai berikut :
1. Awalnya program mengalokasikan memori.
2. Kemudian mengambil alamat gambar tersebut,
dan selanjutnya membuat tekstur ke dalam 2D.
3. Kemudian program mengatur gambar jika
gambar lebih besar atau lebih kecil dari tekstur,
maka gambar dibuat agar pas dengan tekstur.
4. Selanjutnya program melakukan clear screen
dan depth buffer.
5. Kemudian memasang teksture pada bidang
tembok. Tekstur yang digunakan diambil dari
gambar berformat bitmap.
6. glVertex3f merupakan koordinat letak gambar
tembok pada labyrinth, sedangkan
glTexCoord2f merupakan koordinat 4 titik
sudut pada persegi. Penentuan 4 titik tersebut
harus tepat dan bersambungan, agar pada saat
34
tekstur digambarkan pada bidang tembok,
gambar tekstur tidak terbalik.
GLvoid pertanyaan19(void)
{
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -0.11f);
if (w2==0){
xper2=rand()%1;
w2=1;
//printf("%d\n",xper);
}
hasilp2=xper2+97;
glBindTexture(GL_TEXTURE_2D,
texture[hasilp2]);
glBegin(GL_QUADS);
35
glTexCoord2f(0.0f, 0.0f); glVertex3f(-0.05f,
-0.025f, 0.0f);//1
glTexCoord2f(1.0f, 0.0f); glVertex3f( 0.05f,
-0.025f, 0.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 0.05f,
0.025f, 0.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-0.05f,
0.025f, 0.0f);
glEnd();
}
if
(((xpos2>=8.399998f)&&(xpos2<=8.499998f))&&((zpos2
>=-21.400036f)&&(zpos2<=-
20.500032f))&&(pertanyaanlevel2==1)) {
pertanyaan19();
}
if
(((xpos2>=8.399998f)&&(xpos2<=8.499998f))&&((zpos2
>=-21.400036f)&&(zpos2<=-
20.500032f))&&(kiriper2==1)) {
xper2++;
if(xper2>1)
xper2=0;
pertanyaan19();
kiriper2=0;
}
if
(((xpos2>=8.399998f)&&(xpos2<=8.499998f))&&((zpos2
>=-21.400036f)&&(zpos2<=-
20.500032f))&&(kananper2==1)) {
pertanyaanlevel2=0;
xpos2=8.399997f;
//gerakpanahx2=-0.0422f;
kananper2=0;
}
Penjelasan program di atas sebagai berikut:
1. Program membuat suatu tampilan persegi, dengan
menampilkan texture gambar berformat bitmap,
dengan texture gambar yang ditampilkan tersebut
diacak, dari 3 gambar yang diacak akan
ditampilkan satu.
36
2. Kemudian, jika player sampai pada koordinat
tertentu misalnya pada program 8,5>xpos2>=8,4
dan -20,5>zpos2>-21,4, maka pertanyaan
ditampilkan.
3. Player harus menjawab pertanyaan untuk
melanjutkan permainan, ketika player menjawab
jawaban yang benar, maka pertanyaan menghilang
dan permainan dilanjutkan. Ketika player
menjawab pertanyaan yang salah maka program
kembali menampilkan pertanyaan tersebut yang
sudah diacak kembali.
Image *image2;
37
}
glGenTextures(1, &texture[4]);
glBindTexture(GL_TEXTURE_2D, texture[4]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTE
R,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTE
R,GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, 3, image2-
>sizeX, image2->sizeY, 0, GL_RGB,
GL_UNSIGNED_BYTE, image2->data);
sec_now=clock()/1250000;
if(sec_last!=sec_now){
if(batasdetik==0){
batasdetik=60;
menit--;
}
batasdetik--;
sec_last=sec_now;
}
char timeSTR[10],menitSTR[10];
sprintf(menitSTR,"%d",menit);
sprintf(timeSTR,"%d",batasdetik);
38
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -0.11f);
bitmap_output(0.02f,0.04f,0.0f, "TIME :
",GLUT_BITMAP_TIMES_ROMAN_24);
bitmap_output(0.037f,0.04f,0.0f, " :
",GLUT_BITMAP_TIMES_ROMAN_24);
bitmap_output(0.04f,0.04f,0.0f,
timeSTR,GLUT_BITMAP_TIMES_ROMAN_24);
bitmap_output(0.035f,0.04f,0.0f,
menitSTR,GLUT_BITMAP_TIMES_ROMAN_24);
Penjelasannya sebagai berikut :
1. Program awalnya memanggil fungsi clock() dari
library “time.h”. Kemudian meyimpannya dalam
variabel, karena fungsi clock() berjalan ketika
program dijalankan dan tidak akan berhenti sampai
program berhenti.
2. clock()/1250000 artinya waktu yang berjalan
dijadikan detik. Karena jika tidak dibagi 1250000,
waktu yang berjalan berformat mikro detik.
3. Kemudian program menyiapkan variabel
batasdetik dan menit, batasdetik mempunyai nilai
60 dan menit mempunyai nilai 9. Kedua variabel
tersebut akan berkurang seiring dengan
bertambahnya detik di fungsi clock().
4. Kemudian program menampilkannya dalam game
labyrinth. Dengan fungsi bitmap_output. Karena
fungsi itu hanya bisa membaca variabel bertipe
char, dan variabel batasdetik dan menit bertipe
integer, maka perlu dilakukan perubahan terlebih
dahulu menggunakan sprintf.
A B
39
Gambar 3.13. Ilustrasi collision
if(((zpos2<=-11.79f)&&(zpos2>=-
11.90f))&&((xpos2<=9.5f)&&(xpos2>=8.4f)))
zpos2=-11.90f;
if(fix_gen[0]>200){
yrot-=5.0f;
}
if(fix_gen[0]<40){
yrot+=5.0f;
}
if(fix_gen[1]<58){
xpos -= (float)sin(yrot*piover180) * 0.1f;
zpos -= (float)cos(yrot*piover180) * 0.1f;
}
switch (key) {
caseGLUT_KEY_UP:
xpos -= (float)sin(yrot*piover180) *
40
0.5f;
zpos -= (float)cos(yrot*piover180) *
0.5f;
printf("maju\n");
printf("%f %f %f\
n",xtrans,ytrans,ztrans);
break;
caseGLUT_KEY_LEFT:
yrot += 30.0f;
printf("kiri\n");
printf("%f %f %f\
n",xtrans,ytrans,ztrans);
break;
caseGLUT_KEY_RIGHT:
yrot -= 30.0f;
printf("kanan\n");
printf("%f %f %f\
n",xtrans,ytrans,ztrans);
break;
}
Penjelasan program di atas sebagai beikut :
1. Jika fix_gen[0] atau koordinat x > 200 maka
karakter berputar ke arah kanan dan objek dirotasi
terhadap sumbu negatif y.
2. Jika fix_gen[0] atau koordinat x < 40 maka
karakter berputar ke arah kiri dan objek dirotasi
terhadap sumbu positif y.
3. Jika fix_gen[1] atau koordinat y < 58 maka
karakter bergerak maju dan dilakukan translasi
sumbu x atau z berdasarkan posisi karakter.
4. Jika tombol panah atas pada keyboard ditekan
maka karakter bergerak maju dan dilakukan
translasi sumbu x atau z berdasarkan posisi
karakter.
5. Jika tombol panah kiri ditekan maka karakter
berputar ke arah kiri dan objek dirotasi terhadap
sumbu positif y.
41
6. Sebaliknya jika tombol panah kanan ditekan maka
karakter berputar ke arah kiri dan objek dirotasi
terhadap sumbu negatif y.
42
Ketika game dijalankan maka akan muncul tampilan seperti di
atas. Window yang sebelah kiri adalah tampilan dari webcam,
ketika kepala pemain bergerak ke kiri, maka karakter akan beputar
menghadap ke kiri, begitu pula jika kepala pemain bergerak ke
kanan dan maju. Window sebelah kanan merupakan menu dari
game labyrinth. Ada 5 tombol di game di atas.
1. Play
Tombol Play berfungsi untuk memulai memainkan game
labyrinth. Berikut tampilan jika tombol Play ditekan.
43
Gambar 3.17. Tampilan ketika cerita yang dipilih
Perang 10 November 1945
44
Gambar 3.19. Tampilan ketika tombol ‘h’ ditekan
45
Gambar 3.20. Tampilan pertanyaan
Pemain dapat menjawab pertanyaan dengan memilih
jawaban yang benar dengan menggerakkan kepalanya ke arah
jawaban yang akan dipilih, bisa juga menggunakan keyboard.
Kemudian setelah pemain mengikuti alur yang benar dan
menjawab semua pertanyaan dengan benar, maka pemain
akan sampai di akhir labyrinth.
46
Gambar 3.22. Tampilan pause
2. Learning
47
Tombol Learning berfungsi untuk menampilkan cerita
yang benar dari Perang 10 November 1945 dan Perang
Diponegoro.
48
Gambar 3.25. Tampilan Learning Perang 10 November 1945
3. Help
Tombol Help berfungsi untuk menampilkan bagaimana
cara bermain game labyrinth dengan benar sesuai rule.
49
Gambar 3.27. Tampilan menu Help
4. Credit
Tombol Credit berfungsi untuk menampilkan pihak mana
saja yang terlibat dalam pembuatan game labyrinth. Credit
merupakan salah satu bentuk apresiasi kepada pihak-pihak
tersebut.
5. Exit
Tombol Exit berguna untuk keluar dari aplikasi game
labyrinth.
50
melewati tembok-tembok untuk menyelesaikan labyrinth. Agar
mudah maka diberikan petunjuk lewat cerita yang ada pada
tembok. Namun pada game labyrinth ini diberikan alur cerita yang
benar dan alur cerita yang salah. Jadi untuk menyelesaikan
labyrinth, player harus mengikuti alur cerita yang benar, dan alur
cerita yang salah akan membuat player tersesat. Berikut map
labyrinth untuk Perang 10 November 1945 beserta titik-titik
dimana lokasi petunjuk-petunjuk cerita dengan alur yang benar dan
salah:
S10
K L N
J M
S6
S9
I F
H G
D E
S1 C
A B
51
B
52
E
53
H
54
K
55
N
Tabel 3.1 merupakan alur cerita yang harus dicari dan diikuti
player untuk menyelesaikan labyrinth dan menemukan EXIT.
Karena selain alur cerita yang benar juga terdapat alur cerita yang
salah, yang dapat menipu player dalam mengikuti alur cerita.
Berikut alur cerita yang salah, yang menyimpang dari alur cerita
pada tabel 3.1 yang didapat dari sumber
http://id.wikipedia.org/wiki/Jembatan_Merah,
http://id.wikipedia.org/wiki/Tugu_Pahlawan,
http://id.wikipedia.org/wiki/Kota_Surabaya,
http://www.surabaya.go.id/profilkota/ :
S1
56
S2
S3
S4
57
S5
S6
S7
58
S8
S9
S10
59
S11
S12
S13
60
S14
S15
S16
61
S17
Tabel 3.2 merupakan alur cerita yang tidak boleh diikuti oleh
player karena dapat membuat tersesat. Dalam game labyrinth di
setiap persimpangan akan diberikan alur cerita yang benar pada
tembok yang mengarah pada jalan yang benar, dan diberikan alur
cerita yang salah pada tembok yang mengarah pada jalan yang
salah.
Berikut map labyrinth untuk Perang Diponegoro beserta titik-
titik dimana lokasi petunjuk-petunjuk cerita dengan alur yang
benar dan salah:
F E
D S5
C S4
S2 B S3
A
S1
62
Gambar 3.30. Map labyrinth Perang Diponegoro
63
D
64
Tabel 3.3 merupakan alur cerita yang harus dicari dan diikuti
player untuk menyelesaikan labyrinth dan menemukan EXIT.
Karena selain alur cerita yang benar juga terdapat alur cerita yang
salah, yang dapat menipu player dalam mengikuti alur cerita.
Berikut alur cerita yang salah, yang menyimpang dari alur cerita
pada tabel 3.3 yang didapat dari sumber
http://id.wikipedia.org/wiki/Perang_Padri :
S1
S2
65
S3
S4
S5
66
Tabel 3.4 merupakan alur cerita yang tidak boleh diikuti oleh
player karena dapat membuat tersesat. Dalam game labyrinth di
setiap persimpangan akan diberikan alur cerita yang benar pada
tembok yang mengarah pada jalan yang benar, dan diberikan alur
cerita yang salah pada tembok yang mengarah pada jalan yang
salah.
BAB IV
PENGUJIAN DAN ANALISA SISTEM
Pada bab IV ini akan membahas sistem kerja, pengujian, dan juga
analisa dari rancang bangun sistem ini. Disini juga disajikan hasil uji
coba secara nyata percobaan dengan kondisi yang berbeda-beda.
67
Pada proyek akhir ini program akan menampilkan 2 gambar
dari kamera. Yang pertama gambar dengan nilai rgb, yang kedua
adalah gambar dengan hasil segmentasi warna. Segmentasi warna
harus dilakukan terlebih dahulu sebelum proses pencarian posisi
kepala player dilakukan. Hal ini digunakan agar informasi yang
ada dalam gambar menjadi lebih sedikit sehingga waktu
komputasinya akan lebih cepat.
Tujuan dari percobaan ini adalah untuk membandingkan
intensitas cahaya pada keaddan terang, sedang dan gelap.
Dari hasil pengambilan data yang dilakukan maka hasil
segmentasi warna tersebut sangat dipengaruhi oleh terang
intensitas cahaya. Semakin terang cahaya yang mengenai kamera,
maka hasil proses segmentasi warna akan semakin terang.
NO A B KET
Intensitas
1
cahaya tinggi
Intensitas
2 cahaya
sedang
Intensitas
3 cahaya
rendah
68
merupakan capture gambar sesudah dilakukan scalp color
modeling. Dari gambar no 3, pada kolom B, tampak bahwa
terdapat banyak sekali noise. Jadi intensitas cahaya rendah sangat
tidak baik untuk dilakukan pendeteksian kepala menggunakan
SSGA. Begitu pula dengan gambar no 1 pada kolom B tampak
pada intensitas cahaya tinggi, masih terdapat noise walaupun tidak
banyak. Sedangkan gambar 2 pada kolom B dengan intensitas
cahaya sedang, kulit wajah dapat terdeteksi dengan baik. Jadi
untuk proses penentuan posisi kepala player menggunakan SSGA
digunakan intensitas cahaya sedang agar hasilnya bisa optimal.
20000 10 Individu
15000 25 Individu
10000 50 Individu
5000 100 Individu
0
0 1 2 3 4 5 6
Iterasi 69
Gambar 4.1. Grafik 5 iterasi terhadap nilai fitness
10 Individu
15000 25 Individu
10000 50 Individu
5000 100 Individu
0
0 2 4 6 8 10 12
Iterasi
70
GRAFIK 15 ITERASI TERHADAP NILAI FITNESS
35000
30000
25000
Nilai Fitness
10 Individu
20000
25 Individu
15000
50 Individu
10000
100 Individu
5000
0
0 2 4 6 8 10 12 14 16
Iterasi
Pada gambar 4.1., 4.2., 4.3, dapat dilihat bahwa nilai fitness
semakin lama semakin stabil. Hal ini membuktikan bahwa individu
dalam suatu iterasi telah menemukan posisi kepala player.
Semakin individu tersebut mendekati posisi kepala player maka
semakin bagus nilai fitnessnya. Namun dari percobaan yang telah
dilakukan individu sebanyak 10 dan iterasi sebanyak 5, sudah
mampu mendeteksi kepala player dan mengikuti kemana kepala
bergerak dengan cepat.
71
GRAFIK INDIVIDU TERHADAP WAKTU
500000
Waktu (mikrodetik)
400000
300000 5 Iterasi
200000 10 Iterasi
100000 15 Iterasi
0
10 25 50 100
Individu
72
4.3. Hasil Percobaan Gerakan Kepala Player
Setelah program dapat mendeteksi kepala player dengan baik,
kemudian dilakukan program untuk memutuskan gerakan maju,
kanan, dan kiri. Prosesnya dengan memberikan batasan nilai pada
koordinat x dan y.
Gerak ke kiri
N
GAMBAR X Y LEBAR TINGGI KET
O
2
1 97 123 117 kiri
8
2
2 54 127 128 kiri
3
Gerak
3
3 57 127 128 tidak
4
terdeteksi
Gerak
6
4 87 127 129 tidak
7
terdeteksi
73
Namun pada gambar 3 dan 4, program gagal mendeteksi gerakan,
karena koordinat tidak melewati batas dari inisialisasi awal yang
ditentukan.
Gerak ke kanan
N
GAMBAR X Y LEBAR TINGGI KET
O
21
1 91 127 127 kanan
8
23
2 70 131 131 kanan
4
Gerak
18
3 58 134 132 tidak
7
terdeteksi
Gerak
14
4 73 136 136 tidak
0
terdeteksi
74
Gerak maju
N LEBA TINGG
GAMBAR X Y KET
O R I
10 2
1 134 134 maju
5 7
3
2 96 127 132 maju
6
Gerak
5 tidak
3 76 132 132
1 terdeteks
i
Gerak
5 tidak
4 92 135 138
2 terdeteks
i
75
gerakan karakter dalam game. Gerak karakter dalam game
labyrinth ini adalah maju, kanan, dan kiri.
76
(A) Gerak karakter maju
(B) Gerak karakter ke kiri
(C) Gerak karakter ke kanan
77
4.5. Hasil Percobaan Gerakan Karakter Pada Game Dengan Latar
Belakang Yang Berbeda
Percobaan dengan latar belakang yang berbeda sangat
diperlukan, karena sangat berpengaruh pada baik atau tidaknya
mendeteksi kepala pemain. Percobaan ini dilakukan di dalam
Laboratorium Tugas Akhir IT. Pada percobaan ini, ada beberapa
kondisi latar belakang, antara lain:
Latar belakang berwarna putih
Latar belakang berwarna coklat kulit
Latar belakang berwarna campuran (putih, coklat,
hitam)
Analisa:
Kepala dapat terdeteksi
Gerakan maju, kanan, kiri dapat dilakukan
78
4.5.2. Latar Belakang Berwarna Coklat Kulit
Hasil percobaan dengan latar belakang berwarna
coklat kulit:
Analisa:
Kepala dapat terdeteksi
Gerakan maju, kanan, kiri dapat dilakukan
79
Analisa:
Kepala tidak dapat terdeteksi, karena program
terjebak pada lokal optima yang serupa
dengan kepala pemain
Gerakan maju, kanan, kiri tidak dapat
dilakukan
Kesimpulan:
Pada percobaan di atas telah dilakukan 3 macam latar
belakang yang berbeda, dan sistem game labyrinth memberikan
hasil dari 2 latar belakang dari 3 latar belakang hasil uji coba
yang dapat mendeteksi kepala.
80
4.6.1. Kondisi A
Kondisi A, lampu yang menyala 5, 6, dan 7.
1 5
2 6
3 7
4 8
Posisi
Perangkat
Sistem Lampu mati
Lampu menyala
Hasil:
Analisa :
Kepala dapat terdeteksi
Terdapat sedikit noise pada area gelap
81
Gerakan maju, kanan, dan kiri dapat
dilakukan
4.6.2. Kondisi B
Kondisi B, lampu yang menyala 2, 3, dan 4.
1 5
2 6
3 7
4 8
Posisi
Perangkat
Sistem Lampu mati
Lampu menyala
Hasil:
Analisa:
Kepala dapat terdeteksi
Terdapat noise pada area gelap
82
Gerakan maju, kanan, dan kiri dapat
dilakukan
4.6.3. Kondisi C
Kondisi C, lampu yang menyala 1 dan 8.
1 5
2 6
3 7
4 8
Posisi
Perangkat
Sistem Lampu mati
Lampu menyala
Hasil:
Analisa:
Kepala dapat terdeteksi
Terdapat noise pada area gelap
83
Gerakan maju, kanan, dan kiri dapat
dilakukan
4.6.4. Kondisi A + B
Kondisi A + B, lampu yang menyala 2, 3, 4, 5, 6, dan
7.
1 5
2 6
3 7
4 8
Posisi
Perangkat
Sistem Lampu mati
Lampu menyala
Hasil:
Analisa:
Kepala dapat terdeteksi
84
Terdapat noise pada area gelap
Gerakan maju, kanan, dan kiri dapat
dilakukan
4.6.5. Kondisi A + C
Kondisi A + C, lampu yang menyala 1, 5, 6, 7, dan 8.
1 5
2 6
3 7
4 8
Posisi
Perangkat
Sistem Lampu mati
Lampu menyala
Hasil:
Analisa:
Kepala dapat terdeteksi
Terdapat noise pada area gelap
85
Gerakan maju, kanan, dan kiri dapat
dilakukan
4.6.6. Kondisi B + C
Konsisi B + C, lampu yang menyala 1, 2, 3, 4, dan 8.
1 5
2 6
3 7
4 8
Posisi
Perangkat
Sistem Lampu mati
Lampu menyala
Hasil:
Analisa:
Kepala dapat terdeteksi
Terdapat noise pada area gelap
86
Gerakan maju, kanan, dan kiri dapat
dilakukan
4.6.7. Kondisi A + B + C
Kondisi A + B + C, semua lampu menyala.
1 5
2 6
3 7
4 8
Posisi
Perangkat
Sistem Lampu mati
Lampu menyala
Hasil:
Analisa:
Kepala dapat terdeteksi
Terdapat noise pada area gelap
87
Gerakan maju, kanan, dan kiri dapat
dilakukan
1 5
2 6
3 7
4 8
Posisi
Perangkat
Sistem Lampu mati
Lampu menyala
Hasil:
Analisa:
Kepala dapat terdeteksi namun tidak optimal
88
Terdapat banyak noise
Gerakan kanan dan kiri dapat dilakukan,
namun gerakan maju tidak dapat dilakukan
Kesimpulan:
Pada percobaan di atas telah dilakukan berbagai macam
intensitas cahaya, dan sistem game labyrinth memberikan hasil
uji coba yang sebagian besar dapat mendeteksi kepala
meskipun dengan intensitas cahaya yang rendah.
Namun intensitas cahaya rendah juga berpengaruh
terhadap deteksi gerakan, karena kamera menggunakan mode
Slow Shutter Speed untuk menangkap gambar, sehingga saat
terjadi gerakan, gambar melambat atau seolah-olah
menghilang.
89
BAB V
PENUTUP
5.1. Kesimpulan
Dari hasil uji coba program yang telah dilakukan, maka dapat
diperoleh kesimpulan bahwa:
1. Pada proses scalp color modeling, intensitas cahaya
sangat berpengaruh terhadap hasil deteksi. Hasil scalp
color modeling yang buruk menyebabkan sulitnya
individu dalam proses SSGA untuk menemukan posisi
kepala karena gangguan dari intensitas cahaya.
2. Kecepatan individu untuk menemukan dan bergerak
mengikuti kepala bergantung pada jumlah individu
yang dibangkitkan. Semakin banyak individu dan
iterasi, maka kecepatannya juga semakin lambat.
Berdasarkan hasil percobaan, dari jumlah individu
sebanyak 100 dan iterasi sebanyak 15, waktu yang
dibutuhkan adalah 472656,7 mikrodetik, sedangkan
individu sebanyak 10 dan iterasi sebanyak 5, waktu
yang dibutuhkan adalah 10109,2 mikrodetik.
3. Sedikitnya individu yang dibangkitkan menyebabkan
sulitnya individu tersebut untuk menemukan posisi
kepala, karena kurangnya referensi nilai fitness
terbesar, yang menyebabkan terjebak pada local
optima. Berdasarkan hasil percobaan, nilai fitness
minimum untuk menemukan posisi kepala adalah
1531,35.
4. Game dapat dimainkan dengan latar belakang
berwarna putih dan warna yang mirip dengan warna
kulit atau coklat dan dengan intensitas cahaya normal
dan game bekerja optimal jika jarak kamera dengan
player antara 30cm sampai 50cm.
5.2. Saran
90
1. Aplikasi game labyrinth ini dibangun pada sistem
operasi Mac OS X dan hanya bisa dimainkan oleh 1
player saja. Pada pengembangan selanjutnya
diharapkan aplikasi game labyrinth ini dapat
dimainkan oleh 2 player dan dapat berjalan pada
sistem operasi Windows.
2. Aplikasi game labyrinth ini dapat dimainkan dengan
latar belakang putih atau warna yang mirip warna kulit
atau coklat. Pada pengembangan selanjutnya
diharapkan aplikasi game labyrinth ini dapat
dimainkan pada latar belakang yang warnanya
campuran (warna putih, coklat, hitam tidak merata).
91
DAFTAR PUSTAKA
92
[11] NeHe TM, NeHeProductionsTM, “OpenGL Lessons” <URL:
http://gamedev.net>
[15] High Resolution Textures, “Stone Wall & Brick Wall Free
Textures”, <URL: http://www.highresolutiontextures.com/stone-
wall-brick-wall-free-textures>
93
[23] Wikipedia, “Perang Padri”, <URL:
http://id.wikipedia.org/wiki/Perang_Padri>
LAMPIRAN
5 Iterasi
Nilai Fitness Terbaik
10 Individu 25 Individu 50 Individu 100 Individu
1531,35 18092,7 21683,1 23614,1
1665,72 19514,9 21056,1 21645,2
1665,72 20866,2 24647,8 23070,2
1665,72 20866,2 24992,5 23070,2
1665,72 20866,2 25939,7 23070,2
10 Iterasi
Nilai Fitness Terbaik
10 Individu 25 Individu 50 Individu 100 Individu
13404,9 17619,2 16627,4 20728,5
14480,4 18548,3 17538,7 20255,3
15097,8 20377,2 17806,5 21412,4
15097,8 20720,8 19799,3 21701
15097,8 21025 20274,3 21701
16218,5 23371,3 21786,6 23387,7
16375,8 23674,3 21882 23401,1
17383,5 23690,9 22158,5 23401,1
17712,8 26575,9 22158,5 23401,1
17712,8 27530,1 22158,5 23401,1
15 Iterasi
Nilai Fitness Terbaik
94
10 Individu 25 Individu 50 Individu 100 Individu
5508,97 14278,6 19302,4 21274,9
6140,57 15215,4 19307 15276,8
7131,39 17125,9 19378,8 15276,8
7131,39 17312,6 20719,4 15276,8
7131,39 17436 21286 15276,8
7131,39 17660,9 21286 15276,8
7131,39 17886,7 21286 15276,8
7131,39 17897,5 21286 15276,8
7834,15 17986,4 23286,5 15276,8
7834,15 17986,4 23743,6 15276,8
7834,15 17986,4 26324,4 15276,8
8261,57 17986,4 26625,6 15276,8
8261,57 17986,4 28643 15276,8
8261,57 17986,4 28885,7 15276,8
8445,28 17986,4 29056,1 15276,8
95
12 100 17516,432 472656,7
BIODATA PENULIS
Riwayat Pendidikan
96