TCP / IP e-mail

 TCP / IP e-mail

Le courrier électronique est l’une des utilisations les plus importantes de TCP / IP.
 
Vous ne faites pas

Lorsque vous écrivez un e-mail, vous n’utilisez pas le protocole TCP / IP.

Lorsque vous écrivez un e-mail, vous utilisez un programme de messagerie comme Lotus Notes, Microsoft Outlook ou Netscape Communicator.
 
Votre programme de messagerie

Votre programme de messagerie utilise différents protocoles TCP / IP:

     Il envoie vos e-mails via SMTP
     Il peut télécharger vos e-mails à partir d’un serveur de messagerie utilisant POP
     Il peut se connecter à un serveur de messagerie utilisant IMAP

SMTP Simple Mail Transfer Protocol

Le protocole SMTP est utilisé pour la transmission de messages électroniques. SMTP prend en charge l’envoi de votre e-mail à un autre ordinateur.

Normalement, votre courriel est envoyé à un serveur de messagerie (serveur SMTP), puis sur un autre serveur ou les serveurs, et enfin à sa destination.

SMTP ne peut transmettre que du texte pur. Il ne peut pas transmettre des données binaires comme des images, des sons ou des films.

SMTP utilise le protocole MIME pour envoyer des données binaires à travers les réseaux TCP / IP. Le protocole MIME convertit les données binaires en texte pur.
 
POP Post Office Protocol

Le protocole POP est utilisé par les programmes de messagerie (comme Microsoft Outlook) pour récupérer e-mails à partir d’un serveur de messagerie.

Si votre programme de messagerie utilise le protocole POP, tous vos e-mails sont téléchargés sur votre logiciel de courrier électronique (également appelé client de messagerie), à chaque fois qu’il se connecte à votre serveur de messagerie.
 
IMAP Internet Message Access Protocol

Le protocole IMAP est utilisé par les programmes de messagerie (comme Microsoft Outlook), tout comme le protocole POP.

La principale différence entre le protocole IMAP et le protocole POP est que le protocole IMAP ne télécharge pas automatiquement tous vos emails à chaque fois que votre programme de messagerie se connecte à votre serveur de messagerie.

Le protocole IMAP vous permet de regarder à travers vos e-mails sur le serveur e-mail avant de les télécharger. Avec IMAP, vous pouvez choisir de télécharger vos messages ou simplement les supprimer. De cette façon, IMAP est parfait si vous devez vous connecter à votre serveur de messagerie à partir d’endroits différents, mais vous ne voulez télécharger vos messages lorsque vous êtes de retour dans votre bureau.

Une famille de protocoles TCP / IP

TCP / IP est une grande collection de différents protocoles de communication.

Une famille de protocoles
TCP / IP est une grande collection de différents protocoles de communication basés sur le protocole TCP deux d’origine protocoles et IP.


TCP – Transmission Control Protocol
TCP est utilisé pour la transmission de données d’une application vers le réseau.
TCP est responsable de la dégradation des données en paquets IP avant qu’ils soient envoyés, et pour assembler les paquets quand ils arrivent.


IP – Internet Protocol
IP prend en charge la communication avec d’autres ordinateurs.
IP est responsable de l’envoi et la réception des paquets de données sur Internet.


HTTP – Hyper Text Transfer Protocol
HTTP prend en charge la communication entre un serveur web et un navigateur Web.
HTTP est utilisé pour envoyer des requêtes d’un client Web (navigateur) sur un serveur Web, le retour du contenu Web (pages Web) à partir du serveur vers le client.


HTTPS – Secure HTTP
HTTPS s’occupe de la communication sécurisée entre un serveur web et un navigateur Web.
HTTPS gère habituellement les transactions par carte de crédit et autres données sensibles.


SSL – Secure Sockets Layer
Le protocole SSL est utilisé pour le chiffrement des données pour la transmission de données sécurisée.


SMTP – Simple Mail Transfer Protocol
SMTP est utilisé pour la transmission de messages électroniques.


MIME – Multi-usages Internet Mail Extensions
Le protocole MIME permet de transmettre des fichiers multimédias SMTP y compris la voix, audio et de données binaires sur des réseaux TCP / IP.


IMAP – Internet Message Access Protocol
IMAP est utilisé pour stocker et récupérer des e-mails.


POP – Post Office Protocol
POP est utilisé pour télécharger des e-mails à partir d’un serveur e-mail à un ordinateur personnel.


FTP – File Transfer Protocol
FTP prend en charge la transmission de fichiers entre ordinateurs.


NTP – Network Time Protocol
NTP est utilisé pour synchroniser l’heure (horloge) entre les ordinateurs.


DHCP – Dynamic Host Configuration Protocol
DHCP est utilisé pour l’allocation des adresses IP dynamiques aux ordinateurs d’un réseau.


SNMP – Simple Network Management Protocol
SNMP est utilisé pour l’administration de réseaux informatiques.


LDAP – Lightweight Directory Access Protocol
LDAP est utilisé pour collecter des informations sur les utilisateurs et les adresses e-mail à partir d’Internet.


ICMP – Internet Control Message Protocol
ICMP prend soin de gestion des erreurs dans le réseau.


ARP – Address Resolution Protocol
ARP est utilisé par IP pour trouver l’adresse matérielle d’une carte de réseau informatique basé sur l’adresse IP.


RARP – Reverse Address Resolution Protocol
RARP est utilisé par IP pour trouver l’adresse IP basée sur l’adresse matérielle d’une carte de réseau informatique.


BOOTP – Protocole de démarrage
BOOTP est utilisé pour le démarrage (départ) les ordinateurs du réseau.


PPTP – Point to Point Tunneling Protocol
PPTP est utilisé pour établir une connexion (tunnel) entre réseaux privés.

Adressage TCP / IP

 Adressage TCP / IP

TCP / IP utilise 32 bits ou quatre nombres entre 0 et 255, pour répondre à un ordinateur.
 
Adresses IP

Chaque ordinateur doit avoir une adresse IP avant de pouvoir se connecter à Internet.

Chaque paquet IP doit avoir une adresse avant d’être envoyé à un autre ordinateur.

Il s’agit d’une adresse IP: 192.68.20.50
C’est peut-être la même adresse IP: http://www.w3schools-fr.blogspot.com
 
Une adresse IP Contient 4 chiffres.

Chaque ordinateur doit avoir une adresse IP unique.

C’est votre adresse IP: 41.141.6.176

TCP / IP utilise quatre chiffres pour répondre à un ordinateur. Les chiffres sont toujours compris entre 0 et 255.

Les adresses IP sont normalement composées de quatre nombres séparés par un point, comme ceci: 192.168.1.50.
 
32 Bits = 4 octets

En termes informatiques, le protocole TCP / IP utilise 32 bits d’adressage. Un octet est 8 bits. TCP / IP utilise 4 octets.

Un octet peut contenir 256 valeurs différentes:

00000000, 00000001, 00000010, 00000011, 00000100, 00000101, 00000110, 00000111, 00001000 ……. et tout le chemin jusqu’à 11111111.

Maintenant vous savez pourquoi une adresse TCP / IP est de quatre nombres entre 0 et 255.
 
Noms de domaine

Un nom est beaucoup plus facile à retenir qu’un numéro à 12 chiffres.

Les noms utilisés pour les adresses TCP / IP sont appelés noms de domaine.

w3schools.com est un nom de domaine.

Lorsque vous adressez un site web, comme http://www.w3schools.com, le nom est traduit en nombre par un serveur de noms de domaine (DNS).

Partout dans le monde, les serveurs DNS sont connectés à l’Internet. Serveurs DNS sont responsables pour traduire les noms de domaine en adresses TCP / IP.

Quand un nouveau nom de domaine est enregistré avec une adresse TCP / IP, les serveurs DNS du monde entier sont mis à jour avec ces informations.

intorduction sur le protocole TCP / IP

TCP / IP est le protocole de communication pour Internet.
 Protocole de communication informatique
Un protocole de communication informatique est une description des règles à suivre pour ordinateurs de communiquer entre eux.


Que signifie TCP / IP?
TCP / IP est le protocole de communication pour la communication entre ordinateurs sur Internet.
TCP / IP représente Transmission Control Protocol / Internet Protocol.
TCP / IP définit comment les appareils électroniques (comme les ordinateurs) doit être connecté à l’Internet, et comment les données doivent être transmises entre eux.


Inside TCP / IP
L’intérieur de la norme TCP / IP il existe plusieurs protocoles pour le traitement des données de communication:

    TCP (Transmission Control Protocol) de communication entre les applications
    
UDP (User Datagram Protocol) simple communication entre les applications
    
IP (Internet Protocol) de communication entre les ordinateurs
    
ICMP (Internet Control Message Protocol) pour les erreurs et les statistiques
    
DHCP (Dynamic Host Configuration Protocol) pour l’adressage dynamique
TCP utilise une connexion fixe
TCP est pour la communication entre les applications.
Si une application veut communiquer avec une autre par l’intermédiaire de TCP, il envoie une demande de communication. Cette demande doit être envoyée à une adresse exacte. Après une “prise de contact” entre les deux applications, TCP mettra en place un “full-duplex” de communication entre les deux applications.
Le “full-duplex” communication occupera la ligne de communication entre les deux ordinateurs jusqu’à ce qu’il soit fermé par l’une des deux applications.
UDP est très similaire à TCP, mais plus simple et moins fiables.

