Dasar-dasar Game OPERASI STRING

2008 | Direktorat Pembinaan SMK 393 WPARAM wParam, LPARAM lParam; void EnableOpenGL HWND hWnd, HDC hDC, HGLRC hRC; void DisableOpenGL HWND hWnd, HDC hDC, HGLRC hRC; WinMain int WINAPI WinMain HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow { WNDCLASS wc; HWND hWnd; HDC hDC; HGLRC hRC; MSG msg; BOOL bQuit = FALSE; float theta = ‐ 0.8f ; float alpha = ‐ 0.8f ; int count = ; float r, g, b; register window class wc.style = CS_OWNDC; wc.lpfnWndProc = WndProc; wc.cbClsExtra = ; wc.cbWndExtra = ; wc.hInstance = hInstance; wc.hIcon = LoadIcon NULL, IDI_APPLICATION; wc.hCursor = LoadCursor NULL, IDC_ARROW; wc.hbrBackground = HBRUSH GetStockObject BLACK_BRUSH; wc.lpszMenuName = NULL; wc.lpszClassName = GraphGL ; RegisterClass wc; create main window hWnd = CreateWindow GraphGL , OpenGL Graphics , WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE, , , 512 , 512 , NULL, NULL, hInstance, NULL; 394 Direktorat Pembinaan SMK | 2008 enable OpenGL for the window EnableOpenGL hWnd, hDC, hRC; program main loop while bQuit { check for messages if PeekMessage msg, NULL, , , PM_REMOVE { handle or dispatch messages if msg.message == WM_QUIT { bQuit = TRUE; } else { TranslateMessage msg; DispatchMessage msg; } } else { OpenGL animation code goes here glClearColor 1.0f , 1.0f , 1.0f , 1.0f ; glClear GL_COLOR_BUFFER_BIT; glPushMatrix ; glTranslatef theta, alpha, 0.0f ; glColor3f r, g, b; glRectf‐ 0.2 , 0.2 , 0.2 , ‐ 0.2 ; glPopMatrix ; SwapBuffers hDC; if count 160 { theta ‐= 0.01f ; alpha ‐= 0.01f ; if count == 320 { 2008 | Direktorat Pembinaan SMK 395 count = ; theta = ‐ 0.8f ; alpha = ‐ 0.8f ; } else count += 1 ; r = 0.0f ; g = 1.0f ; b = 0.0f ; } else if count = 160 { theta += 0.01f ; alpha += 0.01f ; count += 1 ; r = 1.0f ; g = 0.0f ; b = 1.0f ; } Sleep 10 ; } } shutdown OpenGL DisableOpenGL hWnd, hDC, hRC; destroy the window explicitly DestroyWindow hWnd; return msg.wParam; } Window Procedure LRESULT CALLBACK WndProc HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam { switch message { 396 Direktorat Pembinaan SMK | 2008 case WM_CREATE: return ; case WM_CLOSE: PostQuitMessage ; return ; case WM_DESTROY: return ; case WM_KEYDOWN: switch wParam { case VK_ESCAPE: PostQuitMessage ; return ; } return ; default: return DefWindowProc hWnd, message, wParam, lParam; } } Enable OpenGL void EnableOpenGL HWND hWnd, HDC hDC, HGLRC hRC { PIXELFORMATDESCRIPTOR pfd; int iFormat; get the device context DC hDC = GetDC hWnd; set the pixel format for the DC ZeroMemory pfd, sizeof pfd; pfd.nSize = sizeof pfd; pfd.nVersion = 1 ; pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; pfd.iPixelType = PFD_TYPE_RGBA; pfd.cColorBits = 24 ; pfd.cDepthBits = 16 ; 2008 | Direktorat Pembinaan SMK 397 pfd.iLayerType = PFD_MAIN_PLANE; iFormat = ChoosePixelFormat hDC, pfd; SetPixelFormat hDC, iFormat, pfd; create and enable the render context RC hRC = wglCreateContext hDC ; wglMakeCurrent hDC, hRC ; } Disable OpenGL void DisableOpenGL HWND hWnd, HDC hDC, HGLRC hRC { wglMakeCurrent NULL, NULL; wglDeleteContext hRC; ReleaseDC hWnd, hDC; } Jika program dijalankan maka kotak akan bergerak secara diagonal dari pojok kiri bawah ke arah pojok kanan atas dengan warna ungu, setelah sampai di pojok kanan atas maka akan berbalik arah menuju pojok kiri bawah lagi dengan warna hijau, begitu seterusnya bolak-balik. Akan tetapi jika kursor menunjuk taskbar dan tombol mouse ditekan maka gerak obyek akan berhenti dan jika tombol dilepas lagi maka obyek tersebut gergerak lagi. Selain argumen-argumen glTranslatef yang dimodifikasi, argumen glColor3f juga dibuat variabel sehingga bisa dimainkan warnanya menjadi dinamis tidak monoton. Penambahan variabel pada perintah glColor3f argumen pertama r, kedua g, ketiga b, sehingga formatnya menjadi glColor3fr, g, b. Modifikasi yang lain yaitu menambah variabel count untuk menghitung banyaknya gerak. Hal ini perlu ditambahkan karena pengaturan gerak melalui variabel count ini. Contoh ini merupakan dasar pembuatan game yang harus dipelajari untuk bisa dikembangkan dikemudian hari. Bagian yang penting dicermati adalah trik pengaturan geraknya, bagian ini merupakan hal tersulit karena harus menemukan algoritma yang tepat dan efisien. 398 Direktorat Pembinaan SMK | 2008

11.6. Latihan Soal

Jawablah soal latihan dibawah ini dengan baik dan benar. 1. Apa yang dimaksud dengan grafik 2. Dalam bahasa c++ terdapat library opengl, apa yang dimaksud dengan istilah tersebut 3. Apa keuntungan dan kekurangan menggunakan library opengl 4. Buatlah program grafik sederhana untuk menampilkan garis 5. Buatlah program grafik sederhana untuk menampilkan poligon 6. Buatlah program animasi sederhana dengan memanfaatkan library opengl 2008 | Direktorat Pembinaan SMK 399

BAB 12 OPERASI FILE

12.1. Pengertian File

File atau Berkas komputer atau berkas adalah entitas dari data yang disimpan di dalam sistem berkas yang dapat diakses dan diatur oleh pengguna. File juga dapat didefinisikan sebagai kumpulan informasi yang biasanya disimpan dalam sebuah disk komputer, dimana informasi disimpan dalam bentuk file- file yang dikemudian hari dapat diambil kembali. Sebuah berkas memiliki nama yang unik dalam direktori dimana ia berada. Alamat direktori dimana suatu berkas ditempatkan diistilahkan dengan path. File atau berkas diorganisasikan dari sejumlah record. Masing-masing record bisa terdiri dari satu atau beberapa field. Setiap field terdiri dari satu atau beberapa byte. 12.1. Pengertian File 12.2. Class stream 12.3. Hirarki class stream 12.4. File InputOutput C++ 12.5. Cara Pembacaan String 12.6. Routin-routin konversi File 12.7. File Binary dan ASCII 12.8. Binary IO 12.9. Buffer 12.10. Rutin-rutin pada C++ 12.11. File sekuensial 12.12. Program Operasi FiIe 12.13. Soal Latihan