Casse brique - évolution

0.5

By Codnpix, 2 weeks ago

Controls: D-Pad: [Arrows / WASD] - A: [J] - B: [K] - Menu: [U] - Home: [I]
Enjoy games at full speed with sound and lights on the Gamebuino META!
Emulator by aoneill

This is a little breakout game, based on a customisation of the one from this tutorial https://gamebuino.com/fr/creations/breakout .

Évolutions :

- Multiple levels (6 so far...)

- Bounce angle control on paddle

- Various types of bricks (1, 2, 3 shots destroyed, moving bricks...)


Soon :

- user menu (choose level, see locked and unlocked levels, see best scores...)

- bonus (score bonus, custom padlle, multiball..?)


Thanks for testing and giving me feedback on what could be improved :) !


Petit essai de jeu de casse-brique en évolution de celui proposé par le tutoriel https://gamebuino.com/fr/creations/breakout .

Évolutions :

- Plusieurs niveaux (6 pour l'instant)

- Contrôle de l'angle de rebond sur la palette

- briques variées, briques en mouvement...

à venir bientôt (j'espère =) !)

- menu utilisateur (choisir le niveau, voir les niveaux bloqués et débloqués et les meilleurs scores)

-bonus (points supplémentaires, palette customisée, multiballe... ?)


Merci à tous ceux qui pourront le tester et me donner leurs retours sur ce que devrait être amélioré !

Last comments

clement

NEW 3 days ago

Salut,

pour optimiser un peux tout ca et enlever ce probleme de brique fantôme tu peux changer la structure de stockage des briques 

si au lieux de les stocker dans un tableau a 2 dimensions  tu les stock dans un tableau a une dimension tu ne stoque que les brique a afficher

int nombreDeBriqueCourent = 0;
for (int rangee = 0; rangee < NB_RANGEES; rangee ++) {
    for (int colonne = 0; colonne < NB_COLONNES; colonne++) {
      if (types_set[rangee][colonne] > 0) {
         briques[nombreDeBriqueCourent].type = types_set[rangee][colonne];
         // evidement tout le reste de l initialisation
         nombreDeBriqueCourent++;
     }
  }
}

Dans ton tableau tu aura uniquement des briques a afficher (entre l index 0 et  nombreDeBriqueCourent - 1)

Dans les boucles d'affichage et mise a jour tu tournera evidement uniquement sur le nombreDeBriqueCourent.


++




Codnpix

NEW 4 days ago

Bonjour à tous, 

je suis en train d'essayer de mettre en place le menu pour pouvoir sélectionner manuellement un niveau dans mon casse brique, et ça m'a fait mettre le doigt sur un problème que je n'arriver pas à solutionner : 

Les images des briques leurs sont assignées en fonction d'un tableau d'entiers de ce style :

 {
    {0,1,1,1,1,1,1,0},
    {0,2,0,2,1,0,2,0},
    {0,1,0,1,2,0,1,0},
    {0,2,2,3,3,2,2,0},
    {0,1,0,1,2,0,1,0},
    {0,2,0,2,1,0,2,0},
    {0,1,1,1,1,1,1,0},
    {0,0,0,0,0,0,0,0}
  }

Chaque nombre correspond à un type de brique, donc quand j'initialise le niveau je parcours le tableau qui correspond au niveau pour assigner la bonne image à chaque brique. Les zéro ne corresponde à rien donc ça donnc un emplacement vide. Sauf que...

Ça se passe bien tant que je charge mon niveau sur une matrice vierge (par exemple quand j'allume la console ou que j'ai détruit toute les briques et que je passe au niveau suivant). Mais si je charge un niveau via le menu et que le précédent niveau chargé affichait encore des briques, les zéro de la matrices n'ont en fait aucun effet ! Certes ils ne chargent pas une nouvelle image mais ils ne remplacent pas non plus l'ancienne par du vide. Du coup je me retrouve avec les briques du niveau sélectionné et les briques du dernier niveau affiché là ou il devrait y avoir du vide....

Donc en gros j'aimerais trouver un moyen de réinitialiser vraiment ces emplacements sur du vide mais je ne sais pas comment m'y prendre.

Voici la fonction qui charge le niveau selon ce tableau : 

void loadLevel(int myLevel) {

  for (int rangee = 0; rangee < NB_RANGEES; rangee++) {
      for (int colonne = 0; colonne < NB_COLONNES; colonne++) {
        types_set[rangee][colonne] = levels[myLevel][rangee][colonne];
      }
    }
}

et voici un extrait de comment la fonction "initGame" attribue les images à chaque brique selon son type (du coup je me contente d'ignorer les zéros mais visiblement c'est un peu léger :D !) :

void initGame() {
//...

  //initialiser les briques
  for (int rangee = 0; rangee < NB_RANGEES; rangee ++) {
    for (int colonne = 0; colonne < NB_COLONNES; colonne++) {
      briques[rangee][colonne].type = types_set[rangee][colonne];
      briques[rangee][colonne].x = colonne * (BRICK_W + 1) + 1;
      briques[rangee][colonne].y = rangee * (BRICK_H + 1) + 1;
      if (briques[rangee][colonne].type == 1) {
        briques[rangee][colonne].state = 1;
        briques[rangee][colonne].img = brick1;
      } else if (briques[rangee][colonne].type == 2) {
        briques[rangee][colonne].state = 2;
        briques[rangee][colonne].img = brick2;
      } else if (briques[rangee][colonne].type == 3) {
        briques[rangee][colonne].state = -2;
        briques[rangee][colonne].img = brick3;
//...

Et voici la structure d'un brique :

struct Brique {
  int x;
  int y;
  int _w;//largeur
  int _h;//hauteur
  int type;
  int state;
  Image img;
  int speedX;
  int speedY;
  unsigned long deathTime;
};


Est-il possible de "nullifier" l'objet image d'une brique ? J'ai essayé de me débrouiller avec des pointeurs pour que l'objet image de la struct Brique soit en fait un pointeur vers l'adresse d'une image dans un tableau ou bien vers une valeur NULL si le type==0. Mais je ne m'en suis pas sorti (même pas réussi à juste remplacer l'image réelle de la brique par un pointeur vers une image..).


Voilà en gros où j'en suis, merci d'avance si quelqu'un a un conseil à me donner !


EDIT : J'ai trouvé un solution un peu en "trichant", je fait en sorte que les briques dont le type est zéro soient détruites d'entrée de jeu et à partir de là plus de problème. Mais je suis pas sûr que ce soit très propre comme solution, donc je reste ouvert aux suggestions !



Codnpix

NEW 1 week ago

geed geed

Ok j'irai voir ! 

Pour les patterns stockés dans un tableau j'ai un peu essayé, je ne m'en suis pas vraiment sorti mais il faut peut être que je creuse encore un peu.