Bomberman in Rust issueshttps://code.up8.edu/sjk/bomberman-in-rust/-/issues2022-01-13T22:39:35+01:00https://code.up8.edu/sjk/bomberman-in-rust/-/issues/3cargo fmt2022-01-13T22:39:35+01:00Axel Vialacargo fmtPour un code vraiment impecable `cargo fmt` ou `format document`.Pour un code vraiment impecable `cargo fmt` ou `format document`.https://code.up8.edu/sjk/bomberman-in-rust/-/issues/10Les collisions sont cassées + bombe collision2022-01-14T15:35:39+01:00Axel VialaLes collisions sont cassées + bombe collisionles collisions sont cassées. En gros vous faites des collisions du "point" en entiers alors que vos personnages ont un deplacement sur les réels (flotant).
Ça peut pas marcher, faut a la volée calculer une boite de collision pour les bl...les collisions sont cassées. En gros vous faites des collisions du "point" en entiers alors que vos personnages ont un deplacement sur les réels (flotant).
Ça peut pas marcher, faut a la volée calculer une boite de collision pour les block.
De mémoire dans bomberman la bombe est pas traversable ;)https://code.up8.edu/sjk/bomberman-in-rust/-/issues/4Le kill-bombe comment faire plus simple?2022-01-16T16:15:19+01:00Axel VialaLe kill-bombe comment faire plus simple?une elimination par bombe c'est: Si toute les conditions pour que une bombe explose alors on check les 4 cases autour + la case de la bombe.
Si sur n'importe: `[[x - 1, y], [x, y - 1], [x, y], [x + 1, y], [x, y + 1]]` un couple `(x,y) =...une elimination par bombe c'est: Si toute les conditions pour que une bombe explose alors on check les 4 cases autour + la case de la bombe.
Si sur n'importe: `[[x - 1, y], [x, y - 1], [x, y], [x + 1, y], [x, y + 1]]` un couple `(x,y) == posPlayer` alors dead.
Ça tombe bien il existe une fonction pour ça! https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.anyhttps://code.up8.edu/sjk/bomberman-in-rust/-/issues/1Les warnings c'est important 😵2022-01-28T11:49:03+01:00Axel VialaLes warnings c'est important 😵Les warnings c'est important:
```rust
warning: unused comparison that must be used
--> src/main.rs:130:25
|
130 | scene == 0;
| ^^^^^^^^^^ the comparison produces a value
|
...Les warnings c'est important:
```rust
warning: unused comparison that must be used
--> src/main.rs:130:25
|
130 | scene == 0;
| ^^^^^^^^^^ the comparison produces a value
|
= note: `#[warn(unused_must_use)]` on by default
help: use `let _ = ...` to ignore the resulting value
|
130 | let _ = scene == 0;
| +++++++
warning: unused comparison that must be used
--> src/main.rs:172:25
|
172 | scene == 1;
| ^^^^^^^^^^ the comparison produces a value
|
help: use `let _ = ...` to ignore the resulting value
|
172 | let _ = scene == 1;
| +++++++
```
je crois que c'est important non cette histoire de scene = 1;https://code.up8.edu/sjk/bomberman-in-rust/-/issues/9A retenir pour le futur2022-01-14T15:34:14+01:00Axel VialaA retenir pour le futurEssayer de penser "comment généraliser" via des collections (genre le trick des input avec un array (mieux une struct?)) mais faut documenter.
utiliser des fonctions si deux bouts de code changent que a cause d'une variable une fonction...Essayer de penser "comment généraliser" via des collections (genre le trick des input avec un array (mieux une struct?)) mais faut documenter.
utiliser des fonctions si deux bouts de code changent que a cause d'une variable une fonction va vous sauver! PS: vous pouvez prendre une ref.
La mutabilité c'est pas internet ça demande juste d'être responsable.https://code.up8.edu/sjk/bomberman-in-rust/-/issues/8Aller plus loin: Sortir les menu de la game-loop2022-01-14T13:29:34+01:00Axel VialaAller plus loin: Sortir les menu de la game-loopSortir les "menu" (voir code plus bas) pour avoir un `enum` game state qui permet de faire un choix rapide sur "on fait quoi dans la main-loop" et degager le "chemin joyeux" (Happy-path) du code jamais executé en général de pop-up.
```r...Sortir les "menu" (voir code plus bas) pour avoir un `enum` game state qui permet de faire un choix rapide sur "on fait quoi dans la main-loop" et degager le "chemin joyeux" (Happy-path) du code jamais executé en général de pop-up.
```rust
if joueur1.joueur_est_vivant != true && joueur2.joueur_est_vivant != true {
if root_ui().button(vec2(236.0, 447.0), "Retourner au menu") {
pause = false;
scene = 1;
}
if root_ui().button(vec2(396.0, 447.0), "Recommencer") {
pause = false;
_grille = new_map();
joueur1 = Player::new_player1();
joueur2 = Player::new_player2();
stop_sound(sound_game);
play_sound(
sound_game,
PlaySoundParams {
looped: true,
volume: 0.2,
},
);
}
if root_ui().button(vec2(496.0, 447.0), "Quitter le jeux ") {
scene = 0;
}
}
if pause {
if root_ui().button(vec2(236.0, 447.0), "Retourner au jeux") {
pause = false;
}
if root_ui().button(vec2(396.0, 447.0), "Recommencer") {
pause = false;
_grille = new_map();
joueur1 = Player::new_player1();
joueur2 = Player::new_player2();
stop_sound(sound_game);
play_sound(
sound_game,
PlaySoundParams {
looped: true,
volume: 0.2,
},
);
}
if root_ui().button(vec2(496.0, 447.0), "Quitter") {
pause = false;
stop_sound(sound_game);
scene = 1;
}
}
```https://code.up8.edu/sjk/bomberman-in-rust/-/issues/7On melange pas controles/update et draw2022-01-14T13:02:56+01:00Axel VialaOn melange pas controles/update et drawC'est un peu une règle importante dans un jeu on mélange pas le code de draw, le code d'update et le code des input si possible.
Vous découvrirez que c'est a cause de la localité des caches et que autant faire tout par étape et donc avo...C'est un peu une règle importante dans un jeu on mélange pas le code de draw, le code d'update et le code des input si possible.
Vous découvrirez que c'est a cause de la localité des caches et que autant faire tout par étape et donc avoir un peu de structures intermédiaires pour acheminer le travail a faire. Voir les ECS.https://code.up8.edu/sjk/bomberman-in-rust/-/issues/6Les fonctions c'est bon2022-01-28T11:46:04+01:00Axel VialaLes fonctions c'est bonJ'ai été vite et j'ai pas fait le plus malin pour réorganiser un peu. Mais déjà c'est moins toufu on a des fonctions et les bugs sont donc a UN endroit ;)
Dans les jeux sérieux on utilise souvent un concept qui s’appelle Entity Compone...J'ai été vite et j'ai pas fait le plus malin pour réorganiser un peu. Mais déjà c'est moins toufu on a des fonctions et les bugs sont donc a UN endroit ;)
Dans les jeux sérieux on utilise souvent un concept qui s’appelle Entity Component System pour coder les interactions de notre jeu.https://code.up8.edu/sjk/bomberman-in-rust/-/issues/5Code de remplacement de cases plus simple:2022-01-16T16:16:21+01:00Axel VialaCode de remplacement de cases plus simple:Le remplacement d'une case lors d'une explosion c'est pareil que dans #4 on prends nos couples x, y possibles:
Si la case est pas un bord on pose da zone d'explosion. Eventuellement laisser la case (x, y) hors des couples pour afficher l...Le remplacement d'une case lors d'une explosion c'est pareil que dans #4 on prends nos couples x, y possibles:
Si la case est pas un bord on pose da zone d'explosion. Eventuellement laisser la case (x, y) hors des couples pour afficher la bombe ;P
```rust
let possibilities = [[x - 1, y], [x, y - 1], [x, y], [x + 1, y], [x, y + 1]];
for [x, y] in possibilities {
if grid[x][y] != 1 {
grid[x][y] = 3;
}
}
```
une fois explosé on recheck:
```rust
let possibilities = [[x - 1, y], [x, y - 1], [x, y], [x + 1, y], [x, y + 1]];
for [x, y] in possibilities {
if grid[x as usize][y as usize] != 1 {
grid[x][y] = 0;
}
}
self.bomb = false;
}
```
Checker 5 position c'est rapide. checkeer une foret de if moins.https://code.up8.edu/sjk/bomberman-in-rust/-/issues/2Peut-être la map aurais été bien dans une fonction?2022-01-28T11:48:05+01:00Axel VialaPeut-être la map aurais été bien dans une fonction?Je sais pas juste une suggestion.
allez voir !1 on peut faire comme ça:
```rust
fn new_map() -> [[i32; 20]; 20] {
[
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...Je sais pas juste une suggestion.
allez voir !1 on peut faire comme ça:
```rust
fn new_map() -> [[i32; 20]; 20] {
[
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 1],
[1, 0, 2, 0, 2, 0, 0, 0, 2, 2, 0, 2, 0, 2, 0, 2, 2, 0, 0, 1],
[1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 2, 2, 0, 0, 2, 0, 0, 2, 0, 0, 0, 2, 0, 2, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 1],
[1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 2, 2, 0, 0, 2, 0, 0, 2, 2, 0, 0, 2, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 1],
[1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
]
}
```