Ayo Nyoblos

Ayo Nyoblos - Project Pilihan

===

9.4 Ayo Nyoblos

9.4.1 Konsep

Dengan mengangkat tema Pilpres 2014, sebagai ajang tahun politik tahun 2014 di Indonesia, kami mengangkat judul final project "Ayo Nyoblos!". Dimana aplikasi ini berbasis android dengan menggunakan platform ADT (Android Developer Tools). Sebelumnya , tidak ada tutorial pencoblosan kepada masyarakat secara representatif yang membuat orang mengerti, sehingga aplikasi ini perlu dibuat agar bisa diaplikasikan menjadi tutorial cara-cara proses pencoblosan kepada masyarakat awam ataupun pemuda yang baru saja mempunyai hak suara. Di dalamnya terdapat animasi orang yang sedang akan mencoblos hingga dia mencelupkan tinta sebagai tanda sudah mencoblos. Aplikasi ini juga kami desain sedemikian hingga , Dengan mengangkat tema Pilpres 2014, sebagai ajang tahun politik tahun 2014 di Indonesia, kami mengangkat judul final project "Ayo Nyoblos!". Dimana aplikasi ini berbasis android dengan menggunakan platform ADT (Android Developer Tools). Sebelumnya , tidak ada tutorial pencoblosan kepada masyarakat secara representatif yang membuat orang mengerti, sehingga aplikasi ini perlu dibuat agar bisa diaplikasikan menjadi tutorial cara-cara proses pencoblosan kepada masyarakat awam ataupun pemuda yang baru saja mempunyai hak suara. Di dalamnya terdapat animasi orang yang sedang akan mencoblos hingga dia mencelupkan tinta sebagai tanda sudah mencoblos. Aplikasi ini juga kami desain sedemikian hingga ,

Tutorial dan Game pencoblosan ini mempunyai beberapa manfaat. Yang pertama, tutorial dan game pencoblosan ini dapat membantu orang-orang yang baru berusia 17 tahun. Orang yang baru berusia 17 tahun sebelumnya tidak pernah mencoblos. Sehingga, mungkin tidak tahu bagaimana langkah-langkah mencoblos yang benar. Dengan tutorial dan game pencoblosan ini, orang belum pernah mencoblos dapat menggunakan tutorial dan game ini sehingga orang tersebut tahu bagaiamana langkah-langkah mencoblos yang benar.

9.4.2 Fitur/Menu

Tutorial dan game pencoblosan ini memiliki beberapa fitur, antara lain fitur tutorial dan fitur game. Pada fitur tutorial ini menunjukkan simulasi bagaimana alur mencoblos yang benar. Mulai dari memberikan surat pencoblosan, antri, mencoblos pada bilik, mencelupkan jari pada tinta, sampai keluar dari TPS.

Pada fitur game ini, kita dapat melakukan langkah-langkah sesuai keinginan kita. Apabila langkah kita salah, maka kita akan mendapatkan pemberitahuan bahwa langkah kita salah. Apabila benar, maka akan kita akan mendapatkan pemberitahuan bahwa langkah kita benar.

9.4.3 Tampilan Implementasi

Gambar 9.18 Menu Utama

Gambar 9.19 Tutorial Game

Gambar 9.20 Game

Gambar 9.21 Developers

9.4.4 Source Code

Source Code 9.4 Code Ayo Nyoblos! /*ESRender.java*/

package com.fractalbackground;

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 menu; private PrimitivesObject ceksurat; private PrimitivesObject bg; private PrimitivesObject pilih; private PrimitivesObject antri; private PrimitivesObject bilik; private PrimitivesObject kpps; private PrimitivesObject kotaksuara; private PrimitivesObject primobflappy; private PrimitivesObject primobground; private PrimitivesObject primob1; private PrimitivesObject celup; private PrimitivesObject event1; private PrimitivesObject event2; private PrimitivesObject event3; private PrimitivesObject event4; private PrimitivesObject event5; private PrimitivesObject event6; private PrimitivesObject event7; private PrimitivesObject dev; private PrimitivesObject Bnr; private PrimitivesObject Slh; private PrimitivesObject surat; private PrimitivesObject finish; int counterxx = 100,counterinfo; private PrimitivesObject primob;

float posX, posY,PosX,PosY; Context context; boolean klik; boolean eventtt = false; float Cx = 27.0f; float Cy = 72.0f; float Cz = 0.0f; float gerak = 0.8f; float timer1; float timermin = 0.5f; float posX, posY,PosX,PosY; Context context; boolean klik; boolean eventtt = false; float Cx = 27.0f; float Cy = 72.0f; float Cz = 0.0f; float gerak = 0.8f; float timer1; float timermin = 0.5f;

update float AnimateStep2 = 0.2f; // Rotation step per update float ScaleStep = 1.0f;

private float move_left_right1 = 0.f; private float move_left_right2 = 0.f;

private float kecepatan_ground = 1.0f; private int faktor_naik_turun = 0; private int flag_naik = 1;

private long startTime; private long fpsStartTime; private long numFrames; private float fps_temp; private long fpsElapsed_temp; private long numFrames_temp; private boolean startTimeInit = true;

private long fpsStartTime2; private long numFrames2; private int numIDFrame = 0;

float CurrentScale = 1.0f;

float radius = 50.0f; // Ball's radius float x = radius; // Ball's center (x,y) float y = radius; float speedX = 0.5f; // Ball's speed (x,y) float speedY = 0.3f;

int xMin, xMax, yMin, yMax;

private int mywidth = 0; private int myheight = 0; private int jumlah_pantulan = 0;

private float x_player = 0; private float y_player = 0; private float x_player_end = 0; private float y_player_end = 0; private int Navigate = 0; private int positionRow = 0; private float x_player = 0; private float y_player = 0; private float x_player_end = 0; private float y_player_end = 0; private int Navigate = 0; private int positionRow = 0;

private int hori[][] = new int[1000][1000]; private int verti[][] = new int[1000][1000]; private int numberCol = 0; private int numberRow = 0; private float WidthObject = 0;

private float x_anim_stick = 0; private float y_anim_stick = 0;

private float x_touch = 0; private float y_touch = 0;

private float x_pointer = 0; private float y_pointer = 0;

private float x_pointer_awal = 0; private float y_pointer_awal = 0;

private float x_lebar_layar = 0; private float y_tinggi_layar = 0;

private float sudut_pointer = 0;

private float jarak_center = 0;

private String arah_joystick = "";

boolean get_size_screen = true;

private float x_graf = 0; private float y_graf = 0;

int[] textures_indek = new int[1];

float black[] = new float[] { 0.0f, 0.0f, 0.0f, 1.0f }; float yellow[] = new float[] { 1.0f, 1.0f, 0.0f, 1.0f }; 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 };

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

// super(); this.context = context; this.primobbg = new PrimitivesObject(); this.menu = new PrimitivesObject(); this.ceksurat = new PrimitivesObject(); this.pilih = new PrimitivesObject(); this.antri = new PrimitivesObject(); this.bilik = new PrimitivesObject(); this.kpps = new PrimitivesObject(); this.kotaksuara = new PrimitivesObject(); this.primobflappy = new Primi-

tivesObject();

this.primobground = new Primi-

tivesObject(); this.primob1 = new PrimitivesObject(); this.celup = new PrimitivesObject(); this.primob = new PrimitivesObject(); this.bg = new PrimitivesObject(); this.event1 = new PrimitivesObject(); this.event2 = new PrimitivesObject(); this.event3 = new PrimitivesObject(); this.event4 = new PrimitivesObject(); this.event5 = new PrimitivesObject(); this.event6 = new PrimitivesObject(); this.event7 = new PrimitivesObject(); this.Bnr = new PrimitivesObject(); this.Slh = new PrimitivesObject(); surat = new PrimitivesObject(); finish = new PrimitivesObject(); dev = new PrimitivesObject();

@Override public void onDrawFrame(GL10 gl) {

// menangkap ukuran layar if (get_size_screen) {

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

posisiN=""; posisiS=""; info=9; counterinfo=400; klik=false;

// 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);

if (layar.equalsIgnoreCase("ceksurat")) {

// membuat background gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glScalef(x_lebar_layar,

y_tinggi_layar, 1.0f); ceksurat.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix();

} else if (lay- ar.equalsIgnoreCase("ambil")) {

// membuat orang gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glScalef(x_lebar_layar,

y_tinggi_layar, 1.0f); primob1.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix();

else if (layar.equalsIgnoreCase("celup")) {

// membuat celup gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glScalef(x_lebar_layar,

y_tinggi_layar, 1.0f); celup.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix();

else if (layar.equalsIgnoreCase("Game")) {

counterxx--; if(counterxx==2){

posisiN="event1";

Stage=1;

} //event 1 game if(klik){ if(PosX>=167&&PosX<=264 && Po-

sY>=80&&PosY<=251 &&Stage==1){ info=1; Stage=2; Music.playOnce(context,

R.raw.sfx_point); }else if(PosX>=69&&PosX<=222 && PosY>=271&&PosY<=413&&Stage==2){ info=1; Stage=3; Music.playOnce(context,

R.raw.sfx_point); }else if(PosX>=336&&PosX<=704 && PosY>=57&&PosY<=246&& Stage==3){ info=1; Stage=4; Music.playOnce(context,

R.raw.sfx_point); }else if(PosX>=336&&PosX<=704 && PosY>=415&&PosY<=541&& Stage==4){ info=3; Stage=5; Music.playOnce(context,

R.raw.sfx_point); }else if(PosX>=785&&PosX<=949 && PosY>=375&&PosY<=460 && Stage==5){ info=1; Stage=6;

Music.playOnce(context, R.raw.sfx_point); }else if(PosX>=782&&PosX<=948 && PosY>=249&&PosY<=334

&& Stage==6){ info=5; Music.playOnce(context,

R.raw.sfx_point); //kalau sudah benar semua tampilkan tekture komplete Stage=7; }else{

info=0; Music.playOnce(context,

R.raw.sfx_hit); } klik=false; }

if (eventfak.equalsIgnoreCase("gameklik")) {

if (Cx <= posX) { Cx += 0.5f; }else if(Cx >= posX){

Cx -= 0.5f;

if (Cy <= posY) { Cy += 0.5f; }else if(Cy >= posY) { Cy -= 0.5f;

} eventtt = true;

} if ((Cx >= posX-1 && Cx <=

posX)||((Cy >= posY-1 && Cy <= posY)) && eventtt == true

&& eventfak.equalsIgnoreCase("gameklik")) { }

// membuat background game gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glScalef(x_lebar_layar,

y_tinggi_layar, 1.0f); bg.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix();

// Cek Surat game gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glEnable(GL10.GL_BLEND); gl.glScalef(130, 160, 0.0f); gl.glTranslatef(1.2f, 0.3f, 0); ceksurat.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glDisable(GL10.GL_BLEND); gl.glPopMatrix();

// Antrian gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glEnable(GL10.GL_BLEND); gl.glScalef(130, 160, 0.0f); gl.glTranslatef(0.5f, 1.6f, 0); antri.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glDisable(GL10.GL_BLEND); gl.glPopMatrix();

// Bilik gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glEnable(GL10.GL_BLEND); gl.glScalef(290, 120, 0.0f); gl.glTranslatef(1.4f, 3.5f, 0); bilik.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glDisable(GL10.GL_BLEND); gl.glPopMatrix();

// KPPS dan Saksi gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glEnable(GL10.GL_BLEND); gl.glScalef(420, 150, 0.0f); gl.glTranslatef(0.8f, 0.3f, 0); kpps.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glDisable(GL10.GL_BLEND); gl.glPopMatrix();

// Kotak Suara gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glEnable(GL10.GL_BLEND); gl.glScalef(130, 130, 0.0f); gl.glTranslatef(6.5f, 2.7f, 0); kotaksuara.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glDisable(GL10.GL_BLEND); gl.glPopMatrix();

// Celup gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glEnable(GL10.GL_BLEND); gl.glScalef(110, 110, 0.0f); gl.glTranslatef(7.6f, 2.1f, 0); celup.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glDisable(GL10.GL_BLEND); gl.glPopMatrix();

//objek orang gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glEnable(GL10.GL_BLEND); gl.glTranslatef(Cx, Cy, Cz); gl.glScalef(x_lebar_layar / 15,

y_tinggi_layar / 5, 1.0f); primobflappy.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING);

gl.glDisable(GL10.GL_BLEND); gl.glPopMatrix(); }

// menu

else if (layar.equalsIgnoreCase("menu")) { counterxx = 100; Cx = 27.0f; Cy = 72.0f; eventfak = "fak"; jalan = false; timer1 = 200.0f; gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glScalef(x_lebar_layar, else if (layar.equalsIgnoreCase("menu")) { counterxx = 100; Cx = 27.0f; Cy = 72.0f; eventfak = "fak"; jalan = false; timer1 = 200.0f; gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glScalef(x_lebar_layar,

else if (layar.equalsIgnoreCase("pilih")) { gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glScalef(x_lebar_layar,

y_tinggi_layar, 1.0f); pilih.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix();

} // ---------TUTORIAL // --------

else if (lay- ar.equalsIgnoreCase("tutorial")) {

counterxx--; if (counterxx == 2) {

jalan = true; }

if (jalan == true) { if (Cx <= 191) { Cx += 0.5f;

if (Cy <= 180) { Cy += 0.5f;

} if (Cx >= 190 && Cx <= 191 &&

eventfak.equalsIgnoreCase("fak")) { jalan = false; layar = "eventsiji";

if (eventfak.equalsIgnoreCase("event2")) { if (Cx >= 162) { Cx -= 0.5f;

if (Cy <= 274) { Cy += 0.5f;

} eventtt = true;

} if ((Cy >= 249 && Cy <= 270) &&

eventtt == true && eventfak.equalsIgnoreCase("event2")) { layar = "eventloro"; eventtt == true && eventfak.equalsIgnoreCase("event2")) { layar = "eventloro";

(eventfak.equalsIgnoreCase("event3")) { if (Cx <= 397) { Cx += 0.5f;

if (Cy >= 189) { Cy -= 0.5f;

} eventtt = true;

if ((Cx >= 396 && Cx <= 397) && eventtt == true && eventfak.equalsIgnoreCase("event3")) { layar = "eventtelu"; eventtt = false;

if (eventfak.equalsIgnoreCase("event4")) { if (Cx >= 270) { Cx -= 0.5f;

if (Cy <= 424) { Cy += 0.5f;

} eventtt = true;

if ((Cy >= 423 && Cy <= 424) && eventtt == true && eventfak.equalsIgnoreCase("event4")) { layar = "eventpapat"; eventtt = false;

} if

(eventfak.equalsIgnoreCase("event5")) { if (Cx <= 781) { Cx += 0.5f;

if (Cy >= 365) { Cy -= 0.5f;

} eventtt = true;

if ((Cx >= 780 && Cx <= 781) && eventtt == true && eventfak.equalsIgnoreCase("event5")) { layar = "eventlimo"; eventtt = false;

} if

(eventfak.equalsIgnoreCase("event6")) { if (Cx >= 765) { Cx -= 0.5f;

if (Cy >= 229) { Cy -= 0.5f;

} eventtt = true;

if ((Cy >= 228 && Cy <= 229) && eventtt == true && eventfak.equalsIgnoreCase("event6")) { layar = "eventenem"; eventtt = false;

} if

(eventfak.equalsIgnoreCase("event7")) { if (Cx <= 995) { Cx += 0.5f;

if (Cy >= 80) { Cy -= 0.5f;

} eventtt = true;

// membuat background gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glScalef(x_lebar_layar,

y_tinggi_layar, 1.0f); bg.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix();

// Cek Surat gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glEnable(GL10.GL_BLEND); gl.glScalef(130, 160, 0.0f); gl.glTranslatef(1.2f, 0.3f, 0); ceksurat.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glDisable(GL10.GL_BLEND); gl.glPopMatrix();

// Antrian gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glEnable(GL10.GL_BLEND); gl.glScalef(130, 160, 0.0f); gl.glTranslatef(0.5f, 1.6f, 0); antri.draw_background(gl); // Antrian gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glEnable(GL10.GL_BLEND); gl.glScalef(130, 160, 0.0f); gl.glTranslatef(0.5f, 1.6f, 0); antri.draw_background(gl);

// Bilik gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glEnable(GL10.GL_BLEND); gl.glScalef(290, 120, 0.0f); gl.glTranslatef(1.2f, 3.5f, 0); bilik.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glDisable(GL10.GL_BLEND); gl.glPopMatrix();

// KPPS dan Saksi gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glEnable(GL10.GL_BLEND); gl.glScalef(420, 150, 0.0f); gl.glTranslatef(0.8f, 0.3f, 0); kpps.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glDisable(GL10.GL_BLEND); gl.glPopMatrix();

// Kotak Suara gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glEnable(GL10.GL_BLEND); gl.glScalef(130, 130, 0.0f); gl.glTranslatef(6.5f, 2.7f, 0); kotaksuara.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glDisable(GL10.GL_BLEND); gl.glPopMatrix();

// Celup gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glEnable(GL10.GL_BLEND); gl.glScalef(110, 110, 0.0f); gl.glTranslatef(7.6f, 2.1f, 0); celup.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glDisable(GL10.GL_BLEND); gl.glPopMatrix();

//orang gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING);

gl.glEnable(GL10.GL_BLEND); gl.glTranslatef(Cx, Cy, Cz); gl.glScalef(x_lebar_layar / 15,

y_tinggi_layar / 5, 1.0f); primobflappy.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING);

gl.glDisable(GL10.GL_BLEND); gl.glPopMatrix();

//splash event } else if (lay- ar.equalsIgnoreCase("eventsiji")) { gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glScalef(x_lebar_layar,

y_tinggi_layar, 1.0f); event1.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix();

} else if (lay- ar.equalsIgnoreCase("eventloro")) { gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glScalef(x_lebar_layar,

y_tinggi_layar, 1.0f); event2.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix();

} else if (lay- ar.equalsIgnoreCase("eventtelu")) { gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glScalef(x_lebar_layar,

y_tinggi_layar, 1.0f); event3.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix();

} else if (lay- ar.equalsIgnoreCase("eventpapat")) { gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glScalef(x_lebar_layar,

y_tinggi_layar, 1.0f); event4.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix();

} else if (lay- ar.equalsIgnoreCase("eventlimo")) { gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glScalef(x_lebar_layar,

y_tinggi_layar, 1.0f); event5.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix();

} else if (lay-

ar.equalsIgnoreCase("eventenem")) { gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glScalef(x_lebar_layar, ar.equalsIgnoreCase("eventenem")) { gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glScalef(x_lebar_layar,

}else if (lay- ar.equalsIgnoreCase("developer")) { gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glScalef(x_lebar_layar,

y_tinggi_layar, 1.0f); dev.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glPopMatrix();

//game if (info==1) {

gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glEnable(GL10.GL_BLEND); gl.glScalef(300, 300, 0.0f); gl.glTranslatef(1.3f, 0.7f, 0); Bnr.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glDisable(GL10.GL_BLEND); gl.glPopMatrix();

counterinfo-=1.0;

if(counterinfo==1){ counterinfo=400; info=8;

}else if (info==0) {

gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glEnable(GL10.GL_BLEND); gl.glScalef(300, 300, 0.0f); gl.glTranslatef(1.3f, 0.7f, 0); Slh.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glDisable(GL10.GL_BLEND); gl.glPopMatrix();

counterinfo-=1.0; if(counterinfo==1){

counterinfo=400; info=7;

} }else if (info==3) {

gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glEnable(GL10.GL_BLEND); gl.glScalef(300, 300, 0.0f); gl.glTranslatef(1.3f, 0.7f, 0);

Bnr.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glDisable(GL10.GL_BLEND); gl.glPopMatrix();

counterinfo-=1.0; if(counterinfo==1){

counterinfo=400;

info=4; } }else if (info==4) {

gl.glPushMatrix();

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

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

counterinfo-=1.0; if(counterinfo==1){

counterinfo=400;

info=9; } }else if (info==5) {

gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glEnable(GL10.GL_BLEND); gl.glScalef(300, 300, 0.0f); gl.glTranslatef(1.3f, 0.7f, 0); Bnr.draw_background(gl); gl.glEnable(GL10.GL_LIGHTING); gl.glDisable(GL10.GL_BLEND); gl.glPopMatrix();

counterinfo-=1.0; if(counterinfo==1){

counterinfo=400; layar="wesbar"; info=6; counterxx = 100; Cx = 27.0f; Cy = 72.0f; eventfak = "fak"; jalan = false; timer1 = 200.0f;

} }else if (info==6) {

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

moveWithCollisionDetection(this); set((int) -radius, (int) -radius,

mywidth, myheight);

CurrentAngle += AnimateStep; if (CurrentAngle > 360.0) {

CurrentAngle = 0.0f; CurrentAngle += AnimateStep;

CurrentAngle2 += AnimateStep2; if (CurrentAngle2 > 360.0) {

CurrentAngle2 = 0.0f; CurrentAngle2 += AnimateStep2;

CurrentScale += ScaleStep; if (CurrentScale % 10.0f == 0) {

ScaleStep = -1 * ScaleStep; }

gl.glPushMatrix(); gl.glDisable(GL10.GL_LIGHTING); gl.glEnable(GL10.GL_TEXTURE_2D); // Ena-

ble Texture Mapping gl.glEnable(GL10.GL_BLEND); // Enable Al- pha Blend gl.glDisable(GL10.GL_DEPTH_TEST); // Turn depth testing off (NEW) gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); // Set gl.glTranslatef(0.0f, 0.0f, 1.0f); glText.begin(0.0f, 1.0f, 0.0f, 1.0f); //

Begin Text Rendering (Set Color //

glText.draw("Koordinat X : " + posX + " , Y: " + posY + " Info :" + info+" Stage :"+Stage+" counter "+counterinfo, //

450, myheight - 30); glText.draw("", 450, myheight - 30); glText.end(); // End Text Rendering gl.glEnable(GL10.GL_LIGHTING); gl.glDisable(GL10.GL_BLEND); // Disable

Alpha Blend gl.glDisable(GL10.GL_TEXTURE_2D); // Dis- able Texture Mapping gl.glPopMatrix(); Alpha Blend gl.glDisable(GL10.GL_TEXTURE_2D); // Dis- able Texture Mapping gl.glPopMatrix();

public void setX_graf(float x_graf) { this.x_graf = x_graf; }

public float getY_graf() { return y_graf; }

public void setY_graf(float y_graf) { this.y_graf = y_graf; }

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 String getArah_joystick() { return arah_joystick; }

public void setArah_joystick(String arah_joystick) { this.arah_joystick = arah_joystick; }

public float getJarak_center() { return jarak_center; }

public void setJarak_center(float jarak_center) { this.jarak_center = jarak_center; }

public float getSudut_pointer() { return sudut_pointer; }

public void setSudut_pointer(float sudut_pointer) { this.sudut_pointer = sudut_pointer; }

public float getX_lebar_layar() { public float getX_lebar_layar() {

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

public float getY_tinggi_layar() { return y_tinggi_layar; }

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

public float getX_pointer_awal() { return x_pointer_awal; }

public void setX_pointer_awal(float x_pointer_awal) { this.x_pointer_awal = x_pointer_awal; }

public float getY_pointer_awal() { return y_pointer_awal; }

public void setY_pointer_awal(float y_pointer_awal) { this.y_pointer_awal = y_pointer_awal; }

public float getX_pointer() { return x_pointer; }

public void setX_pointer(float x_pointer) {

this.x_pointer = x_pointer; }

public float getY_pointer() { return y_pointer; }

public void setY_pointer(float y_pointer) {

this.y_pointer = y_pointer; }

public float getX_anim_stick() { return x_anim_stick; }

public void setX_anim_stick(float x_anim_stick) { this.x_anim_stick = x_anim_stick; } public void setX_anim_stick(float x_anim_stick) { this.x_anim_stick = x_anim_stick; }

public void setY_anim_stick(float y_anim_stick) { this.y_anim_stick = y_anim_stick; }

public float getRadius() { return radius; }

public void setRadius(float radius) { this.radius = radius; }

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; }

public int getNumberRow() { return numberRow; }

public void setNumberRow(int numberRow) { this.numberRow = numberRow; }

public float getWidthObject() { return WidthObject; }

public void setWidthObject(float widthObject) {

WidthObject = widthObject; }

public float getX_player() { return x_player; }

public void setX_player(float x_player) { this.x_player = x_player; }

public float getY_player() { return y_player; } public float getY_player() { return y_player; }

public int getNavigate() { return Navigate; }

public void setNavigate(int navigate) { Navigate = navigate; }

public boolean goForward() { if (Navigate == 0 && positionRow > 0 && ho- ri[positionRow][positionCol] == 0)

return true; if (Navigate == 1 && positionCol < (num- berCol - 1) && ver- ti[positionRow][positionCol + 1] == 0)

return true; if (Navigate == 2 && positionRow < (num- berRow - 1) && hori[positionRow + 1][positionCol] == 0)

return true; if (Navigate == 3 && positionCol > 0 && ver- ti[positionRow][positionCol] == 0)

return true; return false; }

public int getPositionRow() { return positionRow; }

public void setPositionRow(int positionRow) {

this.positionRow = positionRow; }

public int getPositionCol() { return positionCol; }

public void setPositionCol(int positionCol) {

this.positionCol = positionCol; }

@Override public void onSurfaceCreated(GL10 gl, EGLConfig

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

gl.glClearDepthf(1.0f); // Set depth's clear-value to farthest gl.glClearDepthf(1.0f); // Set depth's clear-value to farthest

type of depth testing to do

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

ble smooth shading of color gl.glDisable(GL10.GL_DITHER); // Disable dithering for better // performance gl.glEnable(GL10.GL_LIGHTING); gl.glEnable(GL10.GL_LIGHT0);

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

text.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)

// 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) celup.loadBallTexture(gl, context, 10); primob1.loadBallTexture(gl, context, 14); primobbg.loadBallTexture(gl, context, 0); menu.loadBallTexture(gl, context, 4); bg.loadBallTexture(gl, context, 15); event1.loadBallTexture(gl, context, 1); event2.loadBallTexture(gl, context, 2); event3.loadBallTexture(gl, context, 5); event4.loadBallTexture(gl, context, 16); event5.loadBallTexture(gl, context, 17); // Setup Texture, each time the surface is created (NEW) celup.loadBallTexture(gl, context, 10); primob1.loadBallTexture(gl, context, 14); primobbg.loadBallTexture(gl, context, 0); menu.loadBallTexture(gl, context, 4); bg.loadBallTexture(gl, context, 15); event1.loadBallTexture(gl, context, 1); event2.loadBallTexture(gl, context, 2); event3.loadBallTexture(gl, context, 5); event4.loadBallTexture(gl, context, 16); event5.loadBallTexture(gl, context, 17);

18); ceksurat.loadBallTexture(gl, context, 9); Bnr.loadBallTexture(gl, context, 20); Slh.loadBallTexture(gl, context, 21); pilih.loadBallTexture(gl, context, 3); antri.loadBallTexture(gl, context, 7); bilik.loadBallTexture(gl, context, 8); kpps.loadBallTexture(gl, context, 11); kotaksuara.loadBallTexture(gl, context,

13); primobflappy.loadBallTexture2(gl, con- text, 3); primobground.loadBallTexture(gl, context, 6); gl.glEnable(GL10.GL_TEXTURE_2D); // Ena- ble 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 Ma- trix gl.glOrthof( // Set Ortho Projection (Left,Right,Bottom,Top,Front,Back)

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

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

gl.glLoadIdentity(); // Reset

public void setCord(float Cx, float Cy, float Cz) { this.Cx = Cx; this.Cy = Cy; this.Cz = Cz;

public float getxMax() { return xMax; public float getxMax() { return 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 getspeedX() { return speedX; }

public void setspeedX(float speedX_) { speedX = speedX_; }

public float getspeedY() { return speedY; }

public void setspeedY(float speedY_) { speedY = speedY_; }

public void moveWithCollisionDetection(ESRender esRender) { // Get new (x,y) position x += speedX; y += speedY; // Detect collision and react if (x + radius > esRender.getxMax()) {

speedX = -speedX; x = esRender.getxMax() - radius; this.jumlah_pantulan += 1;

} else if (x - radius < esRen- der.getxMin()) { speedX = -speedX; } else if (x - radius < esRen- der.getxMin()) { speedX = -speedX;

} if (y + radius > esRender.getyMax()) {

speedY = -speedY; y = esRender.getyMax() - radius; this.jumlah_pantulan += 1;

} else if (y - radius < esRen- der.getyMin()) { speedY = -speedY; y = esRender.getyMin() + radius; this.jumlah_pantulan += 1;

// pengkondisian penghitungan pantulan mulai dari nol if (Run_Mode == 0) { this.jumlah_pantulan -= 4; this.Run_Mode = 1;

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

public String getlayar() { return layar;

public void setlayar(String layar) { this.layar = layar;

public int getcounterp() { return counterp;

public void setcounterp() { this.counterp += 1;

public int getcounterj() { return counterj;

public void setcounterj() { this.counterj += 1; } public void setcounterj() { this.counterj += 1; }

this.posX = x; this.posY = y;

public void setEvent(String x) { this.eventfak = x;

public void setPos(int x, int y) { this.PosX=x; this.PosY=y;

public void setKlik() { // TODO Auto-generated method stub this.klik=true;

public int getInfo() { // TODO Auto-generated method stub return this.info;

/*ESSurfaceView.java*/

package com.fractalbackground;

import android.content.Context; //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; int counterp; int counterj;

/* * 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,

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) {

//update(v);

float currentX = v.getX(); float currentY = v.getY(); float deltaX, deltaY;

// float scalingFactor = 0.50f / ((esRen- der.xMax > esRender.yMax) ? // esRender.yMax // : esRender.xMax);

switch (v.getAction()) { case MotionEvent.ACTION_DOWN:

_touchingPoint.x = (int) v.getX(); _touchingPoint.y = (int) v.getY(); // //Koordinat Menu Tutorial

if (esRender.getlayar()=="Game"){ if (esRender.getlayar()=="Game"){

der.setEvent("gameklik");

esRen-

der.setPos(_touchingPoint.x,(esRender.getMyheight()- _touchingPoint.y));

esRen-

der.setText(_touchingPoint.x- 36,(esRender.getMyheight()- _touchingPoint.y-58));

esRender.setKlik(); }else{

esRen-

der.setText(_touchingPoint.x,(esRender.getMyheight()- _touchingPoint.y));

} if(( _touchingPoint.x>=394

&&_touchingPoint.x<=601)&&(_touchingPoint.y>=176&&_tou chingPoint.y<=251)&& (esRender.getlayar()=="menu")){

esRen-

der.setlayar("tutorial"); }

//Koordinat Menu Game if(( _touchingPoint.x>=394

&&_touchingPoint.x<=601)&&(_touchingPoint.y>=293&&_tou chingPoint.y<=358)&& (esRender.getlayar()=="menu")){

esRender.setlayar("Game"); }

//Koordinat Menu Developer if(( _touchingPoint.x>=394

&&_touchingPoint.x<=601)&&(_touchingPoint.y>=394&&_tou chingPoint.y<=464)&& (esRender.getlayar()=="menu")){

esRen-

der.setlayar("developer"); }

//Koordinat Menu Exit if(( _touchingPoint.x>=394

&&_touchingPoint.x<=601)&&(_touchingPoint.y>=500&&_tou chingPoint.y<=575) && (esRender.getlayar()=="menu")){

System.exit(0); }

//Koordinat Menu Exit if(( _touchingPoint.x>=845

&&_touchingPoint.x<=967)&&(_touchingPoint.y>=esRender. getMyheight()- 96&&_touchingPoint.y<=esRender.getMyheight()-46)){

esRender.setlayar("menu"); }

//event untuk info if(( _touchingPoint.x>=883

&&_touchingPoint.x<=1008)&&(_touchingPoint.y>=esRender .getMyheight()- 68&&_touchingPoint.y<=esRender.getMyheight()-

20&&esRender.getlayar()=="eventsiji")){

esRen-

der.setlayar("tutorial");

esRen-

der.setEvent("event2"); }

if(( _touchingPoint.x>=883 &&_touchingPoint.x<=1008)&&(_touchingPoint.y>=esRender .getMyheight()- 68&&_touchingPoint.y<=esRender.getMyheight()- 20&&esRender.getlayar()=="eventloro")){

esRen-

der.setlayar("tutorial");

esRen-

der.setEvent("event3"); }

if(( _touchingPoint.x>=883 &&_touchingPoint.x<=1008)&&(_touchingPoint.y>=esRender .getMyheight()- 68&&_touchingPoint.y<=esRender.getMyheight()- 20&&esRender.getlayar()=="eventtelu")){

esRen-

der.setlayar("tutorial");

esRen-

der.setEvent("event4"); } if(( _touchingPoint.x>=883

&&_touchingPoint.x<=1008)&&(_touchingPoint.y>=esRender .getMyheight()- 68&&_touchingPoint.y<=esRender.getMyheight()- 20&&esRender.getlayar()=="eventpapat")){

esRen-

der.setlayar("tutorial");

esRen-

der.setEvent("event5"); }

if(( _touchingPoint.x>=883 &&_touchingPoint.x<=1008)&&(_touchingPoint.y>=esRender .getMyheight()-68 && _touchingPoint.y<=esRender.getMyheight()-20 && esRen- der.getlayar()=="eventlimo")){

esRen-

der.setlayar("tutorial");

esRen-

der.setEvent("event6"); } if(( _touchingPoint.x>=883

&&_touchingPoint.x<=1008)&&(_touchingPoint.y>=esRender .getMyheight()-68 && _touchingPoint.y<=esRender.getMyheight()-20 && esRen- der.getlayar()=="eventenem")){ &&_touchingPoint.x<=1008)&&(_touchingPoint.y>=esRender .getMyheight()-68 && _touchingPoint.y<=esRender.getMyheight()-20 && esRen- der.getlayar()=="eventenem")){

der.setlayar("tutorial");

esRen-

der.setEvent("event7"); } //finish game if(( _touchingPoint.x>=871

&&_touchingPoint.x<=1002)&&(_touchingPoint.y>=esRender .getMyheight()-80 && _touchingPoint.y<=esRender.getMyheight()-23)&& esRen- der.getlayar()=="wesbar"){

esRender.setlayar("menu"); }

if(( _touchingPoint.x>=17 &&_touchingPoint.x<=264)&&(_touchingPoint.y>=esRender. getMyheight()-74 && _touchingPoint.y<=esRender.getMyheight()-17) && esRen- der.getInfo()==6){

esRender.setlayar("Game"); }

//developer if(( _touchingPoint.x>=845

&&_touchingPoint.x<=983)&&(_touchingPoint.y>=esRender. getMyheight()-72 && _touchingPoint.y<=esRender.getMyheight()-30 && esRen- der.getlayar()=="developer")){

esRender.setlayar("menu"); }

break; case MotionEvent.ACTION_UP:

case MotionEvent.ACTION_MOVE: }

// Save current x, y previousX = currentX; previousY = currentY; return true; // Event handled // break;

private MotionEvent lastEvent;

// 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)) {

esRen- esRen-

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

>= 0)) { esRen- der.setspeedY(esRender.getspeedY() - 0.05f); } if ((esRender.getspeedY() - 0.05f

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

"action working"); break; case KeyEvent.KEYCODE_T: // up

if (esRender.getNavigate() == 0 && esRender.goForward()) esRen- der.setPositionRow(esRender.getPositionRow() - 1); else if (esRender.getNavigate() ==

1 && esRender.goForward()) esRen- der.setPositionCol(esRender.getPositionCol() + 1); else if (esRender.getNavigate() ==

2 && esRender.goForward()) esRen- der.setPositionRow(esRender.getPositionRow() + 1); else if (esRender.getNavigate() ==

3 && esRender.goForward()) esRen- der.setPositionCol(esRender.getPositionCol() - 1); Log.v("Test Action KEYCODE_T", "action working");

esRen- der.setX_player((esRender.getPositionCol() * esRender .getWidthObject()) + (esRender.getWidthObject() / 2)); esRen- der.setY_player(((esRender.getNumberRow() - esRen- der.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 esRen- der.setNavigate(esRender.getNavigate() + 1); Log.v("Test Action KEYCODE_H", "action working"); .getWidthObject()) + (esRender.getWidthObject() / 2)); break; case KeyEvent.KEYCODE_G: Log.v("Test Action KEYCODE_G", "action working"); break; case KeyEvent.KEYCODE_H: // right esRen- der.setNavigate(esRender.getNavigate() + 1); Log.v("Test Action KEYCODE_H", "action working");

esRen-

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

break;

if (esRender.getNavigate() < 0) esRender.setNavigate(3); esRen- der.setNavigate(esRender.getNavigate() % 4);

return true; // Event handled } }

/*MainActivity.java*/

package com.fractalbackground;

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

public class MainActivity extends Activity {

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

@Override protected void onCreate(Bundle savedInstanceS-

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

// requesting to turn the title OFF requestWindowFea- ture(Window.FEATURE_NO_TITLE); // making it full screen getWin- dow().setFlags(WindowManager.LayoutParams.FLAG_FULLSC REEN,

WindowManag- er.LayoutParams.FLAG_FULLSCREEN);

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

setRequestedOrienta- tion(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

/** * Remember to resume the glSurface */

@Override protected void onResume() {

super.onResume(); Music.play(this, R.raw.htc); 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; }

/*Music.java*/

package com.fractalbackground;

import android.content.Context; import android.media.MediaPlayer;

public class Music { private static MediaPlayer mp = null; private static MediaPlayer mpOnce = null;

/** Stop old song and start new one */ public static void playOnce(Context context, int

resource) {

//stop(context); mpOnce = MediaPlayer.create(context, re-

source);

mpOnce.setLooping(false); mpOnce.start();

public static void play(Context context, int re- source) { stop(context); mp = MediaPlayer.create(context, re-

source); mp.setLooping(true); mp.start();

/** Stop the music */ public static void stop(Context context) {

if (mp != null) {

mp.stop(); mp.release(); mp = null;

public static void pauseSong(Context context) { if (mp != null) {

mp.pause(); //mp.start(); //mp.play(this, resource); //mp.release(); //mp = null;

public static void stopOnce(Context context) { if (mpOnce != null) { mpOnce.stop(); mpOnce.release(); mpOnce = null;

/*PrimitivesObject.java*/

package com.fractalbackground;

import java.nio.ByteBuffer; import java.nio.ByteBuffer;

import javax.microedition.khronos.opengles.GL10;

import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.opengl.GLES20; import android.opengl.GLUtils; import android.util.Log;

public class PrimitivesObject {

//MyComplex mycomplex_k;

//MyComplex c = new MyComplex(0.109, 0.603); int width = 100, height = 100; //private int its_loop =0; //private float r_julia_m =0.f; boolean doJuliaSet = true; int idx_vertex = 0; int idx_vertex_color = 0;

private float verticesbackground[] = { 0.0f, 0.0f, 0.0f,

// V1 - bottom left 0.0f, 1.0f, 0.0f,

// V2 - top left 1.0f, 0.0f, 0.0f,

// V3 - bottom right 1.0f, 1.0f, 0.0f // V4 - top right };

//private FloatBuffer textureBuffer; // buffer holding the texture coordinates private float texturebackground[] = {

// Mapping coordinates for the vertices 0.0f, 1.0f, 0.0f,

// top left

(V2) 0.0f, 0.0f, 0.0f,

// bottom left (V1) 1.0f, 1.0f,

0.0f, // top right

(V4) 1.0f, 0.0f, 0.0f

// bottom right (V3) };

private int[] imageFileIDs = { // Image file IDs R.drawable.putih, //0 R.drawable.event1, R.drawable.event3, R.drawable.surat,

R.drawable.menu, R.drawable.event4,//5 R.drawable.ground, R.drawable.a_antri, R.drawable.a_bilik, R.drawable.a_cekundangan, R.drawable.a_celup,//10 R.drawable.a_juri, R.drawable.a_kasih_kartu, R.drawable.a_kotak, R.drawable.event4,//14 R.drawable.backk,//15 R.drawable.event5,//16 R.drawable.event6,//17 R.drawable.event7,//18 R.drawable.backpalsu,//19 R.drawable.benar,//20 R.drawable.salah,//21 R.drawable.surat,//22 R.drawable.finish, R.drawable.developers

private int[] imageFileIDs2 = { // Image file IDs R.drawable.orang1, R.drawable.orang2, R.drawable.orang3, R.drawable.orang4,

R.drawable.orang5, R.drawable.orang6, R.drawable.orang7, R.drawable.orang8};

private float vertices[] = { -0.5f, -0.5f, 0.0f, // V1 - first vertex

// (x,y,z) -0.5f, 0.5f, 0.0f, // V2 0.5f, 0.5f, 0.0f, // V3 0.5f, -0.5f, 0.0f, // V4 -0.5f, -0.5f, 0.0f // V5

private float textCoord_Triagle[]={ 1.0f, 1.0f, 0.0f,

V3 0.0f, 1.0f, 0.0f,

V2 0.5f, 0.0f, 0.0f,

// V1 - first vertex (x,y,z) };

int[] textures_indek = new int[1];

private float[] vertices_quad = { // Vertices for private float[] vertices_quad = { // Vertices for

private float vertices_color[] = { 1.0f, 0.0f, 0.0f, 1.0f, // CV1 - first

// color

// (red,green,blue) 0.0f, 1.0f, 0.0f, 1.0f, // CV2 0.0f, 0.0f, 1.0f, 1.0f, // CV3 0.0f, 1.0f, 0.0f, 1.0f, // CV4 1.0f, 0.0f, 0.0f, 1.0f // CV5

//private float vertices_horizontal[] = { 0.0f, 0.0f, 0.0f };

private float vertices_horiverti[] = { 0.0f, 0.0f, 0.0f }; private float vertices_labirin_player[] = { 0.0f, 0.0f, 0.0f }; private float vertices_circle[] = { 0.0f, 0.0f, 0.0f }; private float vertices_circle_color[] = { 0.0f, 0.0f, 0.0f, 0.5f };

private float vertices_line[] = { 0.0f, 0.0f, 0.0f };

private float vertices_line_color[] = { 0.0f, 0.0f, 0.0f, 1.0f }; private float verti- ces_fractal_mandelbrot[]={0.0f, 0.0f, 0.0f}; private float verti- ces_color_fractal_mandelbrot[]={0.0f, 0.0f, 0.0f, 0.0f};

private float vertices_fractal_julia[]={0.0f, 0.0f, 0.0f}; private float verti- ces_color_fractal_julia[]={0.0f, 0.0f, 0.0f, 0.0f};

private float vertices_fractal_julia_m[]={0.0f, 0.0f, 0.0f}; private float verti- ces_color_fractal_julia_m[]={0.0f, 0.0f, 0.0f, 0.0f};

private int batas_sudut = 360; float jari_jari; float a, b; float x, y; float step = 3.0f, step_line = 0.2f; private int batas_sudut = 360; float jari_jari; float a, b; float x, y; float step = 3.0f, step_line = 0.2f;

loop_line_color;

float WidthObject=0.08f; int numberRow=10,numberCol=10; int positionRow; int positionCol; int positionRow_end; int positionCol_end; int Navigate; int draw=1; float x_player=0; // posisi start float y_player=0; float x_player_end=0; // posisi end float y_player_end=0;

// menyimpan inisialisasi array untuk labirin int hori[][] = new

int[2*numberRow*numberCol][2*numberRow*numberCol]; int verti[][] = new int[2*numberRow*numberCol][2*numberRow*numberCol]; private int maze[][] = new int[2*numberRow*numberCol][2*numberRow*numberCol];

public PrimitivesObject() {

//this.mycomplex = new My- Complex(WidthObject, WidthObject);

// ============ start to generate verti- ces to circle

// ========================== // Inisialisasi jari_jari = 1.0f;

// Titik Pusat

a = 0.0f;

b = 0.0f; x = a + jari_jari; y = b;

loop = 3; loop_color = 4; vertices_circle = new float[(int) (3 *

batas_sudut / step) * 3]; vertices_circle_color = new float[(int) (3 * batas_sudut / step) * 4]; for (float teta = 0; teta <= 2 * ba- tas_sudut; teta += step) { vertices_circle[loop] = (float) ((x - a) * Math.cos((teta / 180) * (22 / 7)) - ((y - b) * Math.sin((teta / 180) * (22 / 7))) + a); vertices_circle[loop + 1] = (float) ((x - a)

* Math.sin((teta / 180) * (22 / 7)) - ((y - b) * Math.cos((teta / 180) * (22 / 7))) + b); vertices_circle[loop + 2] = 0; loop += 3;

// mengenerate warna untuk setiap vertex vertices_circle_color[loop_color] = (float) ((x - a) * Math.cos((teta / 180) * (22 / 7)) - ((y - b) * Math.sin((teta / 180) * (22 / 7))) + a); vertices_circle_color[loop_color + 1] = (float) ((x - a) * Math.sin((teta / 180) * (22 / 7)) - ((y - b) * Math.cos((teta / 180) * (22 / 7))) + b); vertices_circle_color[loop_color + 2] = 0.5f; vertices_circle_color[loop_color + 3] = 0.5f;

loop_color += 4;

} // ============= end for generate verti-

ces to circle // ====================

// ============ start to generate verti- ces to line

// ========================== x1 = -1.0f; y1 = -1.0f; x2 = 1.0f; y2 = 1.0f;

loop_line = 3; loop_line_color = 4; vertices_line = new float[(int) (2 * (x2

- x1) / step_line) * 3]; vertices_line_color = new float[(int) (2 * (x2 - x1) / step_line) * 4];

float m = (y2 - y1) / (x2 - x1); for (x = x1; x <= x2; x += step_line) {

vertices_line[loop_line] = (float) (x); vertices_line[loop_line + 1] = (float) (m * (x - x1) + y1); vertices_line[loop_line + 2] = 0; loop_line += 3;

// mengenerate warna untuk setiap vertex verti- ces_line_color[loop_line_color] = (float) (0.5 * x); // mengenerate warna untuk setiap vertex verti- ces_line_color[loop_line_color] = (float) (0.5 * x);

ces to line ====================

int i, j; vertices_horiverti = new

float[2*numberRow*numberCol*6];

vertices_labirin_player = new

float[2*3*3]; // start generate jaring-jaring labirin

////////////////////////////////////////// generateMaze();

//Log.v("ii Test get numberRow : ", "" + numberRow); //Log.v("ii Test get numberCol : ", "" + num- berCol);

//line horizontal int loop_vertices_horiverti=0; float y = (WidthObject * numberRow); for(i = 0; i < numberRow+1; i++) {

for(j = 0; j < numberCol; j++){ if (hori[i][j] == 1) {

// menampung vertex yang terbentuk verti- ces_horiverti[loop_vertices_horiverti]=j*WidthObject; verti- ces_horiverti[loop_vertices_horiverti+1]=y; verti- ces_horiverti[loop_vertices_horiverti+2]=0;

verti- ces_horiverti[loop_vertices_horiverti+3]=j*WidthObject + WidthObject;

verti- ces_horiverti[loop_vertices_horiverti+4]=y; verti- ces_horiverti[loop_vertices_horiverti+5]=0;

loop_vertices_horiverti+=6;

} y -= WidthObject;

//line vertical float x = 0; for(j = 0; j < numberCol+1; j++) {

for(i = 0; i < numberRow; i++){ if (verti[i][j] == 1){ // menampung vertex yang terbentuk

verti-

ces_horiverti[loop_vertices_horiverti]=x;

verti-

ces_horiverti[loop_vertices_horiverti+1]=(numberRow- i)*WidthObject;

verti-

ces_horiverti[loop_vertices_horiverti+2]=0;

verti- ces_horiverti[loop_vertices_horiverti+3]=x; verti- ces_horiverti[loop_vertices_horiverti+4]=(numberRow- i)*WidthObject-WidthObject;

verti- ces_horiverti[loop_vertices_horiverti+5]=0;

loop_vertices_horiverti+=6;

} } x += WidthObject;

//triagle vertices_labirin_player[0]=(positionCol * WidthObject) + (WidthObject/2); vertices_labirin_player[1]=(numberRow - po- sitionRow - 1)*WidthObject + (WidthObject * 3 / 4); vertices_labirin_player[2]=0;

vertices_labirin_player[3]=(positionCol * WidthObject) + (WidthObject/4); vertices_labirin_player[4]=(numberRow - po- sitionRow - 1)*WidthObject + (WidthObject / 4); vertices_labirin_player[5]=0;

vertices_labirin_player[6]=(positionCol * WidthObject) + (WidthObject*3/4); vertices_labirin_player[7]=(numberRow - po- sitionRow - 1)*WidthObject + (WidthObject / 4); vertices_labirin_player[8]=0;

x = (positionCol * WidthObject) + (WidthOb- ject/2); y = (numberRow - positionRow - 1)*WidthObject + (WidthObject / 2); this.x_player=x; this.y_player=y;

this.x_player_end=(positionCol_end * WidthObject) - (WidthObject/2);;

this.y_player_end=(numberRow- posi- tionRow_end - 1)*WidthObject + (WidthObject / 2);;

Log.v("Test get x_player : ", "" + x); Log.v("Test get y_player : ", "" + y);

Log.v("Test get x_player_end : ", "" + x_player_end); Log.v("Test get y_player_end : ", "" + y_player_end); }

// membuat inisialisasi jaring-jaring (generate Maze) public void generateMaze() {

//inisialisasi maze int i,j; Log.v("Test get numberRow : ", "" + number-

Row); Log.v("Test get numberCol : ", "" + num- berCol); for (i = 0; i < numberRow; i++){ for (j = 0; j < numberCol; j++) {

maze[i][j] = 0; verti[i][j] = 1; hori[i][j] = 1;

} } for (i = 0; i < numberRow; i++){ ver-

ti[i][numberCol] = 1;}

for (j = 0; j < numberCol; j++){ ho- ri[numberRow][j] = 1;}

//random cell

i = (int) (Math.random()*10%numberRow); j = (int) (Math.random()*10%numberCol); track(i,j);

//create in & out door

i = (int) (Math.random()*10%numberRow); j = (int) (Math.random()*10%numberRow);

verti[i][0] = 0; verti[j][numberCol] = 0;

// first position triangle positionRow = i; positionCol = 0; positionRow_end = j; positionCol_end = numberCol; Navigate = 0;

//rekursif public void track(int RowTrack, int ColTrack) {

int i,j; while (CheckNeighbor(RowTrack,ColTrack)) { int i,j; while (CheckNeighbor(RowTrack,ColTrack)) {

that not yet visit

i = RowTrack; j = ColTrack; //int k = rand()%4; int k = (int)

(Math.random()*10%4); if (k==0) j = ColTrack-1; else if (k==1) i = RowTrack-1; else if (k==2) j = ColTrack+1; else i = RowTrack+1;

}while(i<0 || i>=numberRow || j<0 || j>=numberCol || maze[i][j]==1);

maze[i][j] = 1; //mark cell that has been visit RemoveLine(RowTrack,ColTrack,i,j); track(i,j);

public boolean CheckNeighbor(int i, int j) {

if ((i-1 >=0) && (maze[i-1][j]==0)) return true; if ((i+1 <numberRow) && (maze[i+1][j]==0)) return true; if ((j-1 >=0) && (maze[i][j-1]==0)) return true; if ((j+1 <numberCol) && (maze[i][j+1]==0)) return true; return false; }

//remove line between 2 cell public void RemoveLine(int a1,int b1, int a2, int

b2) { if(a1==a2) {

//this.x_player_end=a1-(WidthObject/2);

if(b1 > b2) { verti[a1][b1] = 0; //this.y_player_end=b2-(WidthObject/2); } else { verti[a1][b2] = 0; //this.y_player_end=b1-(WidthObject/2); }

} else if(b1==b2) {

if(a1 > a2) hori[a1][b1] = 0; else hori[a2][b1] = 0;

// Point to our vertex buffer, return buffer // Point to our vertex buffer, return buffer

/** The draw method for the primitive object with the GL context */ public void draw_background(GL10 gl) {

//menempelkan tekstur ke objek gl.glEnable(GL10.GL_TEXTURE_2D);

// bind the previously generated texture gl.glBindTexture(GL10.GL_TEXTURE_2D, tex-

tures_indek[0]);

// Point to our buffers

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRA Y);

gl.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);

// Set the face rotation gl.glFrontFace(GL10.GL_CW);

// Point to our vertex buffer gl.glVertexPointer(3, GL10.GL_FLOAT, 0,

makeFloatBuffer(verticesbackground)); gl.glTexCoordPointer(3, GL10.GL_FLOAT, 0, makeFloatBuffer(texturebackground));

// Draw the vertices as triangle strip gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP,

0, verticesbackground.length / 3); //Log.v("verticesbackground.length : ", ""+verticesbackground.length); //Log.v("verticesbackground.length / 3 : ", ""+verticesbackground.length / 3); //gl.glDrawArrays(GL10.GL_TRIANGLE_FAN,

0, verticesbackground.length / 3);

//Disable the client state before leaving

gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARR AY); gl.glDisable( GL10.GL_TEXTURE_2D ); // Disable Texture Mapping } gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARR AY); gl.glDisable( GL10.GL_TEXTURE_2D ); // Disable Texture Mapping }

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

// gl.glEnableClientState(GL10.GL_COLOR_ARRAY);

// set the colour for the points (pem- berian warna untuk titik) gl.glColor4f(0.0f, 0.0f, 1.0f, 1.0f);

// Point to our vertex buffer (mendata nilai lokasi/posisi titik) gl.glVertexPointer(3, GL10.GL_FLOAT, 0, makeFloatBuffer(new float[] { 1.0f, 1.0f, 0.0f, // V1 - first vertex (x,y,z) 1.0f, 0.8f, 0.0f, // V2 1.0f, 0.6f, 0.0f, // V3 1.0f, 0.4f, 0.0f, // V4 1.0f, 0.2f, 0.0f, // V5 1.0f, 0.0f, 0.0f, // V6 1.0f, -0.2f, 0.0f, // V7 1.0f, -0.4f, 0.0f, // V8 1.0f, -0.6f, 0.0f, // V9 1.0f, -0.8f, 0.0f, // V10 1.0f, -1.0f, 0.0f, // V11

0.8f, -1.0f, 0.0f, // V12 0.6f, -1.0f, 0.0f, // V13 0.4f, -1.0f, 0.0f, // V14 0.2f, -1.0f, 0.0f, // V15 0.0f, -1.0f, 0.0f, // V16 -0.2f, -1.0f, 0.0f, // V17 -0.4f, -1.0f, 0.0f, // V18 -0.6f, -1.0f, 0.0f, // V19 -0.7f, -1.0f, 0.0f, // V20 -0.8f, -1.0f, 0.0f, // V21 -1.0f, -1.0f, 0.0f, // V22

// Draw the vertices as points (menggam- bar titik-titik) gl.glDrawArrays(GL10.GL_POINTS, 0, 22);

// Disable the client state before leav- ing

gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

// gl.glDisableClientState(GL10.GL_COLOR_ARRAY);

public void draw_fractal_julia_m(GL10 gl) {

//gl.glFrontFace(GL10.GL_CW); // Front face in counter-clockwise

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

// set the colour for the points (pem- berian warna untuk titik) //gl.glColor4f(0.0f, 0.0f, 1.0f, 0.5f);

// Point to our vertex buffer (mendata nilai lokasi/posisi titik) gl.glVertexPointer(3, GL10.GL_FLOAT, 0, makeFloatBuffer(vertices_fractal_julia_m));

gl.glColorPointer(4, GL10.GL_FLOAT, 0, makeFloatBuffer(vertices_color_fractal_julia_m)); // Draw the vertices as points (menggam- bar titik-titik) gl.glDrawArrays(GL10.GL_POINTS, 0, (int) ((idx_vertex-1)/3)); //gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP,

0, (int) ((idx_vertex-1)/3)); //gl.glDrawArrays(GL10.GL_POINTS, 0, 3); //gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP,

0, (int) (vertices_fractal_julia_m.length)/3); //gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 2,3); //gl.glDrawArrays(GL10.GL_LINES, 0, (int) (vertices_fractal_julia.length)/3);

//gl.glDrawArrays(GLES20.GL_POLYGON_OFFSET_FILL,

0, (int) (vertices_fractal_julia.length)/3);

// Disable the client state before leav- ing

gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

gl.glDisableClientState(GL10.GL_COLOR_ARRAY);

public void draw_fractal_julia(GL10 gl) {

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

gl.glEnableClientState(GL10.GL_COLOR_ARRAY);

// set the colour for the points (pem- berian warna untuk titik) //gl.glColor4f(0.0f, 0.0f, 1.0f, 1.0f);

// Point to our vertex buffer (mendata nilai lokasi/posisi titik) gl.glVertexPointer(3, GL10.GL_FLOAT, 0, makeFloatBuffer(vertices_fractal_julia)); // Point to our vertex buffer (mendata nilai lokasi/posisi titik) gl.glVertexPointer(3, GL10.GL_FLOAT, 0, makeFloatBuffer(vertices_fractal_julia));

// Disable the client state before leav- ing

gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

gl.glDisableClientState(GL10.GL_COLOR_ARRAY);

public void draw_fractal_mandelbrot(GL10 gl) {

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

gl.glEnableClientState(GL10.GL_COLOR_ARRAY);

// set the colour for the points (pem- berian warna untuk titik) //gl.glColor4f(0.0f, 0.0f, 1.0f, 1.0f);

// Point to our vertex buffer (mendata nilai lokasi/posisi titik) gl.glVertexPointer(3, GL10.GL_FLOAT, 0, makeFloatBuffer(vertices_fractal_mandelbrot));

gl.glColorPointer(4, GL10.GL_FLOAT, 0, makeFloatBuffer(vertices_color_fractal_mandelbrot)); // Draw the vertices as points (menggam- bar titik-titik) gl.glDrawArrays(GL10.GL_POINTS, 0, (int) (vertices_fractal_mandelbrot.length)/3);

// Disable the client state before leav- ing

gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

gl.glDisableClientState(GL10.GL_COLOR_ARRAY);

public void draw_line_maze_horiverti(GL10 gl) {

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

// set the colour for the line (pemberian warna untuk garis) gl.glColor4f(0.5f, 0.1f, 0.3f, 1.0f); gl.glVertexPointer(3, GL10.GL_FLOAT, 0,

makeFloatBuffer(vertices_horiverti)); makeFloatBuffer(vertices_horiverti));

// Disable the client state before leav- ing

gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

public void draw_segitiga_labirin_player(GL10 gl, int positionCol_in, int positionRow_in) {

verti- ces_labirin_player[0]=(positionCol_in * WidthObject) + (WidthObject/2);

vertices_labirin_player[1]=(numberRow - po- sitionRow_in - 1)*WidthObject + (WidthObject * 3 / 4); vertices_labirin_player[2]=0;

vertices_labirin_player[3]=(positionCol_in * WidthObject) + (WidthObject/4); vertices_labirin_player[4]=(numberRow - po- sitionRow_in - 1)*WidthObject + (WidthObject / 4); vertices_labirin_player[5]=0;

vertices_labirin_player[6]=(positionCol_in * WidthObject) + (WidthObject*3/4); vertices_labirin_player[7]=(numberRow - po- sitionRow_in - 1)*WidthObject + (WidthObject / 4); vertices_labirin_player[8]=0;

//x = (positionCol * WidthObject) + (WidthObject/2); //y = (numberRow - positionRow - 1)*WidthObject + (WidthObject / 2);

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

gl.glEnableClientState(GL10.GL_COLOR_ARRAY);

// set the colour for the triangle gl.glVertexPointer(3, GL10.GL_FLOAT, 0,

makeFloatBuffer(vertices_labirin_player));

// Draw the vertices as triangle gl.glColorPointer(4, GL10.GL_FLOAT, 0,

makeFloatBuffer(vertices_color)); gl.glDrawArrays(GLES20.GL_TRIANGLES, 0, 3);

// Disable the client state before leav- ing

gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

public void draw_segitiga_labirin_player(GL10 gl ){

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

gl.glEnableClientState(GL10.GL_COLOR_ARRAY);

gl.glVertexPointer(3, GL10.GL_FLOAT, 0, makeFloatBuffer(vertices_labirin_player));

// Draw the vertices as triangle gl.glColorPointer(4, GL10.GL_FLOAT, 0,

makeFloatBuffer(vertices_color)); gl.glDrawArrays(GLES20.GL_TRIANGLES, 0, 3);

// Disable the client state before leav- ing

gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

gl.glDisableClientState(GL10.GL_COLOR_ARRAY);

public void draw_segitiga_texture(GL10 gl, int positionCol_in, int positionRow_in) { gl.glFrontFace(GL10.GL_CCW); // Front face in counter-clockwise

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

//gl.glEnableClientState(GL10.GL_COLOR_ARRAY);

verti- ces_labirin_player[0]=(positionCol_in * WidthObject) + (WidthObject/2);

vertices_labirin_player[1]=(numberRow - po- sitionRow_in - 1)*WidthObject + (WidthObject * 3 / 4); vertices_labirin_player[2]=0;

vertices_labirin_player[3]=(positionCol_in * WidthObject) + (WidthObject/4); vertices_labirin_player[4]=(numberRow - po- sitionRow_in - 1)*WidthObject + (WidthObject / 4); vertices_labirin_player[5]=0;

vertices_labirin_player[6]=(positionCol_in * WidthObject) + (WidthObject*3/4); vertices_labirin_player[7]=(numberRow - po- sitionRow_in - 1)*WidthObject + (WidthObject / 4); vertices_labirin_player[8]=0;

// set the colour for the triangle (menghilangkan effect dari warna objek sebelumnya) // set the colour for the triangle (menghilangkan effect dari warna objek sebelumnya)

gl.glVertexPointer(3, GL10.GL_FLOAT, 0, makeFloatBuffer(vertices_labirin_player));

//menempelkan tekstur ke objek gl.glEnable(GL10.GL_TEXTURE_2D);

gl.glEnable(GL10.GL_BLEND); gl.glBlendFunc(GL10.GL_SRC_ALPHA,

GL10.GL_ONE_MINUS_SRC_ALPHA);

gl.glBindTexture(GL10.GL_TEXTURE_2D, tex- tures_indek[0]); // gl.glTexCoordPointer(3, GL10.GL_FLOAT, 0, makeFloatBuffer(textCoord_Triagle)); //

gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRA Y);

gl.glDrawArrays(GLES20.GL_TRIANGLE_STRIP,

//Disable the client state before leaving

gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); gl.glDisable( GL10.GL_BLEND );

// Disable Alpha Blend

gl.glDisable( GL10.GL_TEXTURE_2D ); // Disable Texture Mapping

public void draw_line(GL10 gl) {

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

// gl.glEnableClientState(GL10.GL_COLOR_ARRAY);

// set the colour for the line (pemberian warna untuk garis) gl.glColor4f(0.0f, 0.0f, 1.0f, 1.0f);

// Point to our vertex buffer (mendata nilai lokasi/posisi titik yang // menyusun garis) gl.glVertexPointer(3, GL10.GL_FLOAT, 0,

makeFloatBuffer(new float[] { 1.0f, 1.0f, 0.0f, // V1 - first vertex (x,y,z) -1.0f, -1.0f, 0.0f, // V2 - second vertex }));

// Draw the vertices as lines (menggambar garis dari titik-titik) gl.glDrawArrays(GL10.GL_LINES, 0, 2);

// Disable the client state before leav- ing

gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

public void draw_line_color(GL10 gl) {

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

gl.glEnableClientState(GL10.GL_COLOR_ARRAY);

// set the colour for the line (pemberian warna untuk garis) gl.glColor4f(0.0f, 0.0f, 1.0f, 1.0f);

// Point to our vertex buffer (mendata nilai lokasi/posisi titik yang // menyusun garis) gl.glVertexPointer(3, GL10.GL_FLOAT, 0,

makeFloatBuffer(vertices_line));

// memetakan warna untuk setiap vertex gl.glColorPointer(4, GL10.GL_FLOAT, 0,

makeFloatBuff- er(vertices_line_color));

// Draw the vertices as lines (menggambar garis dari titik-titik) gl.glDrawArrays(GL10.GL_LINE_STRIP, 0, (int) (2 * (x2 - x1) / step_line));

// Disable the client state before leav- ing

gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

gl.glDisableClientState(GL10.GL_COLOR_ARRAY);

public void draw_circle(GL10 gl) {

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

// gl.glEnableClientState(GL10.GL_COLOR_ARRAY);

// set the colour for the object circle gl.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);

// create VBO from buffer with glBuffer- Data() gl.glVertexPointer(3, GL10.GL_FLOAT, 0, makeFloatBuff- er(vertices_circle));

// // membuat garis putus-putus pada tepi lingkaran gl.glDrawArrays(GL10.GL_LINES, 1, (int) ((int) 2 * batas_sudut / step));

// Disable the client state before leav- ing

gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

// gl.glDisableClientState(GL10.GL_COLOR_ARRAY); }

public void draw_circle_color(GL10 gl) {

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

gl.glEnableClientState(GL10.GL_COLOR_ARRAY);

// set the colour edge for the object circle gl.glColor4f(0.0f, 0.0f, 1.0f, 1.0f);

// create VBO from buffer with glBuffer- Data() gl.glVertexPointer(3, GL10.GL_FLOAT, 0, makeFloatBuff- er(vertices_circle));

// memetakan warna untuk setiap vertex gl.glColorPointer(4, GL10.GL_FLOAT, 0,

makeFloatBuff- er(vertices_circle_color));

gl.glDrawArrays(GL10.GL_LINE_STRIP, 1, (int) ((int) 2 * ba- tas_sudut / step));

// Disable the client state before leav- ing

gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

gl.glDisableClientState(GL10.GL_COLOR_ARRAY); }

public void draw_kotak(GL10 gl) {

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

gl.glEnableClientState(GL10.GL_COLOR_ARRAY);

// Point to our vertex buffer gl.glVertexPointer(3, GL10.GL_FLOAT, 0,

makeFloatBuffer(vertices));

// Draw the vertices as square gl.glColorPointer(4, GL10.GL_FLOAT, 0, // Draw the vertices as square gl.glColorPointer(4, GL10.GL_FLOAT, 0,

gl.glColorPointer(4, GL10.GL_FLOAT, 0, makeFloatBuffer(vertices_color)); gl.glDrawArrays(GL10.GL_TRIANGLES, 2, 3);

// Disable the client state before leav- ing

gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

gl.glDisableClientState(GL10.GL_COLOR_ARRAY);

public void draw_segitiga(GL10 gl) {

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

gl.glEnableClientState(GL10.GL_COLOR_ARRAY);

// set the colour for the triangle gl.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);

gl.glVertexPointer(3, GL10.GL_FLOAT, 0, makeFloatBuffer(new float[] { -0.5f, -0.5f, 0.0f, // V1 - first vertex (x,y,z) 0.5f, -0.5f, 0.0f, // V2 - second vertex 0.0f, 0.5f, 0.0f // V3 - third vertex

// Draw the vertices as triangle gl.glColorPointer(4, GL10.GL_FLOAT, 0,

makeFloatBuffer(vertices_color)); gl.glDrawArrays(GLES20.GL_TRIANGLES, 0, 3);

// Disable the client state before leav- ing

gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

gl.glDisableClientState(GL10.GL_COLOR_ARRAY);

// Render the shape quad public void draw_quad(GL10 gl) {

// Enable vertex-array and define its buffer

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

gl.glVertexPointer(3, GL10.GL_FLOAT, 0, makeFloatBuffer(vertices_quad));

// Draw the primitives from the vertex- array directly

gl.glPolygonOffset(0.0f, 1.0f); gl.glScalef(0.5f, 0.5f, 0.5f); gl.glColor4f(0.5f, 0.5f, 1.0f, 1.0f); //

Set the current color (NEW) gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP,

0, vertices_quad.length / 3);

gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); }

public void loadBallTexture(GL10 gl, Context con- text,int index_Texture) {

// Bitmap bitmap = BitmapFacto-

ry.decodeResource(context.getResources(), // resource);

/*Bitmap bitmap = BitmapFacto-

ry.decodeStream(context.getResources()

.openRawResource(R.drawable.nature));*/

Bitmap bitmap = BitmapFacto-

ry.decodeStream(context.getResources()

.openRawResource(imageFileIDs[index_Texture]));

gl.glGenTextures(1, textures_indek, 0); gl.glBindTexture(GL10.GL_TEXTURE_2D, tex-

tures_indek[0]);

gl.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST); gl.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);

GLUtils.texImage2D(GLES20.GL_TEXTURE_2D,

0, bitmap, 0);

bitmap.recycle(); }

public void loadBallTexture2(GL10 gl, Context context,int index_Texture) {

// Bitmap bitmap = BitmapFacto-

ry.decodeResource(context.getResources(), // resource);

/*Bitmap bitmap = BitmapFacto-

ry.decodeStream(context.getResources()

.openRawResource(R.drawable.nature));*/

Bitmap bitmap = BitmapFacto-

ry.decodeStream(context.getResources()

.openRawResource(imageFileIDs2[index_Texture])); .openRawResource(imageFileIDs2[index_Texture]));

tures_indek[0]);

gl.glTexParameterf(GLES20.GL_TEXTURE_2D,

GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST);

gl.glTexParameterf(GLES20.GL_TEXTURE_2D,

GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);

GLUtils.texImage2D(GLES20.GL_TEXTURE_2D,

0, bitmap, 0);

bitmap.recycle(); } }

/*SplashScreen.java*/

package com.fractalbackground;

import android.app.Activity; import android.content.Intent; import android.content.pm.ActivityInfo; import android.os.Bundle; import android.os.Handler; import android.view.Window; import android.view.WindowManager;

public class SplashScreen extends Activity {

// Splash screen timer private static int SPLASH_TIME_OUT = 1000;

@Override protected void onCreate(Bundle savedInstanceState)

super.onCreate(savedInstanceState);

// requesting to turn the title OFF requestWindowFeature(Window.FEATURE_NO_TITLE); // making it full screen

getWin- dow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCR EEN,

WindowManag- er.LayoutParams.FLAG_FULLSCREEN);

setRequestedOrienta- tion(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); setContentView(R.layout.activity_splash);

//@Override // protected void onCreate(final Bundle savedInstance) {

// super.onCreate(savedInstance);

//setRequestedOrientation(ActivityInfo.SCREEN_ORIENTAT ION_LANDSCAPE);

new Handler().postDelayed(new Runnable() {

/* * Showing splash screen with a timer. This will be useful when you * want to show case your app logo / com- pany */

@Override public void run() {

// This method will be executed once the timer is over // Start your app main activity Intent i = new In-

tent(SplashScreen.this, SplashScreen5.class);

i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); startActivity(i);

// close this activity finish();

} }, SPLASH_TIME_OUT); }

/*SplashScreen1.java*/

package com.fractalbackground;

import android.app.Activity; import android.content.Intent; import android.content.pm.ActivityInfo; import android.os.Bundle; import android.os.Handler; import android.view.Window; import android.view.WindowManager;

public class SplashScreen1 extends Activity {

// Splash screen timer private static int SPLASH_TIME_OUT = 100;

@Override protected void onCreate(Bundle savedInstanceState) @Override protected void onCreate(Bundle savedInstanceState)

// requesting to turn the title OFF requestWindowFeature(Window.FEATURE_NO_TITLE); // making it full screen

getWin- dow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCR EEN,

WindowManag- er.LayoutParams.FLAG_FULLSCREEN);

setRequestedOrienta- tion(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); setContentView(R.layout.activity_splash1);

//@Override // protected void onCreate(final Bundle savedInstance) { // super.onCreate(savedInstance);

//setRequestedOrientation(ActivityInfo.SCREEN_ORIENTAT ION_LANDSCAPE);

new Handler().postDelayed(new Runnable() {

/* * Showing splash screen with a timer. This will be useful when you * want to show case your app logo / com- pany */

@Override public void run() {

// This method will be executed once the timer is over // Start your app main activity Intent i = new In-

tent(SplashScreen1.this, MainActivity.class);

i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); startActivity(i);

// close this activity finish();

} }, SPLASH_TIME_OUT); } }

/*SplashScreen2.java*/

package com.fractalbackground; package com.fractalbackground;

public class SplashScreen2 extends Activity {

// Splash screen timer private static int SPLASH_TIME_OUT = 5;

@Override protected void onCreate(Bundle savedInstanceState)

{ super.onCreate(savedInstanceState);

// requesting to turn the title OFF requestWindowFeature(Window.FEATURE_NO_TITLE); // making it full screen

getWin- dow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCR EEN,

WindowManag- er.LayoutParams.FLAG_FULLSCREEN);

setRequestedOrienta- tion(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); setContentView(R.layout.activity_splash2);

//@Override // protected void onCreate(final Bundle savedInstance) {

// super.onCreate(savedInstance);

//setRequestedOrientation(ActivityInfo.SCREEN_ORIENTAT ION_LANDSCAPE);

new Handler().postDelayed(new Runnable() {

/* * Showing splash screen with a timer. This will be useful when you * want to show case your app logo / com- pany */

@Override public void run() {

// This method will be executed once the timer is over // Start your app main activity Intent i = new In-

tent(SplashScreen2.this, SplashScreen1.class);

i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); startActivity(i);

// close this activity finish();

} }, SPLASH_TIME_OUT); }

/*SplashScreen3.java*/

package com.fractalbackground;

import android.app.Activity; import android.content.Intent; import android.content.pm.ActivityInfo; import android.os.Bundle; import android.os.Handler; import android.view.Window; import android.view.WindowManager;

public class SplashScreen3 extends Activity {

// Splash screen timer private static int SPLASH_TIME_OUT = 5;

@Override protected void onCreate(Bundle savedInstanceState)

super.onCreate(savedInstanceState);

// requesting to turn the title OFF requestWindowFeature(Window.FEATURE_NO_TITLE); // making it full screen

getWin- dow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCR EEN,

WindowManag- er.LayoutParams.FLAG_FULLSCREEN);

setRequestedOrienta- tion(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); setContentView(R.layout.activity_splash3);

//@Override // protected void onCreate(final Bundle savedInstance) { // super.onCreate(savedInstance);

//setRequestedOrientation(ActivityInfo.SCREEN_ORIENTAT ION_LANDSCAPE);

/* * Showing splash screen with a timer. This will be useful when you * want to show case your app logo / com- pany */

@Override public void run() {

// This method will be executed once the timer is over // Start your app main activity Intent i = new In-

tent(SplashScreen3.this, SplashScreen2.class);

i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); startActivity(i);

// close this activity finish();

} }, SPLASH_TIME_OUT); }

/*SplashScreen4.java*/

package com.fractalbackground;

import android.app.Activity; import android.content.Intent; import android.content.pm.ActivityInfo; import android.os.Bundle; import android.os.Handler; import android.view.Window; import android.view.WindowManager;

public class SplashScreen4 extends Activity {

// Splash screen timer private static int SPLASH_TIME_OUT = 5;

@Override protected void onCreate(Bundle savedInstanceState)

super.onCreate(savedInstanceState);

// requesting to turn the title OFF // requesting to turn the title OFF

getWin- dow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCR EEN,

WindowManag- er.LayoutParams.FLAG_FULLSCREEN);

setRequestedOrienta- tion(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); setContentView(R.layout.activity_splash4);

//@Override // protected void onCreate(final Bundle savedInstance) { // super.onCreate(savedInstance);

//setRequestedOrientation(ActivityInfo.SCREEN_ORIENTAT ION_LANDSCAPE);

new Handler().postDelayed(new Runnable() {

/* * Showing splash screen with a timer. This will be useful when you * want to show case your app logo / com- pany */

@Override public void run() {

// This method will be executed once the timer is over // Start your app main activity Intent i = new In-

tent(SplashScreen4.this, SplashScreen3.class);

i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); startActivity(i);

// close this activity finish();

} }, SPLASH_TIME_OUT); } }

/*SplashScreen5.java*/

package com.fractalbackground;

import android.app.Activity; import android.app.Activity;

public class SplashScreen5 extends Activity {

// Splash screen timer private static int SPLASH_TIME_OUT = 5;

@Override protected void onCreate(Bundle savedInstanceState)

{ super.onCreate(savedInstanceState);

// requesting to turn the title OFF requestWindowFeature(Window.FEATURE_NO_TITLE); // making it full screen

getWin- dow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCR EEN,

WindowManag- er.LayoutParams.FLAG_FULLSCREEN);

setRequestedOrienta- tion(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); setContentView(R.layout.activity_splash5);

//@Override // protected void onCreate(final Bundle savedInstance) {

// super.onCreate(savedInstance);

//setRequestedOrientation(ActivityInfo.SCREEN_ORIENTAT ION_LANDSCAPE);

new Handler().postDelayed(new Runnable() {

/* * Showing splash screen with a timer. This will be useful when you * want to show case your app logo / com- pany */

@Override public void run() {

// This method will be executed once the timer is over // Start your app main activity Intent i = new In-

tent(SplashScreen5.this, SplashScreen4.class);

i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); startActivity(i);

// close this activity finish();

} }, SPLASH_TIME_OUT); }