Accueil Ti-Gen Foire Aux Questions Chat sur le chan #tigcc sur IRC
Liste des membres Rechercher Aide
Bienvenue Invité !   Se connecter             Mes sujets   
Administrer
0 membre(s) et 1 visiteur(s) actif(s) durant les 5 dernières minutes Utilisateurs actifs : Aucun membre + 1 visiteur
Avant de poster sur le forum, il y a des régles de bases à respecter pour une bonne entente et un respect de tous.
Veuillez lire la charte du forum.
  :: Index » Forum Ti68K » Programmation C » Phoenix : système du tir... (15 réponse(s))
./POST DE DEPART (post n°0)   Marquer comme non lu.
bobti89 Ecrit le: Dimanche 26 septembre 2004 à 20:31 Déconnecté(e)    Voir le profil de bobti89 Envoyer un email à bobti89 Visiter le site WEB de bobti89 Envoyer un message privé à bobti89  

Voila, je pense que tout le monde connait phoenix et je voulais essayer d'en réaliser un.
Seulement, je bloque déjà au système des tirs, c'est-à-dire que dans phoenix, si on laisse appuyé sur 2ND, on tire lentement mais si on appuie et on relache rapidement plusieurs fois, on arrive à tirer plus vite. (Puis après le rapid-fire unit nous permet de nous reposer :) )

Voilà, si quelqu'un à une idée pour realiser ca, merci de me le dire :)
bob ou bob, vous ne voyez pas la différence. Pourtant il y en a une fondamentale, l'un est écrit à l'endroit, l'autre à l'envers.

Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici
    
./Post n°1   Marquer comme non lu.
LionelA Ecrit le: Dimanche 26 septembre 2004 à 21:09 Déconnecté(e)    Voir le profil de LionelA Envoyer un email à LionelA Visiter le site WEB de LionelA Envoyer un message privé à LionelA  


tu fais un compteur qui s'incremente a chaque passage de la boucle si le bouton 2nd est appuyé.
Si le bouton est relaché tu met le compteur a 0.
tu fais aussi un modulo sur le compteur avec une valeur assez grande (valeur de repetition qui diminuera si tu as le rapid fire unit)
Si le compteur == 1 le coup part.
Voila :)
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/
    
./Post n°2   Marquer comme non lu.
bobti89 Ecrit le: Dimanche 26 septembre 2004 à 22:05 Déconnecté(e)    Voir le profil de bobti89 Envoyer un email à bobti89 Visiter le site WEB de bobti89 Envoyer un message privé à bobti89  

Je ne te suis pas tout à fait, parce que j'ai l'impression que si tu appuies rapidement sur 2ND, ca ne tirera pas plusieurs fois...

Enfin bon, voilà mon code :
#include <tigcclib.h>
#include "graphiques.h"

INT_HANDLER OldInt1 = NULL;
INT_HANDLER OldInt5 = NULL;

volatile int Counter = 0;
volatile int compteur = 0;

DEFINE_INT_HANDLER(MyInt5)
{
  if (Counter++ == 30000) Counter=0;
}
DEFINE_INT_HANDLER (MyInt1)
{
  compteur++;
}

// Main Function
void _main(void)
{
  int x=72, y=80, xancien=72, yancien=80 ;
  int nb_miss=0, LMissx[16], LMissy[16];
  int i, j;
  int Counter_ancien=0, modulo=6;
  OldInt1 = GetIntVec (AUTO_INT_1);
  OldInt5 = GetIntVec (AUTO_INT_5);
  SetIntVec (AUTO_INT_1, MyInt1);
  SetIntVec (AUTO_INT_5, MyInt5);
  
  memset(LMissx, -10 ,16*sizeof(int));
  memset(LMissy, -10 ,16*sizeof(int));
  
  ClrScr();
  
  while (!_keytest(RR_ESC))
  {
    while (compteur < (HW_VERSION==1 ? 6 : 4)); // ralentit le programme
    compteur=0;
    
    Sprite16( xancien, yancien, 8, mask, LCD_MEM, SPRT_AND);
    Sprite16( x, y, 8, vs, LCD_MEM, SPRT_OR);
    xancien=x; yancien=y;
    if (_keytest(RR_LEFT) && x>0)x--;
    if (_keytest(RR_RIGHT) && x<144)x++;
    if (_keytest(RR_UP) && y>70)y--;
    if (_keytest(RR_DOWN) && y<92)y++;
    if (_keytest(RR_2ND) && (Counter%modulo==0) && (Counter_ancien != Counter))
    {
      Counter_ancien = Counter;
      if (nb_miss<15) 
      {
        LMissx[nb_miss]=x+4;
        LMissy[nb_miss]=y-7;
        nb_miss++;
      }
    }
    modulo=6;
    if (!_keytest(RR_2ND)) modulo=1;
    for(i=0;i<15;i++)
    {
      if (LMissy[i] != -10)
      {
        
        Sprite8( LMissx[i], LMissy[i], 8, mask3, LCD_MEM, SPRT_AND);
        LMissy[i]--;
        if (LMissy[i]>0) Sprite8( LMissx[i], LMissy[i], 8, miss, LCD_MEM, SPRT_OR);
      }
      if (LMissy[i]==0)
      {
        nb_miss--;
        for(j=i;j<15;j++)
        {
          LMissy[j] = LMissy[j+1];
          LMissx[j] = LMissx[j+1];
        }
        i--;
      }
    }
  }
  
  
  SetIntVec (AUTO_INT_1, OldInt1);
  SetIntVec (AUTO_INT_5, OldInt5);
}


Ce code fait parfois planter la calculette (mais pas VTI...) et je trouve pas pourquoi :(

Sinon, il subsiste toujours quelques bogues lorsqu'on laisse appuyé sur 2ND, il y a parfois 2 missiles d'affilé...

Merci pour votre aide :)
bob ou bob, vous ne voyez pas la différence. Pourtant il y en a une fondamentale, l'un est écrit à l'endroit, l'autre à l'envers.

Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici
    
./Post n°3   Marquer comme non lu.
LionelA Ecrit le: Dimanche 26 septembre 2004 à 23:57 Déconnecté(e)    Voir le profil de LionelA Envoyer un email à LionelA Visiter le site WEB de LionelA Envoyer un message privé à LionelA  


J'avoue que j'ai beaucoup de mal a lire le code de quelqu'un d'autre :p

Ce que j'ai essayé de te dire, c'est ca:

if(_keytest(RR_2ND))
{
  compteur_tir++;
  compteur_tir %= repetition;
}
else
  compteur_tir = 0;

if (compteur_tir == 1)
  tirer();


en gros si tu maintiens, le compteur_tir, s'incrementera jusqu'a la valeur de repetition et il rebouclera.
A chaque fois que le compteur passe par la valeur 1 le tir est lancé.
si tu appuies par repetitions, le compteur_tir repassera a 0 dès que tu relaches le bouton donc au nouvel appui, il n'y aura pas beaucoup a attendre avant qu'il atteigne 1.
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/
    
./Post n°4   Marquer comme non lu.
LionelA Ecrit le: Lundi 27 septembre 2004 à 00:06 Déconnecté(e)    Voir le profil de LionelA Envoyer un email à LionelA Visiter le site WEB de LionelA Envoyer un message privé à LionelA  


Pour le probleme de tir qui peut arriver 2 fois d'affilé je crois que ca viens de ta methode de regulation de la vitesse, tu perd des ressources CPU à attendre dans un while :(
Va relire le topic index.php?action=sujet&forum=5&cat=17&topic=927&page=1#15

J'ai mis a jour le squelette de projet qui permet de creer des jeux en ndg et regulé parfaitement (Il n'y a plus de bugs. Je l'ai pas mis en ligne mais si tu le veux je le ferais)

Sinon je peux faire un petit article pour expliquer comment faire une vraie regulation de la vitesse, basée sur l'auto_int 1, et qui laisse toutes les ressources CPU pour l'affichage.
-Edité le Lundi 27 septembre 2004 à 12:44 par LionelA-
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/
    
./Post n°5   Marquer comme non lu.
bobti89 Ecrit le: Lundi 27 septembre 2004 à 20:54 Déconnecté(e)    Voir le profil de bobti89 Envoyer un email à bobti89 Visiter le site WEB de bobti89 Envoyer un message privé à bobti89  

Sinon je peux faire un petit article pour expliquer comment faire une vraie regulation de la vitesse, basée sur l'auto_int 1, et qui laisse toutes les ressources CPU pour l'affichage.

Ca, je veux bien, car le topic sur lequel tu m'envoies, c'est moi qui l'ai crée et j'en ai resorti que ce que je fais là marchait. Mais c'est vrai qu'en y réfléchissant, niveau ressources...

Sinon, pour ta technique, c'est très clair maintenant :)
Merci pour tes réponses !
bob ou bob, vous ne voyez pas la différence. Pourtant il y en a une fondamentale, l'un est écrit à l'endroit, l'autre à l'envers.

Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici
    
./Post n°6   Marquer comme non lu.
LionelA Ecrit le: Lundi 27 septembre 2004 à 21:02 Déconnecté(e)    Voir le profil de LionelA Envoyer un email à LionelA Visiter le site WEB de LionelA Envoyer un message privé à LionelA  


Allez c'est parti, je fais ça cette nuit (j'ai pas cours demain matin :D)
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/
    
./Post n°7   Marquer comme non lu.
geogeo Ecrit le: Lundi 27 septembre 2004 à 21:10 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


En effet y a une meilleure méthode avec les interruptions:

Dans ton interruption tu incrémente un compteur genre 'compteur++'

Dans ton programme tu fais ceci:

if (_keytest (RR_2ND))
{
  if ((compteur&15) || !compteur)
  {
     //Active ton tir
  }
}
else
  compteur = 0;



Normalement ce code doit fonctionner. Plus ton interruption sera rapide plus le tir lorsque tu restes appuyé avec 2ND sera rapide. Tu peux changer aussi le modulo pour accélérer ou diminuer le tir.
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°8   Marquer comme non lu.
bobti89 Ecrit le: Lundi 27 septembre 2004 à 21:10 Déconnecté(e)    Voir le profil de bobti89 Envoyer un email à bobti89 Visiter le site WEB de bobti89 Envoyer un message privé à bobti89  

Ouais, ca marche nikel ! Merci encore !

:D T'es pas obligé de le faire cette nuit ! De toute facon je ne pourrais le voir que demain soir :p
Mais je sens que ca va m'être utile :) , alors vivement demain :)
bob ou bob, vous ne voyez pas la différence. Pourtant il y en a une fondamentale, l'un est écrit à l'endroit, l'autre à l'envers.

Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici
    
./Post n°9   Marquer comme non lu.
bobti89 Ecrit le: Vendredi 1er octobre 2004 à 20:37 Déconnecté(e)    Voir le profil de bobti89 Envoyer un email à bobti89 Visiter le site WEB de bobti89 Envoyer un message privé à bobti89  

// C Source File
// Created 26/09/04; 12:12:53

#include <tigcclib.h>
#include "graphiques.h"

INT_HANDLER OldInt1 = NULL;
INT_HANDLER OldInt5 = NULL;

volatile int compteur = 0;

DEFINE_INT_HANDLER (MyInt1)
{
  compteur++;
}

// Main Function
void _main(void)
{
  int x=72, y=92, xancien=72, yancien=80, i, j, compteurtir=0;
  
  int nb_miss=0, LMissx[16], LMissy[16];
  
  OldInt1 = GetIntVec (AUTO_INT_1);
  OldInt5 = GetIntVec (AUTO_INT_5);
  SetIntVec (AUTO_INT_1, MyInt1);
  SetIntVec (AUTO_INT_5, DUMMY_HANDLER);
  
  memset(LMissx, -10 ,16*sizeof(int));
  memset(LMissy, -10 ,16*sizeof(int));
  
  ClrScr();
  
  while (!_keytest(RR_ESC))
  {
    while (compteur < (HW_VERSION==1 ? 6 : 4)); // ralentit le programme
    compteur=0;
    
    Sprite16( xancien, yancien, 8, mask, LCD_MEM, SPRT_AND);
    Sprite16( x, y, 8, vs, LCD_MEM, SPRT_OR);
    xancien=x; yancien=y;
    
    if (_keytest(RR_LEFT) && x>0)x--;
    if (_keytest(RR_RIGHT) && x<144)x++;
    if (_keytest(RR_UP) && y>70)y--;
    if (_keytest(RR_DOWN) && y<92)y++;
    if (_keytest(RR_2ND)){compteurtir++; compteurtir%=28; } else compteurtir=0;
    
    if ( compteurtir==1 && nb_miss<15) //Si on peut tirer
    {
      LMissx[nb_miss]=x+4;
      LMissy[nb_miss]=y-7;
      nb_miss++;
    }
    
    for(i=0;i<15;i++) //gestion des missiles
    {
      if (LMissy[i] != -10)
      {
        
        Sprite8( LMissx[i], LMissy[i], 8, mask3, LCD_MEM, SPRT_AND);
        LMissy[i]--;
        if (LMissy[i]>=0) Sprite8( LMissx[i], LMissy[i], 8, miss, LCD_MEM, SPRT_OR);
      }
      if (LMissy[i]==-1)
      {
        nb_miss--;
        for(j=i;j<15;j++){LMissy[j] = LMissy[j+1]; LMissx[j] = LMissx[j+1]; }
        i--;
      }
    }
  }
  SetIntVec (AUTO_INT_1, OldInt1);
  SetIntVec (AUTO_INT_5, OldInt5);
}

Voilà, cette fonction fait toujours planter la calc et je ne vois toujours pas pourquoi :(
J'aimerais déjà régler ce problème avant de changer mon système de ralentissement, alors aidez moi !
Bien sûr, si vous avez d'autres remarques, elles sont bienvenues :)
bob ou bob, vous ne voyez pas la différence. Pourtant il y en a une fondamentale, l'un est écrit à l'endroit, l'autre à l'envers.

Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici
    
./Post n°10   Marquer comme non lu.
geogeo Ecrit le: Vendredi 1er octobre 2004 à 22:13 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


Ca plante comment?!
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°11   Marquer comme non lu.
bobti89 Ecrit le: Vendredi 1er octobre 2004 à 23:27 Déconnecté(e)    Voir le profil de bobti89 Envoyer un email à bobti89 Visiter le site WEB de bobti89 Envoyer un message privé à bobti89  

Tout marche très bien jusqu'au moment où on appuie sur esc. Alors ca affiche l'écran home et ca plante (on peut plus rien faire !).
bob ou bob, vous ne voyez pas la différence. Pourtant il y en a une fondamentale, l'un est écrit à l'endroit, l'autre à l'envers.

Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici
    
./Post n°12   Marquer comme non lu.
Kevin Kofler Ecrit le: Samedi 2 octobre 2004 à 01:00 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Tu ne dessinerais pas hors de l'écran par hasard? Je n'ai pas l'impression d'après ton code, mais vérifie...
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°13   Marquer comme non lu.
bobti89 Ecrit le: Samedi 2 octobre 2004 à 15:13 Déconnecté(e)    Voir le profil de bobti89 Envoyer un email à bobti89 Visiter le site WEB de bobti89 Envoyer un message privé à bobti89  

Effectivement, j'effacais les missiles à l'extérieur de l'écran, merci :)
bob ou bob, vous ne voyez pas la différence. Pourtant il y en a une fondamentale, l'un est écrit à l'endroit, l'autre à l'envers.

Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici
    
./Post n°14   Marquer comme non lu.
Vertyos Ecrit le: Vendredi 8 octobre 2004 à 20:29 Déconnecté(e)    Voir le profil de Vertyos Envoyer un email à Vertyos Visiter le site WEB de Vertyos Envoyer un message privé à Vertyos  

Pour le problème de la gestion des tirs, tu peux regarder les sources de Venus (Ships.c, fonction "ShipUpdate")
Membre de [ yAronet ] ^^
(et de [ 3l33t ] aussi, mais chut, coté obscur toussa...)
    
./Post n°15   Marquer comme non lu.
bobti89 Ecrit le: Samedi 9 octobre 2004 à 11:09 Déconnecté(e)    Voir le profil de bobti89 Envoyer un email à bobti89 Visiter le site WEB de bobti89 Envoyer un message privé à bobti89  

oui, merci ! (j'avais oublier que venus était open source !)
bob ou bob, vous ne voyez pas la différence. Pourtant il y en a une fondamentale, l'un est écrit à l'endroit, l'autre à l'envers.

Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici
    
  :: Index » Forum Ti68K » Programmation C » Phoenix : système du tir... (15 réponse(s))
Pages : 1/1     « [1] » »|

.Répondre à ce sujet
Les boutons de code
[B]old[I]talic[U]nderline[S]trikethrough[L]ine Flip Hori[Z]ontallyFlip [V]erticallySha[D]ow[G]low[S]poilerCode [G][C]ite
Bullet [L]istList Item [K] Link [H][E]mail[P]icture SmileysHelp
Couleurs :
Saisissez votre message
Activer les smileys
     

Forum de Ti-Gen v3.0 Copyright ©2004 by Geoffrey ANNEHEIM
Webmaster: Kevin KOFLER, Content Admins: list, Server Admins: Tyler CASSIDY and Kevin KOFLER, DNS Admin: squalyl
Page générée en 53.34ms avec 18 requetes