begin process at 2010 03 18 20:07:32
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Jeux

 > JWOLFENSTEIN 3D !

JWOLFENSTEIN 3D !


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Jeux Classé sous :wolfenstein, 3d, raycasting, java2d, fps Niveau :Initié Date de création :23/01/2009 Date de mise à jour :13/03/2009 15:09:59 Vu / téléchargé :4 948 / 294

Auteur : tucobouch

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
Bonjour,
voici une implémentation très rapide en Java du célèbre Wolfenstein 3D !!!

Le jeu n'est pas complet, on peut seulement se balader dans un niveau et tirer sur les ennemis. J'ai pas encore eu le temps de permettre aux ennemis de vous tirer dessus (actuellement, ils vous ignore !) ! Si quelqu'un est motivé !

Il y a un éditeur de niveau fourni avec. Attention pas trop de critique sur l'éditeur : je l'ai fait rapidement et donc niveau ergonomie et affichage, on fait mieux :) L'important c'est qu'il soit a peu près fonctionnel !

Le moteur du jeu fonctionne pas trop mal, il reste de nombreux bugs a corriger : des bugs d'affichage des objets et des murs, la précision des tirs etc... si j'ai un peu de temps, j'essaierai d'améliorer tous ça!
La technique de Raycasting (technique pour afficher les murs en "3D") s'inspire d'un article que j'avais trouvé par hasard sur le web : http://www.permadi.com/tutorial/raycast/

Note sur les performances : j'ai remarqué sur mes 2 machines de développement, une sous XP et une sous Vista que pour une raison inconnue, le jeu ramait a mort sous XP (a peine 5 images par secondes), apparemment, ça serait DirectX qui bugue. En effet, par défaut sous Windows, Java utilise par défaut DirectX pour l'affichage, en activant l'OpenGL (rajouter l'option -Dsun.java2d.opengl=True au lancement de l'application par Java), il n'y a plus de prb de performances... Les scripts pour exécuter le jeu incluent cette option (ne devrait pas avoir d'incidence sous Vista et Linux, a confirmer...).

Note sur les sources : j'ai essayé de commenter et de faire un code a peu prés propre et structuré, a force de tripatouiller, certaines sources sont un peu crados :) De plus, au début j'avais codé les noms des fonctions et variables en français, en cours de route j'ai changé en anglais donc il doit y avoir des oublis franglais !
Pour ceux que ça interresse, l'éditeur est fait sur le schéma MVC (Modèle Vue Contrôleur).

Touches : (suite MAJ du 26/01/2009)
ESC : quitte le jeu
Avancer : flèche haut du clavier
Reculer : flèche bas du clavier
Pas de coté vers la gauche : flèche gauche du clavier
Pas de coté vers la droite: flèche droite du clavier
Tourner la tête (dirige le personnage) : déplacer la souris
Tirer : espace ou bouton gauche de la souris
Quitter : fermer la fenêtre ou bien Echap.
Afficher le nombre d'images par secondes : appuyer sur la touche f

Pour lancer :
j'ai fait des script BAT pour Windows. Pour Linux, il suffit de reprendre la même commande que dans ces fichiers !

editor.bat : lance l'éditeur de niveau
launch.bat : lance le jeu en mode fenêtré avec une map par défaut (dans le répertoire maps)
launchChoice.bat : lance le jeu en mode fenêtré et donne la possibilité de choisir une carte
launchFullScreen.bat : identique a launch.bat mais le jeu est lancé en plein écran
launchChoiceFullScreen.bat : identique a launchFullScreen.bat mais le jeu est lancé en plein écran
JWolfenstein.html : version applet (cf. plus bas)


Voili c'est tout ;)

Source

  • La source est dans le ZIP. C'est pour Java 6 (pas testé sur le 5)
  • Le projet est un projet Eclipse.
  • Pas besoin de compiler, tout est déjà compilé dans le répertoire bin.
  • MAJ du 13/03/2009:
  • -Le projet est désormais sous licence GNU GPL v3
  • -le curseur disparait (nouveau paramètre dans le fichier de configuration) et amélioration de la visée avec la souris
  • -Applet régénérée (par contre l'amélioration de la visée fait "ramer" l'applet, je corrigerai plus tard)
  • NOTE : suite a cette mise à jour, j'ai du enlever l'applet (JWolfenstein.jar), il faut la regénérer (voir le fichier source org/jwolfenstein/main/MainApplet.java pour voir comment)
  • MAJ du 21/01/2009 :
  • On peut modifier certains paramètres du jeu en modifiant le fichier de configuration gameConfig.xml. ATTENTION : la moindre erreur fait planter le jeu.
  • Pour changer la taille de la fenêtre : modifier les valeurs width et height dans le fichier.
  • MAJ du 29/01/2009 :
  • Désormais, le jeu peut se lancer dans une applet d'une page Web. Ouvrir la page JWolfenstein.html pour visualiser dans un navigateur. Vous devez accepter le certificat.
  • Note : je sais pas pourquoi, parfois, a la première exécution dans le navigateur, la page reste blanche après l'acceptation du certificat, faites F5 (Rafraichir) dans le navigateur et ça marche ! :)
La source est dans le ZIP. C'est pour Java 6 (pas testé sur le 5)
Le projet est un projet Eclipse.

Pas besoin de compiler, tout est déjà compilé dans le répertoire bin.

MAJ du 13/03/2009:
-Le projet est désormais sous licence GNU GPL v3
-le curseur disparait (nouveau paramètre dans le fichier de configuration) et amélioration de la visée avec la souris
-Applet régénérée (par contre l'amélioration de la visée fait "ramer" l'applet, je corrigerai plus tard)

NOTE : suite a cette mise à jour, j'ai du enlever l'applet (JWolfenstein.jar), il faut la regénérer (voir le fichier source org/jwolfenstein/main/MainApplet.java pour voir comment)

MAJ du 21/01/2009 :
On peut modifier certains paramètres du jeu en modifiant le fichier de configuration gameConfig.xml. ATTENTION : la moindre erreur fait planter le jeu.
Pour changer la taille de la fenêtre : modifier les valeurs width et height dans le fichier. 

MAJ du 29/01/2009 :
Désormais, le jeu peut se lancer dans une applet d'une page Web. Ouvrir la page JWolfenstein.html pour visualiser dans un navigateur. Vous devez accepter le certificat.
Note : je sais pas pourquoi, parfois, a la première exécution dans le navigateur, la page reste blanche après l'acceptation du certificat, faites F5 (Rafraichir) dans le navigateur et ça marche ! :)


 Fichier Zip

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

Télécharger le zip


 Historique

26 janvier 2009 11:32:57 :
-on peut avancer et tourner en même temps -déplacements a la souris : c'est pas top mais c'est mieux! :)
26 janvier 2009 14:46:29 :
ajout des fichiers de configuration, légères améliorations de l'affichage, éditeur un poil simplifié, meilleure résolution (par défaut : 800x600)
27 janvier 2009 11:32:12 :
Divers petits trucs corrigés
29 janvier 2009 11:18:08 :
Rajout version Applet : ouvrir la page JWolfenstein.html pour visualiser la version Applet
02 février 2009 20:52:00 :
correction du rafraichissement dans les applets
13 mars 2009 15:10:09 :
-Le projet est désormais sous licence GNU GPL v3 -le curseur disparait (nouveau parametre dans le fichier de configuration) Vet amélioration de la visée avec la souris -Applet régénérée (par contre l'amélioration de la visée fait "ramer" l'applet, je corrigerai plus tard)

 Sources du même auteur

Source avec Zip Source avec une capture JEU DE LA VIE DE CONWAY
Source avec Zip Source avec une capture PAS TOUCHE !!!
Source avec Zip Source avec une capture COLLISIONS EN 2D : AXES SÉPARATEURS
Source avec Zip Source avec une capture MODELE DE RESCORLA WAGNER
Source avec Zip Source avec une capture MINI EVALUATEUR D'EXPRESSION ARITHMÉTIQUES

 Sources de la même categorie

Source avec Zip Source avec une capture DÉMARRAGE DE JEUX DE CARTES par mercierdes
Source avec Zip Source avec une capture OUTPOST (PAS FINIT) par Pratana
Source avec Zip CITY, C'EST UN JEU DE VILLE par edouard333
Source avec Zip Source avec une capture PETIT JEU AVEC JAVAFX par puccino1er
Source avec Zip Source avec une capture ANIMATION DANS UN JPANEL + SURVEILLANCE DE LA SOURIS ET DU C... par pyo656

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture POINTS LES PLUS PROCHES par xsimo
AFFICHER UNE ÉTOILE AVEC JAVA2D par 2mohamed2
TEXTE AVEC OMBRE par 2mohamed2
Source avec Zip Source avec une capture AQUARIUM 2D AVEC DOUBLE-BUFFERING ET EN UTILISANT UNIQUEMENT... par Cornellus1985
Source avec Zip Source avec une capture TETRIS OLD SCHOOL par provenzano24

Commentaires et avis

Commentaire de provenzano24 le 24/01/2009 01:47:41

Salut,
juste une remarque rapide a ajouter dans le code, je trouve dommage qu'on ne puisse pas tourner en avancant ou reculant ...
niveau deplacement, ca rend le gameplay tres moyen
@+

Commentaire de tucobouch le 26/01/2009 11:34:34

Bonjour,
suite a votre remarque j'ai modifié les déplacement : on peut désormais utiliser la souris. C'est pas encore terrible mais c'est beaucoup mieux!
Merci
A+

Commentaire de gouessej le 12/03/2009 17:22:30 8/10

C'est pas mal du tout, sacré projet, chapeau. Par contre, il y a plein de fautes dans les commentaires du code source, il aurait été plus sympa d'utiliser ANT pour ne forcer personne à utiliser Eclipse et pour avoir de vrais scripts portables. Enfin, pourquoi avoir utilisé le raycasting alors qu'on peut faire de l'OpenGL en Java et que ça va bien plus vite que le rendu logiciel? Il existe déjà des jeux Java utilisant le raycasting (Art Attack, Tesseract...). Je vais tester ce soir sous Linux sur un ordinateur modeste qui fait tourner mon propre doomlike à presque 40 FPS (0.5 FPS avec Art Attack), on va voir si c'est jouable. Bon courage et bonne continuation. S'il te plaît, pourrais-tu préciser la licence que tu utilises? Ce n'est pas clair pour le moment. Prévois-tu de faire une version avec Java Webstart?

Commentaire de tucobouch le 12/03/2009 18:03:44

Bonjour,
lol pour les fautes d'orthographes !! en général en codant, quand je suis un peu fatigué, j'ai tendance en faire encore plus ! :) désolé pour les fautes!
Pour ANT, oui tout a fait mais en général, Eclipse est le plus répandu dans le domaine java... si tu es motivé pour écrire le script, le l'inclurai avec plaisir :)
Pour l'OpenGL, le but de mon projet n'était pas d'utiliser des librairies annexes mais de prouver que Java n'est pas si lent que ça... Sur mes bécanes (minimum 1Ghz tout de même), le jeu tourne sans problème à 60 images par secondes sans avoir particulièrement optimisé mon code (l'optimisation n'a pas été ma priorité d'ailleurs ça se confirme car j'ai utilisé que des double à la place de float bien plus rapides!), quand on pense que Wolfenstein tournait sur des machines n'allant même pas à 100 Mhz... :)
Licence ? en gros mon projet est libre sauf qu'on doit laisser mon nom dans les sources ;)
Pour WebStart, je sais pas faire donc il faut que je me renseigne, j'ai pas trop le temps pour le moment. Une version applet est tout de même dispo à l'adresse suivante :
http://gbouchon1.free.fr/jwolfenstein.php

Merci pour tes remarques!

Bonne continuation

Commentaire de gouessej le 13/03/2009 00:58:01

Utiliser ANT et Eclipse n'est pas contradictoire, tu peux même utiliser ANT à l'intérieur d'Eclipse et de Netbeans. Les performances de ton jeu ne dépendent pas que du processeur mais aussi de la carte graphique même si tu penses faire du rendu logiciel (car Java est accéléré graphiquement matériellement d'où la différence quand tu bidouilles les pipelines mais pas au point que tu aies les mêmes performances qu'avec JOGL). Le meilleur moyen de montrer que Java est rapide n'est pas d'utiliser les méthodes les plus lentes et si je prends mon vieux céléron 700 Mhz avec une vieille carte 3D Matrox Millenium, je doute fort que ton jeu dépasse 10 FPS. Prends Art Attack, modifie l'applet pour que ça tourne en plein écran, prends un bécane avec 1 Ghz mais avec une carte graphique modeste et tu verras que les performances seront nazes. Pour la licence, ce serait quand même mieux que tu fasses référence à une licence connue au cas où quelqu'un voudrait réutiliser ton code, par exemple BSD, LGPL, GPL... Bon courage et je pourrai te donner un coup de main pour Java Webstart.

