//TUTORIAL 4 PART 2 //DEFINE VARIABLES Global KEYPRESS$, COUNT, X, TYPE, JOYSTICK, DEVICENUM //DEFINE PROCEDURES DefProc INIT_DISPLAY() DefProc CREATE_SPRITES() DefProc PLAYGAME() //---- START MAIN CODE ---- //CALL THE PROCEDURE TO CREATE THE SCREEN INIT_DISPLAY() //CALL THE PROCEDURE TO CREATE THE SPRITES CREATE_SPRITES() //START JOYSTICK DETECTING SEQUENCE JOYSTICK = False //MAKE SURE THIS VARIABLE IS SET TO FALSE BEFORE WE BEGIN COUNT=InputDeviceCount() //GET THE NUMBER OF INPUT DEVICES DETECTED BY DIRECTX For X = 1 To COUNT //LOOP THROUGH EACH DETECTED DEVICE TYPE = InputDeviceType(X) //GET THE TYPE ID NUMBER //SET JOYSTICK TO TRUE TO SAY THAT WE HAVE FOUND A JOYSTICK If TYPE = 4 Then : JOYSTICK = True : DEVICENUM = X : EndIf Next //STATE WHETHER OR NOT A JOYSTICK WAS FOUND If JOYSTICK = True Then Text (50,120,"A Joystick was found - Press any key to continue.") Else Text (50,120,"A Joystick was NOT found - Press any key to quit.") EndIf //START LOOP - THIS LOOP WILL REPEAT UNTIL A KEY IS PRESSED Repeat KEYPRESS$ = Inkey$() Update Display Until KEYPRESS$ > "" If JOYSTICK = True Then //IF A JOYSTICK WAS FOUND THEN CONTINUE WITH THE PROGRAM, ELSE QUIT PLAYGAME() EndIf //THE INIT_DISPLAY PROCEDURE CREATES A SCREEN AND A PLANE Procedure INIT_DISPLAY() Create Map 640,480,1,1 In Bank 50 //CREATE A MAP IN BANK 50 Set Tile 0,0,1 Using Bank 50 //CREATE A TILE USING A BACKGROUND IMAGE IN BANK 1 Create Plane 1 Using Bank 50 //CREATE PLANE 1 USING THE MAP IN BANK 50 Create Map 640,480,1,1 In Bank 51 //CREATE A MAP IN BANK 51 Set Tile 0,0,4 Using Bank 51 //CREATE A TILE USING A BACKGROUND IMAGE IN BANK 4 Create Plane 2 Using Bank 51 //CREATE PLANE 2 USING THE MAP IN BANK 51 Plane Hide 2 ReDirect GDI Output To Bank 1 EndProc //THIS PROCEDURE WILL CREATE THE SPRITE Procedure CREATE_SPRITES() Create Sprite 1,288,208 Using Bank 3 //CREATE SPRITE #1 AT 288,208 USING THE SEQUENCE IN BANK 3 Create Sprite 2,100,100 Using Bank 6 //CREATE SPRITE #2 AT 100,100 USING THE SEQUENCE IN BANK 6 Sprites On //NOW TURN ON THE SPRITE SYSTEM Sprite Animate 1 Off Set Mask 20,20,20,20 For Sprite 1 Set Bitmap 2 Transparency To 0,255,0 Set Bitmap 5 Transparency To 0,255,0 SetMotionSpeed(1,Rnd(3)+3) EndProc Procedure PLAYGAME() Local DUCKX, DUCKY, JOYX, JOYY, CURX, CURY, HIT, DUCKS, DIR Sprite On 1 //ENABLE THE SPRITES Sprite On 2 Plane Hide 1 : Plane Show 2 ReDirect GDI Output To Bank 4 Text (10,20,"TEST YOUR JOYSTICK - TRY TO SHOOT THE DUCK! - PRESS Q TO QUIT") CURX = 100 : CURY = 100 DUCKX = 660 : DUCKY = 240 KEYPRESS$ = "" Sprite Move 1, DUCKX, DUCKY Repeat If (SpriteX(1) >=650) Or (SpriteX(1) <=-83) Then DIR = Rnd(1) If DIR = 0 Then DUCKX = 640 Else DUCKX = -83 EndIf DUCKY = Rnd(380)+50 Sprite Move 1,DUCKX,DUCKY Set Sprite Motion 1 Using Bank (7+DIR) SetMotionSpeed(1,Rnd(3)+3) EndIf JOYX = JoystickX(DEVICENUM) : JOYY = JoystickY(DEVICENUM) If JOYX > 0 Then : CURX = CURX + 2 : Sprite Move 2,CURX,CURY : EndIf If JOYY > 0 Then : CURY = CURY + 2 : Sprite Move 2,CURX,CURY : EndIf If JOYX < 0 Then : CURX = CURX - 2 : Sprite Move 2,CURX,CURY : EndIf If JOYY < 0 Then : CURY = CURY - 2 : Sprite Move 2,CURX,CURY : EndIf HIT = SpriteCollide(2) If(JoyButton(DEVICENUM,1)) And HIT > 0 Then SetSequenceFrame(1,2) Update Display DUCKS = DUCKS + 1 Text(550,400,"Ducks: " + Str$(DUCKS)) Delay(500) SetSequenceFrame(1,1) EndIf KEYPRESS$ = Inkey$() Update Display Until KEYPRESS$ = "q" EndProc EndProg