Ular Tangga

9.7 Ular Tangga

9.7.1 Konsep

Ular tangga merupakan salah satu dari sekian banyak per- mainan yang ada di Indonesia yang sering dimainkan oleh anak-anak pada awal tahun 1980-an. Ular tangga adalah permainan papan untuk anak-anak yang dimainkan wajib oleh dua orang atau lebih. Terdapat beberapa versi yang berbeda pada tiap Negara dalam memainkan permainan ini seperti,di India populer dengan nama “MOKSHA PATAMU” yang ditemukan oleh Guru spiritual Hindu Pe mainan ini disebut "Leela" - dan mencerminkan kesadaran Hindu di sekitar ke- hidupan sehari-hari

Nama lainnya adalah "Tangga Keselamatan" yang lalu dibawa ke VictoriaInggris di mana Versi barunya telah dibuat dan diperkenal- kan oleh John Jacques di tahun 1892. Lalu Masuk ke Amerika oleh seorang pembuat mainan bernama Milton Bradley di tahun 1943 yang lalu diberinama "Snakes n Ladder" yang artinya "UlarTangga".

Gambar 9.30 Ular Tangga Awal

Untuk memainkan permainan ular tangga, biasanya pemain menggunakan papan permainan yang terdiri dari kotak-kotak yang berjumlah 100, yakni 10 x 10. Tiap kotak memiliki nomor yang ber- fungsi untuk mengurutkan jalannya bidak. Pada beberapa kotak yang memiliki gambar Ular dan Tangga nantinya akan memiliki fungsi yang berbeda yang mempengaruhi jalannya suatu bidak.

9.7.2 Peraturan Permainan

Pada dasarnya, permainan ular tangga sendiri memiliki pera- turan permainan yang cukup mudah yakni setiap pemain mulai dengan bidaknya di kotak pertama(biasanya kotak sudut kiri bawah) dan secara bergiliran pemain melemparkan dadu. Setelah selesai melemparkan dadu, pemain yang melemparkan dadu harus meng- gerakkan bidaknya(searah urutan papan) sebanyak angka dadu yang muncul. Namun apabila bidak tersebut melangkah dan berhenti di ko- tak dengan kepala ular maka bidak akan secara otomatis turun ke ko- tak dimana ekor ular berada, namun ketika bidak mendarat ke kotak dengan gambar ujung bawah tangga maka pemain dapat secara otomatis menggerakkan bidak ke kotak dimana bagian atas tangga berada. Biasanya bila seorang pemain mendapatkan angka dadu sebanyak 6 maka, pemain mendapatkan giliran jalan satu kali lagi.Pemain yang terakhir kali mencapai kotak dengan nomor tertinggi akan menjadi pemenang dari permainan tersebut.

Pada game “UTARA”, kami menerapkan peraturan yang sama dengan permainan ular tangga pada umumnya, namun terdapat

perbedaan pada ukuran dan jumlah papan. Selain itu, pada game ini terdapat 2 orang pemain yang dapat memainkannya.Dalam game ini, perbedaan pada ukuran dan jumlah papan. Selain itu, pada game ini terdapat 2 orang pemain yang dapat memainkannya.Dalam game ini,

9.7.3 Nilai-Nilai Edukasi

Bidang Pendidikan di Indonesia dewasa ini pemerintah masih berusaha untuk mendapatkan formula yang terbaik dalam mendidik pelajar-pelajar di sekolah. Menurut Ginanjar (2002), pendidikan telah begitu merosot hingga pelajar terlibat dalam gangsterism, vandalisme, budaya rock, budaya metal, skinhead, narkoba, melawan guru, bahkan yang paling sering terjadi perkelahian antar pelajar. Faktanya, dalam hal komitmen kepada pendidikan dasar, Indonesia hanya mampu menduduki peringkat 10 dari 14 negara yang disurvei di ka- wasan Asia Pasifik dan skor yang dicapai Indonesia hanya 42 dari 100 skor maksimal, atau mendapat angka E. Sebagai perbandingan, Thailand dan Malaysia menduduki posisi puncak dengan nilai A, yang kemudian diikuti Srilanka dengan nilai B, sedangkan Filipina, Cina, Vietnam, Bangladesh, Kampuchea, dan India mendapat nilai antara C dan F. Indonesia lebih baik hanya jika dibandingkan dengan Nepal, Papua Nugini, Kepulauan Salomon, dan Pakistan. (Ahmad Gema, “Perbandingan Pendidikan di Asia”).

Penelitian menunjukkan bahwa pengalaman langsung dalam pembelajaran sains dimana salah satunya siswa berinteraksi secara langsung dengan material/bahan belajar dapat menjadi sarana atau memfasilitasi perkembangan kemampuan berbahasa siswa (Wellman, 1978). Kegiatan membaca dan aktivitas sains menekankan pada kemampuan berpikir dan keduanya melibatkan proses berpikir. Ketika guru membantu siswa mengembangkan keterampilan proses sains, proses membaca secara simultan juga turut dikembangkan (Mechling & Oliver, 1983 and Simon & Zimmerman, 1980). Kegiatan hands-on untuk memberikan pengalaman langsung bagi siswa dalam sains adalah kunci bagi hubungan antara keterampilan proses baik dalam sains maupun dalam kegiatan membaca (Lucas & Burlando, 1975). Pembelajaran melalui permainan mampu memberikan beberapa keuntungan. Per- tama, apa yang dipelajari oleh peserta didik tidak hanya berupa pengetahuan akal semata, melainkan benar-benar dialami secara nyata, pengalaman demikianlah yang sulit dilupakan. Kedua, pela- jaran yang diberikan dapat diterima secara menyenangkan, karena terkait dengan sifat dasar permainan yang menghibur dan menggembirakan. Dengan demikian, kemungkinan penolakan pe- Penelitian menunjukkan bahwa pengalaman langsung dalam pembelajaran sains dimana salah satunya siswa berinteraksi secara langsung dengan material/bahan belajar dapat menjadi sarana atau memfasilitasi perkembangan kemampuan berbahasa siswa (Wellman, 1978). Kegiatan membaca dan aktivitas sains menekankan pada kemampuan berpikir dan keduanya melibatkan proses berpikir. Ketika guru membantu siswa mengembangkan keterampilan proses sains, proses membaca secara simultan juga turut dikembangkan (Mechling & Oliver, 1983 and Simon & Zimmerman, 1980). Kegiatan hands-on untuk memberikan pengalaman langsung bagi siswa dalam sains adalah kunci bagi hubungan antara keterampilan proses baik dalam sains maupun dalam kegiatan membaca (Lucas & Burlando, 1975). Pembelajaran melalui permainan mampu memberikan beberapa keuntungan. Per- tama, apa yang dipelajari oleh peserta didik tidak hanya berupa pengetahuan akal semata, melainkan benar-benar dialami secara nyata, pengalaman demikianlah yang sulit dilupakan. Kedua, pela- jaran yang diberikan dapat diterima secara menyenangkan, karena terkait dengan sifat dasar permainan yang menghibur dan menggembirakan. Dengan demikian, kemungkinan penolakan pe-

9.7.4 Fitur Yang Digunakan

Dalam game “UTARA” ini, mempunyai beberapa fitur pendukung diantaranya :

 Menu Petunjuk : Berfungsi untuk menampilkan petunjuk per- mainan dalam game UTARA ini.

 Sound : Pada setiap aktifitas permainan mempunyai sound ef- fect masing-masing.

 Kartu Sejarah : Pada kotak tertentu dalam papan permainan akan ditampilkan pop up info sejarah sesuai dengan nomor tahun di kotak tersebut.

 Info Posisi : Pada ujung kanan layar permainan akan dit- ampilkan posisi pemain saat ini, sehingga baik pemain 1 maupun pemain 2 dapat mengetahui secara detail po- sisinya dan lawannya.

9.7.5 Fungsi Dasar Pembentuk Objek

Komponen pada pembangunan game “UTARA” ini meliputi berbagai fungsi dalam OpenGL antara lain GL_BindTexture untuk membuat texture tampilan gambar atau texture mappingnya. Tex- tRender untuk info posisi bidak pemain saat ini. Dan menggunakan fungsi GL_LIGHTING untuk membuat lampu objek tertentu, serta menggunakan

Tabel 9.3 Fungsi Dasar Pembentuk Objek

Keterangan Fungsi

. //Membuat papan Berfungsi untuk

gl.glPushMatrix(); membuat objek if ( popup == false && menang [0] ==

background dan false && menang [1] == false ){

papan, serta player gl.glDisable(GL10. GL_LIGHTING );

} permainan yang gl.glTranslatef(265.0f, 5.0f, 0.0f);

berupa bangun 2D. gl.glScalef(544.0f, 544.0f, 0.0f);

Selain itu, terdapat board .draw_background(gl);

if ( popup == false && menang [0] == fungsi untuk mem- false && menang [1] == false ){

buat objek dadu gl.glEnable(GL10. GL_LIGHTING );

dengan }

gl.glPopMatrix(); menggunakan bangun 3D

//membuat dadu gl.glPushMatrix();

gl.glDisable(GL10. GL_LIGHTING ); gl.glTranslatef( xDice , yDice ,- 30.0f); gl.glRotatef( yRotate , 0.0f, 1.0f, 0.0f); gl.glRotatef( xRotate , 1.0f, 0.0f, 0.0f); gl.glScalef(30.0f, 30.0f, 30.0f); dice .draw(gl); gl.glEnable(GL10. GL_LIGHTING );

gl.glPopMatrix();

//membuat player for ( int i = 0; i < player ; i++) {

gl.glPushMatrix(); if ( menang [ indexTurn ] == false ){ gl.glDisable(GL10. GL_LIGHTING ); } gl.glBlendFunc(GL10. GL_SRC_ALPHA , GL10. GL_ONE_MINUS_SRC_ALPHA ); gl.glEnable(GL10. GL_BLEND ); gl.glPushMatrix(); if ( menang [ indexTurn ] == false ){ gl.glDisable(GL10. GL_LIGHTING ); } gl.glBlendFunc(GL10. GL_SRC_ALPHA , GL10. GL_ONE_MINUS_SRC_ALPHA ); gl.glEnable(GL10. GL_BLEND );

} gl.glPopMatrix();

//fungsi untuk membuat texturepapan Untuk membuat dan dadu

texture mapping board .loadBallTexture(gl, con-

pada papan dan text , 8);

dadu, serta bidak dice .loadTexture(gl, context );

glEnable(GL_TEXTURE_2D); pemain permainan ular tangga

//fungsi untuk membuat texture UTARA . player

for ( int i = 0; i < player ; i++) { primobplay- er [i].loadBallTexture(gl, con- text , i*7);}

//fungsi untuk membuat object re- start dengan index texture 0 restart- Menu .loadBallTexture(gl, con- text , 0);

//contoh fungsi pemberian texture pada bidak dan papan permainan gl.glBindTexture(GL10. GL_TEXT URE_2D , textures_indek [0]);

. //fungsi untuk menggunakan fitur

light pada objek Memberi fitur light atau lampu pada

gl.glEnable(GL10. GL_LIGHTING ); objek tertentu yang gl.glEnable(GL10. GL_LIGHT0 );

. menggunakan fitur .

ini.

Menambahkan //inisialisasi Music halaman awal @Override Scoring/sound ef- protectedvoid onResume() {

fect pada permainan super .onResume();

Music.play( this , R.raw. chocobo ); } //inisialisasi Music per- mainan@Override protectedvoid onResume() {

super .onResume(); Music.play( this , R.raw. medley8bit ); glSurfaceView .onResume(); }

9.7.6 Tampilan Implementasi

OpenGL dalam pembuatan game ular tangga sejarah “UTARA” ini dapat digunakan untuk mengimplementasikan texture mapping, lighting, serta sounddengan menampilkan permainan ular tangga yang interaktif yang menampilkan informasi seputar sejarah Indonesia mulai tahun 1945 – sekarang. Dengan tampilan dan permainan yang mudah dipahami, maka sangat mudah informasi sejarah Indonesia tersebut dapat tersampaikan kepada para user.

Gambar 9.31 Tampilan Awal Untuk Memulai Game

Gambar 9.32 Tampilan Menu Utama

Gambar 9.33 Tampilan Petunjuk Permainan

Gambar 9.34 Tampilan Permainan Ular Tangga Sejarah

Gambar 9.35 Tampilan Menang

9.7.7 Source Code

Source Code 9.7 Code Ular Tangga

/*ESRender.java*/

package com.example.utara;

import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10;

import android.content.Context; import android.opengl.GLSurfaceView.Renderer;

public class ESRender implements Renderer {

private ESText glText; private PrimitivesObject primobbg; private PrimitivesObject board;

private PrimitivesObject mainMenu; private PrimitivesObject restartMenu; private PrimitivesObject primob1; private PrimitivesObject primob3; private PrimitivesObject[] primob = new

PrimitivesObject[13]; PrimitivesObject[13];

PrimitivesObject[player]; private int[] letak_peristiwa = {4, 11, 14, 17,

private int[] letak_tangga = {13, 18, 23, 38,

47}; private int[] letak_ular = {12, 28, 44, 59, 63};

private boolean ular = false; private boolean tangga = false;

private PrimitivesObject[] menangPopup = new PrimitivesObject[player];

private PrimitivesObject[] konfirmasi = new PrimitivesObject[2]; private kaki_meja dice; private int diceMode = 0; private int[] mataDadu = {1, 2, 3, 4, 5, 6}; private PrimitivesObject[] dadu = new

PrimitivesObject[mataDadu.length]; private float stepXDice = 10.0f; private float stepYDice = 10.0f; private float xDice = 936.0f; private float yDice = 150.0f; private float xRotate = 0; private float yRotate = 0;

private int prevIdTurn =0; private int indexTurn = 0; private int[] posisi = new int[player]; private float[] xPlayer = new float[player]; private float[] yPlayer = new float[player]; private float[] xScale = new float[player]; private float[] stepMode = new float[player]; int[] maju = new int[player]; int majuTemp = 0;

private int[] numIDFrame = new int [player]; private boolean[] menang = {false, false};

boolean diceStop = false; boolean mundur = false; boolean popup = false; boolean restart = false; boolean petunjuk = false;

private float xStep = 2.0f; private float yStep = 2.0f;

Context context;

int xMin, xMax, yMin, yMax; private int mywidth = 0; private int myheight = 0; boolean get_size_screen=true; int[] textures_indek = new int[1]; int xMin, xMax, yMin, yMax; private int mywidth = 0; private int myheight = 0; boolean get_size_screen=true; int[] textures_indek = new int[1];

float cyan[] = new float[] { 0.0f, 1.0f, 1.0f, 1.0f }; float white[] = new float[] { 1.0f, 1.0f, 1.0f, 1.0f };

float diffuseMaterial[] = new float[] { 0.73f, 0.13f, 0.86f, 1.0f }; // set cahaya warna ungu

float diffuseMaterial2[] = new float[] { 0.5f, 0.5f, 0.5f, 1.0f }; // set cahaya warna ungu float lightAmbient[] = new float[] { 0.2f, 0.3f, 0.6f, 1.0f };

float mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; float light_position[] = { 0.0f, 0.0f, 1.0f, 0.0f };

float light_position2[] = { 0.0f, 0.0f, 1.0f, 0.0f }; private float x_lebar_layar; private float y_tinggi_layar; private long fpsStartTime2; private float x_touch; private float y_touch;

/** Constructor to set the handed over context */ public ESRender(Context context) {

//super(); this.context = context; this.primobbg = new PrimitivesObject(); this.board = new PrimitivesObject(); this.mainMenu = new PrimitivesObject(); this.restartMenu = new

PrimitivesObject(); this.primob1 = new PrimitivesObject(); this.primob3 = new PrimitivesObject(); for(int i = 0; i < 2; i++) {

konfirmasi[i] = new PrimitivesObject(); } for(int i = 0; i < 13; i++) {

this.primob[i] = new PrimitivesObject(); } dice = new kaki_meja(context); indexTurn = 0;

int counter = 0; for(int i = 0; i < player; i++) {

menangPopup[i] = new PrimitivesObject(); primobflappy[i] = new PrimitivesObject();

posisi[i] = 1; xPlayer[i] = 0; yPlayer[i] = 0; xScale[i] = 40; posisi[i] = 1; xPlayer[i] = 0; yPlayer[i] = 0; xScale[i] = 40;

for(int i = 0; i < mataDadu.length; i++) { dadu[i] = new PrimitivesObject(); } }

@Override public void onDrawFrame(GL10 gl) {

// Draw background color gl.glClear(GL10.GL_COLOR_BUFFER_BIT |

GL10.GL_DEPTH_BUFFER_BIT); // gl.glClear(GL10.GL_COLOR_BUFFER_BIT); gl.glEnable(GL10.GL_DEPTH_TEST); gl.glEnable(GL10.GL_NORMALIZE);

// menangkap ukuran layar if(get_size_screen){

this.x_lebar_layar = mywidth; this.y_tinggi_layar = myheight; get_size_screen=false;

gl.glMaterialfv(GL10.GL_FRONT,

GL10.GL_SPECULAR, black, 0);

gl.glMaterialfv(GL10.GL_FRONT,

GL10.GL_SHININESS, black, 0);

gl.glMaterialfv(GL10.GL_FRONT,

GL10.GL_DIFFUSE, black, 0);

if(maju[indexTurn] == 0 && posisi[indexTurn] == 64) { stepMode[indexTurn] = 4; menang[indexTurn] = true;

//Membuat popup pesan menang if(menang[0] == true) {

gl.glPushMatrix();

gl.glDisable(GL10.GL_LIGHTING); gl.glTranslatef(240.0f, 70.0f, -62.0f); gl.glScalef(600.0f, 400.0f, 0.0f);

menangPopup[0].draw_background(gl);

gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix(); } else if(menang[1] == true) {

gl.glPushMatrix(); gl.glPushMatrix();

menangPopup[1].draw_background(gl);

gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix(); }

if(petunjuk == true) { gl.glPushMatrix();

gl.glDisable(GL10.GL_LIGHTING); gl.glTranslatef(240.0f, 70.0f, -63.0f); gl.glScalef(600.0f, 400.0f, 0.0f);

konfirmasi[0].draw_background(gl);

gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix(); } else if(restart == true) {

gl.glPushMatrix();

gl.glDisable(GL10.GL_LIGHTING); gl.glTranslatef(240.0f, 70.0f, -63.0f); gl.glScalef(600.0f, 400.0f, 0.0f);

konfirmasi[1].draw_background(gl);

gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix(); }

if(maju[indexTurn] != 0 && posisi[indexTurn] == 64 && mundur == false) { xPlayer[indexTurn] = 0; stepMode[indexTurn] = 2; mundur = true;

//Menghitung pergerakan pemain if(maju[indexTurn] != 0 && mundur == false) {

if(stepMode[indexTurn] == 0) { xPlayer[indexTurn] += xStep; if(xPlayer[indexTurn]%64 == 0) {

maju[indexTurn]--; posisi[indexTurn]++;

} if(xPlayer[indexTurn] >= 448) {

stepMode[indexTurn] = 1; stepMode[indexTurn] = 1;

} else if(stepMode[indexTurn] == 1) { yPlayer[indexTurn] += yStep; if(yPlayer[indexTurn]%64 == 0) {

stepMode[indexTurn] = 2; maju[indexTurn]--; posisi[indexTurn]++;

} else if(stepMode[indexTurn] == 2) { xPlayer[indexTurn] -= xStep; xPlayer[indexTurn] -= 40.0f; if(xPlayer[indexTurn]%64 == 0) {

maju[indexTurn]--; posisi[indexTurn]++;

} if(xPlayer[indexTurn] <= 0 &&

posisi[indexTurn] != 64) { stepMode[indexTurn] = 3; xScale[indexTurn] = -

xScale[indexTurn]; xPlayer[indexTurn] = -40; } xPlayer[indexTurn] += 40;

} else if(stepMode[indexTurn] == 3) { xPlayer[indexTurn] = 0.0f; yPlayer[indexTurn] += yStep; if(yPlayer[indexTurn]%64 == 0) {

stepMode[indexTurn] = 0; maju[indexTurn]--; posisi[indexTurn]++;

} } } else if(maju[indexTurn] != 0 && mundur == true) {

xPlayer[indexTurn] += xStep; if(xPlayer[indexTurn]%64 == 0) {

maju[indexTurn]--; posisi[indexTurn]--;

} } else { mundur = false; }

checkUlarTangga();

//Membuat popup deskripsi if(diceMode == 2 && popup == true) {

switch(posisi[indexTurn]) { case 4:

gl.glPushMatrix();

gl.glDisable(GL10.GL_LIGHTING); gl.glDisable(GL10.GL_LIGHTING);

gl.glScalef(800.0f, 490.0f, 0.0f);

primob[0].draw_background(gl);

gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix(); break;

case 11: gl.glPushMatrix();

gl.glDisable(GL10.GL_LIGHTING);

gl.glTranslatef(240.0f, 31.0f, -61.0f);

gl.glScalef(800.0f, 490.0f, 0.0f);

primob[1].draw_background(gl);

gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix(); break;

case 14: gl.glPushMatrix();

gl.glDisable(GL10.GL_LIGHTING);

gl.glTranslatef(240.0f, 31.0f, -61.0f);

gl.glScalef(800.0f, 490.0f, 0.0f);

primob[2].draw_background(gl);

gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix(); break;

case 17: gl.glPushMatrix();

gl.glDisable(GL10.GL_LIGHTING);

gl.glTranslatef(240.0f, 31.0f, -61.0f);

gl.glScalef(800.0f, 490.0f, 0.0f);

primob[3].draw_background(gl);

gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix(); break;

case 21: gl.glPushMatrix();

gl.glDisable(GL10.GL_LIGHTING);

gl.glTranslatef(240.0f, 31.0f, -61.0f); gl.glTranslatef(240.0f, 31.0f, -61.0f);

primob[4].draw_background(gl);

gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix(); break;

case 22: gl.glPushMatrix();

gl.glDisable(GL10.GL_LIGHTING);

gl.glTranslatef(240.0f, 31.0f, -61.0f);

gl.glScalef(800.0f, 490.0f, 0.0f);

primob[5].draw_background(gl);

gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix(); break;

case 26: gl.glPushMatrix();

gl.glDisable(GL10.GL_LIGHTING);

gl.glTranslatef(240.0f, 31.0f, -61.0f);

gl.glScalef(800.0f, 490.0f, 0.0f);

primob[6].draw_background(gl);

gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix(); break;

case 32: gl.glPushMatrix();

gl.glDisable(GL10.GL_LIGHTING);

gl.glTranslatef(240.0f, 31.0f, -61.0f);

gl.glScalef(800.0f, 490.0f, 0.0f);

primob[7].draw_background(gl);

gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix(); break;

case 35: gl.glPushMatrix();

gl.glDisable(GL10.GL_LIGHTING);

gl.glTranslatef(240.0f, 31.0f, -61.0f);

gl.glScalef(800.0f, 490.0f, 0.0f);

primob[8].draw_background(gl); primob[8].draw_background(gl);

case 40: gl.glPushMatrix();

gl.glDisable(GL10.GL_LIGHTING);

gl.glTranslatef(240.0f, 31.0f, -61.0f);

gl.glScalef(800.0f, 490.0f, 0.0f);

primob[9].draw_background(gl);

gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix(); break;

case 53: gl.glPushMatrix();

gl.glDisable(GL10.GL_LIGHTING);

gl.glTranslatef(240.0f, 31.0f, -61.0f);

gl.glScalef(800.0f, 490.0f, 0.0f);

primob[10].draw_background(gl);

gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix(); break;

case 59: gl.glPushMatrix();

gl.glDisable(GL10.GL_LIGHTING);

gl.glTranslatef(240.0f, 31.0f, -61.0f);

gl.glScalef(800.0f, 490.0f, 0.0f);

primob[11].draw_background(gl);

gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix(); break;

default: gl.glPushMatrix();

gl.glDisable(GL10.GL_LIGHTING);

gl.glTranslatef(240.0f, 31.0f, -61.0f);

gl.glScalef(800.0f, 490.0f, 0.0f);

primob[12].draw_background(gl);

gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix(); gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix();

//Dadu if(diceMode == 0 && menang[0] == false &&

menang[1] == false) {

if(prevIdTurn != indexTurn) { xDice = 936.0f; yDice = 150.0f; xRotate = 0.0f;

yRotate = 0.0f; prevIdTurn = indexTurn; }

} else if(diceMode == 1) { if(diceStop == false) { xRotate += stepXDice; yRotate += stepYDice; counter++;

} else { maju[indexTurn] = (counter%6)+1; majuTemp = maju[indexTurn]; diceMode = 2;

} } else if(diceMode == 2) { switch(majuTemp) { case 1: gl.glPushMatrix();

if(menang[indexTurn] == false) {

gl.glDisable(GL10.GL_LIGHTING);

gl.glTranslatef(xDice-30, yDice-30, -30.0f);

gl.glScalef(60.0f, 60.0f, 0.0f);

dadu[0].draw_background(gl);

if(menang[indexTurn] == false) {

gl.glEnable(GL10.GL_LIGHTING); } gl.glPopMatrix(); break;

case 2: gl.glPushMatrix();

if(menang[indexTurn] == false) {

gl.glDisable(GL10.GL_LIGHTING);

gl.glTranslatef(xDice-30, yDice-30, -30.0f);

gl.glScalef(60.0f, 60.0f, 0.0f); gl.glScalef(60.0f, 60.0f, 0.0f);

if(menang[indexTurn] == false) {

gl.glEnable(GL10.GL_LIGHTING); } gl.glPopMatrix(); break;

case 3: gl.glPushMatrix();

if(menang[indexTurn] == false) {

gl.glDisable(GL10.GL_LIGHTING);

gl.glTranslatef(xDice-30, yDice-30, -30.0f);

gl.glScalef(60.0f, 60.0f, 0.0f);

dadu[2].draw_background(gl);

if(menang[indexTurn] == false) {

gl.glEnable(GL10.GL_LIGHTING); } gl.glPopMatrix(); break;

case 4: gl.glPushMatrix();

if(menang[indexTurn] == false) {

gl.glDisable(GL10.GL_LIGHTING);

gl.glTranslatef(xDice-30, yDice-30, -30.0f);

gl.glScalef(60.0f, 60.0f, 0.0f);

dadu[3].draw_background(gl);

if(menang[indexTurn] == false) {

gl.glEnable(GL10.GL_LIGHTING); } gl.glPopMatrix(); break;

case 5: gl.glPushMatrix();

if(menang[indexTurn] == false) {

gl.glDisable(GL10.GL_LIGHTING);

gl.glTranslatef(xDice-30, yDice-30, -30.0f);

gl.glScalef(60.0f, 60.0f, 0.0f); gl.glScalef(60.0f, 60.0f, 0.0f);

if(menang[indexTurn] == false) {

gl.glEnable(GL10.GL_LIGHTING); } gl.glPopMatrix(); break;

default: gl.glPushMatrix();

if(menang[indexTurn] == false) {

gl.glDisable(GL10.GL_LIGHTING);

gl.glTranslatef(xDice-30, yDice-30, -30.0f);

gl.glScalef(60.0f, 60.0f, 0.0f);

dadu[5].draw_background(gl);

if(menang[indexTurn] == false) {

gl.glEnable(GL10.GL_LIGHTING); } gl.glPopMatrix(); break;

} diceStop = false; }

if(diceMode != 2) { gl.glPushMatrix();

gl.glDisable(GL10.GL_LIGHTING);

gl.glTranslatef(xDice, yDice, -30.0f);

gl.glRotatef(yRotate, 0.0f, 1.0f, 0.0f);

gl.glRotatef(xRotate, 1.0f, 0.0f, 0.0f); gl.glScalef(30.0f, 30.0f, 30.0f); dice.draw(gl);

gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix(); }

//Menghitung index frame karakter player long fpsElapsed2 = System.currentTimeMillis() - fpsStartTime2;

if (fpsElapsed2 > 0.09 * 1000) { // every 5 seconds fpsStartTime2 = System.currentTimeMillis(); if (fpsElapsed2 > 0.09 * 1000) { // every 5 seconds fpsStartTime2 = System.currentTimeMillis();

if(numIDFrame[indexTurn] == (indexTurn+1)*7){ numIDFrame[indexTurn] = indexTurn*7; } }

//Menentukan popup if(diceMode == 2 && maju[indexTurn] == 0) { for(int i = 0; i < letak_peristiwa.length; i++) { if(posisi[indexTurn] == letak_peristiwa[i]) { popup = true;

//Membuat background gl.glPushMatrix(); if(diceMode != 2) {

gl.glDisable(GL10.GL_LIGHTING); } gl.glScalef(x_lebar_layar, y_tinggi_layar, 1.0f);

primobbg.draw_background(gl); if(diceMode != 2) { gl.glEnable(GL10.GL_LIGHTING); } gl.glPopMatrix();

//Membuat papan gl.glPushMatrix();

if(popup == false && menang[0] == false && menang[1] == false) {

gl.glDisable(GL10.GL_LIGHTING);

gl.glTranslatef(265.0f, 5.0f, 0.0f); gl.glScalef(544.0f, 544.0f, 0.0f);

board.draw_background(gl); if(popup == false && menang[0] == false && menang[1] == false) {

gl.glEnable(GL10.GL_LIGHTING);

gl.glPopMatrix();

//Membuat tombol main menu //Membuat tombol main menu

mainMenu.draw_background(gl); if(menang[indexTurn] == false) {

gl.glEnable(GL10.GL_LIGHTING); } gl.glPopMatrix();

//Membuat tombol restart gl.glPushMatrix(); if(menang[indexTurn] == false) { gl.glDisable(GL10.GL_LIGHTING); } gl.glTranslatef(50.0f, 172.0f, -61.0f); gl.glScalef(178.0f, 62.0f, 0.0f);

restartMenu.draw_background(gl); if(menang[indexTurn] == false) {

gl.glEnable(GL10.GL_LIGHTING); } gl.glPopMatrix();

//Membuat tombol end turn gl.glPushMatrix(); if(diceMode == 2 && maju[indexTurn] == 0 && menang[indexTurn] == false) { gl.glDisable(GL10.GL_LIGHTING); } gl.glTranslatef(64.0f, 10.0f, - 61.0f); gl.glScalef(150.0f, 150.0f, 0.0f); primob1.draw_background(gl); if(diceMode == 2 &&

maju[indexTurn] == 0 && menang[indexTurn] == false) {

gl.glEnable(GL10.GL_LIGHTING); } gl.glPopMatrix();

//Membuat player for(int i = 0; i < player; i++) { gl.glPushMatrix();

if(menang[indexTurn] == false) {

gl.glDisable(GL10.GL_LIGHTING); }

gl.glBlendFunc(GL10.GL_SRC_ALPHA,

GL10.GL_ONE_MINUS_SRC_ALPHA);

gl.glEnable(GL10.GL_BLEND);

gl.glTranslatef(xPlayer[i]+290, yPlayer[i]+30, - 2.0f); gl.glScalef(xScale[i], 40.0f, 1.0f);

primobflappy[i].loadBallTexture2(gl, context, numIDFrame[i]);

primobflappy[i].draw_background(gl);

gl.glDisable(GL10.GL_BLEND); if(menang[indexTurn] == false) {

gl.glEnable(GL10.GL_LIGHTING); } gl.glPopMatrix();

moveWithCollisionDetection(this);

if(popup == false) { // render text gl.glPushMatrix();

gl.glDisable(GL10.GL_LIGHTING);

gl.glEnable(GL10.GL_TEXTURE_2D); // Enable Texture Mapping

gl.glEnable(GL10.GL_BLEND); // Enable Alpha Blend

gl.glDisable(GL10.GL_DEPTH_TEST); // Turn depth testing off (NEW)

gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

// glText.begin(1.0f, 0.0f, 0.0f, 1.0f); //

glText.draw("Posisi Touch : (" + x_touch + "," + y_touch + ")", 50, 360); //

glText.end(); // //

gl.glLoadIdentity(); // //

glText.begin(1.0f, 0.0f, 0.0f, 1.0f); //

glText.draw("Ukuran Layar : (" + x_lebar_layar + "," + y_tinggi_layar + ")",

glText.end();

// //

gl.glLoadIdentity();

glText.begin(1.0f, 0.0f, 0.0f, 1.0f);

glText.draw((posisi[0]+1944) + " " + (posisi[1]+1944), 927, 460); glText.end();

gl.glLoadIdentity();

gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix(); }

public void checkUlarTangga() { if(ular == false && tangga == false && maju[indexTurn] == 0) { for(int i = 0; i < letak_ular.length; i ++) { if(posisi[indexTurn] == letak_ular[i]) { ular = true;

} for(int i = 0; i <

letak_tangga.length; i ++) { if(posisi[indexTurn] == letak_tangga[i]) { tangga = true;

} } else if(ular == true) { switch(posisi[indexTurn]) { case 12: xScale[indexTurn] = -xScale[indexTurn]; xPlayer[indexTurn] = 320; yPlayer[indexTurn] = 0; posisi[indexTurn] = 6; stepMode[indexTurn] = 0; break; case 28: xScale[indexTurn] = -xScale[indexTurn]; xPlayer[indexTurn] = 448; yPlayer[indexTurn] = 128; posisi[indexTurn] = 24; stepMode[indexTurn] = 0;

break; case 44: xPlayer[indexTurn] = 232; yPlayer[indexTurn] = 192; posisi[indexTurn] = 29; break; case 59: xScale[indexTurn] = -xScale[indexTurn]; xPlayer[indexTurn] = 256; yPlayer[indexTurn] = 384; posisi[indexTurn] = 53; stepMode[indexTurn] = 0; break; case 63: xScale[indexTurn] = -xScale[indexTurn]; xPlayer[indexTurn] = 128; yPlayer[indexTurn] = 128; posisi[indexTurn] = 19; stepMode[indexTurn] = 0; break; } ular = false;

} else if(tangga == true) { //

private int[] letak_tangga = {13,

18, 23, 38, 47}; switch(posisi[indexTurn]) { case 13: xScale[indexTurn] = -xScale[indexTurn]; xPlayer[indexTurn] = 192; yPlayer[indexTurn] = 128; posisi[indexTurn] = 20; stepMode[indexTurn] = 0; break; case 18: xPlayer[indexTurn] = 192; yPlayer[indexTurn] = 384; posisi[indexTurn] = 52; break;

case 23: xPlayer[indexTurn] = 256; yPlayer[indexTurn] = 256; posisi[indexTurn] = 37; break; case 38: xScale[indexTurn] = -xScale[indexTurn]; xPlayer[indexTurn] = 488; yPlayer[indexTurn] = 448; posisi[indexTurn] = 53; stepMode[indexTurn] = 2; break; case 47: xScale[indexTurn] = -xScale[indexTurn]; xPlayer[indexTurn] = 0; yPlayer[indexTurn] = 384; posisi[indexTurn] = 49; stepMode[indexTurn] = 0; break; } tangga = false;

public Context getContext() { return context; }

public void resetDice() { this.xRotate = 0; this.yRotate = 0;

public void setStepMode(int index, int param) {

this.stepMode[index] = param;

public void setMaju(int index, int param) { this.maju[indexTurn] = param;

public void setMenang(boolean menang) { for(int i = 0; i < player; i++) { this.menang[i] = menang; } } public void setMenang(boolean menang) { for(int i = 0; i < player; i++) { this.menang[i] = menang; } }

public void setMenang(int index, boolean param) { this.menang[index] = param; }

public void setXPlayer(int index, float param) {

this.xPlayer[index] = param;

public void setYPlayer(int index, float param) {

this.yPlayer[index] = param;

public void setXScale(int index, float param) { this.xScale[index] = param; }

public void setPosisi(int index, int param) {

this.posisi[index] = param; }

public int getMaju() { return maju[indexTurn]; }

public void setPopup(boolean popup) { this.popup = popup; }

public int getIndexTurn() { return indexTurn; }

public void setIndexTurn(int indexTurn) { this.indexTurn = indexTurn; }

public int getDiceMode() { return diceMode; }

public void setDiceMode(int diceMode) { this.diceMode = diceMode; }

public float getX_lebar_layar() { return x_lebar_layar; }

public void setX_lebar_layar(float x_lebar_layar) { this.x_lebar_layar = x_lebar_layar; } public void setX_lebar_layar(float x_lebar_layar) { this.x_lebar_layar = x_lebar_layar; }

public void setY_tinggi_layar(float y_tinggi_layar) { this.y_tinggi_layar = y_tinggi_layar; }

public int getMywidth() { return mywidth; }

public void setMywidth(int mywidth) { this.mywidth = mywidth; }

public int getMyheight() { return myheight; }

public void setMyheight(int myheight) { this.myheight = myheight; }

@Override public void onSurfaceCreated(GL10 gl, EGLConfig

config) { //gl.glClearColor(0.5f, 0.5f, 0.5f, 1.0f); // Set color's clear-value to //gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); // Set color's clear-value to

// black gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Set color's clear-value to

gl.glClearDepthf(1.0f); // Set depth's clear-value to farthest gl.glEnable(GL10.GL_DEPTH_TEST); // Enables depth-buffer for hidden // surface removal gl.glDepthFunc(GL10.GL_LEQUAL); // The

type of depth testing to do

gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST); // nice // perspective // view gl.glShadeModel(GL10.GL_SMOOTH); //

Enable smooth shading of color gl.glDisable(GL10.GL_DITHER); // Disable dithering for better // performance Enable smooth shading of color gl.glDisable(GL10.GL_DITHER); // Disable dithering for better // performance

// Create the GLText glText = new ESText(gl,

context.getAssets());

// Load the font from file (set size + padding), creates the texture // NOTE: after a successful call to this the font is ready for // rendering! glText.load("Roboto-Regular.ttf", 14, 2,

2); // Create Font (Height: 14

// Pixels / X+Y Padding

// 2 Pixels)

// gl.glDisable(GL10.GL_DITHER); // Disable dithering for better // performance

// Setup Blending (NEW) gl.glColor4f(1.0f, 1.0f, 1.0f, 0.5f); // Full brightness, 50% alpha (NEW) gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE); // Select blending function (NEW)

// Setup Texture, each time the surface is created (NEW) primob3.loadBallTexture(gl, context,1); primob1.loadBallTexture(gl, context,4); restartMenu.loadBallTexture(gl, context,

0); mainMenu.loadBallTexture(gl, context, 1); primobbg.loadBallTexture(gl, context,

19); board.loadBallTexture(gl, context, 20); for(int i = 0; i < 2; i++) {

konfirmasi[i].loadBallTexture(gl, context, i+29); } for(int i = 0; i < player; i++) {

primobflappy[i].loadBallTexture(gl, context, i*7); menangPopup[i].loadBallTexture(gl, context, i+27); } for(int i = 0; i < 6; i++) {

dadu[i].loadBallTexture(gl, context, i+21); } for(int i =0; i < 13; i++) { dadu[i].loadBallTexture(gl, context, i+21); } for(int i =0; i < 13; i++) {

Enable texture (NEW)

@Override public void onSurfaceChanged(GL10 gl, int width,

int height) { mywidth = width; myheight = height;

gl.glViewport(0, 0, width, height);

// Setup orthographic projection gl.glMatrixMode(GL10.GL_PROJECTION); //

Activate Projection Matrix gl.glLoadIdentity(); // Load Identity Matrix gl.glOrthof( // Set Ortho Projection (Left,Right,Bottom,Top,Front,Back)

0, width, 0, height, 500.0f, -500.0f);

// Save width and height // this.width = width; // Save Current

Width // this.height = height; // Save Current Height

gl.glMatrixMode(GL10.GL_MODELVIEW); // Select model-view matrix

gl.glLoadIdentity(); // Reset

/*float[] vertices_quad = { // Vertices for the square -1.0f, -1.0f, 0.0f, // 0. left-bottom 1.0f, -1.0f, 0.0f, // 1. right-bottom -1.0f, 1.0f, 0.0f, // 2. left-top 1.0f, 1.0f, 0.0f // 3. right-top };

// set background Bitmap bitmap =

BitmapFactory.decodeStream(context.getResources()

.openRawResource(R.drawable.splash));

float tex_quad[] = { -100, -100, 0,

100, -100, 0, -100, 100, 0,

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

gl.glVertexPointer(3, GL10.GL_FLOAT, 0, makeFloatBuffer(tex_quad)); gl.glTexCoordPointer(3, GL10.GL_FLOAT, 0, makeFloatBuffer(vertices_quad)); // 5

gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRA Y);

//gl.glVertexPointer(2, GL_FLOAT, sizeof(GLfloat)*4, &tex_quad[0]); //glTexCoordPointer(2, GL_FLOAT, sizeof(GLfloat)*4, &tex_quad[2]);

gl.glDisable(GL10.GL_DEPTH_TEST); gl.glDepthMask(false); gl.glEnable(GL10.GL_TEXTURE_2D);

//gl.glGenTextures(1, textures_indek, 0); gl.glBindTexture(GL10.GL_TEXTURE_2D, 0); gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0,

//glDrawArrays(GL_TRIANGLE_FAN, 0, 4);

//glEnable(GL_DEPTH_TEST); gl.glEnable(GL10.GL_DEPTH_TEST); gl.glDepthMask(true); gl.glDisable( GL10.GL_TEXTURE_2D );

// Disable Texture Mapping */

public boolean getDiceStop() { return this.diceStop; }

public void setDiceStop(boolean diceStop) {

this.diceStop = diceStop; }

public boolean getRestart() { return restart; }

public boolean getPetunjuk() { return petunjuk; }

public void setRestart(boolean restart) { this.restart = restart; } public void setRestart(boolean restart) { this.restart = restart; }

this.petunjuk = petunjuk; }

public float getxMax() { return xMax; }

public void setxMax(int xmax) { xMax = xmax; }

public float getxMin() { return xMin; }

public void setxMin(int xmin) { xMin = xmin; }

public float getyMax() { return yMax; }

public void setyMax(int ymax) { yMax = ymax; }

public float getyMin() { return yMin; }

public void setyMin(int ymin) { yMin = ymin; }

public float getX_touch() { return x_touch; }

public void setX_touch(float x_touch) { this.x_touch = x_touch; }

public float getY_touch() { return y_touch; }

public void setY_touch(float y_touch) { this.y_touch = y_touch; }

public void moveWithCollisionDetection(ESRender esRender) { if (xDice + 30 > 1038) { public void moveWithCollisionDetection(ESRender esRender) { if (xDice + 30 > 1038) {

} else if (xDice - 30 < 840) { stepXDice = -stepXDice; xDice = 840 + 30;

} if (yDice + 30 > 262) {

stepYDice = -stepYDice; yDice = 262 - 30;

} else if (yDice - 30 < 26) { stepYDice = -stepYDice; yDice = 26 + 30;

public void set(int x, int y, int width, int height) { xMin = x; // xMax = x + width - 1; xMax = x + width; yMin = y; // yMax = y + height - 1; yMax = y + height;

public void setX_touch(int x) { // TODO Auto-generated method stub

/*ESSurfaceView.java*/

package com.example.utara;

import android.content.Context; import android.content.Intent; //import android.graphics.PixelFormat; import android.graphics.Point; import android.opengl.GLSurfaceView; import android.util.Log; import android.view.KeyEvent; import android.view.MotionEvent;

/** * A view container where OpenGL ES graphics can be drawn on screen. This view * can also be used to capture touch events, such as

a user interacting with * drawn objects. */

public class ESSurfaceView extends GLSurfaceView { private final ESRender esRender; private float previousX; private float previousY;

/* * public float initx_stick = 425; public float inity_stick = 267; public * Point _touchingPoint = new Point(425,267); public Point _pointerPosition * = new Point(220,150); */

public float initx_stick = 1013; public float inity_stick = 500; public Point _touchingPoint = new Point(1013,

500); public Point _pointerPosition = new Point(220, 150); private Boolean _dragging = false; private int flag_first = 0;

private float mypointer_awal_x = 0; private float mypointer_awal_y = 0;

public ESSurfaceView(Context context) { super(context);

// Set the Renderer for drawing on the GLSurfaceView esRender = new ESRender(context); setRenderer(esRender);

// To enable keypad this.setFocusable(true); this.requestFocus();

// To enable touch mode this.setFocusableInTouchMode(true);

@Override public boolean onTouchEvent(MotionEvent v) {

switch (v.getAction()) { case MotionEvent.ACTION_DOWN:update(v); case MotionEvent.ACTION_UP: case MotionEvent.ACTION_MOVE: } switch (v.getAction()) { case MotionEvent.ACTION_DOWN:update(v); case MotionEvent.ACTION_UP: case MotionEvent.ACTION_MOVE: }

public void update(MotionEvent event) { _touchingPoint.x = (int) event.getX(); _touchingPoint.y = (int) event.getY();

int thisTurn = esRender.getIndexTurn();

esRender.setX_touch(_touchingPoint.x); esRender.setY_touch(_touchingPoint.y);

if(esRender.getMenang(thisTurn) == true) { if(_touchingPoint.y < 463 && _touchingPoint.y > 392) { if(_touchingPoint.x < 718 && _touchingPoint.x > 645) { System.exit(0); } else if(_touchingPoint.x < 803 && _touchingPoint.x > 730) {

esRender.setDiceMode(0);

esRender.setIndexTurn(0); for(int i = 0; i < 2; i++) {

esRender.setMenang(false);

esRender.setXPlayer(i, 0);

esRender.setYPlayer(i, 0);

esRender.setXScale(i, 40);

esRender.setPosisi(i, 1);

esRender.setMaju(i, 0);

esRender.setStepMode(i, 0);

esRender.resetDice(); }

if(_touchingPoint.x < 288 &&

_touchingPoint.x > 57 && esRender.getMenang(thisTurn) == false) {

if(_touchingPoint.y < 308 && _touchingPoint.y > 263) {

esRender.setPetunjuk(true); } else if(_touchingPoint.y < 370 && _touchingPoint.y > 325) { esRender.setRestart(true); esRender.setPetunjuk(true); } else if(_touchingPoint.y < 370 && _touchingPoint.y > 325) { esRender.setRestart(true);

if(_touchingPoint.x < 1038 && _touchingPoint.x > 840 && _touchingPoint.y < 526 && _touchingPoint.y > 289) {

if(esRender.getDiceMode() == 0) {

esRender.setDiceMode(1); } else {

esRender.setDiceStop(true); }

} } else if(esRender.getDiceMode() == 2 && esRender.getMaju() == 0 && esRender.getMenang(thisTurn) == false) {

if(Math.sqrt(Math.pow(_touchingPoint.x - 138, 2) + Math.pow(_touchingPoint.y - 468, 2)) < 70) {

esRender.setPopup(false);

esRender.setDiceMode(0);

if(esRender.getIndexTurn() == 0) {

esRender.setIndexTurn(1); } else {

esRender.setIndexTurn(0); }

} } else { if(_touchingPoint.y < 435 && _touchingPoint.y > 328) { if(_touchingPoint.x < 766 && _touchingPoint.x > 563) {

esRender.setRestart(false);

esRender.setPetunjuk(false); } else if(_touchingPoint.x < 519 && _touchingPoint.x > 316) {

if(esRender.getRestart() == true) {

esRender.setDiceMode(0);

esRender.setIndexTurn(0); esRender.setIndexTurn(0);

esRender.setMenang(false);

esRender.setXPlayer(i, 0);

esRender.setYPlayer(i, 0);

esRender.setXScale(i, 40);

esRender.setPosisi(i, 1);

esRender.setMaju(i, 0);

esRender.setStepMode(i, 0);

esRender.resetDice(); }

esRender.setRestart(false); } else {

esRender.setPetunjuk(false);

System.exit(0); }

// Key-up event handler @Override public boolean onKeyUp(int keyCode, KeyEvent

event) { switch (keyCode) { case KeyEvent.KEYCODE_A: // mengurangi

kecepatan object if ((esRender.getspeedX() - 0.05f > 0)) {

esRender.setspeedX(esRender.getspeedX() - 0.05f); } if ((esRender.getspeedX() - 0.05f

< 0)) { esRender.setspeedX(0.0f); } if ((esRender.getspeedY() - 0.05f

esRender.setspeedY(esRender.getspeedY() - 0.05f); } if ((esRender.getspeedY() - 0.05f

< 0)) { esRender.setspeedY(0.0f); } Log.v("Test Action KEYCODE_A",

"action working"); "action working");

if (esRender.getNavigate() == 0 && esRender.goForward())

esRender.setPositionRow(esRender.getPositionRow() - 1); else if (esRender.getNavigate() ==

1 && esRender.goForward())

esRender.setPositionCol(esRender.getPositionCol() + 1); else if (esRender.getNavigate() ==

2 && esRender.goForward())

esRender.setPositionRow(esRender.getPositionRow() + 1); else if (esRender.getNavigate() ==

3 && esRender.goForward())

esRender.setPositionCol(esRender.getPositionCol() - 1); Log.v("Test Action KEYCODE_T", "action working");

esRender.setX_player((esRender.getPositionCol() * esRender .getWidthObject()) + (esRender.getWidthObject() / 2));

esRender.setY_player(((esRender.getNumberRow()

- esRender.getPositionRow() - 1) * esRender

.getWidthObject()) + (esRender.getWidthObject() / 2)); break; case KeyEvent.KEYCODE_G: Log.v("Test Action KEYCODE_G", "action working"); break; case KeyEvent.KEYCODE_H: // right

esRender.setNavigate(esRender.getNavigate() + 1); Log.v("Test Action KEYCODE_H", "action working"); break; case KeyEvent.KEYCODE_F: // left

esRender.setNavigate(esRender.getNavigate() - 1); Log.v("Test Action KEYCODE_F", "action working"); break; }

if (esRender.getNavigate() < 0)

esRender.setNavigate(3); esRender.setNavigate(3);

return true; // Event handled }

/*MainActivity.java*/

package com.example.utara;

import com.example.utara.R;

import android.opengl.GLSurfaceView; import android.os.Bundle; import android.app.Activity; import android.app.Dialog; import android.content.Intent; import android.content.pm.ActivityInfo; //import android.graphics.PixelFormat; import android.view.Menu; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.Button;

public class MainActivity extends Activity {

/** The OpenGL view */ private GLSurfaceView glSurfaceView; Dialog popup;

@Override protected void onCreate(Bundle

savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main);

// requesting to turn the title OFF

requestWindowFeature(Window.FEATURE_NO_TITLE); // making it full screen

getWindow().setFlags(WindowManager.LayoutParams.F LAG_FULLSCREEN,

WindowManager.LayoutParams.FLAG_FULLSCREEN);

// Initiate the Open GL view and // create an instance with this activity glSurfaceView = new ESSurfaceView(this);

setContentView(glSurfaceView);

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATI ON_LANDSCAPE);

* Remember to resume the glSurface */

@Override protected void onResume() {

super.onResume(); Music.play(this, R.raw.medley8bit); glSurfaceView.onResume();

/** * Also pause the glSurface */

@Override protected void onPause() {

super.onPause(); //Music.stop(this); Music.pauseSong(this); glSurfaceView.onPause();

@Override public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }