Motorway 2D Game Programming ตอนที่ 1
2010-05-04 Games 2,438Tutorial ชุดนี้เป็นการแสดงการใช้คำสั่งของ Darkbasic Professional ที่จำเป็นสำหรับเกมประเภท 2d เท่านั้นครับ
1. กำหนดหน้าจอของโปรแกรมเกม
กดเลือก setting ที่มุมขวาล่างของโปรแกรม จากนั้นในส่วน Display Settings เลือกหรือกำหนดขนาดความกว้าง ความสูงของพื้นที่จอภาพที่ต้องการ
- Fullscreen หมายถึงเกมที่เล่นแบบเต็มจอ ซึ่งหากความกว้าง ความสูงของเกมเราน้อยกว่าการแสดงผลของจอภาพ จะทำให้ภาพในเกมของเราขยายออก ทำให้ภาพแตกหรือไม่คมชัด
- Windowed หมายถึงเกมที่เล่นแบบหน้าต่างโปรแกรม อย่างไรก็ตามผู้เล่นยังสามารถเปลี่ยนขนาดหน้าจอของเกมเราได้อยู่ดี
- เราสามารถ fix ขนาดของหน้าจอเกมด้วยคำสั่ง set window layout 0,1,1
2. ตั้งค่าการแสดง text ในเกม
set text size 20
set text to bold
set text to opaque
ink rgb(0,0,0),rgb(0,255,255)
3. กำหนดเลขอ้างอิงและโหลด media files ต่างๆ
rem กำหนดเลขประจำตัวของภาพ และทำการโหลดภาพ ในที่นี้สร้างตัวแปรมาเก็บเลข image เพื่อสามารถนำเลข image ไปใช้ได้อย่างไม่ต้อง งง
road=1
car=2
load image "images/bg_road.bmp",road
load image "images/car.png",car
rem กำหนดเลขประจำตัวของกรอปแสดงภาพ
road1=1
road2=2
player_car=3
other_car1=4
sprite road1,0,0,road
sprite road2,0,0,road
sprite player_car,106,280,car
sprite other_car1,0,0,car
rem ซ่อนภาพที่โหลด
Hide all sprites
4. กำหนดตัวแปรต่างๆก่อนเริ่มเกม
rem ตัวแปรสำหรับการเลื่อนของฉาก
PosY#=0.0
rem ตัวแปรกำหนดการจบเกม
GameOver=0
rem ตัวแปรเก็บค่าแกน x ของรถ
P_PosX#=106.0
rem ตัวแปรเก็บค่าแกน x,y ของรถคันอื่น
O1_PosX#=41.0+SPRITE WIDTH(other_car1)+rnd(169-41)
O1_PosY#=0-sprite height(other_car1)
rem speed รถเรา
speed#=0.0
rem คะแนน
score=0
5. ส่วน Main Loop ของเกม สามารถเขียนแบบไปเรียกชุดคำสั่งย่อยอีกทีหรือจะให้ทำงานด้านใน main loop เลยก็ยังได้
do
rem วาดฉากและเลื่อนฉาก
gosub ShowRoad
rem ส่วนควบคุมรถผู้เล่น
gosub PlayerControl
rem ส่วนควบคุมรถคันอื่น,เช็คเงื่อนไขคะแนนและการจบเกม
gosub OtherCar
rem เพิ่ม speed เมื่อคะแนนมากขึ้น
speed#=0.01*score
rem แสดงคะแนน
text 3,3,"Score : "+Str$(score)
loop
6. ส่วนชุดคำสั่งย่อย ShowRoad
ShowRoad:
rem กำหนดการเลื่อนของฉากเมื่อตัวแปร GameOver=0
if GameOver=0
if PosY#<400.0
inc PosY#,0.2+speed#
else
PosY#=0.0
endif
endif
rem วาดฉาก
paste sprite Road1,0,PosY#
paste sprite Road2,0,PosY#-400.0
Return
7. ส่วนชุดคำสั่งย่อย PlayerControl
PlayerControl:
rem กำหนดพื้นที่การเลื่อนซ้ายขวาสำหรับรถของผู้เล่น
if P_PosX#=>41.0 and P_PosX#<=169.0 and GameOver=0
if leftkey() or mouseclick()=1
if P_PosX#>41.0
dec P_PosX#,0.5
endif
endif
if rightkey() or mouseclick()=2
if P_PosX#<169.0
inc P_PosX#,0.5
endif
endif
endif
rem วาดรถผู้เล่น
sprite player_car,P_PosX#,280,car
Paste sprite player_car,P_PosX#,280
return
8. ส่วนชุดคำสั่งย่อย OtherCar
OtherCar:
if O1_PosY#>400.0+sprite height(other_car1)
rem ให้เพิ่มคะแนน+1 ทุกครั้งเมื่อรถของผู้เล่นสามารถหลบพ้น
score=score+1
rem แรนดอมจุดเกิดรถไว้นอกฉาก
O1_PosX#=41.0+SPRITE WIDTH(other_car1)+rnd(169-41)
O1_PosY#=0-sprite height(other_car1)-50
endif
rem กำหนดพื้นที่การวิ่งและความเร็วของรถคันอื่น
if GameOver=0
if O1_PosY#<=400+sprite height(other_car1)
inc O1_PosY#,0.5+speed#
endif
endif
rem หมุนภาพรถเพื่อนำมาใช้เป็นภาพรถวิ่งสวนทาง
ROTATE SPRITE other_car1, 180
sprite other_car1,O1_PosX#,O1_PosY#,car
rem เปลี่ยนสีรถ
SET SPRITE DIFFUSE other_car1, 255, 0, 0
Paste sprite other_car1,O1_PosX#,O1_PosY#
rem ส่้วนเช็คการชนของรถ
if sprite hit(player_car,other_car1)
GameOver=1
CENTER text 125,100,"Game Over"
CENTER text 125,130,"Press Spacebar to Play Again"
CENTER text 125,160,"Press Esc to Exit"
if spacekey()
rem คืนค่าตัวแปรต่างๆกลับไปเหมือนเริ่มเกมใหม่
P_PosX#=106.0
O1_PosX#=41.0+SPRITE WIDTH(other_car1)+rnd(169-41)
O1_PosY#=0-sprite height(other_car1)
Score=0
GameOver=0
endif
endif
return
หมายเหตุ
- ตัวแปร(ตัวสีดำ) ที่ไม่ใช่ คำสั่งของโปรแกรม(ตัวสีน้ำเงิน) เราสามารถตั้งชื่อเป็นอะไรก็ได้แต่ควรสื่อความหมายเพื่อให้เข้าใจได้ง่ายเวลา เขียน Code
| Darkbasic Tutorials