blog.ub.ac.idblog.ub.ac.id/.../2013/11/laporan-kelompok-fauzi-dkk.docx · web viewfungsi ini...

30
LAPORAN TUGAS BESAR PROGRAM “TIC TAC TOE” (GAME EDUCATION) DISUSUN OLEH : Awangga Lazuardi N(105060807111014) Fauzi Dwi Susanto (105060801111041) Henny Aprilya F.W.(105060807111115) Magdalena Trie P (105060807111045) Rifqi Kurniawan (105060807111155) KELAS : GRAFIKA KOMPUTER E PROGRAM TEKNOLOGI INFORMASI DAN ILMU KOMPUTER

Upload: trancong

Post on 10-May-2019

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak

LAPORAN TUGAS BESAR

PROGRAM “TIC TAC TOE” (GAME EDUCATION)

DISUSUN OLEH :

Awangga Lazuardi N (105060807111014)

Fauzi Dwi Susanto (105060801111041)

Henny Aprilya F.W. (105060807111115)

Magdalena Trie P (105060807111045)

Rifqi Kurniawan (105060807111155)

KELAS : GRAFIKA KOMPUTER E

PROGRAM TEKNOLOGI INFORMASI DAN ILMU KOMPUTER

PROGRAM STUDI TEKNIK INFROMATIKA

UNIVERSITAS BRAWIIJAYA

MALANG

Page 2: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak

Source Code Program

#include <windows.h> #include <glut.h> #include <stdio.h> #include <stdlib.h> #include <math.h> #pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"") // Hidden the console window

#define stripeImageWidth 32

GLuint texture; //the array for our textureGLfloat angle = 0.0;

GLubyte stripeImage[4*stripeImageWidth];

static GLuint texName;

void makeStripeImage(void){ int j; for (j = 0; j < stripeImageWidth; j++) { stripeImage[4*j] = (GLubyte) ((j<=3) ? 100 : 0); stripeImage[4*j+1] = (GLubyte) ((j>3) ? 100 : 0); stripeImage[4*j+2] = (GLubyte) 0; stripeImage[4*j+3] = (GLubyte) 100; }}

/* planes for texture coordinate generation */static GLfloat xequalzero[] = {1.0, 0.0, 0.0, 0.0};static GLfloat slanted[] = {1.0, 1.0, 1.0, 0.0};static GLfloat *currentCoeff;static GLenum currentPlane;static GLint currentGenMode;

// lightingGLfloat LightAmbient[]= { 0.5f, 0.5f, 0.5f, 1.0f };GLfloat LightDiffuse[]= { 0.5f, 0.5f, 0.5f, 1.0f };GLfloat LightPosition[]= { 5.0f, 25.0f, 5.0f, 1.0f };GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };

Page 3: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak

//variable mouse: Win = windows size, mouse = mouse positionint mouse_x, mouse_y, Win_x, Win_y, object_select;

// state variables for Orho/Perspective view, lighting on/offstatic int view_state = 0, light_state = 0;

// digunakan untuk memutar X's and O'sint spin, spinboxes;

// Win = 1 player wins, -1 computer wins, 2 tie.// player or computer; 1 = X, -1 = O// start_game indicates that game is in play.int player, computer, win, start_game;

// alingment of boxes in which one can win// We have 8 posiblities, 3 accross, 3 down and 2 diagnally//// 0 | 1 | 2// 3 | 4 | 5// 6 | 7 | 8//// row, colunm, diagnal information

static int box[8][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}, {0, 3, 6}, {1, 4, 7}, {2, 5, 8}, {0, 4, 8}, {2, 4, 6}};

// Storage for our game board// 1 = X's, -1 = O's, 0 = open space

int box_map[9];// center x,y location for each boxint object_map[9][2] = {{-6,6},{0,6},{6,6},{-6,0},{0,0},{6,0},{-6,-6},{0,-6},{6,-6}};

// quadric pointer for build our XGLUquadricObj *Cylinder;

// Begin game routinevoid init_game(void){int i;

// Clear map for new gamefor( i = 0; i < 9; i++)

{box_map[i] = 0;

Page 4: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak

}

// Set 0 for no winnerwin = 0;start_game = 1;}

// Check for three in a row/colunm/diagnal// returns 1 if there is a winnerint check_move( void ){

int i, t = 0;

//Check for three in a rowfor( i = 0; i < 8; i++)

{ t = box_map[box[i][0]] + box_map[box[i][1]] + box_map[box[i][2]];

if ( (t == 3) || ( t == -3) ) { spinboxes = i; return( 1 ); } }t = 0;// check for tiefor( i = 0; i < 8; i++)

{ t = t + abs(box_map[box[i][0]]) + abs( box_map[box[i][1]]) + abs( box_map[box[i][2]]); }

if ( t == 24 ) return( 2 );

return( 0 );}

// Do we need to block other player?int blocking_win(void){int i, t;for( i = 0; i < 8; i++)

{ t = box_map[box[i][0]] + box_map[box[i][1]] + box_map[box[i][2]];

if ( (t == 2) || ( t == -2) ) { // Find empty if (box_map[box[i][0]] == 0) box_map[box[i][0]] = computer;

Page 5: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak

if (box_map[box[i][1]] == 0) box_map[box[i][1]] = computer; if (box_map[box[i][2]] == 0) box_map[box[i][2]] = computer;

return( 1 ); } }return( 0 );}

// check for a free space in cornerint check_corner(void){int i;

if ( box_map[0] == 0){box_map[0] = computer;i = 1;return( 1 );

}

if ( box_map[2] == 0){box_map[2] = computer;i = 1;return( 1 );

}

if ( box_map[6] == 0){box_map[6] = computer;i = 1;return( 1 );

}

if ( box_map[8] == 0){box_map[8] = computer;i = 1;return( 1 );

}

return( 0 );}

// Check for free space in rowint check_row(void){

if ( box_map[4] == 0)

Page 6: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak

{box_map[4] = computer;return( 1 );

}

if ( box_map[1] == 0){box_map[1] = computer;return( 1 );

}

if ( box_map[3] == 0){box_map[3] = computer;return( 1 );

}if ( box_map[5] == 0)

{box_map[5] = computer;return( 1 );

}if ( box_map[7] == 0)

{box_map[7] = computer;return( 1 );

} return( 0 );}

// logic for computer's turnint computer_move(){if ( blocking_win() == 1) return( 1 );if ( check_corner() == 1) return( 1 );if ( check_row() == 1) return( 1 );

return( 0 );}

// I use this to put text on the screenvoid Sprint( int x, int y, char *st){

int l,i;

l=strlen( st ); // see how many characters are in text string.glRasterPos2i( x, y); // location to start printing textfor( i=0; i < l; i++) // loop until i is greater then l

{

Page 7: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak

glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, st[i]); // Print a character on the screen

}

}

// This creates the spinning of the cube.static void TimeEvent(int te){

spin++; // increase cube rotation by 1if (spin > 180) spin = 0; // if over 360 degress, start back at zero.glutPostRedisplay(); // Update screen with new rotation dataglutTimerFunc( 10, TimeEvent, 1); // Reset our timmer.

}

// Setup our Opengl world, called once at startup.void init(void){ glClearColor (0.0, 0.0, 0.0, 0.0); // When screen cleared, use black. glShadeModel (GL_SMOOTH); // How the object color will be rendered smooth or flat glEnable(GL_DEPTH_TEST); // Check depth when rendering

// Lighting is added to scene glLightfv(GL_LIGHT1 ,GL_AMBIENT, LightAmbient); glLightfv(GL_LIGHT1 ,GL_DIFFUSE, LightDiffuse); glLightfv(GL_LIGHT1 ,GL_POSITION, LightPosition); glEnable(GL_LIGHTING); // Turn on lighting glEnable(GL_LIGHT1); // Turn on light 1

start_game = 0; win = 0;

// Create a new quadric Cylinder = gluNewQuadric(); gluQuadricDrawStyle( Cylinder, GLU_FILL ); gluQuadricNormals( Cylinder, GLU_SMOOTH ); gluQuadricOrientation( Cylinder, GLU_OUTSIDE ); makeStripeImage(); glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

glGenTextures(1, &texName); glBindTexture(GL_TEXTURE_1D, texName); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT);

Page 8: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak

glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA, stripeImageWidth, 0, GL_RGBA, GL_UNSIGNED_BYTE, stripeImage);

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); currentCoeff = xequalzero; currentGenMode = GL_OBJECT_LINEAR; currentPlane = GL_OBJECT_PLANE; glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, currentGenMode); glTexGenfv(GL_S, currentPlane, currentCoeff);

glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_1D); glEnable(GL_CULL_FACE); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_AUTO_NORMAL); glEnable(GL_NORMALIZE); glFrontFace(GL_CW); glCullFace(GL_BACK); glMaterialf (GL_FRONT, GL_SHININESS, 64.0);}

void Draw_O(int x, int y, int z, int a){glEnable(GL_TEXTURE_1D);glPushMatrix();glTranslatef(x, y, z);glRotatef(a, 1, 0, 0);glutSolidTorus(0.5, 2.0, 8, 16);glPopMatrix();glDisable(GL_TEXTURE_1D);

}

void Draw_X(int x, int y, int z, int a){glPushMatrix();glTranslatef(x, y, z);glPushMatrix();glRotatef(a, 1, 0, 0);glRotatef(90, 0, 1, 0);glRotatef(45, 1, 0, 0);glTranslatef( 0, 0, -3);

Page 9: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak

gluCylinder( Cylinder, 0.5, 0.5, 6, 16, 16);//glutSolidCone( 2.5, 3.0, 16, 8 );glPopMatrix();glPushMatrix();glRotatef(a, 1, 0, 0);glRotatef(90, 0, 1, 0);glRotatef(315, 1, 0, 0);glTranslatef( 0, 0, -3);gluCylinder( Cylinder, 0.5, 0.5, 6, 16, 16);//glutSolidCone( 2.5, 3.0, 16, 8 );glPopMatrix();glPopMatrix();

}

// Draw our worldvoid display(void){

//char txt[30];int ix, iy;int i;int j;

glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //Clear the screen

glMatrixMode (GL_PROJECTION); // Tell opengl that we are doing project matrix workglLoadIdentity(); // Clear the matrixglOrtho(-9.0, 9.0, -9.0, 9.0, 0.0, 30.0); // Setup an Ortho viewglMatrixMode(GL_MODELVIEW); // Tell opengl that we are doing model matrix work. (drawing)glLoadIdentity();

glDisable(GL_COLOR_MATERIAL);glDisable(GL_LIGHTING);

glColor3f(1.0, 1.0, 1.0);

if ( start_game == 0 ) { Sprint(-3, -1, "untuk memulai permainan"); Sprint(-3, -2, "tekan mouse kanan untuk pilihan X"); Sprint(-3, -3, "tekan mouse kiri untuk pilihan O"); }

if (win == 1) Sprint( -2, 1, "Kamu menang");if (win == -1) Sprint( -2, 1, "Komputer Menang");if (win == 2) Sprint( -2, 1, "Tertutup");

Page 10: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak

// Setup view, and print view state on screenif (view_state == 1)

{ glColor3f( 0.0, 0.0, 1.0); Sprint(-3, 8, "Perspective view"); glMatrixMode (GL_PROJECTION); glLoadIdentity(); gluPerspective(60, 1, 1, 30); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); }else

{glColor3f( 1.0, 0.0, 1.0);

}

// Lighting on/offif (light_state == 1)

{glDisable(GL_LIGHTING);

glDisable(GL_COLOR_MATERIAL); }else

{ glEnable(GL_LIGHTING); glEnable(GL_COLOR_MATERIAL); }

gluLookAt( 0, 0, 20, 0, 0, 0, 0, 1, 0);

// Draw Grid

for( ix = 0; ix < 4; ix++){

glPushMatrix(); glColor3f(1,1,1);

glBegin(GL_LINES); glVertex2i(-9 , -9 + ix * 6); glVertex2i(9 , -9 + ix * 6 ); glEnd(); glPopMatrix();}for( iy = 0; iy < 4; iy++ ) {

glPushMatrix(); glColor3f(1,1,1);

glBegin(GL_LINES); glVertex2i(-9 + iy * 6, 9 );

Page 11: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak

glVertex2i(-9 + iy * 6, -9 ); glEnd(); glPopMatrix();

}

glColorMaterial(GL_FRONT, GL_AMBIENT);glColor4f(0.5, 0.5, 0.5, 1.0);glColorMaterial(GL_FRONT, GL_EMISSION);glColor4f(0.0, 0.0, 0.0, 1.0 );glColorMaterial(GL_FRONT, GL_SPECULAR);glColor4f(0.35, 0.35, 0.35, 1.0);glColorMaterial(GL_FRONT, GL_DIFFUSE);glColor4f(0.69, 0.69, 0.69, 1.0);glDisable(GL_COLOR_MATERIAL);//glColor3f( 1.0, 0.0, 1.0); // Cube color

