:: PlayerAdvance.org ::  

Précédent   :: PlayerAdvance.org :: > :: Développement Amateur :: > Nintendo DS > Projets

Projets Projets de développement amateur sur Nintendo DS

Publicité

Commentaire
 
Outils du projet Modes d'affichage
NdShoot
NdShoot
21/06/2009
Présentation
NdShoot est un Shoot sur ds ( logique ). Il consiste à l'aide de votre stylet et l'un de vos doigts a descendre les cibles les unes après les autres. Il ni a pas de règles ni limite de temps ( version Bêta ), le seul but est de shooter no-stop.

Galerie d'images

Comment jouer ?
_Stylet: le stylet fait bouger le viseur
_tirer: L
_changer de fond: droite = fond1, gauche = fond2
_changer de viseur: Haut = viseur1 , Bas = viseur2
_recommencer = Start

Historique
2.0:
Révision graphique ( fin possible du projet )
1.2:
_chrono: 60 secondes pour descendre le plus de cible.
_ajout fonction recommencer = Start.

1.1:
suppression de 3 bugs:
_shoot à coter: passage de cible
_+1 point si tir dans le vide
_changement de cible si tir au même endroit.
+ ajout écran d'accueil: " toucher pour commencer"


1.01:
_20 possibilité de positionnement de cible + ajout d'un viseur.
1.0:
_1ère version publique.

Auteur

Téléchargements
Type de fichier : zip NdShoot1.2.zip (134,1 Ko, 738 affichages)
Type de fichier : zip NdShoot2.0.zip (144,4 Ko, 533 affichages)

Mes autres projets
Vieux 21/06/2009, 21h38  
archipel
Kikoolol
 
Date d'inscription: 22/01/2007
Messages: 2 847
Par défaut

tu es productif toi

parfois je tire un peu dans le vide et ca change de cible may bon, c'est qu'une béta

comme sur les bulletins de notes: continue ainsi
archipel est déconnecté   Réponse avec citation

Publicité

Vieux 21/06/2009, 23h18  
coincoin
Membre confirmé
 
Date d'inscription: 14/12/2008
Messages: 145
Par défaut

Je trouve le codage de PAlib assez agréable mais bon cela fait que 2 semaines que je m'intéresse au C donc ce que je fait est assez limité.

Pour le shoot dans le vide je vais voir car enfaite pour détruire en cible j'ai du mettre 4 renseignement sur la position du viseur et il ne sont pas toujours juste.
Je vais arranger sa.

A+
coincoin est déconnecté   Réponse avec citation
Vieux 22/06/2009, 21h26  
coincoin
Membre confirmé
 
Date d'inscription: 14/12/2008
Messages: 145
Par défaut

Nouvelle version ( 1.01 )
Toujours le gros problème au niveau des cibles: quand on tir à coté elle s'efface quand même.
Si vous avez la solution dites moi.
Je vous passe un bout de code.
Viseur:
cible:
Code PHP:
       PA_LoadSpritePal(10,(void*)cible1_Pal);    // Palette 
           
PA_CreateSprite(13,(void*)cible1_SpriteOBJ_SIZE_64X64,1010050);
         
score =score ;       
 } 
if (
Stylus.89 && 
          
Stylus.131 && 
             
Stylus.39 && 
             
Stylus.81 && Pad.Newpress.L)
    {
           
PA_DeleteSprite13);
       
PA_LoadSpritePal(10,(void*)cible1_Pal);    // Palette 
           
PA_CreateSprite(13,(void*)cible1_SpriteOBJ_SIZE_64X64,102000);
         
score =score ;       
 } 


Voila je vois pas pourquoi quand on tir à coté sa touche quand même la cible.


Bon merci
A+ pour une prochaine version ( pas sûre )
coincoin est déconnecté   Réponse avec citation
Vieux 22/06/2009, 21h42  
archipel
Kikoolol
 
Date d'inscription: 22/01/2007
Messages: 2 847
Par défaut

déja, pourquoi tu détruit ta cible pour la recrée, tu pourrai pas juste la déplacer. Aussi, si tu utilises trop createSprite et deleteSprite, ca fragmente la mémoire(ou un truc comme ca) et aprés ca peut causer des problemes

aussi, une fois chargée, ta palette le reste

et pour résoudre ton probleme, quand tu donne la position de ton sprite, en fait tu dois donner la position du coin en haut à gauche.
je ne comprends pas ton if, pourquoi tu as choisi 89 et 131 alors que ton sprite est en position 100?
archipel est déconnecté   Réponse avec citation
Vieux 23/06/2009, 08h26  
Le Rodeur
Membre confirmé
 
Date d'inscription: 21/10/2007
Messages: 225
Par défaut

Moi je tout simplement que tu vérifie toutes les positions possibles de tes cibles dans ta boucle, et non pas uniquement celles de la cible affichée. J'ai remarqué que c'est en tirant aux endroit ou peuvent apparaitre les autres cibles que ça la change
__________________

NDS LITE - M3 Ds Simply - PaLib
Le Rodeur est déconnecté   Réponse avec citation
Vieux 23/06/2009, 12h25  
coincoin
Membre confirmé
 
Date d'inscription: 14/12/2008
Messages: 145
Par défaut

Oua vous m'en avez appris des trucs. MERCI
Je vais suivre tous vos conseils.
Sinon euh c'est grave le truc de fragmentation de la mémoire ?
Car j'ai facile tester pendant 10 minute en tous mon homebrews sur ma ds ( sinon c'était sur un émulatateur)



bon je pars codé a ++
coincoin est déconnecté   Réponse avec citation
Vieux 23/06/2009, 13h56  
coincoin
Membre confirmé
 
Date d'inscription: 14/12/2008
Messages: 145
Par défaut

Code PHP:
score =score ;
         
15050;     
       }
if (
Stylus.135 && 
Stylus.182 && 
Stylus.35 && 
Stylus.82 && Pad.Newpress.L)
    {
         
score =score 
Voila le même bout de code mais corriger. Mais le "shoot à coté" est toujours là.

Ne vous fier pas aux valeurs (chiffre) car ils sont ainsi en fonction de la forme de cible ( ronde) et l'espace occuper par le viseur ( il fait 39X39 ).

Si je ne trouve pas le problème j'abandonnerais le projet car c'est chiant de continuer sur de mauvaises bases.


A+ coincoin
coincoin est déconnecté   Réponse avec citation
Vieux 23/06/2009, 17h50  
c_boy
Membre
 
Date d'inscription: 30/09/2008
Localisation: Paris
Messages: 50
Par défaut

Salut coincoin
je pense qu'il faut que tu rajoute des parentheses
if ((Stylus.X > 135) &&
(Stylus.X < 182) &&
(Stylus.Y > 35) &&
(Stylus.Y < 82) && (Pad.Newpress.L))
je ne suis pas sur pour le php mais en c c'est mieux comme ca.
bon courage et baisse pas les bras, tu es sur la bonne voie.
c_boy est déconnecté   Réponse avec citation
Vieux 23/06/2009, 17h55  
archipel
Kikoolol
 
Date d'inscription: 22/01/2007
Messages: 2 847
Par défaut

Tu t'en fous de la taille du viseur, juste tu t'en sert pour gérer l'affichage.
Tu regardes simplement si Stylus.X et .Y sont bien a l'interieur de la cible.

Aussi, tu ne prends pas en compte la forme de la cible, tu devrais t'inspirer de ça
archipel est déconnecté   Réponse avec citation
Vieux 23/06/2009, 19h17  
Le Rodeur
Membre confirmé
 
Date d'inscription: 21/10/2007
Messages: 225
Par défaut

ouais, faudrait tout simplement faire une verif de distance entre le stylet et le centre de la cible, vu que c'est rond je pense que c'est le plus simple, et moins de code ne plus
__________________

NDS LITE - M3 Ds Simply - PaLib
Le Rodeur est déconnecté   Réponse avec citation
Vieux 23/06/2009, 19h45  
coincoin
Membre confirmé
 
Date d'inscription: 14/12/2008
Messages: 145
Par défaut

justement la elle est faite. C'est pas un problème de chiffres.
C_Boy: Ton truc marche malheureusement pas. Sinon quand on mais du code sur le site il ni a que "code php", mais sinon mon homebrews et codé en C.

Dernière modification par coincoin ; 23/06/2009 à 19h53.
coincoin est déconnecté   Réponse avec citation
Vieux 24/06/2009, 01h26  
c_boy
Membre
 
Date d'inscription: 30/09/2008
Localisation: Paris
Messages: 50
Par défaut

Alors essaye ca!
Code:
int x,y;

if ((Stylus.Newpress)&&(Pad.Newpress.L))
	{
	x=Stylus.X;
	y=Stylus.Y;
	if (y>35 && y <82 && x>135 && x<182) 
	   {
		score =score + 1 ;
c_boy est déconnecté   Réponse avec citation
Vieux 24/06/2009, 10h20  
coincoin
Membre confirmé
 
Date d'inscription: 14/12/2008
Messages: 145
Par défaut

C_Boy pas possible
regarde le haut de mon code cela ne pourrait pas marcher ( merci quand même) sinon j'ai remarquer que quand je met un PA_WaitForVBL(); entre chaque changement de position ( if ) ba sa marche par contre sa rame énormément ( c'est saccader )
Code PHP:
while (1)
    {         


PA_SetSpriteXY(11Stylus.X,Stylus.Y);
PA_SetSpriteXY(13xy);      

 
  if ((
Stylus.35) && 
          (
Stylus.82) && 
            (
Stylus.35) && 
             (
Stylus.82) && (Pad.Newpress.L))
    {
         
score =score ;
         
150100;     
        } 
coincoin est déconnecté   Réponse avec citation
Vieux 24/06/2009, 10h37  
Le Rodeur
Membre confirmé
 
Date d'inscription: 21/10/2007
Messages: 225
Par défaut

bah pa_waitforvbl sert juste a mettre a jour les positions...
__________________

NDS LITE - M3 Ds Simply - PaLib
Le Rodeur est déconnecté   Réponse avec citation
Vieux 25/06/2009, 10h10  
archipel
Kikoolol
 
Date d'inscription: 22/01/2007
Messages: 2 847
Par défaut

aussi ca sert de timer et aussi d'updater les touches entrées je crois
archipel est déconnecté   Réponse avec citation
Vieux 25/06/2009, 18h32  
Le Rodeur
Membre confirmé
 
Date d'inscription: 21/10/2007
Messages: 225
Par défaut

Ouais en fait quand je parlais de positions c'est tout ce qui est relatif aux touches/stylet, les input quoi
en effet il sert également de timer et maintient le programme a 60 frames par secondes
En fait il update aussi la rtc et tout ce qui est en rapport avec le hardware de manière générale
__________________

NDS LITE - M3 Ds Simply - PaLib
Le Rodeur est déconnecté   Réponse avec citation
Vieux 25/06/2009, 19h08  
t4ils
Membre confirmé
 
Date d'inscription: 10/11/2005
Localisation: Morangis ( 91 )
Messages: 2 752
Voir les codes amis Wii
Par défaut

bon alors, je vous poste un truc écrit en 2-2 là pour donner l'idée de l'algo
prérequis :
création de la cible en sprite 10 (au hasard hein, c'est pour l'exemple)

On ne crée qu'une seule cible, ça sera elle qui se déplacera partout, rien ne sert d'en créer 50

Code PHP:
//on commence par donner une position à la cible pour commencer
PA_SetSpriteXY(1,10,PA_RandMinMax(20,230),PA_RandMinMax(20,172));
while(
1){//boucle de jeu
        //si on appuie le stylet et qu'on presse L
        
if(Stylus.Held && Pad.Newpress.L){

            
//les lignes qui suivent sont simple : on prend la coordonnée du centre de la cible (x,y)
            // ">>1" veut dire "/2" en gros, c'est un décalage binaire 
            //d'un cran à droite, donc une division entière par 2
            //PA_GetSpriteX ou Y récupère la coordonnée X ou Y du sprite
            //PA_GetSpriteLx ou Ly récupère la largeur ou hauteur du sprite

            
int x PA_GetSpriteX(1,10) + (PA_GetSpriteLx(1,10)>>1);
            
int y PA_GetSpriteY(1,10) + (PA_GetSpriteLy(1,10)>>1);
            
            
int rayonCible PA_GetSpriteLx(1,10)>>1;

            
//PA_Distance() renvoie la distance (au carré) entre deux points
            //on va donc vérifier si le stylet est dans le rayon du cercle
            
if(PA_Distance(x,y,Stylus.XStylus.Y)<=rayonCible *rayonCible){//si on a touché la cible
                //on vérifie rayonCible *rayonCible car comme dit avant,
                //la distance renvoyée est au carré

                
score++;//on a joute 1 au score;
                //on fait un random de la position de la nouvelle cible
                
PA_SetSpriteXY(1,10,PA_RandMinMax(20,230),PA_RandMinMax(20,172));
            }
        }
        
PA_WaitForVBL();//on actualise l'affichage, les touches ...

et voilou, bonne étude de code
__________________
Un renard, en plus de voler, ca code !

t4ils est déconnecté   Réponse avec citation
Vieux 26/06/2009, 00h06  
coincoin
Membre confirmé
 
Date d'inscription: 14/12/2008
Messages: 145
Par défaut

merci pour vous réponse: surtout T4ils; même si j'ai pas tous compris.
Je vais étudier ton code, merci beaucoup !

sinon j'ai chercher comment faire un timer / chrono mais je n'ai pas trouver.
enfaite je voudrais donner 60 sec pour toucher le max de cible.
quelqu'un a une idée ?

merci tous le monde!


COINCOIN!
coincoin est déconnecté   Réponse avec citation
Vieux 26/06/2009, 06h53  
Senki
Membre confirmé
 
Date d'inscription: 14/09/2008
Messages: 54
Par défaut

Pour faire un timer, il faut que tu compte le nombre de fois que tu utilises la fonction PA_WaitForVBL(). Normalement, il se passe une seconde toutes les 60 utilisations.
__________________
[Mon devblog] [Crok DS] [Ristrodent]
Senki est déconnecté   Réponse avec citation
Vieux 26/06/2009, 09h09  
coincoin
Membre confirmé
 
Date d'inscription: 14/12/2008
Messages: 145
Par défaut

sa va en faire des PA_WaitForVBL();
il ni a pas une fonction pour la multiplié ( par 60 ) ?
coincoin est déconnecté   Réponse avec citation
Vieux 26/06/2009, 09h25  
Cid2Mizard
Membre confirmé
 
Date d'inscription: 20/11/2007
Localisation: Maubeuge (59)
Messages: 223
Par défaut

Ta réponse est dans les exemples palib "devkitPro\PAlibExamples\Other\Counters"
__________________
www.nintendomax.com
Nintendomax.com 100% hack - 0% warez
Cid2Mizard est déconnecté   Réponse avec citation
Vieux 26/06/2009, 11h29  
liberty
Membre confirmé
 
Date d'inscription: 16/05/2007
Messages: 312
Par défaut

Citation:
Envoyé par coincoin Voir le message
sa va en faire des PA_WaitForVBL();
il ni a pas une fonction pour la multiplié ( par 60 ) ?
Ben t'as qu'a en faire une

Une fonction genre
Code:
int timeInFrames =0;
int timeInSeconds =0;

...

VBLPerso(){
  PaWaitForVBL();
  timeInFrame++;
  if (timeInFrames == 60){
    timeInSeconds++;
    timeInFrame =0
  }
}
Pis dans ton code tu remplace PaWaitForVBL() par VBLPerso() et t'as ta valeur en secondes...
__________________
GuinnessTown
liberty est déconnecté   Réponse avec citation
Vieux 26/06/2009, 13h46  
Cid2Mizard
Membre confirmé
 
Date d'inscription: 20/11/2007
Localisation: Maubeuge (59)
Messages: 223
Par défaut

Citation:
Envoyé par liberty Voir le message
Ben t'as qu'a en faire une

Une fonction genre
Code:
int timeInFrames =0;
int timeInSeconds =0;

...

VBLPerso(){
  PaWaitForVBL();
  timeInFrame++;
  if (timeInFrames == 60){
    timeInSeconds++;
    timeInFrame =0
  }
}
Pis dans ton code tu remplace PaWaitForVBL() par VBLPerso() et t'as ta valeur en secondes...
Faut pas non plus réinventer la roue, il y a une fonction pour ça dans palib "PA_VBLCounterStart(int number), PA_VBLCounter[int number]/60 pour récupérer la seconde"
__________________
www.nintendomax.com
Nintendomax.com 100% hack - 0% warez
Cid2Mizard est déconnecté   Réponse avec citation
Vieux 27/06/2009, 09h51  
coincoin
Membre confirmé
 
Date d'inscription: 14/12/2008
Messages: 145
Par défaut

merci pour toute vos réponse je m'occuperais de sa aprés mon brevet.
coincoin est déconnecté   Réponse avec citation
Commentaire

Liens sociaux

Publicité



Utilisateurs connectés lisant ce projet : 1 (0 membres et 1 invités)
 
Outils du projet
Modes d'affichage

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 04h03.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Tous droits réservés.
Version française #16 par l'association vBulletin francophone
Design par Ass-Itch, DJP et Dr.Vince

GARS 2.1.9 édité par The vB Geek
Copyright 2005-2006
Version française par Cédric Claerhout