Commentaire de gouessej le 13/03/2009 01:10:13

Je viens de tester l'applet. Déjà la souris marche chez moi mais pas le clavier, je peux juste tourner et tirer. De plus, c'est normal que ça aille vite, tu utilises les petites astuces habituelles pour masquer la lenteur du raycasting. En gros, tu réduis la résolution (comme dans le jeu "Scared") et le niveau de détail. Comme le frame rate dépend beaucoup du nombre de pixels dont tu dois calculer la couleur, il est tout à fait normal que ton jeu tourne aussi vite, il est fluide chez moi. Par contre, je ferai le test de mettre la résolution à 1280*1024 et d'augmenter le niveau de détail si c'est possible et là, tu verras que ça commencera à ramer. A plus tard.

Commentaire de gouessej le 13/03/2009 01:11:43

Pour la souris, ajoute l'auto-centrage du curseur si tu peux, inspire-toi de mon code car c'est un peu pénible que le curseur sorte de la fenêtre quand on tourne. C'est bête que je ne puisse pas avancer :(

Commentaire de tucobouch le 13/03/2009 09:39:33

Ouah tout ça ! :)
Pour les performances, j'ai dit que c'était pas ma priorité. De plus, tu peux constater que le jeu est toujours rapide même à des résolutions élevées (certe sur des machines puissantes) car pour afficher les murs, j'utilise une fonction Java2D trés simple (un simple redimensionnement) et optimisé par Java en utilisant des fonctions de la carte graphique (par l'intermédiaire d'OpenGL ou DirectX) certes ça sera toujours plus lent que des accès direct à la carte graphique...
Passer mon code en OpenGl, pourquoi ? il faudrait reprendre à mon avis plein de chose : je sais pas si l'OpenGl peut afficher ligne par ligne qui est la base du raycasting. De plus, faut pas oublier que la fonction Java2d utilise indirectement l'accélération graphique derrière.
Sur ta remarque sur la résolution et framerate, augmenter la résolution n'est pas si couteux que ça car seul la largeur de l'écran entre en compte dans le raycasting (nombre de "bande" de mur à afficher). De plus, je n'affiche pas pixel par pixel directement dans le code java mais j'utilise des fonction accélérées qui vont afficher par "groupe de pixel" (comme le plafond et le sol où c'est juste un fillRect tout bête, les murs un simple drawImage etc...), c'est la puce graphique derrière qui fait la plus grosse partie du boulot.
Pour ton problème de clavier sur l'applet, en général se problème se produit si on a pas cliqué une fois sur l'applet pour gagner le focus.
Pour l'autocentrage, je viens de le rajouter dans mon code, je republierai ce week end quand j'aurai un peu plus de temps...
Merci

Commentaire de gouessej le 13/03/2009 10:12:25

Déjà, rien qu'en passant ton "tableau" de pixels à OpenGL (ce qui demande très peu de modification, c'est ce que j'avais fait il y a quelques années pour un jeu basé sur le raycasting, regarde la méthode glDrawPixels), j'obtenais un frame rate 4 fois supérieur. Ce qui prend le plus de temps, c'est de se débarasser complètement du raycasting car ça demande un sacré refactoring. Un bon compromis est de mélanger raycasting et OpenGL.

Cependant, si un jour tu envisages de passer complètement à OpenGL, tu pourras t'inspirer de mon code source pour convertir tes structures de données adaptées au raycasting en données interprétables par OpenGL, j'ai des programmes non graphiques qui font ça très bien pour les niveaux orthogonaux comme les notres, ils calculent tous les quadrilatères à partir d'une carte en 2D, ça t'évite de te taper ça à la main et après, c'est du gâteau comme j'ai aussi écrit plein de choses pour prendre en charge tous les modes de tracé d'OpenGL de façon transparente (tu gères des ensembles de points sans savoir comment OpenGL les gère en interne).

Ensuite, justement, si ça va aussi vite même quand tu augmentes la résolution, c'est parce que tu ne fais qu'un simple redimensionnement.

D'autre part, pour le clavier, j'ai l'habitude des applets alors mon premier réflexe a été de cliquer dessus et ça n'a rien changé, je testerai aussi sous forme d'application dès que j'aurai un peu de temps.

Enfin, je t'ai demandé de choisir une licence connue car j'aimerais publier ton jeu sur le portail de la FGF qui regroupe tous les jeux vidéo Java open source portables et installables facilement (voire sans installation) et je ne peux pas le faire tant que tu utilises une licence "maison" du genre "c'est libre, mets juste mon nom si tu t'en sers". Je vais aussi parler de ton jeu sur javagaming.org car je le trouve pas mal, je t'encourage à continuer de bosser dessus. A+

Commentaire de gouessej le 13/03/2009 10:13:26

L'éditeur a l'air pas mal aussi, chapeau.

Commentaire de tucobouch le 13/03/2009 11:09:46

Merci pour tes remarques constructives, malheureusement j'ai un boulot et plus trop le temps en ce moment pour coder mais vu la crise financière gagnant de plus en plus de terrain dans le secteur où je travaille, je sens que j'aurai plus de temps en chômage :(

Pour la licence, je vais y réfléchir
Pour l'applet, c'est étonnant j'ai encore testé tout a l'heure sur mon navigateur (firefox sous windaube), ça fonctionne chez moi...
Pour OpenGL, j'avoue honteusement m'être jamais attelé à cette API (par manque de temps et patience). J'avais vaguement approché le DirectX à une époque.

Bonne continuation
A+

Commentaire de tucobouch le 13/03/2009 15:11:50

Suite aux commentaires précédents, j'ai mis à jour mon projet :
-il est désormais sous licence GNU GPL
-la visée a été améliorée (sauf pour les applets)

Commentaire de gouessej le 13/03/2009 21:45:20

Merci pour la licence. Pour certains aspects, je pourrai te donner un coup de main. A+

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

récupérer l'image plate d'une scène 3D rendue sur un Canvas3D [ par JohnPhantom ] Salut à tous.Je cherche à récupérer l'image affichée à l'écran lors de l'édition d'une scène 3D.En fait, je voudrais faire un screenshot de ce qui est Java 3D et mouse Navigation [ par neric ] Je voudrais faire une navigation à la souris style Quake, CS, bref FPS. MAis je rencontre quelque problème.donc, si quelqu'un à un code ou un site par Java 3D et mouse Navigation [ par neric ] Je voudrais faire une navigation à la souris style Quake, CS, bref FPS. MAis je rencontre quelque problème.donc, si quelqu'un à un code ou un site par rotation d'une sphere 3d dans un monde java3d [ par helbriand ] Salut,Est-ce qu'un pro de java3d pourrait m'aider ?La question : Comment faire tourner une sphere 3d sur elle-même dans unmonde 3d, par rapport à l'ax tableau 3D [ par gloom ] salut bah voil g un probléme avec les tableaux 3 dimesnion ,comment peut on déclarer un tableau 3D sinon comment lui affecter un trcu un typre premet Afficher des formes 3d ?! [ par r3m1 ] Alors voila, j'aimerai faire afficher des formes en 3d. Ces formes sont obtenues par des équations, qui me permettent de remplir un tableau de coordon Visucoube 3D intranet [ par Thierryd ] Bonjour,Je ne connais pas java, si ce n'est de nom.Nous developpons un logiciel avec WebDev permettant de lancer des simulations de laminage 3D et de SIMULATION EN 3D D'UN FLUX URBAIN [ par amjad22 ] Je veux réaliser une simulation en 3D d'un flux urbain, où on verrait les voitures se déplacer sur des routes avec des immeubles prédéfinis par l'util pb de capture Java 3d [ par sabadie ] Salut J'ai un probleme de capture d'image en Java3d.Je fais mon rendu dans un offscreen buffer ainsi que dans un canvas 3D standard. Ma scene comprend Java 3D [ par Trancely ] bonjour,dans le cadre d'un projet d'ecole je suis tenu de realiser une applet dans laquelle je doit gerer un ensemble de cubes 3D.Ce qui me derrange l


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
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,733 sec (4)

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