Game spaceship

Bonjour @toutes et @tous

Voilà grâce à l’aide de Skywodd et d’AlienArea51, j’ai pu enfin faire fonctionner mon lcd
ici : http://www.lextronic.fr/P764-afficheur-4-x-20-caracteres-retro-eclaire-vert.html
(que je ne vous conseil pas :~ explications par MP pour ceux qui veulent)

Et donc je me suis mis en tête de me faire un petit jeu de combat spatial,
du style petit vaisseau qui se déplacent en haut et en bas sur une colonne (4 positions pour moi :wink: ) via 2 boutons pushbutton
et qui tire de rafale de “-” avec un autre bouton pushbutton sur des astéroides et ou des fantomes.
je n’ai pas encore décider si il y aurait un score ou non…

Donc j’en viens à mon post : j’ai le code pour le vaisseau et ses déplacements

mais (hé oui y a un MAIS :~ )
je n’arrive pas à coder le tire “-” (qui se déplacent vers la droite)
ni la générations aléatoires d’astéroïdes (ou de fantômes) qui se déplacent vers la gauche (vers mon vaisseau) …

je pense qu’il faut générer un tableau qui regroupe tous les positions de tous les “caractères” qui sont sur le lcd
et à chaque cycles les rafraichir en faisant un lcd.clear();
mais c’est là que je bloque… :sweat_smile:

Cela intéresserait-il quelqu’un de participer au développement d’un jeu HYPER-HI-TECH sur lcd 4x20 4bits !! … :wink: XD XD ?
Merci d’avance :slight_smile:

Code ci-dessous :

byte pacman_O[8] = {
   B00000,
   B00000,
   B01110,
   B11011,
   B11100,
   B01110,
   B00000,
   B00000
};
byte pacman_F[8] = {
   B00000,
   B00000,
   B01110,
   B11011,
   B11111,
   B01110,
   B00000,
   B00000
};
byte fantome[8] = {
   B00000,
   B00000,
   B01110,
   B10101,
   B11111,
   B11111,
   B10101,
   B00000
};
byte snootlab_left[8] = {
   B00010,
   B10110,
   B11111,
   B11111,
   B10001,
   B10101,
   B10001,
   B01110
};
byte snootlab_right[8] = {
   B00100,
   B01101,
   B11111,
   B11111,
   B10001,
   B10101,
   B10001,
   B01110
};
byte Space_ship[8] = {
   B00000,
   B01100,
   B11000,
   B11110,
   B11110,
   B11000,
   B01100,
   B00000
};


#include <LiquidCrystal.h>
int x;
int y;
int lastbuttonstate1=0;
int lastbuttonstate2=0;
int lastbuttonstate3=0;
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

void setup()
{
  pinMode(9,INPUT); // bouton de déplacement
  pinMode(8,INPUT); // bouton de déplacement
  pinMode(10,INPUT); //bouton de tire
  lcd.begin(20, 4);
  lcd.setCursor(2, 1);
  lcd.print("JARVIS Pret");
  delay(1000);
  lcd.clear();
  x=0;
  y=2;
}

void loop()
{
  lcd.createChar(0,Space_ship);
  lcd.setCursor(x,y);
  lcd.write(0);
  if(digitalRead(9)!= lastbuttonstate1){if(digitalRead(9)==HIGH){lcd.clear();y+=1;}}
  if(digitalRead(8)!= lastbuttonstate2){if(digitalRead(8)==HIGH){lcd.clear();y-=1;}}
  if(digitalRead(10)!= lastbuttonstate3){if(digitalRead(10)==HIGH){lcd.clear();x+=1;}}
  lastbuttonstate1=digitalRead(9);
  lastbuttonstate2=digitalRead(8);
  lastbuttonstate3=digitalRead(10);
  //...
}

Re-bonsoir :slight_smile:

Voilà je me suis amusé à faire se balader mon vaisseau dans un labyrinthe (vraiment basique), mais j’y suis arrivé tout seul :stuck_out_tongue:
XD XD

voilà le code :

byte pacman_O[8] = {
   B00000,
   B00000,
   B01110,
   B11011,
   B11100,
   B01110,
   B00000,
   B00000
};
byte pacman_F[8] = {
   B00000,
   B00000,
   B01110,
   B11011,
   B11111,
   B01110,
   B00000,
   B00000
};
byte fantome[8] = {
   B00000,
   B00000,
   B01110,
   B10101,
   B11111,
   B11111,
   B10101,
   B00000
};
byte snootlab_left[8] = {
   B00010,
   B10110,
   B11111,
   B11111,
   B10001,
   B10101,
   B10001,
   B01110
};
byte snootlab_right[8] = {
   B00100,
   B01101,
   B11111,
   B11111,
   B10001,
   B10101,
   B10001,
   B01110
};
byte Space_ship[8] = {
   B00000,
   B01100,
   B11000,
   B11110,
   B11110,
   B11000,
   B01100,
   B00000
};
byte mur[8] = {
   B01110,
   B01110,
   B01110,
   B01110,
   B01110,
   B01110,
   B01110,
   B01110
};

#include <LiquidCrystal.h>
int x;
int y;
int lastbuttonstate1=0;
int lastbuttonstate2=0;
int lastbuttonstate3=0;
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

void setup()
{
  pinMode(9,INPUT);
  pinMode(8,INPUT);
  pinMode(10,INPUT);
  lcd.begin(20, 4);
  lcd.setCursor(2, 1);
  lcd.print("JARVIS Pret");
  delay(1000);
  lcd.clear();
  x=0;
  y=0;
}

void loop()
{
  
  lcd.createChar(0,Space_ship);
  lcd.setCursor(x,y);
  lcd.write(0);
  labyrinth();
  if(digitalRead(9)!= lastbuttonstate1){if(digitalRead(9)==HIGH){lcd.clear();y+=1;}}
  if(digitalRead(8)!= lastbuttonstate2){if(digitalRead(8)==HIGH){lcd.clear();y-=1;}}
  if(digitalRead(10)!= lastbuttonstate3){if(digitalRead(10)==HIGH){lcd.clear();x+=1;}}
  lastbuttonstate1=digitalRead(9);
  lastbuttonstate2=digitalRead(8);
  lastbuttonstate3=digitalRead(10);
  if((x==1&&y==0)||(x==1&&y==1)||(x==1&&y==3)||(x==2&&y==1)||(x==2&&y==3)||(x==3&&y==3)||(x==4&&y==1)||(x==4&&y==2)||(x==4&&y==3)||(x==5&&y==2)||(x==6&&y==0)||(x==6&&y==3)||(x==7&&y==0)||(x==7&&y==1)||(x==7&&y==3)||(x==8&&y==1)||(x==9&&y==0)||(x==9&&y==2)||(x==10&&y==0)||(x==11&&y==0)||(x==11&&y==1)||(x==11&&y==2)||(x==12&&y==0)||(x==12&&y==1)||(x==13&&y==3)||(x==14&&y==1)||(x==14&&y==2)||(x==14&&y==3)||(x==15&&y==2)||(x==16&&y==0)||(x==16&&y==2)||(x==17&&y==0)||(x==17&&y==2)||(x==17&&y==3)||(x==18&&y==0)||(x==19&&y==0)||(x==19&&y==1)||(x==19&&y==2))
  {
    lcd.clear();
    lcd.setCursor(6,1);
    lcd.print("GAME OVER");
    x=0;y=0;
    delay(5000);
    lcd.clear();
  }
  if((x==19&&y==3)){lcd.clear();lcd.setCursor(6,1);lcd.print("WINNER");x=0;y=0;delay(5000);lcd.clear();}
}

void labyrinth()
{
  lcd.createChar(3,mur);
  lcd.setCursor(1,0);lcd.write(3);
  lcd.setCursor(1,1);lcd.write(3);
  lcd.setCursor(1,3);lcd.write(3);
  lcd.setCursor(2,1);lcd.write(3);
  lcd.setCursor(2,3);lcd.write(3);
  lcd.setCursor(3,3);lcd.write(3);
  lcd.setCursor(4,1);lcd.write(3);
  lcd.setCursor(4,2);lcd.write(3);
  lcd.setCursor(4,3);lcd.write(3);
  lcd.setCursor(5,2);lcd.write(3);
  lcd.setCursor(6,0);lcd.write(3);
  lcd.setCursor(6,3);lcd.write(3);
  lcd.setCursor(7,0);lcd.write(3);
  lcd.setCursor(7,1);lcd.write(3);
  lcd.setCursor(7,3);lcd.write(3);
  lcd.setCursor(8,1);lcd.write(3);
  lcd.setCursor(9,0);lcd.write(3);
  lcd.setCursor(9,2);lcd.write(3);
  lcd.setCursor(10,0);lcd.write(3);
  lcd.setCursor(11,0);lcd.write(3);
  lcd.setCursor(11,1);lcd.write(3);
  lcd.setCursor(11,2);lcd.write(3);
  lcd.setCursor(12,0);lcd.write(3);
  lcd.setCursor(12,1);lcd.write(3);
  lcd.setCursor(13,3);lcd.write(3);
  lcd.setCursor(14,1);lcd.write(3);
  lcd.setCursor(14,2);lcd.write(3);
  lcd.setCursor(14,3);lcd.write(3);
  lcd.setCursor(15,2);lcd.write(3);
  lcd.setCursor(16,0);lcd.write(3);
  lcd.setCursor(16,2);lcd.write(3);
  lcd.setCursor(17,0);lcd.write(3);
  lcd.setCursor(17,2);lcd.write(3);
  lcd.setCursor(17,3);lcd.write(3);
  lcd.setCursor(18,0);lcd.write(3);
  lcd.setCursor(19,0);lcd.write(3);
  lcd.setCursor(19,1);lcd.write(3);
  lcd.setCursor(19,2);lcd.write(3);
}

pour ceux qui sont intéressé… :wink:

@plus

Moi aussi j'ai un 4x20, mais celui-ci: http://www.selectronic.fr/afficheur-retroeclaire-4x20-caracteres-blanc-bleu.html Pour l'instant je m'en sert pour afficher mes températures, mais si ton code évolue et se termine, pourquoi ne pas y greffer un jeu avec des boutons!

piflechien54: Re-bonsoir :) Voilà je me suis amusé à faire se balader mon vaisseau dans un labyrinthe (vraiment basique), mais j'y suis arrivé tout seul :P XD XD voilà le code :

  pinMode(9,INPUT);
  pinMode(8,INPUT);
  pinMode(10,INPUT);

pour ceux qui sont intéressé... ;) @plus

Peux-tu expliquer les branchements?

LEs pins 8, 9 et 10 sont en input donc je pense qu'il y a 3 boutons: un gauche, un droite mais à quoi sert le 3e?

Salut,

piflechien54: Voilà grâce à l'aide de Skywodd et d'AlienArea51, j'ai pu enfin faire fonctionner mon lcd ici : http://www.lextronic.fr/P764-afficheur-4-x-20-caracteres-retro-eclaire-vert.html (que je ne vous conseil pas :~ explications par MP pour ceux qui veulent)

T'as eu une réponse de la pars de lextronic ? Nan parce que le module série de cet écran ... j'ai pas de mot pour le décrire ...

piflechien54: Et donc je me suis mis en tête de me faire un petit jeu de combat spatial, du style petit vaisseau qui se déplacent en haut et en bas sur une colonne (4 positions pour moi ;) ) via 2 boutons pushbutton et qui tire de rafale de "-" avec un autre bouton pushbutton sur des astéroides et ou des fantomes. je n'ai pas encore décider si il y aurait un score ou non....

3 boutons se serait pas plus intéréssant ? Haut/Bas/Tire

piflechien54: mais (hé oui y a un MAIS :~ ) je n'arrive pas à coder le tire "-" (qui se déplacent vers la droite) ni la générations aléatoires d’astéroïdes (ou de fantômes) qui se déplacent vers la gauche (vers mon vaisseau) ...

Commence par faire la partie gestion des déplacements, puis les tires, puis les astéroides et c'est que à la fin que tu regardera pour l'aléatoire (si tu fait un truc propre tu devra juste modifier une variable contenant le temps avant la prochain apparition). Pour les '-' je verrai bien une variable contenant la position du derniers tire et une autre contenant le nombre de '-', le tout x4 pour géré indépendamment chaque ligne.

piflechien54: Cela intéresserait-il quelqu'un de participer au développement d'un jeu HYPER-HI-TECH sur lcd 4x20 4bits !! .... ;) XD XD ?

C'est tentant, mais si je me lance se serait avec un lcd série (de sparkfun pas de lextronic) parce que des lcd 4x20 j'en est pas d'autre.

john_lenfr:

piflechien54: Re-bonsoir :) Voilà je me suis amusé à faire se balader mon vaisseau dans un labyrinthe (vraiment basique), mais j'y suis arrivé tout seul :P XD XD voilà le code :

  pinMode(9,INPUT);
  pinMode(8,INPUT);
  pinMode(10,INPUT);

pour ceux qui sont intéressé... ;) @plus

Peux-tu expliquer les branchements?

LEs pins 8, 9 et 10 sont en input donc je pense qu'il y a 3 boutons: un gauche, un droite mais à quoi sert le 3e?

alors pin 8 -> pushbutton pour le haut pin 9 -> pushbutton pour le bas pin 10 -> pushbutton pour avancer (pour l'instant) XD

skywodd: T'as eu une réponse de la pars de lextronic ? Nan parce que le module série de cet écran ... j'ai pas de mot pour le décrire ...

non toujours pas :~ mais c'est pas la 1ere fois ]:D ]:D

skywodd: 3 boutons se serait pas plus intéréssant ? Haut/Bas/Tire

t'as pas bien lu (ou j'ai mal expliquer ;) ) un bouton pour le haut, un pour la bas et un qui tire ==> donc 3 boutons mais pour le labyrinthe le 3ème sert à avancer.

skywodd: Commence par faire la partie gestion des déplacements, puis les tires, puis les astéroides et c'est que à la fin que tu regardera pour l'aléatoire (si tu fait un truc propre tu devra juste modifier une variable contenant le temps avant la prochain apparition). Pour les '-' je verrai bien une variable contenant la position du derniers tire et une autre contenant le nombre de '-', le tout x4 pour géré indépendamment chaque ligne.

pas mal ;) :) j'avais pensé à séparer les lignes mais je me demander si c'était bon... j'vais essayer XD XD

skywodd: C'est tentant, mais si je me lance se serait avec un lcd série (de sparkfun pas de lextronic) parce que des lcd 4x20 j'en est pas d'autre.

ce sera tout simple pour toi (t'es un dieu en prog ;) )et puis je te dirais où changer les "ordres" pour passer en "série" ;) XD et puis j'suis là sur une version du mineur (non pas le démineur) : le petit personnage qui creuser les murs pour prendre des diamants jusqu'à l'autre bout de l'écran où y-a une sortie.... en évitant de libérer des monstre qui pouvaient le suivre.... ça vous dis quelque chose ?? je l'appel le mineur car je sais plus son nom (diamond, je crois .... :roll_eyes:)

Enfin bref j'ai encore tous pleins d'idées de jeux XD XD XD XD

Si vous voulez, vous pouvez venir jouer avec moi XD XD @plus

piflechien54: t'as pas bien lu (ou j'ai mal expliquer ;) ) un bouton pour le haut, un pour la bas et un qui tire ==> donc 3 boutons mais pour le labyrinthe le 3ème sert à avancer.

Ha ok, j'avais mal lu alors ^_^

