Archives de catégorie : Java

Programmation du Jeu Pong en Java – Publication du code sur GitHub ! (6/6)

Maintenant que j’ai fini de coder le jeu Pong, je veux que tout le monde puisse en voir le code source, pour le modifier si souhaité.

Pour cela j’ai décidé de publier mon programme sur le site GitHub.

GitHub

GitHub est un site web sur lequel on peut publier le code source de ses projets java.

J’ai un compte GitHub « Wollef ». On peut y accéder à l’URL https://github.com/wollef.

Configuration et utilisation de Git en local

Installation de eGit

Pour publier le code source depuis Eclipse sur GitHub il faut installer eGit dans Eclipse (menu Help, Install New Software, puis choix du site  http://download.eclipse.org/egit/updates ).

Création de la base locale

Ensuite on doit ouvrir la perspective git dans Eclipse (menu Window, Perspective, Open Perspective, Git), car la première fois on doit créer la base de code source locale sur le disque dur.

Une fois dans la perspective Git, on fait cela en cliquant « create a new local git repository ».

Enregistrement du projet dans la base locale

Pour transformer son projet en projet GitHub , on doit retourner dans la perspective Java, cliquer droit sur le projet, choisir « team/share project », et choisir le repository local.

Dans le panneau github avec les « unstaged change » on clique sur « add to index », puis sur « Commit and push ».

Le code est alors dans la base locale

Création du repository sur le site GitHub et publication du code

Ensuite on doit aller sur le site GitHUB avec le navigateur, demander à créer un nouveau repository. On obtient une URL qui permettra de publier le code.

On revient alors dans Eclipse, on clique droit sur l’icône du projet, on choisit « Team/Remote/Push ». On tape l’URL du projet GitHub, le user id et le password du compte GitHub. Dans le panneau suivant, on choisit de publier la « master branch » (dans source ref), puis on valide avec Finish.

Et hop ! Le code est publié sur le site GitHub et d’autres programmeurs peuvent le récupérer dans leur environnement Eclipse.

Programmer en équipe avec GitHub du code sur le site GitHub

Avec GitHub, plusieurs programmeurs peuvent travailler en même temps sur le code du programme, publier leurs modifications une fois qu’elles sont finies, pour que tout le monde puisse les récupérer et soit à jour au fil des travaux des uns et des autres.

Mais c’est trop long d’expliquer ici le fonctionnement du travail en équipe avec GitHub.

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 :

Programmation du Jeu Pong en Java – Modifions le jeu avec de la couleur ! (4/6)

Comme c’est un peu triste d’avoir le jeu en noir et blanc je voulais ajouter de la couleur.

Pour décider du mode d’affichage j’ai ajouté une variable qui dit quand c’est en couleur.

static boolean modeCouleurs = true;

Et j’ai modifier le fichier Draw pour dire quel couleur et quelle forme utiliser.

if (Var.modeCouleurs) 
	g.setColor(Color.DARK_GRAY);
else
	g.setColor(Color.BLACK);
		
g.fillRect(0, 0, Var.screenwidth, Var.screenheight);
	
g.setColor(Color.WHITE);	
for(int i = 0; i<= 30; i++) {
	g.fillRect(Var.screenwidth/2 -5, i * 20, 10, 10);
}
		
if (Var.modeCouleurs) 
	g.setColor(Color.BLUE);		

if (Var.modeCouleurs) 
	g.fillRoundRect(Var.x, Var.y, 25, 150,15,15);
else
	g.fillRect(Var.x, Var.y, 25, 150);
		
if (Var.modeCouleurs) 
	g.setColor(Color.GREEN);
	
if (Var.modeCouleurs) 
	g.fillRoundRect(Var.gegnerx, Var.gegnery, 25, 150,15,15); 
else
	g.fillRect(Var.gegnerx, Var.gegnery, 25, 150); 
			
if (Var.modeCouleurs) 
	g.setColor(Color.RED);
		
g.setFont(Var.pixelfont);
g.drawString("" + Var.playerPoints, Var.screenwidth/2 - 95, 75);
g.drawString("" + Var.gegnerPoints, Var.screenwidth/2 + 50, 75);

if (Var.modeCouleurs) 
	g.setColor(Color.ORANGE);		

if (Var.modeCouleurs) 
	g.fillOval((int)Var.ballx, (int) Var.bally, 20, 20);
else
	g.fillRect((int)Var.ballx, (int) Var.bally, 20, 20);

J’ai utilisé la variable dans un if pour décider d’utiliser la couleur pour dessiner chaque objet : la balle, le score, les raquettes, … Et j’en ai profité pour changer les formes des raquettes et de la balle.

Et voila le résultat !!!

Comme j’ai envie de changer les couleurs pendant le jeu j’ai modifié le Keyhandler pour passer en couleur en tapant sur la touche C et en noir et blanc sur la touche B.

…
else if (e.getKeyCode()== KeyEvent.VK_C) {
	 Var.modeCouleurs = true;
} else if (e.getKeyCode()== KeyEvent.VK_B) {
	 Var.modeCouleurs = false;
}

Programmation du Jeu Pong en Java – Modifions le jeu avec une vitesse variable ! (3/6)

On a vu que dans le jeu original la vitesse de la balle augmente au cours de la partie, jusqu’à ce que l’un des joueurs perde le point.

Or dans la version du tutoriel la balle va toujours à la même vitesse.

On doit donc trouver comment changer la vitesse de la balle pendant le jeu.

Etude de la classe BallMovement

Le fichier qui dirige la balle s’appelle BallMovement.

public BallMovement() {
   move = new Timer();
   move.scheduleAtFixedRate(
      new TimerTask() {
         public void run() {
            Var.ballx += Var.balldirx;
            Var.bally += Var.balldiry;
         }
      },
      0,
      4
   );
}

Toutes les 4 millisecondes, le timer exécute ce qui est dans la méthode run() : la nouvelle position de la balle qui est ballx et bally, est modifiée de balldirx et balldiry.

Dans la version du tutoriel la balledirx et la balldiry sont toujours 1 ou -1 et c’est le fichier BallKollision qui change ces valeurs quand la balle touche une raquette.

Ajout de la variable ‘vitesse’

On doit modifier le code pour ajouter la notion de vitesse.

On va donc créer la variable vitesse dans le fichier var.

static int vitesse=3;

Et maintenant faire changer la position en utilisant la vitesse :

Var.ballx += Var.balldirx * Var.vitesse;
Var.bally += Var.balldiry * Var.vitesse;

En relançant le jeux la balle va beaucoup plus vite (3 fois) et c’est plus difficile à jouer !!!

Augmentation de la vitesse pendant le jeu

Il faut maintenant trouver un moyen de changer la vitesse pendant le jeu, donc il faut savoir depuis quand le jeu a commencé. On va donc ajouter une variable débutjeu


static long debutJeu= 0;

A chaque fois que la balle est mise au centre on mémorise l’heure de la partie


Var.debutJeu = System.currentTimeMillis();

 

A chaque cycle de BallKollision on va calculer une vitesse qui va dépendre de la durée de la partie.


long maintenant = System.currentTimeMillis();
long duree = maintenant - Var.debutJeu;
Var.vitesse = 1 + duree / 10000;
Var.ballx += Var.balldirx * Var.vitesse;
Var.bally += Var.balldiry * Var.vitesse;

Toutes les dix secondes la balle accélère.

En relançant le jeu c’est bien ce qui ce passe. Mais la vitesse augmente de 1 à chaque fois : quand la vitesse passe de 1 à 2, c’est trop rapide pour l’ordinateur.

Changement plus progressif de la vitesse

On doit trouver le moyen de rendre progressif l’accélération de la balle. Au lieu d’utiliser des nombres entiers on utilise des nombres décimaux.

Dans le fichier Var, cela donne :

static double ballx = 200, bally = 500;
static double vitesse=1;

Dans le fichier BallMovement, cela donne :

long maintenant = System.currentTimeMillis();
double duree = maintenant - Var.debutJeu;
Var.vitesse = 1.0 + duree / 10000.0;
Var.ballx += Var.balldirx * Var.vitesse;
Var.bally += Var.balldiry * Var.vitesse;

On a aussi dû corriger la classe Draw car le dessin doit se faire avec des nombres entiers (dessin de la balle à sa position) :

g.fillRect((int)Var.ballx, (int) Var.bally, 20, 20);

Hourra ! Le programme marche comme l’original avec une balle qui accélère en cours de jeu !

Programmation du jeu Pong en Java – Etude du code (2/6)

Etude du code du jeu

Pour Programmer un jeu vidéo il faut donc créer différents fichiers ou classes (c’est une manière d’organiser le programme en java) pour que tout fonctionne.

Main:

Le fichier Main est le premier qui est lancé, et il permet de dire quelles autres classes doivent être utilisées pour faire fonctionner le jeu.

Gui:

La classe Gui crée la fenêtre du jeu et elle utilise deux autres classes pour contrôler la fenêtre :

  • La classe « KeyHandler » qui examine quelle touche on tape sur le clavier. Ensuite quand on a touché une touche il va regarder quelle action cette touche doit déclencher dans le jeu.
  • La classe « Draw » défini les formes de la balle, du terrain et des raquettes puis les dessine dans la fenêtre.

Gui

KeyHandler

Draw:

Var

La classe Var contient toute les variables et les paramètres du programme :

  • La fenêtre du programme et ses dimensions
  • La position de la balle, des raquettes, la direction de la balle
  • Le mouvement de la raquette que demande le joueur

Movement

A chaque cycle, La classe « Movement » calcule la nouvelle position de la raquette du joueur en fonction des touches appuyées.

 

GegnerMovement:

A chaque cycle, la classe « GegnerMovement » essaye de mettre la raquette du deuxième joueur (dans mon cas l’ordinateur) à la même hauteur que la balle quand la balle rentre dans la moitié du terrain du deuxième joueur. La vitesse de la raquette de l’ordinateur est limitée par le code. Donc il ne peut pas toujours gagner (ce serait trop facile pour lui de calculer plus vite… )

BallMovement:

A chaque cycle, la classe « BallMovement » calcule où se trouve la balle et ça dépend de la direction de la balle.

Attention ! Dans cette version du jeu, la balle se déplace toujours à la même vitesse. Ce n’était pas le cas dans la version originale. Dans la prochaine partie de mon Travail Personnel, je vais modifier le jeu pour qu’il fonctionne comme l’original.

BallKollision:

A chaque cycle, la classe « BallKollision » permet de calculer les angles de rebond de la balle pendant le jeu :

  • Si la balle touche une raquette, la balle rebondit dans le même angle
  • Et si la balle franchit un côté, elle est remise au milieu du terrain et elle repart vers le joueur. Et le point et ajouté au joueur qui a marqué.

 

 

Programmation du jeu Pong en Java – Présentation (1/6)

Maintenant que nous connaissons le jeux Pong, intéressons-nous à la programmation d’une version de ce jeu en java !

Comment j’ai trouvé le tutorial

Je voulais trouver comment programmer un jeu simple sur java. Pour commencer j’ai recherché sur Google. Ensuite comme je n’ai rien trouvé je suis allé sur YouTube et j’ai trouvé un youtubeur qui a fait des tutoriels pour programmer le jeu Pong.

Le tutorial

Pour programmer Pong avec java j’ai donc regardé des tutoriels sur YouTube. (les 4 liens ci-dessous)

1: https://www.youtube.com/watch?v=d-U9RKG-uGw

2: https://www.youtube.com/watch?v=tXz48MWhcHY

3: https://www.youtube.com/watch?v=ORbpwl7oemA

4: https://www.youtube.com/watch?v=LpYOSD7X2Is

Le Youtubeur de ce Tutoriel s’appelle : FoX DeN. Son site web s’appelle : www.fox-den.de .

Son hobby c’est la programmation et il a déjà publié différents mini jeux, ainsi qu’un programme qu’on peut acheter sur son site web : Mapeditor. Ce logiciel permet de programmer très facilement de jeux en 2D.

La réalisation du tutorial dans mon Eclipse

Pendant le précèdent travail personnel, j’ai installé un logiciel (Eclipse) qui permet de programmer en java. Et comme je voulais programmer quelque chose en java ça m’a beaucoup aidé.

Pour programmer un jeu vidéo il faut faire plusieurs classes ou fichier qui contiennent chacun un morceau du programme.

J’ai appris qu’il fallait avoir beaucoup de patience pour programmer un jeu vidéo.

Pour programmer le jeu en suivant pas à pas les explications, j’ai bien travaillé pendant 4h.

Souvent c’était difficile car le tutoriel contenait des fautes, mais les corrigeait plus tard.

Alors quand on avait terminé une partie du jeu et qu’on le lançait il ne marchait pas. Ensuite avec mon père on a cherché où était les fautes, en essayant de comprendre ce que faisais le programme en détail. Ensuite en continuant la vidéo nous avons vu le youtubeur corriger ces propres fautes, et on retrouvait le fil du travail. C’était très intéressant car j’ai vu pour la première foi comment il fallait programmer un jeu pour qu’il fonctionne, et que cela demande beaucoup d’attention et de réflexion.

Le jeu en fonctionnement

Le Screenshot suivant présente le jeu lancé depuis mon environnement de programmation Java Eclipse.

Pendant que je prenais le temps de faire le Screenshot, l’ordinateur a marqué 4 points !

Allons plus loin ensemble  !

Comme je souhaite aussi continuer à apprendre la programmation, j’ai exploré le code du jeu :

puis j’ai essayé d’enrichir cette version du jeu réalisée par FoX DeN.

Le code du jeu modifié est disponible sur GitHub, car je l’y ai publié !

A la découverte de java

Dans la série d’article précédente sur l’histoire des langages de programmation, j’ai vu que Java était un des derniers langages de programmation créés.

Cc’est pour ça que j’ai décidé d’utiliser ce langage pour découvrir à quoi ressemble le travail de programmation.

Pour programmer en Java il faut d’abord télécharger un outil de programmation java.

En ce cas j’utilise éclipse. https://www.eclipse.org

 

Test de l’environnement java.

Une fois qu’on a lancé Eclipse, on crée un nouveau projet.

Dans ce projet j’ai recopié le code d’exemple Java que j’avais cité dans l’article sur « l’histoire de la programmation ».

En haut de la fenêtre il y a le code et directement en dessous il y a le résultat de l’exécution du code.

C’est-ce qu’on fait en cliquant sur le petit bouton vert en haut.

Quelques essais de programmes

Pour explorer le langage java, nous avons essayé de réécrire les programmes d’exemples des différents langages exploré dans la série d’articles sur l’histoire de la programmation :

  • Exemple « langage machine » : trouver le plus grand nombre
  • Exemple « fortran » : le plus grand commun diviseur
  • Exemple « cobol » : la multiplication

Dans les articles qui suivent, je vais montrer les programmes que cela donne.

Enfin, je me suis essayé à écrirer un petit programme pour m’aider en mathématiques.

Exemple « langage machine » : trouver le plus grand nombre

De l’original en « langage machine » à sa version java !

public class P02_PlusGrandNombre {
    public static void main(String[] args) {
        int tableauDeNombres[] = { 12, 56, 42, 87, 23, 14, 3, 97, 18, 23, 52, 35 };
        int positionPlusGrandNombre = 0;
        for (int posNombreExamin=0; posNombreExamin<tableauDeNombres.length ; posNombreExamin++) {
            System.out.println("le nombre " + posNombreExamin +" est "+tableauDeNombres[posNombreExamin]);
            if( tableauDeNombres[posNombreExamin] > tableauDeNombres[positionPlusGrandNombre]) {
                System.out.println("le nombre " + posNombreExamin +" ("+tableauDeNombres[posNombreExamin]+") est plus grand que le nombre "+positionPlusGrandNombre+" ("+tableauDeNombres[positionPlusGrandNombre]+")");
                positionPlusGrandNombre = posNombreExamin;
            }
        }
        System.out.println("le plus grand nombre est le "+positionPlusGrandNombre + " (" + tableauDeNombres[positionPlusGrandNombre] +")" );       
    }

}
 

Exemple « fortran » : le plus grand commun diviseur

De l’original en « fortran » à sa version java …

public class P03_PlusGrandCommunDiviseur {
    public static void main(String[] args) {
        int a = 55;
        int b = 33;
        int resultat = calculePGCD(a,b);   
        System.out.println("le PGCD de "+a+" et "+b+" est "+resultat);
    }

   public static int calculePGCD(int na, int nb) {
       int ia = na;
       int ib = nb;
       while ( ib !=0) {
           int itemp = ia;  
           ia = ib;
           ib = itemp % ib;
       }     
       return ia;      
   }
}

Exemple « cobol » : la multiplication

De l’original en « cobol » à sa version java …

import java.util.Scanner;
public class P04_LaMultiplication {
    public static void main(String[] args) {
        // ouvre le lecteur
        Scanner in = new Scanner(System.in);
        // lit les nombres.
        System.out.printf("Enter first number:  ");
        int num1 = in.nextInt();
        System.out.printf("Enter second number:  ");
        int num2 = in.nextInt();

        // ça fait le calcul
        int result = num1 * num2;

        // affiche le resultat
        System.out.println("result is = " + result);

        // ferme le lecteur
        in.close();
    }
}

Un premier défi : Utilisation de Java pour résoudre un de mes soucis en mathématique

En mathématique j’oublie souvent d’aller jusqu’au bout dans la réduction des fractions.

Or je sais que quand on divise le numérateur et le dénominateur par leur plus grand diviseur commun on obtient le numérateur et le dénominateur de la fraction réduite.

Dans les programmes d’exemple, j’ai trouvé un programme qui trouve les plus grands diviseurs communs. Alors je vais m’en servir pour calculer les fractions réduites.

Le programme java que voici va m’aider à vérifier les fractions que je dois calculer : on y voit l’appel de l’autre sous-programme :

P03_PlusGrandCommunDiviseur.calculePGCD(numerateur, denominateur) ;

Maintenant plus d’erreur pour réduire mes fractions !

 

import java.util.Scanner;
public class P05_ReductionFraction {
    public static void main(String[] args) {

        // ouvre le lecteur
        Scanner in = new Scanner(System.in);       

        // lit les nombres.
        System.out.printf("Entre le numérateur:  ");
        int numerateur = in.nextInt();
        System.out.printf("Entre le dénominateur:  ");
        int denominateur = in.nextInt();
        System.out.println("saisie est " + numerateur +"/"+denominateur);

        // calcul du pgcd en utilisant le programme d'exemple
        int pgcd = P03_PlusGrandCommunDiviseur.calculePGCD(numerateur, denominateur);

        //calcul du nouveu numérateur et du nouveau dénominateur
        numerateur= numerateur/pgcd;
        denominateur= denominateur/pgcd;

        // affiche le resultat
        System.out.println("resultat est " + numerateur +"/"+denominateur);

        // ferme le lecteur
        in.close();
    }
}

Update 2019 !

Dans le cadre d’un travail personnel sur Raspberry Pi en 2019-2020, j’ai utilisé le langage Python. Pour découvrir Python, j’ai  réécrit les mêmes programmes dans ce langage : vous pouvez voir ici à quoi ressemble le résultat !

 

Histoire de la programmation 3/4 : Performance et polyvalence

Dans les années 70 avec la troisième génération de grands ordinateurs, il fallait inventer un langage de programmation adapté aux nouveaux volumes de donnés, et aux nouvelles performances des machines.

Différents langages de programmation ont été conçus, d’ont un qui a connu un grand succès jusqu’à aujourd’hui, sous sa forme originale le langage C, ou sous ses formes améliorées, dont C++, et dans une certaine manière Java.  

Le langage C 

Le langage C est apparu au cours de l’année 1972 dans les laboratoires de l’entreprise  

Bell . Il était développé par Dennis Ritchie et Ken Thompson pour permettre de créer et de maintenir le système d’exploitation UNIX car, à l’époque, aucun autre langage que l’assembleur (qui n’est pas pratique du tout) n’était capable de cela. 

C’est aujourd’hui l’un des langages les plus utilisés par les programmeurs : on le retrouve en quantité dans LinuxWindows et de très nombreux autres logiciels. 

Deux caractéristiques intéressantes du C : la variable i (celle qui contient le nombre) doit être déclarée à l’avance ; enfin, un bloc d’instructions (ici une boucle for) est délimité par des crochets. Le point-virgule, lui, sert à terminer une instruction.
Dans la boucle, printf sert à insérer du texte, ici le traditionnel « Hello, world ! » ; y a été ajouté un \n pour faire un retour à la ligne. 

Voici un exemple de C: 

#include <stdio.h>  

main()  
  int n, c;  
   printf("Enter a number\n"); 
   scanf("%d", &n);  
   if ( n == 2 ) 
     printf("Prime number.\n"); 
   else    
  {        
    for ( c = 2 ; c <= n - 1 ; c++ ) 
    {            
       if ( n % c == 0 ) 
         break; 
    } 
    if ( c != n )           
       printf("Not prime.\n");   
    else 
       printf("Prime number.\n"); 
  } 
  return 0; 
} 

 

Ici les variables n, c sont avec un type : ce sont des nombres entiers (int). 

Retour à l’histoire familiale : ma mère a commencé à travailler à la banque en programmant des logiciels en C.  

C++: 

Le langage C++ est une version modifiée du langage C. Il a été inventé par Bjarne Stroustrup entre 1979 et 1983. Comme les inventeurs du C, Bjarne Stroustrup travaillait chez Bell. 

Un code en langage C est très souvent valide en C++. On peut par contre utiliser des constructions en C++ qui n’existent pas en C. 

Le C++ est utilisé par beaucoup de programmeurs. Cependant, il est très compliqué d’apprendre tout ce qu’il permet de faire de plus que le C, même avec plusieurs années d’expérience. 

#include <iostream> 
using namespace std; 
class Rectangle { 
     int width;  
     int height; 
  public: 
     void set_values (int x, int y) { 
        width = x; 
        height = y;     
     } 
     int area() { 
       return width*height; 
     } 
}; 
int main () { 
   Rectangle rectOne; 
   Rectangle rectTwo;
   rectOne.set_values (3,4); 
   cout << "area rectangle one: " << rectOne.area(); 
   rectTwo.set_values (5,7); 
   cout << "area rectangle two: " << rectTwo.area(); 
   return 0; 
} 

Ce programme calcule l’aire d’un rectangle en multipliant les deux côtés. 

On peut voir un nouveau type d’information défini par ce programme : la forme rectangle.  Puis le programme principal crée deux rectangles et indique leurs dimensions (le premier rectangle mesure 3-4 cm et le second 5-7cm). Puis il leur demande à chacun leur surface.  

Ça permet de concevoir facilement des programmes complexes : dans des jeux compliqués (comme GTA, Minecraft), il y aurait beaucoup de types d’informations (cubes, rectangle, personnage, etc.), et des millions de cubes, de personnages et de rectangles différents  manipulés dans le jeu. 

Retour à l’histoire familiale : mon père a commencé sa carrière en programmant en C++. 

Java: 

Le langage Java est apparu en 1995. Il a été inventé par James Gosling et Patrick Naughton, qui travaillaient alors pour l’entreprise Sun Microsystems. 

À première vue, il ressemble beaucoup au langage C++ (et donc au langage C), ce qui est normal car il s’en inspire. En fait, il y a énormément de différences entre les deux. 

Un des objectifs de Java était de permettre de créer des programmes qui fonctionnent sur tous les ordinateurs. C’est quelque chose qui n’est pas facile à faire avec du C++, par exemple. Pour cela, les programmes écrits en Java ne sont pas traduits directement en langage machine. Un logiciel, la machine virtuelle, se charge d’exécuter le programme à la place de l’ordinateur. Comme cela ralentit l’exécution, Java ne peut pas être utilisé lorsque la vitesse est très importante. 

Le Java est utilisé par de très nombreux programmeurs et dans beaucoup d’entreprises. 

Un jeu très connu codé en Java est Minecraft ! 

Attention, Java et JavaScript, dont je parlerai dans la partie suivante, sont deux langages différents, qui ne se ressemblent que par leur nom ! 

Voici un exemple de code Java : 

public class PrimeEx { 
    public static void main(String[] args) { 
        System.out.println("54161329 : " + isPrime(54161329) + " (expect false)"); 
        System.out.println("1882341361 : " + isPrime(1882341361) + " (expect true)"); 
        System.out.println("2 : " + isPrime(2) + " (expect true)"); 
    } 
    // pre: num >= 2 
    public static boolean isPrime(int num) { 
        assert num >= 2 : "failed precondition. num must be >= 2. num: " + num; 
        final double LIMIT = Math.sqrt(num); 
        boolean isNumPrime = (num == 2) ? true : num % 2 != 0; 
        int div = 3; 
        while(div <= LIMIT && isNumPrime ) { 
            isNumPrime = num % div != 0; 
            div += 2; 
        } 
        return isNumPrime ; 
    } 
} 

On voit bien avec cet exemple que ça ressemble beaucoup à C++. 

Mes deux parents ont participé à des projets Java et je suis déjà allé deux fois à la fête du Java User Group de Luxembourg avec mon père. On y a présenté en 2015 la programmation de, et dans, Minecraft en Java comme j’en ai parlé dans mon Blog (http://wollef.org/fr/minecraft_luxembourg_yajug/). 

Une soirée Minecraft au YaJuG à Luxembourg !

La semaine passée, je suis allé à la soirée de la fin d’année du YaJuG.

Yajug-Décembre-1

Le YaJuG est un club de programmeurs Java à Luxembourg.

D’habitude, les enfants n’y vont pas, mais cette fois-ci, comme on parlait de Minecraft, les enfants pouvaient venir (on était plus de 10!).

Deux programmeurs nous ont parlé de Minecraft :

  • Le premier, Pierre-Antoine Grégoire, nous a expliqué le jeu en général,
  • Le second, Stéphane Rondal, a montré comment utiliser Mine-Forge pour programmer en java les objets dans Minecraft pour qu’ils se comportent autrement

webmail

Pendant ce temps, on pouvait jouer sur le serveur que Yannick Kirschhoffer avait mis à disposition : alors que je tuais tous les autres joueurs, le maître du jeu m’a demandé d’être plus constructif !

En java, Stéphane a codé des flèches inflammables et des blocks de TNT nucléaires qui détruisent des plus grandes parties de la map Minecraft. Moi je n’ai rien écouté (je jouais sur le serveur avec les autres enfants), mais je veux apprendre à le faire un jour : d’ailleurs mes premiers programmes java sont visibles sur mon espace github !

La présentation de Stéphane se trouve sur slidehare.

Mon père et moi avons créé un serveur avec mine-forge (eclipse) chez nous, et je vous expliquerai dans un prochain article comment le faire !

Après la conférence tous les enfants ont continué à jouer sur le serveur de Yannick pendant que les parents mangeaient, buvaient, et parlaient de choses plus ou moins sérieuses 😉

webmail-1

J’espère que l’an prochain ils vont nous inviter à nouveau à une soirée aussi amusante que celle-ci !!!!!!! C’est trop cool de jouer à Luxembourg avec d’autres enfants qui aiment Minecraft !