ฟอรั่มของบล็อก http://pssix.blogspot.com


สคริปต์เกมส์ยิงไอคอน

Share
avatar
POS
PSsix
PSsix


จำนวนข้อความ : 1151
ความนิยม : 323
เข้าร่วมเมื่อ : 19/07/2010

สคริปต์เกมส์ยิงไอคอน

ตั้งหัวข้อ by POS on 29/07/11, 03:14 pm

เกมส์ยิงไอคอนที่หล่น เป็นโค้ดเริ่มต้นสำหรับการทำนะครับ

- ขยับยานไปซ้ายขวา ใช้ปุ่มลูกศร
- ยิงปืนกดปุ่ม สเปชบาร์ ยิงได้พร้อมกัน 5 นัด หลังจากลูกปืนหายไปแล้ว(ในจอมีไม่ครบ 5 นัด) จึงจะยิงต่อได้




Code:

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>

Global $speed = 10, $Label2, $shipmove = 0
Global $s = False, $shot_left[5], $shot_right[5], $numbicon[20]
Global $shottime = TimerInit()
Global $LRshot = 1, $checkshotL, $checkshotR
Global $icontime = TimerInit()


$Form1 = GUICreate(" ", 400, 436, 629, 72)
GUISetBkColor(0x000000)

$ship = GUICtrlCreateGraphic(222, 390, 42, 36)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x000000, 0xFFFFFF)
GUICtrlSetGraphic(-1, $GUI_GR_RECT, 14, 8, 12, 25)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x000000, 0x0000FF)
GUICtrlSetGraphic(-1, $GUI_GR_RECT, 6, 25, 30, 7)
GUICtrlSetGraphic(-1, $GUI_GR_RECT, 1, 10, 39, 11)
GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 29, 0, -18, 18)

$Label1 = GUICtrlCreateLabel("", 320, 8, 75, 17)
GUICtrlSetColor(-1, 0xFFFFFF)
GUISetState(@SW_SHOW)



While 1
   If GUIGetMsg() = -3 Then Exit
   $position = ControlGetPos($Form1, "", $ship)
   GUICtrlSetData($Label1, $position[0] & "x" & $position[1])
   Sleep(20)
   If _IsPressed("25") Then $shipmove = 1 ;กดปุ่มลูกศรซ้าย
   If _IsPressed("20") Then $shipmove = 2 ;กดปุ่มสเปชบาร์
   If _IsPressed("27") Then $shipmove = 3 ;กดปุ่มลูกศรขวา

   animation()
   createicon()
WEnd

Func createicon()
   If TimerDiff($icontime) > Random(1000, 2000, 1) Then

      For $i = 0 To 19
         If Not IsNumber($numbicon[$i]) Then
            $numbicon[$i] = GUICtrlCreateIcon("shell32.dll", Random(1, 20, 1), Random(0, 400 - 32, 1), 0)
            $icontime = TimerInit()
            ExitLoop
         EndIf
      Next
   EndIf
EndFunc  ;==>createicon

Func iconmove()
   For $i = 0 To 19
      $positionicon = ControlGetPos($Form1, "", $numbicon[$i])
      If IsArray($positionicon) Then
         If $positionicon[1] < 400 Then
            If checkshot($numbicon[$i]) <> 1 Then
               GUICtrlSetPos($numbicon[$i], $positionicon[0], $positionicon[1] + 2)
            Else
               GUICtrlDelete($numbicon[$i])
               $numbicon[$i] = ""

            EndIf
         Else
            GUICtrlDelete($numbicon[$i])
            $numbicon[$i] = ""
         EndIf
      EndIf
   Next
EndFunc  ;==>iconmove


Func checkshot($numb)

   $checkcollision = ControlGetPos($Form1, "", $numb)
   $XHicon = $checkcollision[0] + $checkcollision[2] ;แกน X และกว้าง
   $YWicon = $checkcollision[1] + $checkcollision[3];แกน Y และความสูง

   For $a = 0 To 4
      $check1 = ControlGetPos($Form1, "", $shot_left[$a])
      $XHcheck1 = $check1[0] + $check1[2];แกน X และความกว้าง
      $YWcheck1 = $check1[1] + $check1[3] ;แกน Y และความสูง
      If BitAND($check1[0] < $XHicon, $XHcheck1 > $checkcollision[0], $YWcheck1 > $checkcollision[1], $check1[1] < $YWicon) Then
         Return 1
      EndIf

      $check1 = ControlGetPos($Form1, "", $shot_right[$a])
      $XHcheck1 = $check1[0] + $check1[2];แกน X และความกว้าง
      $YWcheck1 = $check1[1] + $check1[3] ;แกน Y และความสูง
      If BitAND($check1[0] < $XHicon, $XHcheck1 > $checkcollision[0], $YWcheck1 > $checkcollision[1], $check1[1] < $YWicon) Then
         Return 1
      EndIf
      ;แกน X ของลูกปืน ต้องน้อยกว่า แกน X และความสูงของไอคอน
      ;แกน X และความกว้าง ของลูกปืน ต้องมากกว่า แกน X ของไอคอน
      ;แกน Y และความสูง ของลูกปืน ต้องมากกว่า แกน Y ของไอคอน
      ;แกน Y ของลูกปืน ต้องน้อยกว่า แกน Y และความสูงของไอคอน

   Next

EndFunc  ;==>checkshot



Func shotmove()

   For $i = 0 To 4
      $positionshot = ControlGetPos($Form1, "", $shot_left[$i])
      If IsArray($positionshot) Then
         If $positionshot[1] > 1 Then
            GUICtrlSetPos($shot_left[$i], $positionshot[0], $positionshot[1] - 2)
         Else
            GUICtrlDelete($shot_left[$i])
            $shot_left[$i] = ""

         EndIf
      EndIf
   Next

   For $i = 0 To 4
      $positionshot = ControlGetPos($Form1, "", $shot_right[$i])
      If IsArray($positionshot) Then
         If $positionshot[1] > 1 Then
            GUICtrlSetPos($shot_right[$i], $positionshot[0], $positionshot[1] - 2)
         Else
            GUICtrlDelete($shot_right[$i])
            $shot_right[$i] = ""

         EndIf
      EndIf
   Next

EndFunc  ;==>shotmove



Func animation()
   iconmove()
   If $s = True Then shotmove()
   Switch $shipmove
      Case 1 ;ซ้าย
         If $position[0] > 2 Then GUICtrlSetPos($ship, $position[0] - $speed, $position[1])
         $shipmove = 0
      Case 2 ;ยิง

         If TimerDiff($shottime) > 100 Then
            $s = True

            For $i = 0 To 4

               If $LRshot = 1 Then
                  If Not IsNumber($shot_left[$i]) Then
                     $shot_left[$i] = GUICtrlCreateLabel("", $position[0] + 4, $position[1] - 1, 2, 6)
                     GUICtrlSetBkColor($shot_left[$i], 0xFFFFFF)
                     $shipmove = 0
                     $shottime = TimerInit()
                     $LRshot = 0
                     ExitLoop
                  Else
                     $shipmove = 0
                  EndIf

               Else
                  If Not IsNumber($shot_right[$i]) Then
                     $shot_right[$i] = GUICtrlCreateLabel("", $position[0] + 36, $position[1] - 1, 2, 6)
                     GUICtrlSetBkColor($shot_right[$i], 0xFFFFFF)
                     $shipmove = 0
                     $shottime = TimerInit()
                     $LRshot = 1
                     ExitLoop
                  Else
                     $shipmove = 0
                  EndIf

               EndIf

            Next

         EndIf

      Case 3 ;ขวา
         If $position[0] < 352 Then GUICtrlSetPos($ship, $position[0] + $speed, $position[1])
         $shipmove = 0
   EndSwitch


EndFunc  ;==>animation



แก้ไขล่าสุดโดย POS เมื่อ 30/07/11, 07:48 am, ทั้งหมด 1 ครั้ง


||----------------------------------------------------------------------------------------------------------------||

กลุ่ม AutoIt ในเฟสบุ๊ค
[You must be registered and logged in to see this link.]

++++++++++++++++++++++++++++++++++++++++++++
pssix.blogspot.com
avatar
POS
PSsix
PSsix


จำนวนข้อความ : 1151
ความนิยม : 323
เข้าร่วมเมื่อ : 19/07/2010

Re: สคริปต์เกมส์ยิงไอคอน

ตั้งหัวข้อ by POS on 30/07/11, 07:42 am

อัปเดทโค้ด
-ปรับยานให้เล็กลง
- ไอคอนหล่น
- ยิงปืนได้สองกระบอก(กระบอกละ 5 ลูก)

หมายเหตุ
เท่าที่ลองทดสอบดูเวลาเปิดหน้าต่างเกมส์ไปนานๆ ตัวไอคอนหรือตัวยานจะกระพริบ แนวทางนี้ทำเกมส์ไม่ค่อยจะเหมาะ เพราะเป็นแค่คำสั่งสร้างกราฟฟิกพื้นฐานเท่านั้น นำมาใช้เพื่อแสดงผลเกมส์ไม่ดีเท่าที่ควร
สรุปคือเลิกทำต่อ







||----------------------------------------------------------------------------------------------------------------||

กลุ่ม AutoIt ในเฟสบุ๊ค
[You must be registered and logged in to see this link.]

++++++++++++++++++++++++++++++++++++++++++++
pssix.blogspot.com
avatar
Arm
PSsix Member Super Class III
PSsix Member Super Class III

PSsix Master PSsix Program Coder
จำนวนข้อความ : 267
ความนิยม : 54
เข้าร่วมเมื่อ : 31/03/2011
อายุ : 19

Re: สคริปต์เกมส์ยิงไอคอน

ตั้งหัวข้อ by Arm on 30/07/11, 07:45 am

ผมเพิ่มคำสั่งนี้เข้าไปครับ
Code:
HotKeySet("{ESC}", "_Pause")
;;;;;; GAME CODE ;;;;;;
;;;;;; GAME CODE ;;;;;;
Func _Pause()
   While 1
      SplashTextOn("","- Pause -" & @CRLF & "Press Space to Continue...","250","50","-1","-1",33,"Tahoma","12","700")
      Sleep(50)
      If _IsPressed("20") Then
         SplashOff()
         ExitLoop
      EndIf
   WEnd
EndFunc
อยากจะลองทำเป็น Level ด้วยครับ (เลเวลสูงๆไอคอนจะร่วงเร็วขึ้นเรื่อยๆ)
แล้วก็ทำพลังชีวิตด้วยครับ จะลองทำดูครับ em218 em230
avatar
POS
PSsix
PSsix


จำนวนข้อความ : 1151
ความนิยม : 323
เข้าร่วมเมื่อ : 19/07/2010

Re: สคริปต์เกมส์ยิงไอคอน

ตั้งหัวข้อ by POS on 31/07/11, 08:09 am

สคริปต์เอาไปดัดแปลงได้ตามต้องการ ตอนนี้กำลังทดสอบระบบกราฟฟิกแบบอื่นดูได้ผลน่าพอใจ ลูกเล่นเยอะขึ้นกว่าคำสั่งกราฟฟิกพื้นฐาน


||----------------------------------------------------------------------------------------------------------------||

กลุ่ม AutoIt ในเฟสบุ๊ค
[You must be registered and logged in to see this link.]

++++++++++++++++++++++++++++++++++++++++++++
pssix.blogspot.com
avatar
aut
PSsix Powerful Scripting Class
PSsix Powerful Scripting Class

PSsix Game Coder
จำนวนข้อความ : 472
ความนิยม : 125
เข้าร่วมเมื่อ : 24/07/2010

Re: สคริปต์เกมส์ยิงไอคอน

ตั้งหัวข้อ by aut on 31/07/11, 07:18 pm

น่าจะใส่เสียงตอนยิงจาได้แจ่มแจ่ม ชินจัง
avatar
POS
PSsix
PSsix


จำนวนข้อความ : 1151
ความนิยม : 323
เข้าร่วมเมื่อ : 19/07/2010

Re: สคริปต์เกมส์ยิงไอคอน

ตั้งหัวข้อ by POS on 31/07/11, 08:56 pm

จะใส่เสียงก็ใช้วิธีแทรกคำสั่ง SoundPlay หรือ _SoundPlay ในจุดที่ต้องการให้มีการเล่นเสียง (ไฟล์เสียงต้องหามาใส่เอง)


||----------------------------------------------------------------------------------------------------------------||

กลุ่ม AutoIt ในเฟสบุ๊ค
[You must be registered and logged in to see this link.]

++++++++++++++++++++++++++++++++++++++++++++
pssix.blogspot.com
avatar
DarkWarrior
PSsix Member
PSsix Member


จำนวนข้อความ : 27
ความนิยม : 1
เข้าร่วมเมื่อ : 28/07/2011
ที่อยู่ : ดาวนาเม็ก

Re: สคริปต์เกมส์ยิงไอคอน

ตั้งหัวข้อ by DarkWarrior on 31/08/11, 04:18 pm

เยี่ยมครับ

    เวลาขณะนี้ 01/05/17, 09:21 am