begin process at 2012 05 27 18:32:17
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Jeux

 > LUNAR LANDER

LUNAR LANDER


 Information sur la source

Note :
Aucune note
Catégorie :Jeux Niveau :Débutant Date de création :22/02/2002 Date de mise à jour :13/07/2002 18:25:11 Vu / téléchargé :4 583 / 179

Auteur : Warwick

Ecrire un message privé
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

 Description

Reprise du célèbre jeu Lander. Ce jeu a été compilé sous Turbo C++ 3.0 Il nécessite donc pour être jouable les drivers graphiques qui doivent se trouver dans c:\tc\bgi

Ce jeu est très simple, et il est très facile de gagner. Mais ce n'est que le début d'une grande épopée informatique ;o))))  

Source

  • /*
  • ###############################################
  • # Game: Lunar Lander
  • # Version: 1.1
  • #
  • #
  • # Coded by Warwick
  • #
  • # 2002 february
  • # Last Revision: 22.02.01
  • ###############################################
  • ###############################################
  • # Page: luna.cpp
  • #
  • # Objet: Cette page est la page principale
  • # dans laquelle se deroule le jeu. Dans cette
  • # page est egalement effectue le test de crash
  • # du vaisseau.
  • ###############################################
  • */
  • #include <stdio.h>
  • #include <stdlib.h>
  • #include <conio.h>
  • #include <graphics.h>
  • #include <math.h>
  • #include <dos.h>
  • #include <ctype.h>
  • #include <string.h>
  • #include "c:\temp\lander\fond.h"
  • #include "c:\temp\lander\algo.h"
  • #include "c:\temp\lander\init.h"
  • #include "c:\temp\lander\module.h"
  • // Position initiale du vaisseau en X au lancement du jeu
  • #define INIT_X 40
  • // Position initiale du vaisseau en Y au lancement du jeu
  • #define INIT_Y 30
  • // Masse du vaisseau
  • #define MASSE 10
  • // Pesanteur
  • #define GRAVITY 0.1
  • // Poids du module
  • #define POIDS (MASSE*GRAVITY)
  • // Acceleration du moteur principal (vertical)
  • #define ACC_MOT_PRINCIPAL 50
  • // Acceleration des moteurs lateraux
  • #define ACC_MOT_LATERAL 100
  • /***********************
  • Definition des fonctions
  • ***********************/
  • int crash_test(VAISSEAU pos, VAISSEAU vit, int crash, int tab[]); /* Test de crash du vaisseau */
  • void parametres(VAISSEAU vit, VAISSEAU pos, int couleur);
  • int main(void)
  • {
  • rejouer: /* Etiquette rejouer */
  • ;
  • /* Declaration des variables */
  • int tab[640]; /* tableau servant au dessin du fond d'ecran*/
  • VAISSEAU vit; /* Variable de vitesse du module */
  • VAISSEAU pos; /* variable de position du module */
  • int touche=0; /* Contient le code clavier de la touche selectionnée */
  • int TEST_WHILE=1; /* Variable de condition de la boucle principale */
  • int Acc_h=0; /* Acceleration horizontale */
  • int Acc_v=0; /* Acceleration verticale */
  • int Acc_moteur=0; /* Acceleration du moteur */
  • int crash=-1; /* Test de crash du vaisseau
  • crash = -1 --> Le jeu continue
  • crash = 0 --> Le joueur a gagne
  • crash = 1 --> Le joueur a perdu */
  • initialisation();
  • star(); /* Presentation etoilee du jeu */
  • cleardevice();
  • regles(); /* Presentation des regles du jeu */
  • initialisation();
  • /* Definition de la position de depart du module */
  • pos.x=pos.x_init=INIT_X;
  • pos.y=pos.y_init=INIT_Y;
  • vit.x=vit.x_init;
  • vit.y=vit.y_init;
  • fond(tab); /* Dessin du fond d'ecran du jeu */
  • ungetch(0); /* Sert . "forcer" getch() a une valeur car si le joueur appuie
  • sur echap par exemple pendant la presentation, il va quitter le
  • jeu sans jouer car getch() garde en memoire le dernier
  • code touche recontre */
  • while(TEST_WHILE) /* Boucle principale de jeu */
  • {
  • Acc_moteur=0; /* Acceleration de type ouvert - ferme */
  • Acc_h=0;
  • if(kbhit())
  • touche = toupper(getch());
  • if(touche==27) /* Touche "echap" */
  • {
  • closegraph();
  • printf("* Fin de session... Jeu interrompu par le joueur !\n\n");
  • printf("--> Appuyez sur une touche puis fermez la fen^tre.");
  • getch();
  • TEST_WHILE = 0;
  • exit(1);
  • }
  • if(touche=='R') /* Reset du jeu. Si le joueur appuie sur R,
  • le jeu redemarre */
  • {
  • pos.x=pos.x_init=INIT_X;
  • pos.y=pos.y_init=INIT_Y;
  • vit.x=vit.x_init=0;
  • vit.y=vit.y_init=0;
  • Acc_moteur=0;
  • Acc_v=0;
  • Acc_h=0;
  • touche=0;
  • }
  • if(touche==72) /* Touche "haut" */
  • {
  • Acc_moteur-=ACC_MOT_PRINCIPAL;
  • touche=0;
  • }
  • if(touche==80) /* Touche "bas" --> Utilisee pour deboguage */
  • {
  • Acc_moteur+=ACC_MOT_PRINCIPAL;
  • touche=0;
  • }
  • if(touche==75) /* Touche "gauche" */
  • {
  • Acc_h-=ACC_MOT_LATERAL;
  • touche=0;
  • }
  • if(touche==77) /* Touche "droite" */
  • {
  • Acc_h+=ACC_MOT_LATERAL;
  • touche=0;
  • }
  • Acc_v=POIDS+Acc_moteur; /* Acceleration verticale =
  • MASSE * POIDS + Acceleration du moteur*/
  • vit= calcul_vitesse(Acc_h, Acc_v, vit); /* Calcul de la vitesse du
  • module */
  • pos= calcul_position(vit, pos); /* Calcul de la position
  • du module */
  • /* Dessin du module Affichage des
  • parametres en cours de jeu */
  • dessin_module(pos, 12);
  • parametres(vit,pos,0);
  • delay(20);
  • dessin_module(pos,0);
  • parametres(vit,pos,3);
  • setbkcolor(0);
  • /* Test crash ou allunissage en fonction
  • de la position du module */
  • crash = crash_test(pos, vit, crash, tab);
  • /* Si le joueur s'est crashe */
  • if (crash==1)
  • {
  • dessin_module(pos, 0);
  • delay(300);
  • crash_module(pos);
  • printf("* Vous avez perdu!! \n");
  • printf("--> Soit votre vitesse ,tait trop grande, \n");
  • printf("--> Soit vous n'avez pas atteri sur une plaine\n\n");
  • printf("Souhaitez-vous rejouez?\n");
  • printf("Appuyez sur 'y' pour 'oui', ou bien une autre touche pour 'non'.");
  • touche=toupper(getch());
  • if (touche=='Y')
  • goto rejouer; /* Branchement sur le label "rejouer" */
  • else
  • {
  • delay(100);
  • exit(1);
  • }
  • }
  • if (crash==0)
  • {
  • setcolor(12);
  • dessin_module(pos, 12);
  • alunissage(pos);
  • printf("* Vous avez gagn, !\n\n");
  • printf("Souhaitez-vous rejouez?\n");
  • printf("Appuyez sur 'y' pour 'oui', ou bien une autre touche pour 'non'.");
  • touche=toupper(getch());
  • if (touche=='Y')
  • goto rejouer;
  • else
  • {
  • delay(100);
  • exit(2);
  • }
  • }
  • }
  • return 0;
  • }
  • /* Fonction de test du crash du vaisseau */
  • int crash_test(VAISSEAU pos, VAISSEAU vit, int crash, int tab[])
  • {
  • int plat=0;
  • /* Verification que le vaisseau se trouve sur un
  • une intervalle en x valide pour alunir.
  • Cette intervalle a ete definie selon le fond d'ecran trace */
  • if ( (pos.x>104 && pos.x<150) || (pos.x>250 && pos.x<290) || (pos.x>400 && pos.x<450) || (pos.x>560 && pos.x<640))
  • plat=1;
  • else plat=0;
  • if (pos.y>tab[pos.x]) /* Si le vaisseau touche le fond d'ecran */
  • {
  • /* Si la vitesse est trop grande, alors, le module se crashe
  • quel que soit l'intervalle */
  • if (vit.y>10) crash=1;
  • if (vit.y<=10)
  • {
  • /* Si le vaisseau arrive a la bonne vitesse mais
  • sur un endroit non valide pour l'alunissage,
  • alors le module se crashe */
  • if (plat==0) crash=1;
  • /* Si le module arrive a la bonne vitesse sur un
  • endroit valide alors, le joueur gagne la partie */
  • if (plat!=0) crash=0;
  • }
  • }
  • /* Si aucune des conditions precedentes n'est remplie, alors
  • le jeu continue, car le vaisseau n'est pas encore en mesure d'atterir */
  • else crash=-1;
  • return crash;
  • }
  • void parametres(VAISSEAU vit, VAISSEAU pos, int couleur)
  • {
  • char tab[6];
  • int var;
  • settextjustify(CENTER_TEXT, TOP_TEXT);
  • setcolor(couleur);
  • settextstyle(5,0,1);
  • /* Affichage de la vitesse verticale ascendante */
  • var = (int) vit.y*10;
  • sprintf(tab, "%d", var);
  • outtextxy(160,410,tab);
  • /* Affichage de l'indice de stabilit,
  • C'est un parametre qui
  • sert juste a decorer le jeu ;o))))) */
  • var = ((vit.y*10)/M_PI);
  • sprintf(tab, "%d", var);
  • outtextxy(180,430,tab);
  • /* Affichage de position en x */
  • var = (int) pos.x;
  • sprintf(tab, "%d", var);
  • outtextxy(420,410, tab);
  • /* Affichage de la position en y */
  • var = (int) pos.y;
  • sprintf(tab, "%d", var);
  • outtextxy(420,430, tab);
  • return;
  • }
/*
###############################################
# Game: Lunar Lander
# Version: 1.1
#
#
# Coded by Warwick
#
# 2002 february
# Last Revision: 22.02.01
###############################################
###############################################
# Page: luna.cpp
#
# Objet: Cette page est la page principale
# dans laquelle se deroule le jeu. Dans cette
# page est egalement effectue le test de crash
# du vaisseau.
###############################################
*/


#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <graphics.h>
#include <math.h>
#include <dos.h>
#include <ctype.h>
#include <string.h>
#include "c:\temp\lander\fond.h"
#include "c:\temp\lander\algo.h"
#include "c:\temp\lander\init.h"
#include "c:\temp\lander\module.h"


	// Position initiale du vaisseau en X au lancement du jeu
#define INIT_X 40

	// Position initiale du vaisseau en Y au lancement du jeu
#define INIT_Y 30

	// Masse du vaisseau
#define MASSE 10

	// Pesanteur
#define GRAVITY 0.1

	// Poids du module
#define POIDS (MASSE*GRAVITY)

	// Acceleration du moteur principal (vertical)
#define ACC_MOT_PRINCIPAL 50

	// Acceleration des moteurs lateraux
#define ACC_MOT_LATERAL 100


/***********************
Definition des fonctions
***********************/

int crash_test(VAISSEAU pos, VAISSEAU vit, int crash, int tab[]); /* Test de crash du vaisseau */
void parametres(VAISSEAU vit, VAISSEAU pos, int couleur);

int main(void)
{

	rejouer:	/* Etiquette rejouer */
	;

	/* Declaration des variables */

	int tab[640];		/* tableau servant au dessin du fond d'ecran*/

	VAISSEAU vit;		/* Variable de vitesse du module */
	VAISSEAU pos;		/* variable de position du module */

	int touche=0;		/* Contient le code clavier de la touche selectionnée */
	int TEST_WHILE=1;       /* Variable de condition de la boucle principale */

	int Acc_h=0;		/* Acceleration horizontale */
	int Acc_v=0;		/* Acceleration verticale */
	int Acc_moteur=0;	/* Acceleration du moteur */

	int crash=-1;		/* Test de crash du vaisseau
				   crash = -1 --> Le jeu continue
				   crash = 0 --> Le joueur a gagne
				   crash = 1 --> Le joueur a perdu */

	initialisation();

	star();		/* Presentation etoilee du jeu */
	cleardevice();
	regles();  	/* Presentation des regles du jeu */

	initialisation();

	/* Definition de la position de depart du module */

	pos.x=pos.x_init=INIT_X;
	pos.y=pos.y_init=INIT_Y;
	vit.x=vit.x_init;
	vit.y=vit.y_init;

	fond(tab);	/* Dessin du fond d'ecran du jeu */

	ungetch(0);	/* Sert . "forcer" getch() a une valeur car si le joueur appuie
			sur echap par exemple pendant la presentation, il va quitter le
			jeu sans jouer car getch() garde en memoire le dernier
			code touche recontre */

	while(TEST_WHILE)  /* Boucle principale de jeu */
	{

		Acc_moteur=0;	/* Acceleration de type ouvert - ferme */
		Acc_h=0;

		if(kbhit())
		touche = toupper(getch());


		if(touche==27)	/* Touche "echap" */
		{
			closegraph();
			printf("* Fin de session... Jeu interrompu par le joueur !\n\n");
			printf("--> Appuyez sur une touche puis fermez la fen^tre.");
			getch();
			TEST_WHILE = 0;
			exit(1);
		}


		if(touche=='R') /* Reset du jeu. Si le joueur appuie sur R,
				le jeu redemarre */
		{
			pos.x=pos.x_init=INIT_X;
			pos.y=pos.y_init=INIT_Y;
			vit.x=vit.x_init=0;
			vit.y=vit.y_init=0;
			Acc_moteur=0;
			Acc_v=0;
			Acc_h=0;
			touche=0;
		}


		if(touche==72)	/* Touche "haut" */
		{
			Acc_moteur-=ACC_MOT_PRINCIPAL;
			touche=0;
		}

		if(touche==80)	/* Touche "bas" --> Utilisee pour deboguage */
		{
			Acc_moteur+=ACC_MOT_PRINCIPAL;
			touche=0;
		}

		if(touche==75)	/* Touche "gauche" */
		{
			Acc_h-=ACC_MOT_LATERAL;
			touche=0;
		}

		if(touche==77)	/* Touche "droite" */
		{
			Acc_h+=ACC_MOT_LATERAL;
			touche=0;
		}


		Acc_v=POIDS+Acc_moteur;   	/* Acceleration verticale =
						MASSE * POIDS + Acceleration du moteur*/

		vit=	calcul_vitesse(Acc_h, Acc_v, vit);	/* Calcul de la vitesse du
								module */
		pos=	calcul_position(vit, pos);  	/* Calcul de la position
							du module */


		/* Dessin du module Affichage des
		parametres en cours de jeu */

		dessin_module(pos, 12);
		parametres(vit,pos,0);
		delay(20);
		dessin_module(pos,0);
		parametres(vit,pos,3);
		setbkcolor(0);


		/* Test crash ou allunissage en fonction
		de la position du module */
		crash = crash_test(pos, vit, crash, tab);


		/* Si le joueur s'est crashe */
		if (crash==1)
		{
			dessin_module(pos, 0);
			delay(300);
			crash_module(pos);
			printf("* Vous avez perdu!! \n");
			printf("--> Soit votre vitesse ,tait trop grande, \n");
			printf("--> Soit vous n'avez pas atteri sur une plaine\n\n");
			printf("Souhaitez-vous rejouez?\n");
			printf("Appuyez sur 'y' pour 'oui', ou bien une autre touche pour 'non'.");
					touche=toupper(getch());
					if (touche=='Y')
				goto rejouer;  	/* Branchement sur le label "rejouer" */
					else
					{
						delay(100);
						exit(1);
					}
		}

		if (crash==0)
		{
			setcolor(12);
			dessin_module(pos, 12);
			alunissage(pos);
			printf("* Vous avez gagn, !\n\n");
			printf("Souhaitez-vous rejouez?\n");
			printf("Appuyez sur 'y' pour 'oui', ou bien une autre touche pour 'non'.");

			touche=toupper(getch());
			if (touche=='Y')
				goto rejouer;

			else
			{
				delay(100);
				exit(2);
			}
		}

	}

	return 0;
}



/* Fonction de test du crash du vaisseau */
int crash_test(VAISSEAU pos, VAISSEAU vit, int crash, int tab[])
{

	int plat=0;

	/* Verification que le vaisseau se trouve sur un
	une intervalle en x valide pour alunir.
	Cette intervalle a ete definie selon le fond d'ecran trace */
	if ( (pos.x>104 && pos.x<150) || (pos.x>250 && pos.x<290) || (pos.x>400 && pos.x<450) || (pos.x>560 && pos.x<640))
		plat=1;

	else plat=0;


	if (pos.y>tab[pos.x]) /* Si le vaisseau touche le fond d'ecran */
	{

		/* Si la vitesse est trop grande, alors, le module se crashe
		quel que soit l'intervalle */
		if (vit.y>10) crash=1;


		if (vit.y<=10)
		{
			/* Si le vaisseau arrive a la bonne vitesse mais
			sur un endroit non valide pour l'alunissage,
			alors le module se crashe */
			if (plat==0) crash=1;

			/* Si le module arrive a la bonne vitesse sur un
			endroit valide alors, le joueur gagne la partie */
			if (plat!=0) crash=0;
		}
	}

	/* Si aucune des conditions precedentes n'est remplie, alors
	le jeu continue, car le vaisseau n'est pas encore en mesure d'atterir */
	else	crash=-1;

return crash;
}

void parametres(VAISSEAU vit, VAISSEAU pos, int couleur)
{
	char tab[6];
	int var;


	settextjustify(CENTER_TEXT, TOP_TEXT);
	setcolor(couleur);
	settextstyle(5,0,1);


	/* Affichage de la vitesse verticale ascendante */
	var = (int) vit.y*10;
	sprintf(tab, "%d", var);
	outtextxy(160,410,tab);


	/* Affichage de l'indice de stabilit,
	C'est un parametre qui
	sert juste a decorer le jeu ;o))))) */
	var = ((vit.y*10)/M_PI);
	sprintf(tab, "%d", var);
	outtextxy(180,430,tab);


	/* Affichage de position en x */
	var = (int) pos.x;
	sprintf(tab, "%d", var);
	outtextxy(420,410, tab);


	/* Affichage de la position en y */
	var = (int) pos.y;
	sprintf(tab, "%d", var);
	outtextxy(420,430, tab);


return;
}   

 Conclusion

Jeune étudiant en 2ème année de DEUST, nous avons commencé à étudier le langage C il y a 6 mois. Nous avions à redévelopper en tant que mini-projet le célèbre jeu Lander. Voici donc ma version. Le code n'est pas très très propre, étant encore débutant, mais j'ai cependant tenté de commenter le code au mieux. J'attends avec impatience tous vos commentaires ainsi que vos remarques sur les choses à faire et à ne pas faire (instruction goto? ...)

J'essayerais de faire évoluer ce jeux, à moins que je ne m'attaque à d'autres applications ;o))))

Merci à mon professeur de TP de d'informatique qui m'a beaucoup aidé.

Cordialement

Warwick  

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   Lander

Télécharger le zip


 Sources de la même categorie

Source avec Zip Source avec une capture JEU DES CARTES par eapaceinfo
PROGRAMME DE JEU DE MPT par KerizGarmm
Source avec Zip Source avec une capture JEUX SERPENT par antho974
Source avec Zip Source avec une capture PENDU EN SDL par Damsou91
Source avec Zip STATE MACHINE MODIFICATION MATH BUCKHAM par billybones79

Commentaires et avis

Commentaire de Geff le 04/03/2002 14:05:38

Perso je trouve ton code sympa, plutot propre (j'ai deja vu pire), mais tu aurais pu l'amélioré! par exmeple pour la reception des touches plutot que de if, tu aurais du utiliser les cases( plus propre) voila, je vais le tester!
Remark : personne ne commmentent les sources sur le site!

Commentaire de Geff le 04/03/2002 14:10:59

Perso je trouve ton code sympa, plutot propre (j'ai deja vu pire), mais tu aurais pu l'amélioré! par exmeple pour la reception des touches plutot que de if, tu aurais du utiliser les cases( plus propre) voila, je vais le tester!
Remark : personne ne commmentent les sources sur le site! RE

Commentaire de Warwick le 13/07/2002 18:29:43

Pour Geff, j'ai mis à jour le fichier ZIP qui contient le driver d'affichage...
Pour cela il suffit de dézipper le fichier dans C: pour être jouable (il sera dans un dossier appelé 'tc'). J'ai compilé avec Turbo C++ 3.0, et malheureusement, j'ai du écrire le fichier du driver en dur pour la compilation...

Cordialement

Commentaire de 751 le 03/07/2003 01:57:53

Je suis allé sur http://democoding.fr.st/ et je suis vraiment comblé par la beauté de vos programme.Trés bien

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,296 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales