Dangerous race

Description

Un jeu de course ou vous devez parcourir 2000 m le plus vite possible en évitant les obstacles de plus en plus nombreux.

Vue en "3D" bricolée.

Gestion d'éléments par tableaux.

Source / Exemple :


stop();
// variables définissant le joueur :
// position :
_root.win._visible = false
px = 0;
pz = -30;
// vitesse :
iz = 0;
//Variables générales
// chronométre :
time = 0;
// quatres tableaux qui définissent les obstacles
// Les deux valeur à l'initialisation sont celles des deux piques du départ
// position :
var ox:Array = new Array(-10, 10);
var oz:Array = new Array(0, 1);
// taille :
var ow:Array = new Array(1, 1);
var oh:Array = new Array(5, 5);
// On créé l'ensemble des obstacles de maniére plus ou moins aléatoire :
//          vvv---- c'est le nombre d'obstacles
for (a=2; a<100; a++) {
	// position
	ox[a] = Math.random()*25-12;
	oz[a] = oz[a-1]+10/Math.sqrt(a);
	// taille
	ow[a] = Math.random()*2+1;
	oh[a] = 0.5;
}
// On vérifi qu'il n'y a pas une ligne droite dégagée sur le trajet
// Pour cela on compte le nombre d'objet obstruant chaque ligne droite :
// Pour chaque ligne droite ...
for (i=-10; i<10; i++) {
	// init le compteur d'obstacles en travers du chemin
	ok = 0;
	// ... pour chaque objet
	for (a=0; a<ox.length; a++) {
		// vérifier s'il est en travers du chemin
		if (Math.abs(i-ox[a])<ow[a]) {
			// si c'est le cas, il y a un obstacle en travers du chemin de plus
			ok++;
		}
	}
	// il faut au moins 4 obstacles par ligne droite.
	if (ok<4) {
		// sinon on regénére les obstacles en replayant l'animation.
		_root.gotoAndPlay(4);
	}
}
// la boucle principale
_root.onEnterFrame = function() {
		// Afficher ou non le "you win" en fonction de la position du joueur et de la position du dérnier obstacle.
	if (pz>oz[oz.length-1]) {
		_root.win._visible = true;
	} else {
		_root.win._visible = false;
	}
	// gérer le chrono en fonction de la position du joueur
	if (pz<oz[oz.length-1]) {
		time++;
	}
	if (pz<0) {
		time = 0;
	}
	// appliquer la vitesse à la position
	pz += iz/10;
	// Frotement qui réduisent la vitesse.
	iz *= 0.95;
	// remplacer le support d'affichage des obstacles <=> clear screen 
	_root.createEmptyMovieClip("truc", 1);
	// gestion des objets un par un
	for (a=0; a<ox.length; a++) {
		var ref:MovieClip=null
		// si l'obstacle est devant le joueur :
		if (pz<oz[a]) {
			// l'afficher
			ref = _root.truc.attachMovie("mur", a, Math.floor(-oz[a]));
			// l'afficher transparent si il est trop près du joueur
			if (oz[a]-pz<3) {
				ref._alpha = (oz[a]-pz)*33;
			}
			// Affichage "3D" : positionner et redimensionner son image sur l'écrant en fonction de ses positions théoriques
			ref._x = 200+(ox[a]-px)/(oz[a]-pz)*100;
			ref._y = 200-(oz[a]-pz)*2;
			ref._height = oh[a]/(oz[a]-pz)*100;
			ref._width = ow[a]/(oz[a]-pz)*100;
			ref.stop()
		}
		// collision avec l'objet -> game over
		if (pz<oz[a] && pz>oz[a]-iz*0.2 && Math.abs(px-ox[a])<ow[a]/3) {
			play();
			if(ref!=null){
				ref.play()
				}
		}
	}
	// Les touches, tourner
	if (Key.isDown(Key.LEFT)) {
		px--;
		if (px<-10) {
			px = -10;
		}
	}
	if (Key.isDown(Key.RIGHT)) {
		px++;
		if (px>10) {
			px = 10;
		}
	}
	// Les touches : accélérer
	if (Key.isDown(Key.UP)) {
		iz++;
	}
	if (Key.isDown(Key.DOWN)) {
		iz--;
	}
};
// Lorsqu'on clique sur le "you win" on revient au départ
_root.win.onPress = function() {
	_root.gotoAndPlay(5);
};

Codes Sources

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.