IP est la connexion Moins
IP est pour la communication entre ordinateurs.
IP est un “sans connexion” protocole de communication.
IP n’occupe pas la ligne de communication entre deux ordinateurs. IP réduit le besoin de lignes réseau. Chaque ligne peut être utilisé pour la communication entre plusieurs ordinateurs différents en même temps.
Avec l’IP, les messages (ou d’autres données) sont divisés en petits indépendants “paquets” et envoyés entre ordinateurs via Internet.
IP est responsable du “routage” chaque paquet vers la bonne destination.


Les routeurs IP
Quand un paquet IP est envoyé à partir d’un ordinateur, il arrive dans un routeur IP.
Le routeur IP est chargé de “routage” le paquet vers la destination correcte, directement ou par l’intermédiaire d’un autre routeur.
Le chemin le paquet va suivre peut être différente d’autres paquets de la même communication. Le routeur est chargé de l’adressage droit, en fonction du volume de trafic, d’erreurs dans le réseau, ou d’autres paramètres.


Connection-Less Analogie
La communication via IP, c’est comme envoyer une longue lettre comme un grand nombre de petites cartes postales, chacun de trouver son propre (souvent différentes) chemin vers le récepteur.


TCP / IP
TCP / IP est le protocole TCP et IP à travailler ensemble.
TCP se charge de la communication entre votre logiciel d’application (c’est à dire votre navigateur) et votre logiciel de réseau.
IP prend en charge la communication avec d’autres ordinateurs.
TCP est responsable de la dégradation des données en paquets IP avant qu’ils soient envoyés, et pour assembler les paquets quand ils arrivent.
IP est chargé d’envoyer les paquets vers la bonne destination.

Le Tutoriels De TCP/IP

TCP / IP est le protocole de communication pour Internet.

TCP / IP définit la règle à suivre pour ordinateurs de communiquer entre eux sur Internet.

Votre navigateur et l’utilisation du serveur TCP / IP

Les navigateurs et les serveurs utilisent le protocole TCP / IP pour se connecter à Internet.

Un navigateur utilise le protocole TCP / IP pour accéder à un serveur. Un serveur utilise le protocole TCP / IP pour envoyer HTML vers un navigateur.
Votre E-Mail utilise le protocole TCP / IP

Votre programme de messagerie utilise le protocole TCP / IP pour se connecter à Internet pour envoyer et recevoir des e-mails.
Votre adresse Internet est le protocole TCP / IP

Votre adresse Internet 41.141.6.176 est une partie de la norme TCP / IP (et est donc votre nom de domaine).

Comment Choisir une Langage de programmation

Comment Choisir une Langage de programmation

1 Chiffrer ce que travaille pour l’équipe. Dans beaucoup de cas, de codeurs ou de directeurs individuels font partie d’une plus grande équipe de gens qui traitent un projet. S’assurer que vous avez les soutiens de divers membres de personnel pour faire les meilleures décisions.

2 Découverte hors ce que travaille dans le contexte. Regarder comment il ajustera dans le plus grand contexte d’un plus grand projet ou dans les opérations de département continuelles.

Examiner vos choix de langage de programmation dans la plus grande architecture de logiciel de vos affaires. Quelques langages de programmation sont plus compatibles que d’autres. Regarder vos systèmes d’exploitation et vos programmes et vos applications actuels pour choisir une langue qui travaille pour vous. Evaluer vos besoins pour l’interface d’un projet. Quelques langages de programmation sont supérieurs quand il s’agit de faire une interface visuelle, une GUI (l’interface graphique utilisateur) ou l’autre présentation de consommateur.

3 Considèrent l’aise d’érudition et l’usage pour les langages de programmation.
4 Evaluent la disponibilité d’outils pour chacun de vos langages de programmation potentiels. Chiffrer que les outils et les ressources sont disponibles pour soutenir votre codage et votre implémentation.

 5 Regardent la capacité multi-plateforme. Quelques langages de
programmation travaillent mieux à travers les plateformes différentes que d’autres. Ceci peut être aussi une partie significative de votre décision. 

6 Déterminent l’aise de côté serveur et client-côté qui écrit le scénario de. Chiffrer comment les utiliser sur les divers « côtés » d’un projet.

 7 Considèrent des problèmes d’accès et la sécurité général pour
les langages de programmation que vous choisissez.
Quelques langues peuvent relater différemment aux problèmes de sécurité ou aux problèmes généraux d’accès par le personnel de développement, le personnel de client ou d’autres.

Demander aux directeurs et au sommet nivelle le personnel de la sécurité ou les autres problèmes. Si vous êtes seulement responsable des certains problèmes de codage techniques, vous pouvez avoir besoin de chercher au-delà de votre degré de salaire pour s’assurer que vos choix résonnent bien par
l’opération entière qui votre IL projette représentera.

Comment Apprendre la Langage de programmation

 Comment Apprendre la Langage de programmation

Décider que vous voulez faire. Des applications de programmation avec la forte présence Web et les bons matériels pour les novices sont la programmation de jeu, la création de site Web, l’automation de tâches communes (« écrivant le scénario de »), le texte qui traite, et le problème scientifique qui résout. Si vous pensez juste que la programmation serait fraîche pour apprendre et n’a pas des applications spécifiques à l’esprit, cela est bon, mais penser à ce que vous voulez programmer en avance aidera vous fait des décisions informées pendant votre expérience éducative. Aussi se souvenir de cette programmation peut être un travail frustrant si vous ne payez pas l’attention correcte ou faites trop d’erreurs
en écrivant le code.

Choisir une langage de programmation. Quand vous commencez à apprendre premièrement, choisissez un facile-à-apprendre, la langue d’haut niveau comme le Python. Plus tard, vous pouvez vous déplacer sur à une langue égale plus basse comme C ou à C + + mieux comprendre comment exactement les programmes courent et réagissent réciproquement. Perl et Java sont d’autres langues populaires pour les novices. Préparer votre application cible pour apprendre s’il y a des langues que vous sans aucun doute devriez
savoir (par exemple SQL pour les bases de données) ou évite. N’est pas confondu par le jargon comme objet-orienté, « simultané », ou « dynamique » ; ces toutes les choses moyennes, mais vous ne pourrez pas les comprendre jusqu’à ce que vous avez en fait de la programmation d’expérience.

Trouver des ressources de formation. Chercher le Web pour les bons lieux pour commencer sur les langues mentionnées au-dessus, et être sûr de vérifier la page d’accueil de la langue (s’il l’un a) pour un guide ou un manuel officiel. Aussi, trouver quelqu’un qui sait programmer déjà. Les didacticiels en ligne sont agréables, mais ils peuvent frustrer de temps en temps si vous ne pouvez pas obtenir des réponses aux questions spécifiques. Quelquefois la bibliothèque et les vidéos aident beaucoup.

 Début petit. Vous ne pouvez pas compter écrire un chef-d’oeuvre de 700 page populaire si vous avez
l’expérience d’écriture non pratique ; la programmation est la même façon. Commencer avec les constructions fondamentales et écrire de petits programmes (10 à à 30 lignes) essayer votre compréhension des concepts. Se tendre, mais ne pas essayer de courir avant que vous pouvez ayez marché.

 Mettent dans le temps. Il prend beaucoup d’heures de résolutiant de problèmes les compétences pratiquantes sur les types différents de problèmes avant que vous pouvez vous soyez appelé un expert. Euler de projet a beaucoup de petite tâches programmatione, classées à peu près par la difficulté, cela est utile
pour aiguiser vos compétences et gardant dans la pratique. Aussi apprendre des organigrammes faire. 

Gardent à lui. La programmation peut frustrer très, mais complétant avec succès un programme peut satisfaire intensément et peut plaire. Ne pas renoncer si vous ne comprenez pas un concept ; la programmation peut être une chose très abstraite à apprendre. En traitant un problème notamment compliqué, prendre des coupures périodiques pour laisser votre cerveau relâche et relègue le problème à votre esprit inconscient. Faire un bon plan pour le fonctionnement. 

Gardent l’érudition. Pour savoir une
langage de programmation est bonne, mais sachant quatre ou cinq sont meilleurs. Sans tenir compte de quelle langue vous utilisez le plus souvent, ayant la connaissance d’autres pour dessiner sur fera

La methode facile de créer des QR codes avec Zxing et Java 2D

La methode facile de créer des QR codes avec Zxing et Java 2D


I. Introduction

Un QR code est la représentation graphique d’un message. C’est une sorte de code barre en deux dimensions. Le-dit message peut contenir une URL, un e-mail, un numéro de téléphone, une vCard, etc. Dans la suite, nous nous intéresserons aux messages simples, les messages plus complexes n’étant que des extensions avec une syntaxe particulière.


La plupart des développeurs sont à l’aise avec les QR codes. Ils savent comment les scanner depuis leurs smartphones. De nombreuses “app” sont dédiées à cette fonctionnalité et on en possède souvent plusieurs. Les développeurs savent aussi comment créer des QR codes à l’aide des mêmes “app”, des plugins Chrome ou Firefox, ou encore des sites web comme Unitag et SoQR.


QR code vers le site de Developpez.com
QR code vers le site de Developpez.com
En revanche, quand il s’agit de générer soit-même un QR code, c’est tout de suite moins drôle car les algorithmes de calcul sont loin d’être triviaux et la génération d’images, un minimum jolies, n’est pas une compétence très répandue. On pourrait donc penser que la tâche est complexe, voire impossible sans une étude approfondie.


Dans cet article, nous allons d’abord voir comment générer une matrice de modules à l’aide de la bibliothèque Zxing. Dans un second temps, nous verrons comment dessiner des images (belles) à l’aide de Java 2D.


info En première approche, un QR code simple ressemble à un carré rempli de gros pixels blancs et noirs. Ces “pixels noirs” sont les “modules” dont je parle plus haut.


I-A. À propos

Découvrir une technologie n’est pas chose facile. En aborder plusieurs d’un coup l’est encore moins. Partant de ce constat, cet article a été écrit pour aller à l’essentiel. Les points importants sont présentés dans le corps de l’article et les éléments secondaires, comme la gestion des exceptions, sont expliqués en annexes.



I-B. Avant de commencer

Pour écrire ce tutoriel, j’ai utilisé les éléments suivants :


  • Java JDK 1.6.0_24-b07 ;
  • Eclipse Indigo 3.7 JEE 64b ;
  • Maven 3.0.3 ;
  • Zxing 2.0.


II. Découverte du projet d’exemple


II-A. Télécharger, installer et importer le projet d’exemple

Pour commencer, je vous propose de télécharger le fichier Zip “qr-code-01.zip”, contenant un projet Java-Maven d’exemple (vide) qui va nous servir de support pour les fonctionnalités présentées dans la suite de cet article.


Compilez le projet d’exemple et importez-le dans Eclipse (comme expliqué dans le tutoriel “Importer un projet Maven dans Eclipse en 5 minutes”) ou dans l’IDE de votre choix.


idea Pour suivre ce tutoriel, vous pouvez vous contenter de lire les codes proposés ci-dessous (codes complets en annexes) et de faire confiance aux captures d’écran.


II-B. Ce que fait déjà le projet d’exemple

Pour une fois, je vous propose un projet d’exemple qui ne fait rien. C’est un projet Maven vide qui va seulement servir d’enveloppe pour la suite.



III. Action


III-A. Maven

Durée estimée : 1 minute.


Pour utiliser Zxing, il faut ajouter une dépendance dans le fichier “pom.xml”.
Dépendance dans le pom.xml

<!-- zxing -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>2.0</version>
</dependency>

<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>2.0</version>
</dependency>
Puis relancer une installation Maven.
Commande Maven

mvn clean install eclipse:eclipse
En fonction des éléments déjà présents sur le disque dur, le résultat de l’installation Maven devrait ressembler à la trace suivante :
Commande Maven

C:\...\qr-code>mvn clean install eclipse:eclipse

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building qr-code 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.025s
[INFO] Finished at: Thu Apr 30 20:59:22 CEST 2012
[INFO] Final Memory: 10M/53M
[INFO] ------------------------------------------------------------------------
On doit ensuite faire un refresh (touche F5) dans Eclipse pour faire apparaitre Zxing dans la liste des bibliothèques référencées.



III-B. Création des QR codes

Durée estimée : 2 minutes.


La génération d’un QR code commence toujours par le calcul de sa matrice, qu’on peut assimiler à un tableau de “1” et de “0” correspondants aux modules noirs et blancs.
Calcul de la matrice

public class SimpleQrcodeGenerator {

public static void main(String[] args) {
String data = "Je suis Thierry et je suis gentil.";
int size = 400;

// encode
BitMatrix bitMatrix = generateMatrix(data, size);
}

private static BitMatrix generateMatrix(String data, int size) {
BitMatrix bitMatrix = new QRCodeWriter().encode(data, BarcodeFormat.QR_CODE, size, size);
return bitMatrix;
}

...
Quand c’est fait, il suffit de dessiner les modules.
Dessin

public class SimpleQrcodeGenerator {

public static void main(String[] args) {

...
BitMatrix bitMatrix = generateMatrix(data, size);

String imageFormat = "png";
String outputFileName = "c:/code/qrcode-01." + imageFormat;

// write in a file
writeImage(outputFileName, imageFormat, bitMatrix);
}

private static void writeImage(String outputFileName, String imageFormat, BitMatrix bitMatrix) {
FileOutputStream fileOutputStream = new FileOutputStream(new File(outputFileName));
MatrixToImageWriter.writeToStream(bitMatrix, imageFormat, fileOutputStream);
fileOutputStream.close();
}

...
info Le code complet, avec la gestion des exceptions est donné en annexe.
Cela va donc générer l’image “qrcode-01.png” contenant le message “Je suis Thierry et je suis gentil”.


QR code : Je suis Thierry et je suis gentil.
Voici ce que ça donne lorsque je scanne ce code depuis mon iPhone :


Scan en cours sur l'iPhone
Scan en cours sur l’iPhone
Après le scan
Après le scan


III-C. Un code en couleur

Durée estimée : 2 minutes.


C’est bien beau de savoir générer un code mais ça n’est pas très sexy de se contenter de noir et de blanc. J’ai donc demandé aux développeurs d’Unitag de m’envoyer quelques morceaux de code pour ajouter un peu de couleur.


Je vais donc devoir un peu changer mon code mais le principe reste le même, avec un peu de contrôles supplémentaires.
Calcul de la matrice

public class ColoredQrcodeGenerator {

public static void main(String[] args) {
String data = "Je suis Thierry et je suis gentil.";

// encode
ByteMatrix matrix = generateMatrix(data);
}

private static ByteMatrix generateMatrix(final String data) {
QRCode qr = new QRCode();
Encoder.encode(data, ErrorCorrectionLevel.L, qr);
ByteMatrix matrix = qr.getMatrix();
return matrix;
}

...
De nouveau, quand j’ai ma matrice, je peux lancer la génération de l’image. Cette fois nous allons procéder par étapes.
Dessin

public class ColoredQrcodeGenerator {

public static void main(String[] args) {

...
ByteMatrix matrix = generateMatrix(data);

int size = 400;
String imageFormat = "png";
String outputFileName = "c:/code/qrcode-01." + imageFormat;

// write in a file
writeImage(outputFileName, imageFormat, matrix, size);
}

private static void writeImage(String outputFileName, String imageFormat, ByteMatrix matrix, final int size) {
...
}

...
warning La suite de ce chapitre n’est pas simple : elle utilise les fonctionnalités de Java 2D (qui nécessitent un peu de concentration), alors qu’on utilisait la génération automatisée (mais aux options réduites) de Zxing dans le chapitre précédent.
On commence par générér la “forme” du QR code (à l’aide de Java 2D) : modules, quietzone, etc.
Area

public class ColoredQrcodeGenerator {

private static void writeImage(String outputFileName, String imageFormat, ByteMatrix matrix, final int size) {

// Java 2D Traitement de Area
// Futurs modules
Area a = new Area();
Area module = new Area(new Rectangle.Float(0, 0, 1, 1));

// Deplacement du module
AffineTransform at = new AffineTransform();
int width = matrix.getWidth();
for (int i = 0; i < width; i++) {
for (int j = 0; j < width; j++) {
if (matrix.get(j, i) == 1) {
// Ajout du module
a.add(module);
}
// Decalage a droite
at.setToTranslation(1, 0);
module.transform(at);
}

// Ligne suivante
at.setToTranslation(-width, 1);
module.transform(at);
}

// Agrandissement de l'Area pour le remplissage de l'image
double ratio = size / (double) width;

// Quietzone : 4 modules de bordures autour du QR Code (zone vide pour bien identifier le code dans la page imprimee)
double adjustment = width / (double) (width + 8);
ratio = ratio * adjustment;
at.setToTranslation(4, 4);
a.transform(at);

// On agrandit le tour a la taille souhaitee.
at.setToScale(ratio, ratio);
a.transform(at);
}

...
Puis on peut passer à l’étape de “coloriage” des modules ajoutés dans la boucle (cf. code source précédent).
Dessin

public class ColoredQrcodeGenerator {

private static void writeImage(String outputFileName, String imageFormat, ByteMatrix matrix, final int size) {

// Java 2D Traitement de Area
...

// Java 2D Traitement l'image
BufferedImage im = new BufferedImage(size, size, BufferedImage.TYPE_INT_RGB);
Graphics2D g = (Graphics2D) im.getGraphics();

// Modules verts
Color vert = new Color(0xAFC828);
g.setPaint(vert);

g.setBackground(new Color(0xFFFFFF));

// Fond blanc
g.clearRect(0, 0, size, size);

// Remplissage des modules
g.fill(a);
}

...
Enfin, on peut écrire le fichier sur le disque.
Ecriture sur le disque

public class ColoredQrcodeGenerator {

private static void writeImage(String outputFileName, String imageFormat, ByteMatrix matrix, final int size) {

// Java 2D Traitement de Area
...

// Java 2D Traitement l'image
...

// Ecriture sur le disque
File f = new File(outputFileName);
f.setWritable(true);
ImageIO.write(im, imageFormat, f);
f.createNewFile();
}

...
Ca me donne une belle image verte. Je vous laisse trouver la couleur qui vous convient le mieux…


QR code vert
QR code vert


III-D. un code avec redondance

Durée estimée : 30 secondes.


Une des particularités des QR codes est qu’ils restent lisibles même lorsqu’ils sont déchirés ou abîmés, un peu comme un CD qui reste utilisable lorsqu’il est rayé. Pour cela, la “norme” des QR codes implique que les données soient répliquées. Elle définit quatre niveaux de réplication : L (7 %), M (15 %), Q (25 %) et H (30 %).


idea Bien entendu, plus le niveau de réplication est élevé et plus gros devra être le QR code généré pour tout contenir.
Ici, une simple adaptation du code proposé au chapitre précédent devrait suffire.
Calcul de la matrice

public class LevelColoredQrcodeGenerator {

public static void main(String[] args) {
String data = "Je suis Thierry et je suis gentil.";
ErrorCorrectionLevel level = ErrorCorrectionLevel.Q;

// encode
ByteMatrix matrix = generateMatrix(data, level);

...
}

private static ByteMatrix generateMatrix(String data, ErrorCorrectionLevel level) {
final QRCode qr = new QRCode();
Encoder.encode(data, level, qr);
final ByteMatrix matrix = qr.getMatrix();
return matrix;
}

...
Par défaut, Zxing génère des QR codes avec le niveau “L” (low). Dans l’exemple j’ai utilisé le niveau “Q” (quality) et on constate donc une plus grande densité des modules. Pour que ça saute aux yeux, j’ai utilisé du “bleu mauve” pour cette version.


QR code vert avec le niveau L
QR code vert avec le niveau L
QR code bleu mauve avec le niveau Q
QR code bleu mauve avec le niveau Q
idea Si on avait utilisé le niveau “H” (high), la différence aurait été encore plus flagrante.


III-E. Voir la grille

Durée estimée : 30 secondes.


Pour continuer, disons qu’on souhaite voir le maillage des modules. C’est relativement simple : il suffit de dessiner des modules qui n’occupent pas toute la place disponible dans la “case”.
Modules plus petits laissant voir la grille

public class GridQrcodeGenerator {

private static void writeImage(String outputFileName, String imageFormat, ByteMatrix matrix, int size) {

...
// Area module = new Area(new Rectangle.Float(0, 0, 1, 1));
Area module = new Area(new Rectangle2D.Float(0.05f, 0.05f, 0.9f, 0.9f));

...
}

...
QR code bleu mauve
QR code bleu mauve
QR code rouge avec grille
QR code rouge avec grille


III-F. Des modules ronds

Durée estimée : 30 secondes.


Continuons sur notre lancée. Cette fois, disons que nous voulons des modules ronds.
Modules ronds

public class RoundedQrcodeGenerator {

private static void writeImage(String outputFileName, String imageFormat, ByteMatrix matrix, int size) {

...
//Area module = new Area(new Rectangle2D.Float(0.05f, 0.05f, 0.9f, 0.9f));
Area module = new Area(new RoundRectangle2D.Float(0, 0, 0.9f, 0.9f, 1f, 1f));

...
}

...
Juste pour rigoler, j’ai fais des modules ronds et blancs sur fond bleu. On a aussi le droit de changer la couleur du fond puisque c’est la différence de contraste qui compte. Toutefois tous les scanners ne savent pas forcément lire les QR codes inversés.


QR code rouge avec grille
QR code rouge avec grille
QR code avec des modules ronds
QR code avec des modules ronds
idea Avec le fond bleu, on voit bien la “quietzone” de quatre modules autour du QR code.


III-G. Avec un dégradé de couleur

Durée estimée : 30 secondes.


Pour finir avec un dernier effet sympa et simple, je vous propose d’utiliser un dégradé de couleur.
Dégradé de couleurs

public class TransColoredQrcodeGenerator {

private static void writeImage(String outputFileName, String imageFormat, ByteMatrix matrix, int size) {

...

// Color couleur1 = new Color(0xFFFFFF);
// g.setPaint(couleur1);
Color couleur1 = new Color(0xAFC828);
Color couleur2 = new Color(0x606640);
// Debut et fin du gradient
float[] fractions = { 0.0f, 1.0f };
Color[] colors = { couleur1, couleur2 };
g.setPaint(new RadialGradientPaint(size / 2, size / 2, size / 2, fractions, colors));

...
}

...
QR code avec un dégradé de couleurs
QR code avec un dégradé de couleurs


III-H. Autres types de messages

La plupart du temps, on va générer des QR codes pour les faire “pointer” vers des sites Web. Pour cela, il suffit de d’encoder un message contenant l’URL du-dit site.
Dégradé de couleurs

public static void main(String[] args) {
// String data = "Je suis Thierry et je suis gentil.";
String data = "http://www.developpez.com";

...
QR code vers le site www.developpez.com
QR code vers le site http://www.developpez.com
Pour générer des QR codes permettant d’envoyer des SMS, des e-mails, d’appeler un numéro de téléphone, d’enregistrer des vCards (etc.), il y a une syntaxe particulière que je vous laisse découvrir sur le site d’Unitag ou sur la page dédiée aux contenus chez Zxing. Voici néanmoins quelques exemples simples :
Dégradé de couleurs

public static void main(String[] args) {
// String data = "Je suis Thierry et je suis gentil.";
// String data = "http://www.developpez.com";

// Envoie de SMS
String data = "sms:+33312345678:bonjour...";

// Envoie d'email
String data = "mail:jean.dupond@google.com?subject=Coucou&body=Bonjour...";

...
Et voilà…



IV. Conclusions

Comme on vient de le voir, on peut générer des QR codes très facilement à l’aide de la bibliothèque Zxing et un peu de dessin à l’aide de Java 2D. Les possibilités sont nombreuses mais réclament un talent de graphiste qui me manque. Vous trouverez des outils sympas sur le Web et j’espère qu’ils vous donneront des idées.


Dans un prochain article, je m’attarderai sur les algorithmes liés aux QR codes, notamment pour le calcul de la matrice, des masques, des mécanismes de correction d’erreur, etc. Mais pour le moment, je vous laisse déjà vous amuser avec tout ça.


Le code final de ce tutoriel est disponible dans le fichier ZIP qr-code-02.zip.


idea Vos retours nous aident à améliorer nos publications. N’hésitez donc pas à commenter cet article sur le forum : 1 commentaire Donner une note à l'article (5)
Retrouvez mes autres tutoriels rapides sur developpez.com à l’adresse http://thierry-leriche-dessirier.developpez.com/#page_articles



V. Remerciements

J’adresse des remerciements particuliers aux équipes d’Unitag, sans qui cet article n’aurait jamais vu le jour. Unitag est une société française, basée à Toulouse et leader dans la domaine de la génération et la personnalisation des QR Codes. Leur site Web propose de nombreux outils gratuits (et performants) que viennent compléter des offres professionnelles intéressantes (et pas chères).


Et en plus, je tiens à remercier, en tant qu’auteur du tutoriel, toutes les personnes qui m’ont aidé et soutenu. Je pense tout d’abord à mes collègues qui subissent mes questions au quotidien, mais aussi à mes contacts et amis du Web, dans le domaine de l’informatique ou non, qui m’ont fait part de leurs remarques et critiques. Bien entendu, je n’oublie pas l’équipe de developpez.com qui m’a guidé dans la rédaction de cet article et m’a aidé à le corriger et le faire évoluer, principalement sur le forum.


Plus particulièrement j’adresse mes remerciements à Mickael Baron (keulkeul), Sébastien Germez (FirePrawn), Marc (Gueritarish) et mlny84.



VI. Annexes


VI-A. Des exemples de beaux QR codes

Voici une petite sélection de QR codes design que j’ai simplement cherché sur Google.. Je les trouve beaux mais ça n’engage que moi.


idea Quand on scanne des QR codes (à l’aide d’un iPhone par exemple) directement sur l’écran et de trop près, on voit apparaitre des lignes correspondant à la matrice des pixels du LCD. Il est donc possible que ces QR codes ne soient pas lisibles sur tous les écrans. En revanche ils devraient être lisibles facilement une fois imprimés, même sur des mauvaises imprimantes, même en noir et blanc.
warning Ces images sont la propriété de leurs auteurs. Je les propose ici dans le cadre du “fair use”. Contactez-moi pour les supprimer ou ajouter des références.


VI-B. Liens


QR Code vers Unitag
QR Code vers Unitag
QR Code design vers Unitag
QR Code design vers Unitag


QR Code vers QR Dress Code



VI-C. Liens personnels

Retrouvez ma page et mes autres articles sur developpez.com à l’adresse http://thierry-leriche-dessirier.developpez.com/#page_articles


QR Code vers mes articles
Ajoutez-moi à vos contacts à l’aide du QR Code suivant :


QR Code contenant ma vCard
Suivez-moi sur Twitter : @thierryleriche


@thierryleriche
@thierryleriche


VI-D. Les fichiers importants en entier

SimpleQrcodeGenerator.java

package com.dvp.tutoriel.qrcode;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;

public class SimpleQrcodeGenerator {

private static BitMatrix generateMatrix(final String data, final int size) throws WriterException {
final BitMatrix bitMatrix = new QRCodeWriter().encode(data, BarcodeFormat.QR_CODE, size, size);
return bitMatrix;
}

private static void writeImage(final String outputFileName, final String imageFormat, final BitMatrix bitMatrix) throws FileNotFoundException,
IOException {
final FileOutputStream fileOutputStream = new FileOutputStream(new File(outputFileName));
MatrixToImageWriter.writeToStream(bitMatrix, imageFormat, fileOutputStream);
fileOutputStream.close();
}

/**
* @param args
*/
public static void main(String[] args) {
System.out.println("SimpleQrcodeGenerator DEBUT");

try {
final String data = "Je suis Thierry et je suis gentil.";
final String imageFormat = "png";
final String outputFileName = "c:/code/qrcode-01." + imageFormat;
final int size = 400;

// encode
final BitMatrix bitMatrix = generateMatrix(data, size);

// write in a file
writeImage(outputFileName, imageFormat, bitMatrix);

System.out.println("SimpleQrcodeGenerator FIN");

} catch (Exception e) {
e.printStackTrace();
}
}
}
GridQrcodeGenerator.java

package com.dvp.tutoriel.qrcode;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.geom.Area;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.imageio.ImageIO;

import com.google.zxing.WriterException;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.google.zxing.qrcode.encoder.ByteMatrix;
import com.google.zxing.qrcode.encoder.Encoder;
import com.google.zxing.qrcode.encoder.QRCode;

public class GridQrcodeGenerator {
private static ByteMatrix generateMatrix(final String data, final ErrorCorrectionLevel level) throws WriterException {
final QRCode qr = new QRCode();
Encoder.encode(data, level, qr);
final ByteMatrix matrix = qr.getMatrix();
return matrix;
}

private static void writeImage(final String outputFileName, final String imageFormat, final ByteMatrix matrix, final int size)
throws FileNotFoundException, IOException {

/**
* Java 2D Traitement de Area
*/
Area a = new Area(); // les futurs modules
Area module = new Area(new Rectangle2D.Float(0.05f, 0.05f, 0.9f, 0.9f));

AffineTransform at = new AffineTransform(); // pour déplacer le module
int width = matrix.getWidth();
for (int i = 0; i < width; i++) {
for (int j = 0; j < width; j++) {
if (matrix.get(j, i) == 1) {
a.add(module); // on ajoute le module
}
at.setToTranslation(1, 0); // on décale vers la droite
module.transform(at);
}
at.setToTranslation(-width, 1); // on saute une ligne on revient au
// début
module.transform(at);
}

// agrandissement de l'Area pour le remplissage de l'image
double ratio = size / (double) width;
// il faut respecter la Quietzone : 4 modules de bordures autour du QR
// Code
double adjustment = width / (double) (width + 8);
ratio = ratio * adjustment;

at.setToTranslation(4, 4); // à cause de la quietzone
a.transform(at);

at.setToScale(ratio, ratio); // on agrandit
a.transform(at);

/**
* Java 2D Traitement l'image
*/
BufferedImage im = new BufferedImage(size, size, BufferedImage.TYPE_INT_RGB);
Graphics2D g = (Graphics2D) im.getGraphics();
Color couleur1 = new Color(0xFF0000);
g.setPaint(couleur1);

g.setBackground(new Color(0xFFFFFF));
g.clearRect(0, 0, size, size); // pour le fond blanc
g.fill(a); // remplissage des modules

// Ecriture sur le disque
File f = new File(outputFileName);
f.setWritable(true);
try {
ImageIO.write(im, imageFormat, f);
f.createNewFile();
} catch (Exception e) {
}

}

/**
* @param args
*/
public static void main(String[] args) {
System.out.println("GridQrcodeGenerator DEBUT");

try {
final String data = "Je suis Thierry et je suis gentil.";
final String imageFormat = "png";
final String outputFileName = "c:/code/qrcode-04." + imageFormat;
final int size = 400;
final ErrorCorrectionLevel level = ErrorCorrectionLevel.Q;

// encode
final ByteMatrix matrix = generateMatrix(data, level);

// write in a file
writeImage(outputFileName, imageFormat, matrix, size);

System.out.println("GridQrcodeGenerator FIN");

} catch (Exception e) {
e.printStackTrace();
}
}
}
pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.tle.qrcodegen</groupId>
<artifactId>qrcode-generator</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>qrcode-generator</name>
<description>TODO</description>
<url>http://www.icauda.com</url>

<licenses>
<license>
<name>Copyright ©1995-2012 icauda.com et Copyright ©2011 Developpez.com</name>
<comments>Les sources présentés sur cette page sont libres de droits, et vous pouvez les utiliser à votre [..]</comments>
</license>
</licenses>

<developers>
<!-- Thierry -->
<developer>
<name>Thierry Leriche-Dessirier</name>
<roles>
<role>Developper</role>
</roles>
<organization>ICAUDA</organization>
</developer>

</developers>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.6</java.version>
<maven-compiler-plugin.version>2.3.1</maven-compiler-plugin.version>
<junit.version>4.8.2</junit.version>

<log4j.version>1.2.13</log4j.version>
<guava.version>12.0</guava.version>
<zxing-core.version>2.0</zxing-core.version>

</properties>

<dependencyManagement>
<dependencies>
<!-- JUnit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>

<!-- log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>

<!-- Guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>

<!-- zxing -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>${zxing-core.version}</version>
</dependency>

<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>${zxing-core.version}</version>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>

<!-- Guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>

<!-- zxing -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
</dependency>

<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
</dependency>
</dependencies>

<build>
<finalName>qrcode-generator</finalName>

<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>


               Version PDF   Version hors-ligne   Version eBooks


Comment faire pour créer un jeu video

Comment faire pour créer un jeu video

I. Introduction

 

Les jeux vidéo ont toujours été un acteur important dans le monde de l’informatique. Peu de temps après la conception des ordinateurs, des programmes de jeux ont vu le jour. Maintenant, le marché de ce loisir dépasse celui du grand écran.


Tout en jouant, vous avez sûrement eu l’envie de faire votre propre jeu. Ce tutoriel a pour but de poser la première pierre à votre projet afin que celui-ci devienne une réalité.


Ce tutoriel n’est pas écrit que pour les débutants. C’est un guide pour commencer n’importe quel projet de jeu vidéo et rappellera les notions et outils de base permettant de mener votre projet à bien.



I-A. Qu’est-ce qu’un jeu vidéo ?

 

Avant de commencer, revenons au tout début. Qu’est-ce un jeu vidéo ? C’est en sachant cela qu’il est plus facile d’imaginer les différents éléments nécessaires à sa création.


Tout d’abord, un jeu vidéo n’est pas que l’œuvre d’un seul programmeur (sauf cas très rare). Un jeu vidéo, c’est le rassemblement d’une idée, d’un programme, de dessins et de sons. Ce tout constitue un jeu vidéo. Ces domaines sont eux aussi fragmentés en sous-ensembles :


Programmeur :


  • intelligence artificielle – gestion des ennemis et des éléments « neutres » ;
  • moteur – bloc qui permet l’orchestration des éléments du jeu ;
  • 2D/3D – module qui affiche les images à l’écran ;
  • jeu – les règles du jeu, la gestion de la santé, de l’apparition et l’orchestration des éléments et autres ;
  • son – module qui gère les sons, la musique selon les événements du jeu ;
  • réseau – module permettant de faire des jeux multijoueurs ;
  • interface utilisateur – les menus, l’écran de pause, le HUD ;
  • outils – l’éditeur de carte et les autres outils nécessaires pour la création du jeu.
Game designer :


  • scénariste – créateur de l’histoire, du cadre scénaristique du jeu ;
  • gameplay designer – création des règles du jeu (comment gagner/perdre…)
  • level designer – création des niveaux.
Graphiste :


  • artiste 2D ;
  • modeleur de personnages ;
  • modeleur de décors.
Son :


  • effets sonores ;
  • musiciens.
Cette liste est loin d’être complète. Par exemple, il peut aussi y avoir des employés à la communication (site web, communauté) ou, pour les projets internationaux, des traducteurs.


Cette liste est vraie pour les très grands projets. Pour de simples projets amateurs, on peut se retrouver à un programmeur et un artiste et cela peut suffire.


Ce qu’il faut comprendre ici, c’est qu’un jeu est avant tout l’histoire d’un(e) ou de plusieurs passionné(e)s. Cela demande énormément de motivation et de temps. Un jeu tel que God of War 3 est réalisé par une équipe complète de professionnels qui ont passé des journées, des semaines, des mois et souvent même des années entières à la conception du jeu.


God of War 3
Mais ce n’est pas pour cela que vous n’allez pas pouvoir faire un jeu. En effet, il est possible de faire des jeux simples qui sont très intéressants. Prenons des exemples comme Minecraft, Binding of Isaac ou World of Goo. Ces jeux ont été réalisés pas des passionnés pendant leur temps libre (même s’il est important de rappeler que Notch a décidé d’arrêter son travail pour développer à plein temps Minecraft).


World of Goo
C’est la raison de cet article. Je vais vous guider afin que vous ne tombiez pas dans les pièges classiques d’un projet amateur et que vous prépariez au mieux le développement du jeu avec les outils adéquats pour réaliser vos rêves.



I-B. Faire un jeu vidéo ?

 

Mais alors, est-ce possible de faire un jeu vidéo tout seul ?


La réponse est oui. Il suffit d’avoir de la motivation, de la patience, du temps ainsi que d’une bonne base de bon départ (cet article par exemple).


En fait, le principal problème lorsque l’on veut faire un jeu, c’est que l’on se plonge immédiatement sur le projet sans réfléchir. La première étape est de calibrer ses idées à ses possibilités. Ensuite, nous déterminerons comment réaliser ce projet.



I-B-1. Calibrer son projet

 

En effet, de trop nombreuses fois, j’ai pu lire des messages de personnes cherchant à réaliser un MMORPG du style de World of Warcraft. Certes, c’est un rêve de faire un tel projet, mais, soyons honnête, ce projet est immense et bien trop décourageant pour un petit groupe de personnes.


Pour réussir son projet, il faut le ramener à ses possibilités. Le but est que vous appreniez sur la conception d’un jeu en réalisant des petits jeux (ou brouillons). Ainsi, vous aurez un aperçu des difficultés que vous pouvez avoir mais également un début de réponse à des questions fondamentales.


Que pensez vous possible pour vous ?
Par exemple, si vous commencez la programmation, il est conseillé de commencer par des projets simples du style Tic-tac-toe, le jeu des allumettes ou la bataille navale (ou encore Mastermind). Oui, ce sont des projets simples, faits déjà mille fois. Mais ne commence-t-on pas chaque langage par un « Hello World » ? Pour ces jeux, je parle d’application en console, toute simple. Par la suite, vous pouvez continuer avec des jeux un peu plus complexes, ou simplement améliorer votre Tic-tac-toe pour lui donner une interface graphique.


Tout projet doit commencer au plus simple. Ensuite, on ajoute des briques, toujours plus complexes, toujours plus grandes. À la fin, on obtient un jeu complet et admirable.


Ne commencez donc pas par un MMORPG, cela serait du suicide et vous découragerait trop tôt (parce qu’en plus, vous ne saurez pas comment le commencer). À la place, faites un jeu en commençant par la base de celui-ci, comme un gestionnaire de combat ou de monstres.



I-B-2. Faire un projet en équipe ?

 

Selon la taille de votre projet, vous souhaitez ou devez travailler en équipe.


Gérer une équipe demande plus de travail et de préparation sur le projet. En effet, chef de projet est un métier à part. D’autant plus que contrairement à une entreprise, il n’y a pas de motivation d’argent. Chacun aura ses occupations et ses envies, mais aussi son propre emploi du temps rendant la gestion du projet très difficile.


La gestion peut donc être compliquée, mais pas impossible. Premièrement, il faut déterminer l’organisation du travail (qui fait quoi et comment). Ensuite, il faudra continuellement motiver l’équipe et suivre l’avancement des différentes tâches effectuées. Comme c’est votre projet avec votre idée, les autres membres seront moins motivés que vous. Finalement, la coopération et la communication sont des points importants. La distance entre chaque membre ne facilitant pas le travail, il faudra régulièrement faire des réunions à l’aide d’un logiciel tel que Skype. Finalement, pour le développement et pour la gestion du projet, plusieurs outils existent et sont décrits dans la section « les outils ».



I-C. Quelle voie choisir ?

 

De multiples possibilités s’offrent pour créer votre jeu vidéo. On peut distinguer quatre voies :


  • le modding ;
  • les game makers ;
  • les kits de développement (SDK) ;
  • la programmation pure et dure.
L’ordre choisi pour cette liste prend en compte la nécessité de programmer. Ainsi, le premier élément demande peu ou pas de programmation alors que le dernier consiste uniquement en de la programmation.


Ainsi, il y en a pour tous les goûts. Un artiste voulant tester ses créations pourra le faire très facilement en l’incorporant dans un autre jeu (modding). Un game designer pourra tester ses idées dans un game maker par exemple. Un programmeur pourra, selon son niveau, soit faire son jeu en utilisant un moteur, soit créer directement le sien.



II. Le modding

 

Le modding est le processus de modification d’un jeu. Certains développeurs proposent des outils pour créer ou éditer le contenu du jeu afin que la communauté puisse étendre son jeu préféré.



II-A. Éditeur

 

Des jeux comme Skyrim, Starcraft ou Unreal Tournament 3 proposent un éditeur complet afin de créer de nouvelles cartes et même de nouvelles règles de jeu. Chaque développeur de jeu a son propre éditeur. Ainsi, le meilleur moyen d’avoir de l’aide sur ces outils et de lire la documentation et de parcourir les différents sites des communautés de fans.


Éditeur de Unreal Tournament 3
Cette méthode de créer son jeu ne demande aucune ou très peu de connaissances en programmation et permet de s’amuser tout en restant dans l’univers de son jeu préféré. Un game designer pourra tester ses idées et un artiste pourra intégrer ses nouveaux assets, lorsque cela est possible.



II-B. Modification des fichiers du jeu

 

Certains jeux ne sont pas accompagnés d’éditeur. Du coup, il faudra modifier directement les fichiers du jeu « à la main ». Vous pouvez néanmoins trouver des logiciels spécialisés sur les sites des fans. Autrement, cela demandera de la recherche, un esprit logique et de la motivation. Toutefois, cela peut être très intéressant, si vous souhaitez savoir comment le jeu fonctionne et si vous aimez tripatouiller.



III. Les game makers

 

Les game makers sont des logiciels aidant à la création d’un jeu d’un type précis mais heureusement, il existe un maker pour chaque type de jeu ou presque. Parmi ceux-ci, nous pouvons citer :


Chacun d’entre eux propose un ensemble d’outils adaptés et spécialisés pour la création d’un jeu vidéo. Pas ou peu de connaissances en programmation sont nécessaires car ce genre de logiciel réimplémente un langage de scripting très simplifié afin de déclencher des actions dynamiques. De plus, la globalité du jeu peut être créée en cliquant sur des boutons et en configurant des propriétés.


Ce type de logiciel permet de mettre en place ses idées et peut donc être une bonne idée pour tester des mécanismes pour les game designers. Toutefois, si vous souhaitez un jeu qui ne peut se fabriquer dans un moule et qui se veut original par son gameplay, ces logiciels ne vous conviendront certainement pas.



IV. Kits de développement (SDK)

 

Récemment, plusieurs sociétés de jeux vidéo ont distribué les logiciels qu’ils utilisent durant la conception de leurs jeux vidéo. Ainsi Epic Games (Unreal Tournament, Gears of War) et Crytech (FarCry, Crysis) ont mis à disposition du public l’ensemble des logiciels qu’ils utilisent pour créer leurs jeux.


Mais ce ne sont pas les seuls à avoir proposé une telle suite pour la création de jeux vidéo. En effet, la société Unity Technologies ainsi que quelques autres ont aussi créé leur propre solution, offrant une alternative aux grands noms du milieu à un plus faible coût.


Ainsi, les trois kits les plus célèbres sont :


Mais il existe aussi d’autres logiciels dans cette lignée, tel que NeoAxis.


Le principal avantage de ce type de solution est la possibilité de créer un jeu rapidement, tout en utilisant les nouvelles techniques et technologies du monde du jeu vidéo.


Toutefois, sachant que l’architecture du jeu est déjà en place, il peut être un peu plus compliqué de faire un jeu dans un style différent de celui pour lequel le kit a été prévu. Cela n’est pas impossible, car les kits laissent une grande liberté, mais pour ce faire il faudra faire de la programmation afin d’implémenter les nouveaux comportements dans le moteur.


info Epic Games a créé son propre langage dans l’UDK : l’UnrealScript. Il est avantageux de connaître la programmation avant de partir à la découverte de celui-ci. Unity 3D et NeoAxis se basent sur du C# et le CryENGINE SDK sur du C++.


V. La programmation

 

Cette section présente les possibilités lorsque l’on souhaite se lancer dans la programmation.



V-A. Le langage

 

Le premier choix à faire est le langage. En théorie, il est possible de prendre n’importe quel langage pour faire son jeu. En pratique, certains langages seront plus adaptés que d’autres.


Il n’y a pas de langage parfait. Chacun a son point de vue par rapport aux langages, tiré de sa propre expérience. Donc, le premier conseil, c’est de se faire plaisir.


Vous avez commencé un langage et vous l’aimez bien, alors n’hésitez pas à continuer avec celui-ci. En effet, il est déjà assez compliqué de faire son jeu, alors apporter une nouvelle difficulté en choisissant un langage inconnu n’est sûrement pas une bonne idée.


Certaines plateformes ne supportent pas tous les langages. Ainsi, si vous souhaitez faire un jeu pour des plateformes autres que le PC, renseignez-vous des contraintes pour cette plateforme.


Comme première indication, l’assembleur est fortement déconseillé. Le langage est trop bas niveau pour pouvoir faire des jeux simplement. Seules les vieilles machines (Game Boy, Amiga, Atari) nécessitent encore l’utilisation de ce langage.


Le C et surtout le C++ sont des très bons choix, car couramment utilisés dans le monde du jeu vidéo. De part ce fait, le langage dispose d’une multitude de bibliothèques permettant de réaliser vos jeux. Malheureusement, ce n’est pas le langage le plus simple (même si ce point de vue est relatif) et celui-ci demande une grande rigueur.


Le Java est un langage de choix, car couramment utilisé tout en étant simple. De plus, ce langage est privilégié si vous voulez faire un jeu pour Android.


Le C# est semblable au Java. Toutefois, il a souvent été limité aux plateformes Microsoft. Avec vous pouvez développer des jeux pour Xbox, Windows Phone et Zune avec XNA, pour navigateur avec Silverlight. Finalement, ce langage est utilisé dans les kits Unity 3D et NeoAxis. Ce langage est fortement utilisé chez les professionnels du jeu vidéo pour la création des outils liés à la conception du jeu (éditeurs, logiciels utilitaires, etc.).


Le BASIC, popularisé car implémenté d’office sur les vieux ordinateurs, est un langage assez simple. Il est toujours possible de faire des jeux avec en utilisant des variantes tel le que PureBasic, mais ces solutions ont vieilli.


Le Python est un langage de script simple et puissant. Il est généralement facile à apprendre et est de plus en plus utilisé dans les jeux vidéo pour implémenter la logique du jeu. De plus, il existe de nombreuses bibliothèques aidant à la programmation d’un jeu, comme la très célèbre pygame.


info Sachant que les jeux pour le web sont une catégorie bien à part, je vous invite à vous référer à la section Jeux web dans la suite de ce tutoriel.
Ceci est un rapide tour des langages les plus importants, mais il reste plein d’autres solutions.


idea D’après moi, le Python semble un bon choix pour débuter.


V-B. La bibliothèque

 

Maintenant que vous avez choisi votre langage, il est nécessaire de déterminer les bibliothèques dont vous avez besoin pour réaliser votre jeu.


Une bibliothèque est une boite contenant une série de fonctions réalisant des tâches simples. Cette boite est nécessaire car il serait très difficile de créer un jeu si nous devions à chaque fois refaire les fonctions de base comme « dessiner un point sur l’écran » ou « ouvrir une fenêtre ».


Comme pour les langages, il existe différents niveaux de bibliothèques. Le bas niveau se retrouve au plus proche de la machine et proposera des fonctions simples du style : « dessiner un point sur l’écran », alors que les bibliothèques de haut niveau proposeront des fonctions permettant de dessiner directement un modèle 3D complet à partir d’un fichier.


info Comme il n’est pas possible d’énumérer tous les choix possibles en termes de bibliothèques et de langages, je vais me concentrer sur les bibliothèques les plus courantes en C/C++. Il est possible de découvrir les autres choix sur la page suivante : http://jeux.developpez.com/telecharger/index/categorie/557/Bibliotheques


V-B-1. Bibliothèques bas niveau

 

Pour la 3D, le choix est assez simple. Il y a OpenGL et DirectX. Le choix se fait selon les plateformes visées. En effet, DirectX n’est supporté que sous Windows et sur Xbox. OpenGL est purement C alors que DirectX est en C++, toutefois, des surcouches (wrappers) permettent d’utiliser ces bibliothèques avec d’autres langages. OpenGL existe dans une variante embarquée : OpenGL ES, utilisée dans les plateformes mobiles (iPhone/iPad/Android).


Alors que OpenGL se limite uniquement à la 3D, DirectX permet aussi de lire les fichiers des modèles 3D, de jouer des sons, de gérer les périphériques de jeu.


Pour la 2D, vous pouvez utiliser la SDL (qui est très portable (compatible même avec la GP2X), mais malheureusement, qui n’a pas évolué depuis longtemps), SFML (moins portable mais à jour et utilisant correctement l’accélération matérielle), Allegro. Plus précisément, ces bibliothèques ne se limitent pas à afficher des images en 2D mais gèrent aussi le son, les périphériques et tout ce qui est nécessaire à la création d’un jeu.


info Il est aussi possible de faire de la 2D avec OpenGL et DirectX.
Pour la musique et le son, les solutions sont OpenAL ou directement utiliser les fonctionnalités données par le système d’exploitation. OpenAL permet une spatialisation du son et permettra de jouer les sons dans un environnement 3D.


Pour la physique, la bibliothèque à choisir dépendra de votre projet. En effet, certaines bibliothèques se spécialisent dans la physique dans un monde 2D, alors que d’autres agiront sur un monde 3D. Parmi celles-ci, nous pouvons citer Box2DBulletNewton.


Pour le réseau, les bibliothèques sont liées au système d’exploitation pour lequel vous développez. En effet, chaque système a sa propre implémentation des sockets qui sont la forme la plus basique pour créer une connexion entre deux machines.


idea Un choix souvent fait par les débutants (choix qui se trouve être un des meilleurs pour faire un jeu rapidement) est de créer son jeu avec SDL et ses modules SDL_mixer, SDL_image et SDL_TTF. Vous pouvez retrouver des explications détaillées dans nos tutoriels.
Bien sûr, ce paragraphe ne peut pas lister toutes les bibliothèques disponibles. Je vous invite donc à visiter notre page Bibliothèques ou à effectuer des recherches sur Internet.



V-B-2. Moteurs

 

Les moteurs sont aussi des bibliothèques mais ceux-ci encapsulent les bibliothèques bas niveau afin de donner un moyen simplifié de faire son jeu. Ainsi, dans les moteurs, des algorithmes avancés seront mis en place vous évitant de devoir les réimplémenter.


Tout comme les bibliothèques bas niveau, les moteurs peuvent se spécialiser :


  • pour la 3D OgreIrrlicht et OpenSceneGraph ;
  • pour la physique ODEHavok (souvent utilisé dans les jeux vidéo), PhysX et Tokamak ;
  • pour le réseau : RakNetHawkNL ou encore GNE ;
  • pour le son : FModEx ou BASS. FModEx est une bibliothèque couramment utilisée dans le monde des jeux vidéo (Blizzard l’utilise dans Diablo 3 et Starcraft 2).
Cette liste n’est bien sûr pas exhaustive, tant dans les moteurs cités que dans les catégories abordées. On pourra trouver des moteurs un peu plus spécifiques, comme par exemple des moteurs d’animation 3D, des moteurs de gestion des périphériques, etc.



V-C. Jeux web

Les jeux web sont devenus de plus en plus populaires ces dernières années. En effet, ce succès peut être dû à leur facilité d’accès : il n’est pas nécessaire d’avoir une machine surpuissante, ni même de suivre une procédure d’installation complexe et lente. Il suffit bien souvent de démarrer son navigateur internet pour pouvoir y jouer.



V-C-1. Côté serveur

Le serveur est la machine à laquelle les utilisateurs se connecteront pour jouer. Dans le cas d’un jeu web, le serveur est une machine proposant un site web et est accessible à l’aide d’une URL.


Que vous fassiez un jeu en HTML, en Flash ou avec Unity, si vous voulez le rendre disponible il faudra l’héberger. Cet hébergement est payant et il peut vous en coûter plus ou moins cher selon vos besoins en espace de stockage et en bande passante.


Pour ceux-ci, le site pourra se résumer à sa plus simple forme, une page HTML contenant le code pour importer le module du jeu.


Il existe cependant un autre style de jeu, appelé jeu par navigateur qui repose essentiellement sur l’utilisation du serveur. Dans cette catégorie nous retrouvons les classiques OGame ou Travian.


Ogame
La conception d’un tel jeu est similaire à celle d’un site web. Ainsi, il sera programmé dans un langage comme le PHP, les pages affichées du coté client en HTML/CSS et du JavaScript pour rendre le tout dynamique aux yeux de l’utilisateur.


Maintenant, il existe des frameworks permettant d’éviter le PHP et d’utiliser d’autres langages. C’est le cas pour Django, permettant de faire un site en Python, ou Ruby on Rails, utilisant le Ruby.


Comme vous allez avoir besoin de sauvegarder des données sur les joueurs, les monstres ou autre, il vous sera nécessaire d’avoir une base de données.



V-C-2. Flash

Pendant de nombreuses années, le Flash a été dominant dans les jeux web. En effet, la technologie de Adobe a été la première à proposer de facilement créer des animations et cela de manière indépendante des navigateurs. Le langage de programmation derrière le Flash s’appelle l’Action Script (actuellement en version 3). La technologie Flash récemment passée en version 11 permet de faire des applications web en 3D.


Pour réaliser une application Flash, plusieurs éditeurs sont disponibles. Adobe développe son propre éditeur : Adobe Flash CS mais celui-ci est payant. Un autre éditeur intéressant est Flash Develop, car celui-ci est gratuit et vous permet pleinement de réaliser un jeu Flash.


Comme le Flash s’est vite popularisé, de multiples bibliothèques de jeux existent et facilitent la création d’un jeu. En effet, à la base le Flash est prévu pour faire de simples animations et n’est pas spécialement conçu pour les jeux. Les bibliothèques comme Flixel permettent d’avoir une gestion simplifiée des composants Flash afin de créer un jeu sans soucis.


warning D’un autre côté, la technologie semble perdre des adhérents. D’une part, il est possible de faire les mêmes choses avec le HTML 5 et JavaScript, mais en plus Adobe ne supporte plus d’importante plateformes comme Linux ou Android.


V-C-3. HTML 5/CSS 3

Depuis quelques années, les langages web ont évolué pour offrir une nouvelle dynamique à nos pages. Ainsi, avec un savant mélange de HTML 5/CSS 3 et de JavaScript (et notamment avec Node.js pour le serveur ou encore avec les websockets), il est maintenant aisé de réaliser des jeux complets et supportés par la majorité des navigateurs et plateformes.


Malgré le jeune âge de ces technologies, différentes bibliothèques existent pour aider à la création d’un jeu : ImpactLimeJS et bien d’autres.


Il existe aussi des logiciels spécialisés comme Construct 2.



V-C-4. Unity 3D/Unreal Development Kit

Les kits de développement Unity 3D et Unreal Development Kit permettent d’exporter son jeu dans une page web.



V-C-5. Facebook

Le développement de jeux vidéo a atteint une nouvelle dimension avec l’arrivée des réseaux sociaux tel que Facebook. Ce dernier a mis en place une bibliothèque afin de réaliser des applications pour le réseau et notamment des jeux. Vous pouvez trouver plus d’informations sur le portail de la firme : http://developers.facebook.com.



V-D. Les outils

   

Lors de la conception d’un jeu vidéo, il est souvent nécessaire d’utiliser des outils additionnels.


Il vous faudra un outil permettant d’écrire du code. Vous pouvez bien sûr utiliser le bloc-notes, mais comme vous allez sûrement passer beaucoup de temps sur votre code (et que celui-ci n’est pas toujours aussi simple à lire qu’un roman), il est préférable d’utiliser un éditeur spécialisé qui vous apportera des fonctionnalités essentielles telle que la coloration syntaxique. Ensuite, il peut être nécessaire de créer un diagramme UML afin de mettre en place l’architecture de votre jeu. Finalement, et cela devient obligatoire lorsque l’on travaille en groupe, il est nécessaire de mettre en place un logiciel de contrôle de versions.


Ce sont les outils de base pour créer un jeu vidéo. Toutefois, d’autres outils peuvent vous aider, alors n’hésitez pas à jeter un coup d’œil sur cette page.



V-D-1. L’éditeur de code

 

Un Environnement de Développement Intégré (EDI) est un logiciel regroupant un éditeur de code ainsi que les outils nécessaires pour compiler et produire l’exécutable de ce code. De plus, il contient un débogueur intégré permettant de traquer les bogues de manière simple et efficace.


Pour le C/C++, les EDI les plus connus sont : Microsoft Visual C++Code::Blocks et QtCreator.


Pour le C#, les EDI sont : Microsoft Visual C# et MonoDevelop.


Pour le Java, on parlera de Eclipse et NetBeans.


Bien sûr, cette liste n’est pas exhaustive, de plus un éditeur peut ne pas se cantonner à un seul langage, tel que Eclipse qui est capable aussi de traiter du C ou encore du PHP. Si vous aimez un autre logiciel et que vous vous sentez bien dans celui-ci, alors ne changez pas.



V-D-2. La modélisation UML

 

La modélisation est importante afin de ne pas partir tête baissée dans le code et de rencontrer des problèmes d’évolution dans votre logiciel. Bien que la feuille de papier soit le premier outil pour dessiner les diagrammes, il peut être nécessaire d’avoir un logiciel afin de créer son modèle sur ordinateur et de pouvoir ainsi le distribuer aux autres membres de l’équipe.


Les outils disponibles pour créer vos diagrammes sont répertoriés sur cette page.



V-D-3. Logiciels de contrôle de versions

 

Lorsque l’on travaille à plusieurs sur un même code, il est important de mettre en place un logiciel de contrôle des versions. Celui-ci permet de sauvegarder les différentes modifications de vos fichiers de code et de les gérer. Même si vous travaillez seul, il est conseillé d’en utiliser un afin d’avoir des sauvegardes de votre travail sur un serveur.


Tout d’abord, il existe plusieurs services proposant des serveurs de contrôle de versions (là où votre code sera stocké). Certains de ces services forcent l’utilisation d’une licence où le code doit être ouvert. De plus, le choix d’un de ces services dépendra aussi du protocole que vous voulez utiliser (CVS, SVN, Mercurial, GIT, etc.).


Developpez.com propose ce genre de services, avec un bugtracker et tous les autres outils nécessaires pour faire vivre son projet.


Les autres solutions sont les forges telles que SourceForgeGoogle CodeAssembla ou GitHub.



V-D-4. Logiciels de suivi des bogues (bugtrackers)

 

Il peut aussi être intéressant d’utiliser un bugtracker pour suivre l’évolution des bogues ou recevoir les commentaires des utilisateurs de votre jeu. Souvent, les services associés à l’utilisation d’une forge vous donnent l’accès à un bugtracker.


Toutefois, il vous est tout à fait possible de l’installer sur votre propre machine. Les plus connus sont : Mantis et Bugzilla.


Il peut être aussi utilisé pour gérer les différentes tâches du projet et par la même occasion, voir si le projet se déroule correctement.



V-D-5. Logiciels de gestion de projet

Si vous souhaitez une solution plus complète qu’un simple bugtracker, il est possible d’installer un logiciel de gestion de projet. Généralement, ceux-ci se composent d’un bugtracker, d’un wiki, d’un forum, d’une gestion des utilisateurs et de leurs droits sur les projets, d’une intégration avec le gestionnaire de versions et de feuilles de route. Bien entendu, il faudra vous renseigner afin de voir celui qui correspond le mieux à vos attentes.


Parmi ces logiciels, je citerais Redmine et Trac qui ont l’avantage d’être gratuits et de permettre de gérer un projet.


info Pour un premier projet, d’autant plus si vous êtes seul et que le projet n’est qu’un simple petit jeu, l’utilisation d’un bugtracker ou d’un logiciel de gestion de projet peut être un peu lourde. Toutefois, cela ne peut qu’être une bonne expérience de découverte. Pour les projets en groupe, le gestionnaire de projet permettra une meilleure communication et un meilleur suivi du projet. Cela permet aussi de garder un historique des discussions et choix effectués pour le projet.


VI. La plateforme

 

Le choix de la plateforme s’est diversifié ces dernières années. En effet, il est devenu facile de développer des applications pour des plateformes autres que le PC.


Dans tous les cas, vous allez effectuer votre développement sur votre PC, car l’écriture du code et la compilation s’effectuent sur une machine classique.


Il faut savoir que si vous souhaitez cibler une plateforme telle qu’une console ou un smartphone, cela ajoutera un peu de difficulté au développement. Il est donc préférable de commencer avec quelques connaissances en programmation.



VI-A. Les plateformes Apple

 

Tout d’abord, pour développer pour l’iPhone ou l’iPad, il vous faudra un Mac. Des tutoriels sont à votre disposition à cette adresse :http://ios.developpez.com/cours/.


Votre point de départ sera l’installation du SDK : http://a-renouard.developpez.com/tutoriels/ios/installation-developer-tools/.



VI-B. Un jeu sur Android

 

Android est le concurrent direct d’iOS. Vous pouvez trouver plus de tutoriels ici : http://android.developpez.com/cours/.



VI-C. PSP/PS3

 

Il est aussi possible de développer des jeux pour les plateformes portables de Sony en utilisant des kits non officiels tel que :http://sourceforge.net/projects/minpspw/.


Toutefois, il vous faudra un émulateur pour tester vos réalisations (ou encore, en débridant votre console).


Malheureusement, aucun kit officiel n’est disponible gratuitement pour ces consoles. Seule une bêta du kit est disponible :http://www.playstation.com/pss/developer/index_e.html.



VI-D. Wii/Nintendo DS/Nintendo 3DS

 

Il est plus simple d’aborder la Nintendo DS que la PSP.


Bien que le kit officiel ne soit pas disponible, il existe plus de ressources sur la question :http://krachik.developpez.com/tutoriels/pascal/install-config-fpc4nds/ ou http://ds-homebrew.over-blog.com/.


Il est aussi possible de faire des jeux sur GBA, comme expliqué dans ce tutoriel : http://gfx.developpez.com/prog-gba/.




VI-E. Xbox/Windows Phone

 

Microsoft est plus ouvert que ses concurrents pour le développement amateur de jeux. La première solution est d’utiliser XNA qui est une bibliothèque de jeux utilisable en C#.


La documentation officielle de Microsoft est très complète sur le sujet, comme vous pouvez en juger : http://msdn.microsoft.com/en-us/library/bb203937.aspx.


Il vous est aussi possible d’utiliser Kinect, le capteur de Microsoft, à l’aide du kit officiel : http://www.microsoft.com/en-us/kinectforwindows/develop/.


Avec ce même kit il est possible de créer des jeux pour Windows Phone.



VII. Un choix bien trop souvent oublié ?

 

Il reste une alternative que l’on écarte/oublie trop souvent. Celle de s’intégrer à un projet Open Source. En effet, l’avantage qu’a un projet Open Source, c’est qu’il est déjà assez avancé pour avoir une certitude de se finir (et d’être présentable). Ainsi, un artiste pourra soumettre ses dessins, un game designer ses idées et un programmeur pourra participer à un projet et rajouter des fonctionnalités intéressantes.



VII-A. Licence

 

Il est très important de lire les documents liés à la licence. En effet, chaque bibliothèque ou logiciel est soumis à des droits d’auteur. La licence permet de déterminer ce qu’il est possible de faire et ce qu’il ne l’est pas.


Les kits de développement (UDK, CryEngine SDK, etc.) possèdent une licence qui permet de réaliser des jeux gratuits, mais dès que vous souhaitez vendre ceux-ci, il faudra payer l’éditeur du kit pour avoir l’autorisation.


Certaines licences pour les bibliothèques peuvent vous obliger à garder votre code ouvert. D’autres n’acceptent pas d’être utilisées dans des applications commerciales.


En réalité, tout est possible en termes de licence. L’utilisation d’un logiciel ou d’une bibliothèque implique que vous acceptiez la licence associée. Donc, lisez bien les licences avant de distribuer votre jeu (le choix des logiciels/bibliothèques sont aussi à faire selon la licence).


En conclusion, si vous souhaitez revendre votre projet, ou même, rendre le code disponible librement, il est nécessaire de vérifier que les logiciels et licences des bibliothèques que vous utilisez au sein de votre projet vous laissent la liberté de faire ce que vous souhaitez. Si cela n’est pas le cas, le créateur de la bibliothèque originelle peut toujours demander la fermeture de votre projet.



VIII. Conclusion

N’hésitez pas à demander de l’aide ou des informations supplémentaires sur la rubrique Jeux et sur son forum. De plus, comme il est difficile d’être exhaustif sur les technologies permettant de créer des jeux, je ne peux que vous conseillez de jeter un coup d’œil à nos pages des outils et des bibliothèques.

Cour de services Web

Les services Web


Bienvenue à toutes et à tous ! :)

Voici un article concernant les services Web… Oui, j’ai bien dit s e r v i c e s W e b !

Vous ne savez pas ce que c’est ? Ou vous avez déjà entendu parler, mais vous n’avez jamais songé à en savoir plus à leur sujet ? 

Cet article est fait pour vous ! À la fin de la lecture complète, vous découvrirez comment de grandes entreprises comme eBay,PriceMinister, AmazonPixmania ou encore le terrible Google, se sont développées grâce aux services Web ! 

Ainsi, nous allons essayer dans cet article de décrire les aspects techniques, technologiques et fonctionnels des services Web. ;)