for( i = 0; i < 9; i++) { j = 0; if (abs( win ) == 1 ) { if ( (i == box[spinboxes][0]) || (i == box[spinboxes][1]) || (i == box[spinboxes][2])) { j = spin; }else j = 0; } if(box_map[i] == 1) Draw_X( object_map[i][0], object_map[i][1], -1, j);

if(box_map[i] == -1) Draw_O( object_map[i][0], object_map[i][1], -1, j); }glRectf(-9.0f, -9.0f, 9.0f, 9.0f); //glDisable(GL_COLOR_MATERIAL);

glutSwapBuffers();}

// This is called when the window has been resized.void reshape (int w, int h) { Win_x = w; Win_y = h; glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity ();}

// Read the keyboardvoid keyboard (unsigned char key, int x, int y) {

Page 12: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak

switch (key) { case 'v': case 'V':

view_state = abs(view_state -1); break;

case 'l': case 'L':

light_state = abs(light_state -1); break;

case 27: exit(0); // exit program when [ESC] key presseed break; default: break; }}

void mouse(int button, int state, int x, int y){// We convert windows mouse coords to out openGL coordsmouse_x = (18 * (float) ((float)x/(float)Win_x))/6;mouse_y = (18 * (float) ((float)y/(float)Win_y))/6;

// What square have they clicked in?object_select = mouse_x + mouse_y * 3;

if ( start_game == 0){

if ((button == GLUT_RIGHT_BUTTON) && (state == GLUT_DOWN)) { player = 1;

computer = -1; init_game(); return;

}

if ((button == GLUT_LEFT_BUTTON) && (state == GLUT_DOWN)) {

player = -1; computer = 1;

init_game(); computer_move(); return;

} }

if ( start_game == 1){

if ((button == GLUT_LEFT_BUTTON) && (state == GLUT_DOWN))

Page 13: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak

{ if (win == 0) { if (box_map[ object_select ] == 0) { box_map[ object_select ] = player;

win = check_move(); if (win == 1) { start_game = 0;

return; } computer_move();

win = check_move(); if (win == 1) {

win = -1; start_game = 0; } } }

} }

if ( win == 2 )start_game = 0;

}

// Main programint main(int argc, char** argv){ glutInit(&argc, argv); glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize (700, 700); glutInitWindowPosition (10, 10); glutCreateWindow (argv[0]); glutSetWindowTitle("X's and O's"); init (); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMouseFunc(mouse); glutTimerFunc( 10, TimeEvent, 1); glutMainLoop(); return 0;}

Page 14: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak

Analisis Sorce Code Program

1. Pada setiap program yang perlu dideklarasikan pertama kali adalah library-librarynya, pada

prorgram ini pun kita definisikan library-library yang akan digunakan menggunakan include.

2. Dalam program ini menggunakan header file diantaranya

<windows.h>,<glut.h>,<stdio.h>,stdlib.h>,<math.h>,selain itu kita juga declarasikan header file

dari library diantanranya 0Load_3DS.h” dan texture.h”

3. Deklarasi variabel-variabel yang akan digunakan diantaranya screen_width dan screen_hight

untuk mengatur window,obj_type untuk deklarasi object.

4. Fungsi void makeStripeImage adalah fungsi yang digunakan untuk meload teksture pada objek

dan untuk memanggil load_teksture_1d dimana disini kami menggunakan texture garis pada

sebuah object dengan warna merah.

5. Deklarasi koordinat untuk penempatan tekstur menggunakan fungsi-fungsi

6. Setting untuk lighting pada objek menggunakan fungsi LightAmbient[], LightDiffuse[],

LightPosition, mat_specular[]

7. Deskripsi variabel yang akan digunakan untuk fungsi mouse, fungsi lighting, fungsi spin atau

perputaran. Deklarasi variabel untuk permainan dalam game, baik pemain maupun state akhir

permainan atau awal mulai permainan.

8. Deklarasi variabel untuk menentukan row mana saja yang diperbolehkan sama satu baris untuk

menang dalam permainan. Deklarasi posisi koordinat dari tiap kotak (box)

9. Fungsi init_game(void) merupakan fungsi untuk mengawali program game ini. Fungsi ini

mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus

kotak yang sudah terisi,selain itu diset juaga nilai 0 untuk win dan juga start_game dengan nilai

1.

10. Fungsi int check_move(void) digunakan untuk mengecek apakah dalam satu

baris/kolom/diagonal ada yang 3 berjejer/berderet dan akan memberikan nilai 1 bila adaselain

itu didalam sini juga terdapat apabila permainan dalam kondisi tie atau tidak ada yang menang

baik itu pemain ataupun AI.

11. Fungsi int blocking_win (void) fungsi untuk memblokir permainan lawan,fungsi ini dilakukan

dengan cara dimana dari 3 kotak baik itu vertical maupun horizontal sudah terisi 2 dengan

object yang sama dan kemudian computer akan memblock.

Page 15: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak

12. Fungsi check_corner(void) dan check_row(void) adalah fungsi yang digunakan untuk mengecek

apakah ada tempat yang kosong untuk diisi pada setiap pojok ndari kotak.

13. Fungsi check_row digunakan untuk mengecek apakah ada yang kosong dan belum terisi,fungsi

ini digunakan untuk AI.

14. Fungsi computer_move() adalah fungsi untuk pergerakan pemain oleh computer,fungsi ini

secara g langsung akan mengaktifakn fungsi sebelumnya yaitu diataranya

blocking_win,check_corner,check_row dengan pengkondisian dan mengembalikan nilai 0.

15. Fungsi Sprint adalah fungsi untuk menampilkan teks pada layar.didalam fungsi ini juga terdapat

fungsi strlen untuk menghitung berapa panjang dari karakter dan kemudian akan

menampilkanya dalam window.

16. Fungsi timeEvent(int te) adalah fungsi yang digunakan untuk perputaran objek yaitu dengan

pengkondisian dan perulangan spin.

17. Fungsi init(void) merupakan fungsi yang digunakan untuk memanggil fungsi-fungsi yang akan

digunakan dan akan digunakan diantaranya untuk mengatur warna material;,mengatur lighting

dan mengaktifkannya,deklarasistrat_game,win,project transformation,fungsi untuk meload

tekture gambar,fungsi untuk mengaktifakn load tekture garis dan juga mengaktifkan color

material.

18. Fungsi Draw_O adalah fungsi yang digunakan untuk membuat objek berbentuk torus atau

seperti donat,terdapat tranlatetf untk mengatur letak benda,rotate untuk menempatkan posisi

benda yang benar dengan cara memutarnya.

19. Fungsi Draw_X adalah fungsi yang digunakan untuk membuat objek berbentuk X atau

silang,dibentuk dengan cara menggabungkan 2 benda cylinder dan memutarnya keduanya

dengan fungsi rotate sehingga posisinya akan berubah menjadi berbentuk silang.

20. Fungsi display(void) adalah untuk menampilkan permainan di layar windows dari awal sampai

akhir. Dalam fungsi ini juga terdapat beberapa setting untuk state di awal permainan, lighting,

penampilan objek, perputaran objek, dll dan dikhiri dengan fungsi glutSwapBuffer.

21. Fungsi reshape diguakan untuk mengatur window dan mengatur ulang posisinya.

22. Fungsi keyboard(unsigned char key, int x, int y) adalah fungsi yang digunakan untuk

mengaktifkan keyboar untuk zoom ini atau zoom out menggunakan ‘V’ yaitu perspective mode

dan untuk lighting menggunakan ‘L’.

Page 16: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak

23. Fungsi mouse(int button, int state, int x, int y) adalah fungsi yang hampir sama seperti fungsi

keyboard, hanya saja yang diaktifkan adalah mouse,fungsi ini menggunakan fungsi keybord kiri

dan kanan.

24. Fungsi yang utama adalah fungsi main(int argc, char** argv) adalah fungsi yang digunakan untuk

memanggil fungsi- fungsi yang sudah disebutkan di atas. Baik fungsi display,reshape, mouse,

keyboard, windows,timerFunc,mainLoop dll.

Page 17: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak

JALANNYA PROGRAM

- Awal tampilan

Page 18: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak

- Mulai Permainan

Page 19: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak

- Jalannya Permainan

Page 20: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak

- Jika Permainan Tidak Ada Yang Menang (SERI)

Page 21: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak

-

- Jika Permainan Salah Satu Menang

Page 22: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak

- Lightingnya Terang

Page 23: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak

- Lighting Redup

Page 24: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak

- Zoom In

Page 25: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak
Page 26: blog.ub.ac.idblog.ub.ac.id/.../2013/11/Laporan-Kelompok-Fauzi-dkk.docx · Web viewFungsi ini mengeset kondisi untuk new game yaitu dengan cara melakukan perulangan dan menghapus kotak

- Zoom Out