piflechien54: ce sera tout simple pour toi (t'es un dieu en prog ;) )et puis je te dirais où changer les "ordres" pour passer en "série" ;) XD7

Nan mais stop je suis pas un dieu :P Comme je peut pas continuer mon projet de ligth painting pour le moment (il neige ...) je vais regarder un peu comment faire ton mini jeu le plus simplement possible ^_^

piflechien54: et puis j'suis là sur une version du mineur (non pas le démineur) : le petit personnage qui creuser les murs pour prendre des diamants jusqu'à l'autre bout de l'écran où y-a une sortie.... en évitant de libérer des monstre qui pouvaient le suivre.... ça vous dis quelque chose ?? je l'appel le mineur car je sais plus son nom (diamond, je crois .... :roll_eyes:)

ça me dis quelque chose mais j'ai plus le nom en tête ...

skywodd:
Ha ok, j’avais mal lu alors :slight_smile:

:stuck_out_tongue:

skywodd:
Nan mais stop je suis pas un dieu :stuck_out_tongue:

Bien M’sieur XD XD XD

skywodd:
Comme je peut pas continuer mon projet de ligth painting pour le moment (il neige …) je vais regarder un peu comment faire ton mini jeu le plus simplement possible :slight_smile:

Désolé pour toi :~, mais MERCI de venir jouer XD XD

skywodd:
ça me dis quelque chose mais j’ai plus le nom en tête …

Ouf :* j’suis pas le seul alors … XD XD

Voilà la première version du jeu DIAMOND : (alors le bonhomme ne fait que se déplacer en traçant son chemin, d’acc ? il n’y a pas encore de comptage des scores ni de poursuites par les monstres… :wink: )

byte diamantB[8] = {
   B00000,
   B00000,
   B01110,
   B10001,
   B01010,
   B00100,
   B00000,
   B00000,
};
byte diamantN[8] = {
   B00000,
   B00000,
   B01110,
   B11111,
   B01110,
   B00100,
   B00000,
   B00000,
};
byte monstre[8] = {
   B00000,
   B01110,
   B10101,
   B11111,
   B01010,
   B10101,
   B00000,
   B00000
};
byte etoile[8] = {
   B00000,
   B00000,
   B10101,
   B01110,
   B10101,
   B01110,
   B10101,
   B00000
};
byte sorti[8] = {
   B11111,
   B11111,
   B11111,
   B00111,
   B00111,
   B11111,
   B11111,
   B11111
};

byte pers[8] = {
   B01100,
   B01100,
   B01001,
   B01010,
   B01110,
   B01000,
   B10100,
   B10010
};
byte solG[8] = {
   B01010,
   B10101,
   B01010,
   B10101,
   B01010,
   B10101,
   B01010,
   B10101
};
byte solD[8] = {
   B10101,
   B01010,
   B10101,
   B01010,
   B10101,
   B01010,
   B10101,
   B01010
};

#include <LiquidCrystal.h>
int perso_x;
int perso_y;
int old_x;
int old_y;
int lastbuttonstate1=0;
int lastbuttonstate2=0;
int lastbuttonstate3=0;
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
int niv1;


void setup()
{
  pinMode(9,INPUT);
  pinMode(8,INPUT);
  pinMode(10,INPUT);
  lcd.begin(20, 4);
  lcd.setCursor(2, 1);
  lcd.print("JARVIS Pret");
  delay(1000);
  lcd.clear();
  niv1=0;
}

void loop()
{
  if(niv1==0){niveau1();}
  if(niv1==1)
  {
    lcd.setCursor(perso_x,perso_y);
    person(perso_x,perso_y);
    if(digitalRead(9)!= lastbuttonstate1){if(digitalRead(9)==HIGH)
    {
      lcd.setCursor(old_x,old_y);
      lcd.print(" ");
      if((perso_y<3)){perso_y+=1;}
      }}
      
    if(digitalRead(8)!= lastbuttonstate2){if(digitalRead(8)==HIGH)
    {
      lcd.setCursor(old_x,old_y);
      lcd.print(" ");
      if((perso_y>0)){perso_y-=1;}
      }}
    
    if(digitalRead(10)!= lastbuttonstate3){if(digitalRead(10)==HIGH)
    {
       lcd.setCursor(old_x,old_y);
       lcd.print(" ");
       if((perso_x<19)){perso_x+=1;}
       }}
       
    lastbuttonstate1=digitalRead(9);
    lastbuttonstate2=digitalRead(8);
    lastbuttonstate3=digitalRead(10);
    old_x=perso_x;
    old_y=perso_y;
  }
//  if((x==1&&y==0)||(x==1&&y==1)||(x==1&&y==3)||(x==2&&y==1)||(x==2&&y==3)||(x==3&&y==3)||(x==4&&y==1)||(x==4&&y==2)||(x==4&&y==3)||(x==5&&y==2)||(x==6&&y==0)||(x==6&&y==3)||(x==7&&y==0)||(x==7&&y==1)||(x==7&&y==3)||(x==8&&y==1)||(x==9&&y==0)||(x==9&&y==2)||(x==10&&y==0)||(x==11&&y==0)||(x==11&&y==1)||(x==11&&y==2)||(x==12&&y==0)||(x==12&&y==1)||(x==13&&y==3)||(x==14&&y==1)||(x==14&&y==2)||(x==14&&y==3)||(x==15&&y==2)||(x==16&&y==0)||(x==16&&y==2)||(x==17&&y==0)||(x==17&&y==2)||(x==17&&y==3)||(x==18&&y==0)||(x==19&&y==0)||(x==19&&y==1)||(x==19&&y==2))
//  {
//    lcd.clear();
//    lcd.setCursor(6,1);
//    lcd.print("GAME OVER");
//    x=0;y=0;
//    delay(5000);
//    lcd.clear();
//  }
//  if((x==19&&y==3)){lcd.clear();lcd.setCursor(6,1);lcd.print("WINNER");x=0;y=0;delay(5000);lcd.clear();}


}

void niveau1()
{
  lcd.clear();
  sol();
  delay(100);
  diamant(3,1,2);
  delay(100);
  diamant(15,3,2);
  delay(100);
  diamant(18,0,2);
  delay(100);
  sortie(19,3);
  delay(100);
  person(0,1);
  delay(100);
  monstres(10,2);
  delay(100);
  niv1=1;
}
  
 void sol()
{ 
  lcd.createChar(0,solG);
  lcd.createChar(1,solD);
  for(int sol_x=0; sol_x<20; sol_x++)
  {
    for(int sol_y=0; sol_y<4; sol_y++)
    {
      lcd.setCursor(sol_x,sol_y);
      if(sol_x==0||sol_x==2||sol_x==4||sol_x==6||sol_x==8||sol_x==10||sol_x==12||sol_x==14||sol_x==16||sol_x==18){lcd.write(0);}
      else if(sol_x==1||sol_x==3||sol_x==5||sol_x==7||sol_x==9||sol_x==11||sol_x==13||sol_x==15||sol_x==17||sol_x==19){lcd.write(1);}
      delay(50);
    }
  }
}

void diamant(int dia_x,int dia_y,int chx_dia)//2=blanc,3=noir
{
  lcd.createChar(2,diamantB);
  lcd.createChar(3,diamantN);
  lcd.setCursor(dia_x,dia_y);
  lcd.print(" ");
  lcd.setCursor(dia_x,dia_y);
  lcd.write(chx_dia);  
}

void sortie(int sor_x,int sor_y)
{
  lcd.createChar(4,sorti);
  lcd.setCursor(sor_x,sor_y);
  lcd.print(" ");
  lcd.setCursor(sor_x,sor_y);
  lcd.write(4);
}

void person(int a,int b)
{
  lcd.createChar(5,pers);
//  lcd.setCursor(perso_x,perso_y);
//  lcd.print(" ");
  lcd.setCursor(a,b);
  lcd.write(5);
  perso_x=a;
  perso_y=b;
}

void monstres(int monst_x,int monst_y)
{
  lcd.createChar(6,monstre);
  lcd.setCursor(monst_x,monst_y);
  lcd.print(" ");
  lcd.setCursor(monst_x,monst_y);
  lcd.write(6);
}

@plus XD

Salut :slight_smile:

alors voici la 1ère version de mon “space invaders”
(bon d’accord, il n’y a que la gestion des tirs…) :wink:

CODE TROP GROS… donc en pièce jointe :wink:

@plus XD

edit : heu, j’ai mis le bon prog… cette fois-ci XD XD

space_ship_lcd.pde (12.4 KB)

SALUT @toutes et @tous XD

j’ai réussi !!! ^^/

voici le programme de base de type "space Invader " qui fonctionne XD XD

pour les critiques : oui je sais : :wink:
“il boucle sur le même niveau” → c’est normal j’ai pas programmé plusieurs niveaux de difficultés (mais cela va venir :wink: )
“le vaisseau ne fait que monter et descendre” → c’est le but mais un autre programme est prévu avec du deplacement… :wink:
“ton prog il est lourd” → ben ouais, j’suis pas super-expérimenté en programmation

je vous met mon prog en pièce jointe :slight_smile:
Faites moi toutes vos critiques (constructives :wink: ) sur mon prog (si vous avez des idées d’amélioration, n’hésitez pas XD )

@Skywodd : si ça te dis de le regarder et de l’améliorer, je t’en serais reconnaissant :wink:

Aller ! assez bla-blatter, place au fun :wink: XD XD
@plus

space_shipv2_lcd.pde (27.1 KB)

piflechien54:
@Skywodd : si ça te dis de le regarder et de l’améliorer, je t’en serais reconnaissant :wink:

Ouai je regarderai :wink:
(J’avais commencer mon propre prog mais je me retrouve à devoirs corriger des prog de mec de ma classe et leur ré-expliquer le cours de prog >< vu le niveau j’en ai pour un moment ><)

Un jour dieu inventa les boucles, l’indentation, les tableaux, …

C’est pas pour être méchant mais c’est vraiment pas jolie :wink:

Pour te donner une idée, ton code fait 27Ko (c’est absolument E N O R M E), avec des boucles toutes bête : 5Ko …
(Je suis pas sure d’avoir pu transcrire parfaitement ton code, donc code à prendre avec des pincettes ;))

space_shipv2_lcd.pde (4.85 KB)

skywodd: Un jour dieu inventa les boucles, l'indentation, les tableaux, ... C'est pas pour être méchant mais c'est vraiment pas jolie ;)

MAAAAAIIIIIISSSS !!!! je sais bien :~ :~ mais quand je me suis servi des boucles, ça me paralysait les mouvements du vaisseau le temps que le tir se finisse.... =( =( alors c'est pour cela que je suis parti sur du "très" basique, en attendant tes conseils ;)

skywodd: (c'est absolument E N O R M E)

heu... oui je sais :blush: ;) XD XD XD XD mdr.... heu mais comment tu sais ???? ;) XD XD

skywodd:
(J’avais commencer mon propre prog mais je me retrouve à devoirs corriger des prog de mec de ma classe et leur ré-expliquer le cours de prog >< vu le niveau j’en ai pour un moment ><)

Bon courage :smiley: j’ai connu cela :sweat_smile: … même à la fac :sweat_smile:… alors Bon courage !! :wink: XD

piflechien54: mais quand je me suis servi des boucles, ça me paralysait les mouvements du vaisseau le temps que le tir se finisse.... =( =( alors c'est pour cela que je suis parti sur du "très" basique, en attendant tes conseils ;)

What !? ça te paralysait les mouvements !? hu? Boucle ou pas le principe de fonctionnement est le même ...

piflechien54: heu... oui je sais :blush: ;) XD XD XD XD mdr.... heu mais comment tu sais ???? ;) XD XD

:grin:

skywodd: What !? ça te paralysait les mouvements !? hu? Boucle ou pas le principe de fonctionnement est le même ...

yes sire ! :~

je tirais (avec la boucle de tir) et je voulais (pendant le tire) déplacer mon vaisseau et ben ..... non il restait bloqué jusqu'à la fin de mon tir... (mais j'ai peut être mal programmé :sweat_smile: :blush:.... )

mais je suis en train de regarder ton prog :) et wahhhhh $) ça me donne tout plein d'idées ;) je vais modifier mon prog en fonction de ton codage XD ... et on verra bien ;)

MERCI m’sieur Skywodd :wink:
ton programme c’est de la bombe 8)
cependant il y un (petit) bug :

au niveau : void lots_monstre()
je voudrais tester le tableau (monstre_y[z]) afin de savoir si il est totalement à 0 (zéro)
et si il y est alors : niveau+=1;
```
*void lots_monstre()
{
  if(niveau == 1 && placement == 1)
  {
    memset(monstre_y[0] + 2, 0, 18);
memset(monstre_y[0] + 15, 1, 5);

memset(monstre_y[1] + 2, 0, 18);
memset(monstre_y[1] + 15, 1, 5);
monstre_y[1][14] = 1;

memset(monstre_y[2] + 2, 0, 18);
memset(monstre_y[2] + 15, 1, 5);

memset(monstre_y[3] + 2, 0, 18);
memset(monstre_y[3] + 15, 1, 5);

monstre_y[1][14] = 1;
    placement=2;
  }
 
  if(niveau == 2 && placement == 3)
  {
    memset(monstre_y[0] + 2, 0, 18);
memset(monstre_y[0] + 15, 1, 5);

memset(monstre_y[1] + 2, 0, 18);
memset(monstre_y[1] + 15, 1, 5);
monstre_y[1][14] = 1;

memset(monstre_y[2] + 2, 0, 18);
memset(monstre_y[2] + 15, 1, 5);

memset(monstre_y[3] + 2, 0, 18);
memset(monstre_y[3] + 15, 1, 5);

monstre_y[1][14] = 1;
    placement = 3;
  } 
 
//  byte zero = 0;
//  for(i = 0; i < (20 * 4); i++) if(monstre_y[i]==0) zero = 1;
// 
  if(niveau == 2 && placement==2)
  {
    lcd.clear();
lcd.setCursor(5,1);
lcd.print(“Niveau 2”);
delay(2000);
lcd.setCursor(5,1);
lcd.print("        “);
    placement = 3;
  }
//  } else if(placement == 3 && !zero){
//    lcd.clear();
// lcd.setCursor(5,1);
// lcd.print(“Niveau 3”);
// delay(2000);
// lcd.setCursor(5,1);
// lcd.print(”        ");
//    niveau = 1;
//  }
//  }

for(byte z = 0; z < 4; z++)
  {
    for(i = 2; i < 20; i++)
    {
      if(monstre_y[z][i])
      {
        lcd.setCursor(i, z);
  lcd.write(2);
  if(tir_y[z][i] && !monstre_y[z][i - 1])
        {
          monstre_y[z][i] = 0;
          tir_y[z][i] = 0;
          lcd.setCursor(i, z);
          lcd.print(’ ');
        }
      }
    }
  }
}*
```
mais là je bloque :sweat_smile: :sweat_smile:
et puis pourrais-tu me fournir des explications sur :
- memset
- peux tu me traduire : memset(monstre_y[0] + 2, 0, 18)
MERCI d’avance :wink:
Désolé de te demander le même service que les mecs de ta classe… :blush:

piflechien54:
je tirais (avec la boucle de tir) et je voulais (pendant le tire) déplacer mon vaisseau et ben … non il restait bloqué jusqu’à la fin de mon tir… (mais j’ai peut être mal programmé :sweat_smile: :blush:… )

Symptôme typique d’une boucle mal conçu qui ne faisait pas tout les calculs nécessaire en parallèle, mais uniquement morceau par morceau :wink:

