联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-23:00
  • 微信:codinghelp

您当前位置:首页 >> javajava

日期:2018-10-17 10:20

Projet de Programmation C++ :

Casse Briques

Universite de Shanghai – UTSEUS – LO02

13 septembre 2018

Principe du projet

Le but de ce projet est de programmer un jeu en mode console (les graphismes sont du texte).

Dans ce jeu une balle rebondit sur les bords haut, gauche et droit de l’ecran. En bas de l’ecran se trouve une barre

que le joueur deplace vers la droite ou vers la gauche avec les touches correspondantes du clavier. La balle

rebondit sur la barre quand elle  tombe  dessus. Par contre, si la balle atteint le bas de l’ecran le jeu est perdu.

La zone de jeu contient egalement des briques que le joueur doit casser en faisant rebondir la balle dessus. Si

toutes les briques sont cassees le jeu est gagne.

Sujet

Détails du fonctionnement du jeu

Lorsque la balle rebondit sur un obstacle (bord, brique) elle est deviee de faion realiste. Il faut considerer 4 cas :

obstacle vertical, obstacle horizontal, coin sortant et coin rentrant.

Pour les rebonds sur un obstacle vertical ou horizontal, la balle garde le me*me angle d’incidence. Pour les

rebonds sur des coins sortant ou rentrant, la balle repart dans la direction opposee.

Obstacle

vertical

Obstacle

Horizontal

Coin sortant

(ouvert)

Coin rentrant

(fermé)

La vitesse de la balle doit e*tre telle qu’elle parcours une distance nettement inferieure a+ une  case  (colonne ou

ligne ou combinaison des 2) entre 2  ticks  (temps entre 2 appels a+ la methode update de chaque objet : par

defaut 10ms, voir la methode run de la classe BodyManager). Dans le cas contraire la balle pourrait  passer a+

travers un obstacle sans que la collision ne soit detectee. La trajectoire de la balle sera donc probablement

geree en utilisant des nombres reels pour pouvoir gerer le fait que la balle avance a+ chaque tick , me*me si

elle ne bouge visuellement que, par exemple, tous les 10  ticks .

Le rebond sur la barre donne tout l’intere*t au jeu : si la balle rebondit au milieu elle repart verticalement. Plus la

balle rebondit a+ droite de la barre, plus elle part a+ droite avec un angle important. De me*me, plus la balle

rebondit a+ gauche de la barre, plus elle part a+ gauche avec un angle important. Dans ce cas precis, l’angle avec

lequel la balle arrive sur la barre n’est pas pris en compte.

Programmation

Il est fortement recommande d’utiliser les classes Console, Body et BodyManager fournies.

Classe Console

La classe Console permet de dessiner sur l’ecran. En utilisant cette classe, il est possible de redimensionner

l’ecran, d’ecrire a+ un endroit particulier, et de reagir lorsque le joueur appuie sur les touches du clavier.

Pour reagir aux touches du clavier il faut creer une classe derivee de Console et surcharger la methode

onKeyPressed . Cette methode s’execute en parallèle du reste du jeu. Elle doit e*tre courte et ne doit pas

entrer en conflit avec la boucle principale du jeu.

L’affichage de la console est regle pour utiliser le codepage historique IBM 437

(https://en.wikipedia.org/wiki/Code_page_437). L’intere*t est que les caracte+res auront le me*me aspect et la

me*me taille (toujours une case) sur les ordinateurs chinois ou fran?ais.

En consultant l’article wikipedia indique, vous constaterez que pour creer la cha*ne  ╔ ═ ═ ╦ il faut utiliser les

caracte+res 0xC9u, 0xCDu (2 fois) et 0xCBu. Afin d’eviter un warning  n’oubliez pas d’ajouter un u minuscule

derrie+re la litterale entie+re pour bien preciser qu’il s’agit d’une valeur non signee.

Classe Body

Tous les objets visibles du jeu seront des instances de la classe  Body (ou d’une sous classe de Body). Cette

classe definit des objets qui ont

une forme rectangulaire (classe  Box ?)

une certaine position (classe  Position ?)

un dessin (cha*ne de caracte+res qui permet de la dessiner)

peuvent e*tre dessines sur l’ecran

La balle est un Body, la barre est un Body, les briques sont des Body, le cadre est constitue de Body, …

Pour detecter la sortie de la balle en bas de l’ecran vous pouvez utiliser un objet Body invisible.

Rebond à gauche de la barre

→ la balle part très à

gauche

Rebond au centre de la

barre → la balle part vers le

haut

Rebond à droite de la barre

→ la balle part très à droite

classe BodyManager

La classe BodyManager permet de faire fonctionner tous les Body ensemble. Elle s’assure notamment que les

Body ne soient jamais en collision (ils ne peuvent pas se chevaucher) lorsqu’ils sont deplaces pendant le jeu.

Precisement, la balle et la barre se deplacent pendant le jeu. Les briques et le cadre ne se deplacent pas.

La classe BodyManager contient une methode run qui correspond a+ la boucle principale du jeu. A chaque

iteration de cette boucle, cette methode met a+ jour l’etat de chaque Body (methode update qui ne fait rien par

defaut), puis elle dessine si necessaire le Body. Enfin elle attend 10ms afin de ne pas occuper tout le temps

processeur.

Il est important de reflechir a+ une structure de classes raisonnablement riche. Un schema UML de cette structure

devra e*tre egalement produit.

Plusieurs extensions sont possibles, et bienvenues. En particulier, le jeu peut comporter plusieurs types de

briques differentes, avec chacune un pouvoir particulier : accelerer la balle, faire coller la balle a+ la barre, e*tre

plus resistante (il faut alors plusieurs coups pour casser la brique), etc...

Travail demandé

Le projet devra e*tre realise par groupe de 4 personnes (voire 3 mais ni 2 ni seul).

Les unites de compilations devront imperativement e*tre ecrites en langage C++, et le programme doit e*tre

compilable et executable sur une machine PC Windows.

Ce programme devra, au minimum compiler, executer, permettre de jouer selon les re+gles de base decrites cidessus,

avec une simple interface textuelle.

Une archive contenant les codes sources (fichiers .h et .cpp) et rapport devra e*tre deposee sur moodle le 12

novembre 2017. Le rapport devra expliciter clairement l’ensemble des points les plus importants du projet. Il

devra aussi contenir le schema UML des classes.


版权所有:留学生程序网 2020 All Rights Reserved 联系方式:QQ:99515681 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。