Bonjour/Bonsoir!
Comme je suis un (petit) nouveau, je me permet de me présenter, j'ai 19 ans, je suis étudiant en prépa (en PC* pour ceux que ça intéresse) et je tripatouille mon arduino depuis... Quelque chose comme 7 mois (d'après la date d'achat de mon arduino ). Mais bref assez parlé de moi, parlons de mon projet!
Je cherche à coder un jeu tout simple (en apparence ) au quel vous avez déjà certainement joué. Je ne crois pas qu'il ait un nom... j'ai vu qu'on l'appelait Blitz à certains endroit, c'est ce que j'ai fait.
il s'agit d'un jeu avec un bombardier qui se déplace de la gauche vers la droite et qui descend progressivement. Le but étant de larguer des bombes pour détruire des bâtiments sans s'écraser dessus.
Une image (de mauvaise qualité) vaut mieux qu'un long discourt. Ça ressemble à ça:
Sur cette photo, la 2ème tour est en train de s'afficher!
Pour l'instant, voilà où j'en suis:
-j'arrive à faire défiler l'avion
- à lâcher des bombes quand j'appuie sur le bouton
- à afficher BOUM! quand la bombe touche le sol
- à afficher les 2 tours
Ce qui me pose problème:
- Je me suis arrangé pour que les 2 tours aient une position alléatoire mais j'ai beau reseter l'arduino, elles apparaissent toujours au même endroit! c'est comme si les variable de position étaient définies à l'upload du scketch et ne changeaient plus jamais!
- quand une bombe tombe, il y a un affreux clignottement de tout l'écran! (propablement à cause de la fonction millis()...)
-quand une bombe touche une tour, celle-ci reste affichée!
Ce qui reste en projet:
-Créer des niveaux de plus en plus dur
-faire descendre l'avion à chaque passage
-pourquoi pas enregistrer les High Score dans l'EEPROM
Voilà il me reste à vous dire que j'utilise la librairie TVout, disponible ici : Google Code Archive - Long-term storage for Google Code Project Hosting.
Et evidement à vous montrer le code
/*
-------------------Blitz----------------------
A game where you have to destroy buldings by dropping bombs.
By Robin Dupont | email: robin.dpnt@gma**il.com (remove the 2 * )
Feel free to share or modify this code!
This code use the TVout librairy available here:
http://code.google.com/p/arduino-tvout/
----------------------------------------------
*/
#include <TVout.h>
#include <fontALL.h>
#include "Bomber.h"
#include "Bomb.h"
#include "Tower.h"
TVout TV;
int i=0; //Position initiale du bombardier
int m=i;
int j; // Variable de position (axe Y) pour les bombes
int p=(TV.vres()/10)+5; // position du bombardier sur l'axe des Y (pour l'instant il ne descend pas!)
long prev = 0; //
int interval = 10; // Variables utilisée pour le délais avec la fontion millis()
int interval2 = 500; // (prev est l'abréviation de previous )
long prev2 = 0; //
int pos1; //
int pos2; // Position des Tours
boolean chk1; //
boolean chk2; //Variables pour vérifier que l'on puisse ou pas afficher les tours
void setup(){
chk1=true;//
chk2=true;// Booléen réglé sur vrai par défaut
TV.begin(PAL,120,96);
pinMode(2,INPUT); // pin pour le bouton
intro(); // Affiche l'intro
}
void check(){
if(j=TV.vres()-5){ //
if (m+14<pos1<m+20){ // If statement pour vérifier si une bombe est en contact avec une tour
chk1=false;} //
else{chk1=true;} //
if (m+14<pos2<m+20){ //
chk2=false;} //
else{chk2=true;} //
}
}
void intro() {
while(digitalRead(2)== LOW){
TV.select_font(font8x8); //Ecran d'intro. Juste pour se la péter et écrire son nom sur la télé devant les potes! :p
TV.print(20,TV.vres()/3,"BLITZ v0.5"); //
TV.select_font(font4x6); //
TV.print(20,(TV.vres()/3)+10,"By Robin Dupont"); //
TV.select_font(font6x8);
TV.bitmap(30,(TV.vres()/3)+25,Bomber);
TV.bitmap(45,(TV.vres()/3)+40,Bomb);
TV.bitmap(37,(TV.vres()/3)+48,Bomb);
}
}
void pos(){ //Set a ramdom position to the 2 Buldings
pos1= random(15,105); //
pos2 = random(15,105);
if (abs(pos1-pos2)<6){ //If statement pour éviter que les 2 tours se chevauchent
if (pos1>pos2){
pos1=pos1+3;
pos2=pos2-3;
}
else if (pos1<pos2){
pos1=pos1-2;
pos2=pos2+2;
}
}
}
void affichage(){ //Affichage des 2 tours
if (chk1 == true){
TV.bitmap(pos1,TV.vres()-20,Tower);}
if (chk2 == true){
TV.bitmap(pos2,TV.vres()-20,Tower);}
}
void loop(){
int hauteur = TV.vres();
int largeur = TV.hres();
delay(1000); // delay pour éviter que le 1er appuie sur le bouton soit pris en compte
pos(); //crée les coordonnée en x des tours
// Grosse boucle for quio fait tous fonctionner
for ( i=0 ; i < largeur;i++){
TV.bitmap(i,p,Bomber); // afficher le bonbardier
affichage(); // afficher les 2 tours
if (i > largeur - 5){
i=0;} // pour faire revenir l'avion à son point de départ
TV.delay(25);
TV.clear_screen();
if (digitalRead(2) == HIGH){ //check si le bouton est pressé
const int x = i;
int k = i*10;
for (j=p;j<=hauteur;){ //for loop pour faire tomber les bombes
TV.clear_screen();
TV.bitmap(TV.hres()/2,TV.vres(),Tower); //Affichage des tours, de la bombe et du bombardier pendant la chute de la bombe
TV.bitmap(x+15,j,Bomb); //+15 pour que la bombe soit lachée au millieu de l'avion
TV.bitmap((k/10),p,Bomber); // k/10 pour que l'avion n'avance pas trop vite
unsigned long now = millis(); //Fait tomber la bombe
if (now - prev > interval){
prev = millis(),
j++;
}
if (now - prev2 > interval2){ //Fait voler l'avion pendant que la bombe tombe
k++;
}
if (j>=hauteur){
TV.print(x+3,j-10,"BOUM!");} // écrit BOUM! quand la bombe touche le sol
affichage (); //affiche les tours pendant la chute de la bombe
i=k/10; // redonne la bonne valeur à i
}
}
}
}
Pour ceux qui ne seraient pas familiers avec TVout,
#include "Bomber.h"
#include "Bomb.h"
#include "Tower.h"
C'est juste pour les image bmp transformées en code hexa !
Bien, ceci étant dit, Je tiens à préciser que je ne commente d'habitude pas vraiment mes codes et que je ne sais pas si il y a une façon particulière de le faire, donc j'ai commenté à ma façon. Si certains point sont obscures, n'hésitez pas à me demander des précisions!
Là où je sollicite votre aide, c'est pour résoudre les points de "Ce qui me pose problème:". Si vous pouviez me donner quelques astuces qui permettraient de débloquer la situation, et ne vous privez pas pour critiquer âprement mon code qui doit être assez "brouillon" je pense XD !
Bref, Bonne lecture et bonne journée/soirée!
EDIT: j'avoue que je titre n'a pas trop de rapport, où ne couvre pas la totalité du sujet mais je ne sais pas quoi mettre :~