Copyright © All rights reserved | This template is made with by Colorlib

Next Big Event:

บทความในหมวด

DARKBASIC TUTORIALS

Darkbasic Tutorials

Motorway 2D Game Programming ตอนที่ 1

2010-05-04 Games 2,323

Tutorial ชุดนี้เป็นการแสดงการใช้คำสั่งของ Darkbasic Professional ที่จำเป็นสำหรับเกมประเภท 2d เท่านั้นครับ

 

1. กำหนดหน้าจอของโปรแกรมเกม

 

display_setting.png

 

กดเลือก 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

เข้าชมแล้ว 2,932,915 ครั้ง | ทั้งเว็บออนไลน์   2 ท่าน | หน้านี้ออนไลน์   1 ท่าน
Page generated in 0.0286 seconds ! ( 13 query)