Programmation du Jeu Pong en Java – Modifions le jeu pour jouer à deux ! (5/6)

Pour le moment je joue seul contre l’ordinateur mais je voudrais jouer ensemble avec mon petit frère.

Donc il faut dire que la deuxième raquette soit contrôlée par le clavier.

Pour contrôler la deuxième raquette avec le clavier il fallait créer deux nouvelles variables qui s’appellent gegnermoveup et gegnermovedown, ces variables mémorisent quels mouvements veut le joueur.

protected static boolean gegnermoveup= false;
protected static boolean gegnermovedown= false;

Donc j’ai programmé que quand on touche la touche Q la raquette monte et quand on touche W la raquette descend : c’est ce qui est en gris dans le code.

@Override
	public void keyPressed(KeyEvent e) {
		 if (e.getKeyCode()== KeyEvent.VK_UP ) {
			 Var.moveup = true;
		 } else if (e.getKeyCode()== KeyEvent.VK_DOWN) {
			 Var.movedown = true;
		 } else if (e.getKeyCode()== KeyEvent.VK_Q ) {
			 Var.gegnermoveup = true;
		 } else if (e.getKeyCode()== KeyEvent.VK_W) {
			 Var.gegnermovedown = true;
		 }
		 
	}

	@Override
	public void keyReleased(KeyEvent e) {
		 if (e.getKeyCode()== KeyEvent.VK_UP ) {
			 Var.moveup = false;	
		 } else if (e.getKeyCode()== KeyEvent.VK_DOWN) {
			 Var.movedown = false;
		 } else if (e.getKeyCode()== KeyEvent.VK_Q ) {
			 Var.gegnermoveup = false;	
		 } else if (e.getKeyCode()== KeyEvent.VK_W) {
			 Var.gegnermovedown = false; 
		 } else if (e.getKeyCode()== KeyEvent.VK_C) {
			 Var.modeCouleurs = true;
		 } else if (e.getKeyCode()== KeyEvent.VK_B) {
			 Var.modeCouleurs = false;
		 }
	}

Enfin j’ai copié la classe Movement qui calcule la position de la première raquette dans une nouvelle classe qui s’appelle GegnerMovementManual pour qu’elle calcule la position de la deuxième raquette.

Pour que cela fonctionne il faut remplacer l’utilisation de GegnerMovement (le mode automatique) par cette nouvelle classe GegnerMovementManual (le mode avec le clavier).

 

Les différences entre la classe Movement et la classe GegnerMovementManual sont en gris dans le code (utiliser gegnermoveup, gegnermovedown, gegnery pour la raquette 2 au lieu de moveup, movedown, y pour la raquette 1).


public GegnerMovementManual() {
		move = new Timer();
		move.scheduleAtFixedRate(new TimerTask() {
			@Override
			public void run() {
				if (Var.gegnermoveup == true) {
					if (Var.gegnery >= 20) {
						Var.gegnery -= 2;
			
					}
				} else if(Var.gegnermovedown) {
					if(Var.gegnery <= Var.screenheight - 200) {
						Var.gegnery +=2 ;
					}
				}

			}
		}, 0, 4);
	}

Et voilà maintenant nous pouvons jouer à deux à Pong !!!

Pour pouvoir changer le mode avec le clavier, j’ai ajouté une variable qui s’appelle gegnermodeauto.



	static boolean gegnerModeAuto = true;

J’ai modifié le KeyHandler pour changer cette variable quand on appuie la touche A (Gegner Automatique) ou Z (Gegner manuel).


else if (e.getKeyCode()== KeyEvent.VK_A) {
		 Var.gegnerModeAuto = true;
	 } else if (e.getKeyCode()== KeyEvent.VK_Z) {
		 Var.gegnerModeAuto = false;
	 }

Et j’ai modifié les deux classes GegnerMovementManual et GegnerMovement pour que soir l’une soit l’autre s’exécute en fonction de la variable.


public GegnerMovement() {
		move = new Timer();
		move.scheduleAtFixedRate(new TimerTask() {
			public void run() {
				if (Var.gegnerModeAuto == true) {
					… reste du code

public GegnerMovementManual() {
		move = new Timer();
		move.scheduleAtFixedRate(new TimerTask() {
			@Override
			public void run() {
				if (Var.gegnerModeAuto == false) {
					… reste du code

Pour savoir quel mode est actif, j’ai modifié la classe Draw pour afficher un signe * à côté du score du Gegner quand le mode est automatique.


g.drawString(
"" + Var.gegnerPoints+(Var.gegnerModeAuto ? "*" : ""), Var.screenwidth/2 + 50, 
75
);

Et voici le résultat :