Strict Standards: Only variables should be passed by reference in /homepages/33/d411990001/htdocs/spip/config/ecran_securite.php on line 283
Développement NDS avec PALIB - Ian’s Web Page

Développement NDS avec PALIB

samedi 8 octobre 2011
par  Yann
popularité : 4%

 Projet Starshooter

GZ - 1.8 Mo
Archive du projet complet
Zip - 309.3 ko
Archive zip du programme NDS

 Paramètres NDS

PNG - 242.1 ko
Paramètres importants pour la console

 Star Shooter

en image

PNG - 74.3 ko
Star Shooter

en vidéo

 Sprites utilisé dans le programme

PNG - 44.1 ko
Arrière plan
PNG - 1.1 ko
Sprite animé d’une explosion
PNG - 732 octets
Sprite Tie 1
PNG - 546 octets
Sprite Tie 2
PNG - 462 octets
Sprite Tie 3
PNG - 2.6 ko
Sprite X-wing complet avec animation propulsion
PNG - 3.4 ko
Sprite laser jaune

 Code source de l’application

#include < PA9.h >
 
// PAGfxConverter Include
//#include "../gfx/all_gfx.c"
#include "../gfx/all_gfx.h"
 
#include <PA_BgStruct.h> //necessaire pour le scrollBG
//Just be sure the Makefile for your project has ARM7_MAXMOD_DSWIFI
//as the selected ARM7 binary.
#include <maxmod9.h> // Maxmod include
// Include the soundbank created by the ARM7_MAXMOD_DSWIFI directive in Makefile
#include "soundbank_bin.h"
#include "soundbank.h"
//globals
s32 x = 127-32;    s32 y = 383-32; // sprite position...
s32 speed = 2;
s32 gunspeed = 4;
int Sprites[256];
/*
typedef struct{
        int x,y;
        int width, height;
        int palette;
        int active;
        int type; //sprite type : 0 x-wing, 1 2 3 tie,4 explosion,5 yellowlaser, 6 redlaser
} SpriteBlack, SpriteWhite;
SpriteBlack tabSpriteB[128]; //for ennemies
SpriteWhite XWing[10]; //for good guys
*/

// needed for scrollbg (the new structure PAGfx_struct does not work)
const PA_BgStruct BG3Dual = {
        PA_BgNormal,
        256, 256,
        BG3_Tiles,
        BG3_Map,
        {BG3_Pal},
        65536,
        {2048}
};
 
int main(void){
 
        PA_Init(); //PAlib inits
        PA_InitVBL();
       
        int lazer_x = 0, lazer_y = 0;
        int i=0;
        //Sound part
        // Initialize Maxmod
        mmInitDefaultMem((mm_addr)soundbank_bin);
        // Load and play the music
        mmLoad(MOD_SPACE);
        mmStart(MOD_SPACE, MM_PLAY_LOOP);
        mmSetModuleVolume( 128 ); //volume : 0->1024 representing 0%->100% volume
       
        // Load the sounds
        // Please note that they are regular .wav
        // files put into the audio folder
        mmLoadEffect(SFX_WLKRSHT2);
        mmLoadEffect(SFX_BLKFOOT4);
        mmEffectVolume( SFX_WLKRSHT2, 255 ); //volume : 0..255 = silent..normal
       
        //Graphic Part
        // Load the dual background...
        PA_DualLoadBackground(3,     //bg number
                             &BG3Dual); //background name (struct name)
        s32 scrollx = 0; // No X scroll by default...
        s32 scrolly = 0; // No Y scroll by default...
        PA_LoadDefaultText(0, 0);  //if text need to be displayed
        // fix the space between screens to 0 -> as one big screen
        PA_SetScreenSpace(0);
        //Dual Version allow to use the two screen as one for Sprites
        //Palette Load
        // Loads x-wing sprite palette as 0
        PA_DualLoadSpritePal(
                        0, // Palette number
                        (void*)xwing_Pal);      // Palette name
        //XWing[0].palette = 0;
                // Creates x-wing sprites as 0 : top level sprite
        PA_DualCreateSprite(
                        0, // Sprite number
                        (void*)xwing_sprite_64_v4_Sprite, // Sprite name
                        OBJ_SIZE_64X64, // Sprite size
                        1, // 256 color mode
                        0, // Sprite palette number
                        20, 20); // X and Y position on the screen
/*
        //tabSprite[0]={20,20,64,64,0,1,0};
        XWing[0].x= 20;
        XWing[0].y= 20;
        XWing[0].width= 64;
        XWing[0].height= 64;
        XWing[0].active = 1;
        XWing[0].type = 1;
*/
     
        Sprites[0]=1;
       
        //Loads explosion palette
        PA_DualLoadSpritePal(
                1, // Palette number
                (void*)explosion_Pal);  // Palette name
                       
        // Loads laser sprite palette as 2
        PA_DualLoadSpritePal(
                        2, // Palette number
                        (void*)laseryellow_Pal);        // Palette name
        //Loads tie1 sprite palette
        PA_DualLoadSpritePal(
                        4, // Palette number
                        (void*)tie1_Pal);       // Palette name
        //Loads tie2 sprite palette
        PA_DualLoadSpritePal(
                        5, // Palette number
                        (void*)tie2_Pal);       // Palette name
        //Loads tie3 sprite palette
        PA_DualLoadSpritePal(
                        6, // Palette number
                        (void*)tie3_Pal);       // Palette name
        //Loads explosion palette
        PA_DualLoadSpritePal(
                7, // Palette number
                (void*)explosion_Pal);  // Palette name
        //Loads explosion palette
        PA_DualLoadSpritePal(
                        8, // Palette number
                        (void*)explosion_Pal);  // Palette name
                       
        // Sprite Creation             
        //sprite init (no sprite in tab)
        for (i=0;i++;i<256)
                Sprites[i]=0;
       
        //explosion
        PA_DualCreateSprite(
                                1, // Sprite number
                                (void*)explosion_Sprite, // Sprite name
                                OBJ_SIZE_32X32, // Sprite size
                                1, // 256 color mode
                                1, // Sprite palette number
                                80+16, 20); // X and Y position on the screen                          
        Sprites[1]=1;
                        // One shot at a time
                        //Create Laser sprites
        PA_DualCreateSprite(2, // Sprite number
                        (void*)yellow_Sprite, // Sprite name
                        OBJ_SIZE_8X8, // Sprite size
                        1, // 256 color mode
                        2, // Sprite palette number
                        0, 0); // X and Y position on the screen
        Sprites[2]=1;
                        //PA_DualCloneSprite(2,3);  //does not function
                       
        PA_DualCreateSprite(3, // Sprite number
                        (void*)yellow_Sprite, // Sprite name
                        OBJ_SIZE_8X8, // Sprite size
                        1, // 256 color mode
                        2, // Sprite palette number
                        0, 0); // X and Y position on the screen
        Sprites[3]=1;          
        PA_DualCreateSprite(4, // Sprite number
                        (void*)tie1_64_Sprite, // Sprite name
                        OBJ_SIZE_64X64, // Sprite size
                        1, // 256 color mode
                        4, // Sprite palette number
                        80, 20); // X and Y position on the screen
        Sprites[4]=1;
        PA_DualCreateSprite(5, // Sprite number
                        (void*)tie2_64_Sprite, // Sprite name
                        OBJ_SIZE_64X64, // Sprite size
                        1, // 256 color mode
                        5, // Sprite palette number
                        140, 20); // X and Y position on the screen
        Sprites[5]=1;
        PA_DualCreateSprite(6, // Sprite number
                        (void*)tie3_64_Sprite, // Sprite name
                        OBJ_SIZE_64X64, // Sprite size
                        1, // 256 color mode
                        6, // Sprite palette number
                        200, 20); // X and Y position on the screen
        Sprites[6]=1;
        PA_DualCreateSprite(
                7, // Sprite number
                (void*)explosion_Sprite, // Sprite name
                OBJ_SIZE_32X32, // Sprite size
                1, // 256 color mode
                7, // Sprite palette number
                140+16, 20); // X and Y position on the screen
        Sprites[8]=1;                  
        PA_DualCreateSprite(
                8, // Sprite number
                (void*)explosion_Sprite, // Sprite name
                OBJ_SIZE_32X32, // Sprite size
                1, // 256 color mode
                8, // Sprite palette number
                200+16, 20); // X and Y position on the screen
        Sprites[8]=1;
       
        while(1) // Infinite loops
                {
 
                // Update the position according to the keypad...
                x += (Pad.Held.Right - Pad.Held.Left) * speed;
                y += (Pad.Held.Down - Pad.Held.Up) * speed;
               
                if(((Pad.Newpress.Up )||(Pad.Newpress.Down)) && (!(Pad.Held.Right || Pad.Held.Left)))
                                PA_DualStartSpriteAnim(0, // sprite number
                                                1, // first frame is 0
                                                3, // last frame is 8, since we have 9 frames...
                                                4); // Speed, set to 8 frames per second
                if(Pad.Newpress.Right)
                        {
                                PA_DualStartSpriteAnim(0, 5, 8, 4);    
                                PA_DualSetSpriteHflip(0, 1); // we only create le left turn, right turn is made with Horizontal Flip
                        }
                if(Pad.Newpress.Left)
                        {
                                PA_DualStartSpriteAnim(0, 5, 8, 4);    
                                PA_DualSetSpriteHflip(0, 0);
                        }
                if(!((Pad.Held.Left)||(Pad.Held.Up)||(Pad.Held.Down)||(Pad.Held.Right)))  
                        PA_DualSetSpriteAnimFrame(0,0); //1st frame, ship without motors
                        //PA_DualSpriteAnimPause(0, 1);
                // bounds testing for x-wing
                if (x < -8)
                        x = -8;
                if (x > (255 - 56)) //screen width - sprite width
                        x = 255 - 56;
                if (y < 0)
                        y = 0;
                if (y > 383 - 48) //screen height - sprite height
                        y = 383 - 48;
                       
                // Set the X-Wing sprite's position
                PA_DualSetSpriteXY(
                                           0, // sprite 0 : x-wing
                                           x, // x position
                                           y); // y...
                //Backgroud Scrolling
                // We'll modify scrollx and scrolly according to the keys pressed
                scrollx -= (Pad.Held.Left - Pad.Held.Right) * 1; // Move 1 pixels per press
//              scrolly -= (Pad.Held.Up - Pad.Held.Down) * 1; // Move 1 pixels per press
                scrolly -= (Pad.Held.Up ) * 1; // Move 1 pixels per press without going backward
                // Scroll the background to scrollx, scrolly...
                PA_DualBGScrollXY(3, // Background number
                                                scrollx, // X scroll
                                                scrolly-=1); // Y scroll Ship is always going forward
                //Create new enemies
                if (Pad.Newpress.B)
                        {
                                if (Sprites[4]==0)
                                        {
                                        PA_DualCreateSprite(4, // Sprite number
                                                (void*)tie1_64_Sprite, // Sprite name
                                                OBJ_SIZE_64X64, // Sprite size
                                                1, // 256 color mode
                                                4, // Sprite palette number
                                                80, 20); // X and Y position on the screen
                                        Sprites[4]=1;
                                        }
                                if (Sprites[5]==0)
                                        {                                      
                                        PA_DualCreateSprite(5, // Sprite number
                                                (void*)tie2_64_Sprite, // Sprite name
                                                OBJ_SIZE_64X64, // Sprite size
                                                1, // 256 color mode
                                                5, // Sprite palette number
                                                140, 20); // X and Y position on the screen
                                        Sprites[5]=1;
                                        }
                                if (Sprites[6]==0)
                                        {                                      
                                        PA_DualCreateSprite(6, // Sprite number
                                                (void*)tie3_64_Sprite, // Sprite name
                                                OBJ_SIZE_64X64, // Sprite size
                                                1, // 256 color mode
                                                6, // Sprite palette number
                                                200, 20); // X and Y position on the screen
                                        Sprites[6]=1;
                                        }
                        }
                       
               
                if      (lazer_y <= -8)  //gun shot are out of the screen
                        {
                        //Guns management
                        if(Pad.Newpress.A) //if fire is pressed
                                {
                                        //Gun sound
                                        mmEffect(SFX_WLKRSHT2);
                                       
                                        // put the sprites just above the guns :-)     
                                        lazer_x = x + 48;
                                        lazer_y = y + 24;
                                        if (Sprites[2]==0) //need to create gun sprite
                                        {
                                        PA_DualCreateSprite(2, // Sprite number
                                                (void*)yellow_Sprite, // Sprite name
                                                OBJ_SIZE_8X8, // Sprite size
                                                1, // 256 color mode
                                                2, // Sprite palette number
                                                0, 0); // X and Y position on the screen
                                                Sprites[2]=1;
                                        }
                                        if (Sprites[3]==0) //need to create gun sprite
                                        {
                                        PA_DualCreateSprite(3, // Sprite number
                                                (void*)yellow_Sprite, // Sprite name
                                                OBJ_SIZE_8X8, // Sprite size
                                                1, // 256 color mode
                                                2, // Sprite palette number
                                                0, 0); // X and Y position on the screen
                                                Sprites[3]=1;  
                                        }
                                       
                                        PA_DualSetSpriteXY(
                                                           2, // sprite
                                                           lazer_x, // x position
                                                           lazer_y); // y...
                                        PA_DualSetSpriteXY(
                                                           3, // sprite
                                                           lazer_x-40, // x position
                                                           lazer_y); // y...
                                }    
                        }
                else
                        {
                        // Laser move management
                        lazer_y -= gunspeed;
                        if (Sprites[2]==1) //test if gun1 is active (not destroyed)
                        PA_DualSetSpriteXY(
                                2,
                                lazer_x,
                                lazer_y);
                        if (Sprites[3]==1) //test if gun1 is active (not destroyed)
                        PA_DualSetSpriteXY(
                                3,
                                lazer_x-40,
                                lazer_y); //already add gun speed :-)
                       
               
                //colision with fixed obstacle
                //need to manage obstacle liste in a table, and foreach...
                if (Sprites[4]==1)
                        {
                        if (Sprites[2]==1) //test if gun1 is active (not destroyed)
                                if (PA_Distance(lazer_x, lazer_y, 80+32, 20) < 8*8)
                                        {
                                        mmEffect(SFX_BLKFOOT4);
                                        PA_DualStartSpriteAnimEx(1, 0, 7, 8,ANIM_ONESHOT);     
                                        PA_DualDeleteSprite(4);
                                        Sprites[4]=0;
                                        PA_DualDeleteSprite(2);
                                        Sprites[2]=0;
                                        }
                        if (Sprites[3]==1) //test if gun2 is active (not destroyed)    
                                if (PA_Distance(lazer_x-40, lazer_y, 80+32, 20) < 8*8)
                                        {
                                        mmEffect(SFX_BLKFOOT4);
                                        PA_DualStartSpriteAnimEx(1, 0, 7, 8,ANIM_ONESHOT);     
                                        PA_DualDeleteSprite(4);
                                        Sprites[4]=0;
                                        PA_DualDeleteSprite(3);
                                        Sprites[3]=0;
                                }
                        }
                       
                if (Sprites[5]==1)    
                {
                        if (Sprites[2]==1) //test if gun1 is active (not destroyed)
                                if (PA_Distance(lazer_x, lazer_y, 140+32, 20) < 8*8)
                                        {
                                        mmEffect(SFX_BLKFOOT4);
                                        PA_DualStartSpriteAnimEx(7, 0, 7, 8,ANIM_ONESHOT);     
                                        PA_DualDeleteSprite(5);
                                        Sprites[5]=0;
                                        PA_DualDeleteSprite(2);
                                        Sprites[2]=0;
                                        }
                        if (Sprites[3]==1) //test if gun2 is active (not destroyed)    
                                if (PA_Distance(lazer_x-40, lazer_y, 140+32, 20) < 8*8)
                                        {
                                        mmEffect(SFX_BLKFOOT4);
                                        PA_DualStartSpriteAnimEx(7, 0, 7, 8,ANIM_ONESHOT);     
                                        PA_DualDeleteSprite(5);
                                        Sprites[5]=0;
                                        PA_DualDeleteSprite(3);
                                        Sprites[3]=0;
                                }
                }
                if (Sprites[6]==1)  
                {
                        if (Sprites[2]==1) //test if gun1 is active (not destroyed)
                                if (PA_Distance(lazer_x, lazer_y, 200+32, 20) < 8*8)
                                        {
                                        mmEffect(SFX_BLKFOOT4);
                                        PA_DualStartSpriteAnimEx(8, 0, 7, 8,ANIM_ONESHOT);     
                                        PA_DualDeleteSprite(6);
                                        Sprites[6]=0;
                                        PA_DualDeleteSprite(2);
                                        Sprites[2]=0;
                                        }
                        if (Sprites[3]==1) //test if gun2 is active (not destroyed)    
                                if (PA_Distance(lazer_x-40, lazer_y, 200+32, 20) < 8*8)
                                        {
                                        mmEffect(SFX_BLKFOOT4);
                                        PA_DualStartSpriteAnimEx(8, 0, 7, 8,ANIM_ONESHOT);     
                                        PA_DualDeleteSprite(6);
                                        Sprites[6]=0;
                                        PA_DualDeleteSprite(3);
                                        Sprites[3]=0;
                                }
                }
        }
                PA_WaitForVBL();    
        }
return 0;
}

Météo

Metz, 57, France

Conditions météo à 23h00
par weather.com®

Clair de lune voilé

17°C


Clair de lune voilé
  • Vent : 9 km/h - nord-est
  • Pression : 992 mbar tendance symbole
Prévisions >>

Prévisions du 24 mai
par weather.com®

Inconnu

Max 17°C
Min 11°C


Inconnu
  • Vent : N/D km/h
  • Risque de precip. : %
<< Conditions  |  Prévisions >>

Prévisions du 25 mai
par weather.com®

Soleil et nuages épars

Max 25°C
Min 12°C


Soleil et nuages épars
  • Vent : 16 km/h
  • Risque de precip. : 10%
<<  Prévisions  >>

Prévisions du 26 mai
par weather.com®

Soleil

Max 27°C
Min 13°C


Soleil
  • Vent : 19 km/h
  • Risque de precip. : 10%
<<  Prévisions  >>

Prévisions du 27 mai
par weather.com®

Soleil

Max 31°C
Min 16°C


Soleil
  • Vent : 14 km/h
  • Risque de precip. : 10%
<<  Prévisions  >>

Prévisions du 28 mai
par weather.com®

Soleil voilé

Max 32°C
Min 18°C


Soleil voilé
  • Vent : 14 km/h
  • Risque de precip. : 10%
<<  Prévisions  >>

Prévisions du 29 mai
par weather.com®

Soleil voilé

Max 30°C
Min 16°C


Soleil voilé
  • Vent : 14 km/h
  • Risque de precip. : 20%
<<  Prévisions  >>

Prévisions du 30 mai
par weather.com®

Averses

Max 23°C
Min 13°C


Averses
  • Vent : 14 km/h
  • Risque de precip. : 60%
<< Prévisions


Brèves

25 février 2011 - Scilab : Application GUI

Application GUI dans Scilab : Étude des systèmes automatiques. Systèmes Linéaires

9 janvier 2011 - Modèle 3D dans Scilab

Afficher des patchs dans Scilab à partir de Modèle 3D blender. Modèle 3D dans (...)

2 octobre 2010 - Plugins LDraw pour Blender 2.49

Importez vos modèles LEGO (MLCad et autres) dans blender grâce au plugin d’importation (...)