บทความนี้จะเป็นขั้นตอนการสร้าง Environment ในการเริ่มต้นที่จะพัฒนาเกมด้วยภาษา C/C++ กับ Library SDL หรือ Simple DirectMedia Layer ซึ่งเป็น Library สำหรับพัฒนาเกมและที่สำคุญเป็น Opensource มาเริ่มกันดีกว่าครับ
แรกเริ่มเลยต้องมี IDE ไว้สำหรับ Compile ภาษา C++ ครับซึ่งเราจะเลือกใ้ช้ Bloodshed Dev C++ ครับเพราะเป็น Freeware จะได้ไม่ต้องเสียค่าลิขสิทธิใดๆในการพัฒนาเกมให้เราไปดาวน์โหลดและติดตั้งผ่าน URL นี้ครับ
1 |
<a href="http://www.bloodshed.net/devcpp.html" title="Dev C++">http://www.bloodshed.net/devcpp.html</a> |
เมื่อทำการติดตั้งเสร็จเรียบร้อยและตั้งค่าเริ่มต้นของตัว Dev C++ เหมือนในรูปข้างบนแล้วก็ให้ไปดาวน์โหลด Library SDL ที่หน้าเว็บไซต์
1 |
<a href="http://www.libsdl.org/download-1.2.php">http://www.libsdl.org/download-1.2.php</a> |
ในเว็บไซต์ของ SDL จะมี Runtime Library และ Development Libraries ให้เลือกดาวน์โหลดเลือกดาวน์โหลดไฟล์ในหมวดของ Win32 Development Libraries สำหรับ Mingw32 เมื่อดาวน์โหลดเสร็จให้ unzip ไว้ในโฟล์เดอร์ C:SDL_LIB เพราะว่า DEV C++ นั้นใช้ Mingw32 คอมไพเลอร์ เลือกดาวน์โหลดดังภาพข้างล่าง
โฟล์เดอร์สำคัญที่เราต้องใช้งานคือ
- .bin
- .include
- .lib
ในโฟล์เดอร์ bin จะมีไฟล์ .DLL ที่เราจำเป็นต้องใช้ในขั้นตอนการรันโปรแกรมที่เราพัฒนาขึ้น ส่วนใน .include จะมี Header File ที่ต้องใช้ในขั้นตอนการคอมไพล์ รวมทั้ง .lib และ .a ในโฟล์เดอร์ .lib เป็นต้น ส่วนโฟล์เดอร์อื่น ๆ จะเป็นเอกสาร คู่มือ และไฟล์ตัวอย่างมากมายแถมมา
การกำหนดค่าใน Dev-C++
ส่วนสำคัญที่เราต้องใช้งาน ได้แก่โฟล์เดอร์ .inlcude และ .lib โดยเราจะต้องกำหนดให้ IDE สามารถเรียกใช้งานได้ กรณีที่ใช้ Dev-C++ เราต้องกำหนดค่าในเมนู Tools/Compiler Options โดยดูในส่วนของ Directories หัวข้อ Libraries, C Includes และ C++ Include ดังรูป
กำหนด Path ให้ทั้งสามส่วนดังนี้ (ตัวอย่าง: ในกรณีที่เราติดตั้ง SDL ไว้ที่ C:SDL_LIB)
- ในส่วนของ Libraries กำหนด Path เพิ่มเป็น
C:SDL_LIBSDL-1.2.13lib - ในส่วนของ C Includes กำหนด Path เพิ่มเป็น
C:SDL_LIBSDL-1.2.13include - ในส่วนของ C++ Includes กำหนด Path เพิ่มเป็น
C:SDL_LIBSDL-1.2.13include
1 |
นอกจากนี้เราจะต้องกำหนดให้ Dev-C++ ทำการ Link ไฟล์ .lib ในขั้นตอนการพัฒนา <br />โดยจะกำหนดไว้ในโปรเจคที่เราจะใช้งาน SDL แต่ละงานไป เพื่อให้คอมไพเลอร์ทำการ <br />Compile แัละ Link กับไลบรารี่ของ SDL รวมกับ Code ที่เราเขียน <br /> |
1 |
สำหรับไฟล์ใน .bin จะเป็น .dll หรือ Dynamic Linked Library ที่เราต้องใช้ในขั้นตอนการรัน<br />โปรแกรม เราจะต้องคัดลอกไฟล์ SDL.dll ไปเก็บไว้ในโฟล์เดอร์โปรเจคที่มีโปรแกรมของเรา <br />เพื่อให้โปรแกรมหาไฟล์ SDL.dll นี้เจอในขั้นตอนการรัน |
ทดสอบ SDL
เพื่อทดสอบการติดตั้ง และกำหนดค่าเริ่มต้นเพื่อใช้งาน SDL บน Dev-C++ เราจะสร้าง SDL โปรแกรมแรก โดยจะสร้างเป็น Windows Application ให้เปิดหน้าต่าง SDL กำหนดขนาดแสดงผลเป็น 320 x 240 pixel แล้วกำหนด Titlebar จากนั้นจะหน่วงเวลาประมาณ 8 วินาที แล้วปิดโปรแกรมไป
ให้เปิด Dev-C++ สร้างโปรเจคใหม่ เลือกเป็น Empty Project ตั้งชื่อโปรเจคเป็น daydev และกำหนดให้เป็น C Project ดังรูป
หลังจาก Save Project ไว้ในโฟล์เดอร์ที่ต้องการแล้ว ให้สร้างไฟล์ใหม่ในโปรเจค โดยคลิกขวาที่ชื่อโปรเจค แล้วเลือกคำสั่ง New File เพื่อเขียนโค้ด จากนั้น Save File โดยใช้ชื่อ test.c แล้วเริ่มเขียนโค้ดคำสั่ง
วิเคราะห์โจทย์
จากโจทย์ที่ตั้งไว้ เราจะเริ่มเขียนโปรแกรมโดย include ไฟล์ SDL.h จากโฟล์เดอร์ ./include/SDL/เข้ามาในโปรเจค แล้วสร้างฟังค์ชั่น main() จากนั้นจะเรียกฟังค์ชั่น SDL_Init() เพื่อเริ่มใช้งาน SDL หากมีข้อผิดพลาด เราจะจบการทำงานโดย return ค่า 1 กลับมายังโปรแกรมที่เรียก
1 |
<span class="tip">ฟังค์ชั่นใน SDL จะ return ค่า -1 หรือ return ค่า NULL เมื่อมีข้อผิดพลาดในการทำงาน</span> |
จากนั้นให้บันทึกไฟล์ไว้ เตรียมขั้นตอนการคอมไพล์และลิงค์ เพื่อสร้างโปรแกรม
1 |
#include "SDL/SDL.h"<br /><br />// ประกาศตัวแปร main_screen เป็น pointer <br />ไปยัง SDL_Surface สำหรับการแสดงผลภาพหน้าจอหลัก<br />SDL_Surface *main_screen = NULL; <br /><br />int main( int argc, char* args[] ) <br />{<br /> // ติดตั้งเตรียมใช้งาน SDL ทั้งหมด<br /> if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 ) <br /> { <br /> return 1; // ถ้ามีข้อผิดพลาดให้ return 1, แล้วจบโปรแกรม<br /> } <br /> // กำหนดโหมดการแสดงผลเป็น 320 x 240, 32 bps<br /> main_screen = SDL_SetVideoMode( 320, 240, 32, SDL_SWSURFACE ); <br /> if( main_screen == NULL ) <br /> { <br /> return 1; // ถ้ามีข้อผิดพลาดให้ return 1, แล้วจบโปรแกรม<br /> } <br /> // กำหนดค่า Caption ของหน้าต่าง แสดงคำว่า Hello ICT:Silpakorn<br /> SDL_WM_SetCaption( "Hello World", NULL ); <br /> <br /> // หน่วงเวลา 8 วินาที<br /> SDL_Delay( 8000 ); <br /><br /> // จบการทำงานของ SDL, ปิดหน้าต่างโปรแกรม <br /> SDL_Quit(); <br />}<br /><br /> |
การกำหนดค่าสำหรับขั้นตอนการ Link
ในขั้นตอนการสร้างโปรแกรม หลังจากการคอมไพล์แล้วจะต้องทำการลิงค์ออปเจ็คไฟล์ที่ได้รวมเข้ากับไลบรารี่ ในขั้นตอนนี้เราต้องกำหนดให้ IDE ทำการลิงค์กับไลบรารี่ต่าง ๆ ที่เราใช้งาน โดยจะกำหนดใน Project Options
ให้คลิกขวาที่ชื่อโปรเจค แล้วเลือกคำสั่ง Project Options เพื่อกำหนดให้ลิงค์รวมกับ SDL ไลบรารี่ ดังรูป
เลือกหมวด Parameters ในช่อง Linker ให้ใส่ -lmingw32 -lSDLmain -lSDL เพื่อกำหนดให้มีการ Link กับ SDL Library
จากนั้นให้คอมไพล์ โดยเลือกจากเมนู Execute หรือกดปุ่ม Ctrl-F9 หรือกดปุ่มบน Toolbar แบบในรูป หากไม่มีข้อผิดพลาดจะได้ไฟล์ Project1.exe ในโฟล์เดอร์ของโปรเจค
ในขั้นตอนการรันโปรแกรมที่ใช้ SDL ไลบรารี่ จะต้องมีไฟล์ SDL.dll อยู่ในระบบ วิธีการที่แนะนำคือ ให้คัดลอกไฟล์ *.dll ที่ต้องการใช้งานมาเก็บไว้ในโฟล์เดอร์เดียวกับโปรแกรม (เพื่อไม่ให้เกิดปัญหาการใช้งานไลบรารี่ต่าง Version กัน)
ผลจากการรันโปรแกรม
จะเปิดหน้าต่างแสดงผลหน้าจอสีดำขนาด 320 x 240 pixel โดยแสดงคำว่า Hello World ที่ Titlebar จากนั้นแสดงผล 8 วินาที แล้วปิดหน้าต่างจบโปรแกรม