IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Création mini-rpg type bomberman


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 11
    Points : 12
    Points
    12
    Par défaut Création mini-rpg type bomberman
    Bonjour,

    Dans le cadre d'un projet personnel j'ai voulu réaliser un mini-rpg de type bomberman. J'ai finalement parvenu à un résultat plutôt convaincant cependant il me reste un problème à résoudre.
    Je vous expose la situation : il y a une map crée dans un canvas grâce à un tileset, 2 personnages chargé à l'aide de sprites. Le but du jeu est pour chaque joueur de tué l'autre joueur en posant des bombes qui au bout d'un certain temps explosent, ces bombes font des dégâts à l'endroit ou elles sont posées ainsi qu'à ces coordonnées adjacentes.

    Le problème que j'ai est le suivant : lorsque je met une bombe côte à côte d'une autre bombe déjà posée j'aimerais que la 2ème bombe que je pose explose en même temps que la première.

    Je sais qu'il faut que j'utilise les coordonnées adjacentes des bombes ainsi que tu "timer" que j'ai donné aux bombes. En théorie je sais comment décrire ce que je dois faire mais en pratique j'ai du mal.

    Donc pour résumé il faudrait qu'à chaque fois que je pose une bombe je regarde s'il n'y en a pas une à ces coordonnées adjacentes, si cette condition est vraie et qu'il y a une bombe a côté il faudrait que le "timer" de cette bombe devienne égal à celle d'à côté, si la condition est fausse je lui attribut le "timer" de base que je donne aux bombes.

    Pour plus de détail je vous met ci-dessous la partie de mon code qui je pense doit être modifiée

    Merci d'avance ,

    Jonathan


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    function Bombe(url, urlexplo, joueur, direction) {
    	this.joueur1;
    	this.joueur2;
    	this.x= joueur.x;
    	this.y= joueur.y;
     
    	this.image = new Image();
    	this.image.referenceDuPerso = this;
    	this.etatAnimation=-1;
    	this.image.onload = function() {
    		if(!this.complete) 
    			throw "Erreur de chargement du sprite nommé \"" + url + "\".";
     
    	}
    	this.image.src = "sprites/" + url;
    	this.timerBombe=60; // TIMER AVANT EXPLOSION
        this.imageexplo = new Image();
    	this.imageexplo.referenceDuPerso = this;
     
    	this.imageexplo.onload = function() {
    		if(!this.complete) 
    			throw "Erreur de chargement du sprite nommé \"" + urlexplo + "\".";
     
    	}
    	this.imageexplo.src = "sprites/" + urlexplo;
     
    }
     
    Bombe.prototype.dessinerBombe = function (context,personnages,personnages2){
    	this.joueur1=personnages;
    	this.joueur2=personnages2;
    	var prochaineCase = this.getCoordonneesAdjacentes();
    	var prochaineCase1 = this.getCoordonneesAdjacentes();
    	var prochaineCase2 = this.getCoordonneesAdjacentes2();
    	var coord = {'x' : this.x, 'y' : this.y};
     
    	switch(this.etatAnimation){
    		case -1: 
    		context.drawImage(this.image,this.x*32,this.y*32);
    		map.terrain[this.y][this.x]=99; // MODIFICATION DE LA TILES DE LA BOMBE POUR EMPECHER LE JOUEUR DE REMARCHE DESSUS
     
    			if (this.timerBombe>0){
    				this.timerBombe--;
    			}else{
    				this.etatAnimation=0;
    				this.timerBombe=0.1; // L'IMAGE DE L'EXPLOSION A EU UN TEMPS REDUIT SINON LE JOUEUR DEVAIT TROP ATTENDRE AVANT DE POUVOIR AVANCER
    			}
     
    		break;	
    	case 0: 
    		context.drawImage(this.imageexplo,this.x*30,this.y*30);
    		/*console.log(map.terrain[this.y][this.x]);*/
     
    		if(map.terrain[this.y][this.x]==99 ) { // ON MET LE TILES DU CRATERE QUAND CA EXPLOSE
    			map.terrain[this.y][this.x]=5;
    		}
     
    		if (this.timerBombe>0){
    			this.timerBombe--;
    		}else{
    			this.etatAnimation=2;
    		}
    		break;
    	}
     
    }

  2. #2
    Rédacteur/Modérateur

    Avatar de yahiko
    Homme Profil pro
    Développeur
    Inscrit en
    Juillet 2013
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1 424
    Points : 8 713
    Points
    8 713
    Billets dans le blog
    43
    Par défaut
    Le test de l'adjacence ne suffit pas. L'explosion d'une bombe a en principe une portée supérieure à une case, sinon ce serait trop facile ^^
    A chaque itération, l'explosion se propage d'une unité de distance dans les 4 directions.
    A l'itération 1, l'explosion d'une bombe a une portée d. A l'itération 2, l'explosion a une portée 2 * d, et ainsi de suite.
    Si à une certaine itération t, une autre bombe se trouve à portée, alors elle explose.

    Si la bombe initiale b0 se trouve aux coordonnées (x, y), et si la bombe à tester b se trouve aux coordonnées (x', y') alors la bombe b doit exploser si la distance horizontale | x' - x | <= 2d ou si la distance verticale | y' - y | <= 2d.

    En JavaScript on peut écrire le test suivant pour une bombe b donnée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function testExplosion(b, b0, t, d) {
        return (Math.abs(b.x - b0.x) <= t * d) || Math.abs(b.y - b0.y) <= t * d);
    }
    Cette fonction renvoie true si la bombe b doit exploser à cause d'une autre bombe b0, false sinon.
    Bien évidemment, cette fonction ne tient pas compte des éventuels obstacles qu'il faudra traiter au préalable.

Discussions similaires

  1. problem création d'un type de contenue de tache
    Par samworkflow dans le forum SharePoint
    Réponses: 3
    Dernier message: 25/05/2009, 11h04
  2. [68000] Création mini-jeu
    Par Hiike dans le forum Autres architectures
    Réponses: 0
    Dernier message: 13/04/2009, 20h21
  3. Question de structure pour un jeu de type Bomberman
    Par FabaCoeur dans le forum Développement 2D, 3D et Jeux
    Réponses: 29
    Dernier message: 19/04/2007, 13h33
  4. [Tableaux] création d'un type de données
    Par toddy_101 dans le forum Langage
    Réponses: 5
    Dernier message: 23/01/2007, 15h33
  5. Aide sur la création d'un type simple (nom composite)
    Par testeur dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 06/11/2004, 20h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo