# Jeux vidéo > Jeux vidéo (Discussions générales) > Le coin des développeurs >  SpaceWar - le remake en JS sans prétention - merci Développez Couché S3

## Koala77

Coin coin,

Alors que s'ouvre la saison 4 de Développez Couché - celle dans laquelle LFS doit sauver le monde des développeurs indé en 24h chrono - je vous propose le résultat de mes leçons suivies avec assiduité de la saison 3.

Il s'agit d'un remake d'un jeu de mon enfance, *SpaceWar version DOS*, lui même remake du SpaceWar original, un des tous premiers jeux vidéos, codé en 1962 au MIT (merci Google) . Le principe, repris récemment par RocketsRocketsRockets, est très simple : un face à face entre 2 vaisseaux dans l'espace. Le but : défoncer l'adversaire dans la joie et la bonne humeur, ou le pousser à la faute. 

*Un petit clic et c'est parti* : http://elbassman.perso.sfr.fr/SpaceWar/

Dans le détail...

*Les déplacement sont "newtoniens"*, enfin pour parler comme tout le monde y'a de l'inertie quoi. Le vaisseau rotationne (si si, du verbe "rotationner", 1er groupe) sur lui-même et peut accélérer vers l'avant. 
On peut passer d'un coté à l'autre de l'écran (pensez tunnels dans le labyrinthe de Pacman).
On peut aussi se téléporter (à ses risques et périls) afin de surprendre l'adversaire, ou de tenter de se sortir d'une situation périlleuse.

Tiens, en parlant de situation périlleuse : *des planètes attirent les vaisseaux vers elles*, parce que qui dit Newton dit gravité (mangez des pommes). Si le vaisseau entre en collision avec la planète, paf le vaisseau.

*2 armes :* 
- les missiles qu'on spamme joyeusement dans tous les sens et qui vivent leur vie une fois lancés
- le laser qui a une faible portée mais qui déchire sa race (et qui peut aussi détruire un missile).

*2 jauges :*
- énergie = ce qu'on consomme pour tout faire : se déplacer, tirer... se recharge progressivement, très lentement
 - bouclier = la vie, si il tombe à zéro : hasta la vista baby.
On peut rééquilibrer les jauges à tout moment, donc pra exemple "taper" dans son bouclier pour récupérer de l'énergie.

*Les commandes :*
Tirer Missile / Accélérer / Equilibrer énergie
Rotation gauche / Teleporter / Rotation droite
Laser

Avec comme touches par défaut pour le joueur 1 :
A / Z / E
Q / S / D
W

Et pour le joueur 2 :
7 / 8 / 9
4 / 5 / 6
1

(Protip tout pourri : main droite sur ZSQD / 8546, main gauche sur AW / 71, et on ne pousse pas le petit camarade qui partage le clavier, merci bien).

*Mais... c'est tout naze ton truc !*
Bah oui, c'est un prototype qui m'a permis de me faire la main sur CreateJS, ça casse pas 3 pattes à un canard. Cette version n'est jouable qu'en humain vs humain. J'ai commencé à coder les bases d'une IA (calcul de solution de tir, calcul de prédiction de collision avec un missile...) mais je n'ai pas pris le temps d'aller au bout. Je le ferai peut-être dans une version ultérieure, par exemple si je reprends tout mon bordel comme base d'un projet plus ambitieux sous Unity.

Ceci dit, je l'ai testé en soirée entre potes entre 2 parties de TowerFall ou Trial Evo, et on a bien rigolé, même que mes potes m'ont fait plein de suggestions que j'ai eu violemment la flemme de coder.

NB : Le code source est totalement libre de droit, allez zieutez tout ce que vous voulez, je répondrai à d'éventuelles questions si possible.Je n'ai utilisé que des objets graphiques / sonores libre de droits, dont la zik du fabuleux "Canardage" (euh... c'est bien libre de droit hein ?)

N'hésitez pas bien sur à me faire des retours.

----------


## crystal joacx

Super mais j'ai pas d'ami ... Pas grave j'ai 2 mains  :;):

----------


## Tilt

Attends tu veux dire que y'a des gens qui lisent'develppé-couché' et qu'en plus ils arrivent à programmer un truc après ?
Dingue ça !

----------


## smooki

Sympa la petite gravité

----------


## Koala77

> Sympa la petite gravité


Merci. Pour votre culture, elle est en 1/r et non pas en 1/r² comme M. Newton le voudrait. J'ai essaye en 1/r², mais c'est super violent, impossible de s'amuser à froler les planètes, tu te crashes tout de suite.

Au niveau physique il y a aussi du choc élastique avec conservation de la quantité de mouvement si les 2 joueurs se percutent... nostlagie des cours de physique au lycée !

----------


## smooki

Vous pouvez (vouvoyons nous, c'est plus classe  :B):  ) aussi garder le facteur d'accélération 1/r² et appliquer un facteur (entre 0 et 1 donc) pour adoucir d'une autre manière, c'est à tester.

----------


## CanardLaquais

Belle réalisation.
J'ai aussi regardé les sources javascript. C'est clean.
Tu utilises NotePad++ pour écrire le code javascript ou tu as trouvé mieux ?

----------


## ShinSH

> Merci. Pour votre culture, elle est en 1/r et non pas en 1/r² comme M. Newton le voudrait. J'ai essaye en 1/r², mais c'est super violent, impossible de s'amuser à froler les planètes, tu te crashes tout de suite.
> 
> Au niveau physique il y a aussi du choc élastique avec conservation de la quantité de mouvement si les 2 joueurs se percutent... nostlagie des cours de physique au lycée !


T'as pense a avoir simplement une gravite moins forte et une attraction max pour le caser en r2?

----------


## Koala77

Faut que je passe plus souvent sur mon propre topic, y'a même des gens qui regardent  ::P: 




> Belle réalisation.
> J'ai aussi regardé les sources javascript. C'est clean.
> Tu utilises NotePad++ pour écrire le code javascript ou tu as trouvé mieux ?


Merci. J'ai fait un peu de C# dans mon boulot (et plein d'autres langages dans ma folle jeunesse), j'ai essayé de coder dans l'esprit Objet et le plus clean possible. Après une tentative pour utiliser Netbeans, finalement oui je suis resté avec Notepad++, avec le plugin de contrôle de syntaxe JS. Pour ce genre de petit projet avec quelques classes à peine, ça reste tout à fait gérable. J'aurais bien essayé Visual Studio que je connais un peu, mais j'ai eu la flemme de tout configurer.




> T'as pense a avoir simplement une gravite moins forte et une attraction max pour le caser en r2?


 Marrant un pote m'a fait le même genre de suggestion, lui proposait d'être en ar + br2 et d'ajuster a et b pour que ça soit plus réaliste mais fun quand même à jouer. 

Si je porte mon dév sur Unity avec les cours de la saison 4, je reverrai ça, mais encore une fois c'est surtout le jeu vs CPU que j'aimerais mettre en place. C'est un peu con d'avoir codé les briques de bases pour rien. Surtout la détermination d'une solution de tir (avec quel angle tirer un missile pour qu'il intercepte la trajectoire du joueur adverse), j'en ai un peu bavé, je suis rouillé en matchs.

----------