piflechien54:
mais je suis en train de regarder ton prog :slight_smile: et wahhhhh $) ça me donne tout plein d’idées :wink:

C’est le but :wink:

piflechien54:
au niveau : void lots_monstre()
je voudrais tester le tableau (monstre_y[z]) afin de savoir si il est totalement à 0 (zéro)
et si il y est alors : niveau+=1;
(…)
mais là je bloque :sweat_smile: :sweat_smile:
[/quote]
Tu as commenter justement la partie en question :stuck_out_tongue:
* *byte zero = 0;   for(i = 0, i < (20 * 4); i++) if(*(monstre_y + i)) zero = 1; if(zero) niveau++;* *
Un tableau t[x ][y] n’est rien d’autre qu’un tableau t[xy] en faite (en mémoire), donc si tu fait une boucle de t[0] à t[204 - 1] tu passe tout le tableau en revu.
Par défaut “zero” égale false (=0), si tout le tableau est égale à 0 aucun changement, sinon “zero” passe à true (=1) et tu peut faire ton if(zero) niveau++;
:wink:
> piflechien54:
> et puis pourrais-tu me fournir des explications sur :
> - memset
> - peux tu me traduire : memset(monstre_y[0] + 2, 0, 18)
void * memset ( void * ptr, int value, size_t num ) → http://www.cplusplus.com/reference/clibrary/cstring/memset/
En gros cette fonction assigne la valeur “value” à “num” éléments du tableau “ptr”.
(C’est l’équivalent d’une boucle for(i = 0; i < num; i++) ptr = value; )
Pour memset(monstre_y[0] + 2, 0, 18) (je viens de voir une petite erreur au passage, c’est pas monstre_y[0] mais &monstre_y[0] :blush:)
En gros ça fait que 18 éléments à partir de l’adresse de monstre_y[0] sont placé à la valeur 0.
> piflechien54:
> Désolé de te demander le même service que les mecs de ta classe… :blush:
No problém, si je suis sur le forum c’est pas pour rien :wink:

skywodd:
Symptôme typique d’une boucle mal conçu qui ne faisait pas tout les calculs nécessaire en parallèle, mais uniquement morceau par morceau :wink:

c’est même pas vrai ! heu !! :stuck_out_tongue: :stuck_out_tongue:

skywodd:
C’est le but :wink:

skywodd:
void * memset ( void * ptr, int value, size_t num ) → http://www.cplusplus.com/reference/clibrary/cstring/memset/
En gros cette fonction assigne la valeur “value” à “num” éléments du tableau “ptr”.
(C’est l’équivalent d’une boucle for(i = 0; i < num; i++) ptr = value; )
Pour memset(monstre_y[0] + 2, 0, 18) (je viens de voir une petite erreur au passage, c’est pas monstre_y[0] mais &monstre_y[0] :blush:)
En gros ça fait que 18 éléments à partir de l’adresse de monstre_y[0] sont placé à la valeur 0.[/quote]
Merci 8) j’ai compris (enfin presque :wink: )
ben non t’avais raison pour “monstre_y[0] mais &monstre_y[0]” car ça marche avec monstre_y[0] et non pas avec &monstre_y[0]
le seul soucis que j’ai, c’est qu’avec la boucle que tu m’as donnée :
* *byte zero = 0;   for(i = 0, i < (20 * 4); i++) if(*(monstre_y + i)) zero = 1; if(zero) niveau++;* *
même cela ne marche pas quand j’ai “effacé” tous les monstres… :blush:
mon vaisseau reste tout seul dans l’écran et je peux tirer autant de fois que je veux … dans le vide XD
pourtant dans mon tableau "monstre_y[z]", tous les monstres sont à “0” (puisqu’ils ne sont plus à l’écran)
or lorsque j’essaye de lui faire vérifier que le tableau est égal à 0 …
rien ne se passe… :disappointed_relieved:
mais j’ai un petit doute, je m’explique : XD
dans ta programmation améliorée 8)
dans la fonction “void lots_monstre()”, tu utilise [z] et pour incrémenter le tableau “monstre_y” et effacer les monstre quand ils sont “touchés”
or dans la même fonction “void lots_monstre()” tu utilise aussi dans la boucle pour vérifier le même tableau mais avec une valeur égale à 20*4 (80) au lieu de valeur 2=>Val<20
ne faudrait-il pas utiliser une autre variable ? n’y-a-t-il pas conflit ? est-ce pour cela qu’il ne détecte pas la fin du monde XD des monstres ? :open_mouth:
MERCI pour ton aide précieuse :wink: