mvc open pdf in new tab : How to extract text from pdf image file SDK software project winforms wpf azure UWP c28-part892

303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 281 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
Il n'y a pas d'erreur. Attention c'est précis : il faut un seul & et deux =, et il faut bien mettre les parenthèses comme je l'ai fait 
Ca marche de la même manière pour les autres évènements. Par exemple : 
Code : C
if ((event.active.state & SDL_APPACTIVE) == SDL_APPACTIVE)
Tester l'état et le gain à la fois 
Dans la pratique, vous voudrez sûrement tester l'état et le gain à la fois. Vous pourrez ainsi savoir exactement ce qui s'est passé. 
Supposons que vous ayez un jeu qui fait faire beaucoup de calculs à l'ordinateur. Vous voulez que le jeu se mette en pause
automatiquement lorsque la fenêtre est réduite et qu'il se relance lorsque la fenêtre est réagrandie. Cela évite que le jeu ne continue
pendant que le joueur n'est plus dessus, et cela évite aussi au processeur de faire trop de calculs par la même occasion. 
Le code ci-dessous met en pause le jeu en activant par exemple un booléen pause à 1. Il remet en marche le jeu en désactivant le
booléen à 0. 
Code : C
if ((event.active.state & SDL_APPACTIVE) == SDL_APPACTIVE)
{
if (event.active.gain == 0) /* La fenêtre a été réduite en barre des tâches */
pause = 1;
else if (event.active.gain == 1) /* La fenêtre a été restaurée */
pause = 0;
}
Bien sûr ce code n'est pas complet. Ce sera à vous d'écrire le code pour tester l'état de la variable pause pour savoir s'il
faut effectuer les calculs ou pas.
Ce qui compte, c'est que vous compreniez l'idée générale 
Je vous laisse faire d'autres tests pour par exemple vérifier si la souris est à l'intérieur ou à l'extérieur de la fenêtre. Vous n'avez qu'à
faire bouger Zozor vers la droite lorsque la souris rentre dans la fenêtre et le faire bouger vers la gauche lorsqu'elle en sort 
Vous
comprenez un peu mieux maintenant pourquoi j'ai tenu à séparer le chapitre sur les évènements en 2. Il y avait vraiment beaucoup à
dire ! 
En gros, on peut résumer les 2 chapitres comme ceci : 
La partie 1/2 : elle portait sur le clavier et la souris. Ce sont des évènements que vous aurez souvent à gérer (pour ne pas dire
tout le temps). Ils sont faciles à manipuler.
La partie 2/2 : en revanche, dans ce chapitre nous avons vu les évènements liés au joystick et à la fenêtre qui sont un peu plus
rares. Ce sont des évènements un peu plus compliqués à manipuler : pour le joystick il faut faire pas mal de vérifications et
d'ouvertures préalables, et pour la fenêtre il faut tester plusieurs variables à la fois et savoir vérifier si une valeur se trouve dans
une combinaison de flags !
Personnellement je n'ai jamais créé de jeu utilisant le joystick à l'heure actuelle. 
Enfin bon, tout est faisable comme vous l'avez vu 
Le chapitre suivant sera un TP. Ce TP vous montrera la création d'un jeu complet (Mario Sokoban) de A à Z en SDL. 
Nous n'utiliserons pas le joystick ni les évènements de la fenêtre que nous avons étudiés dans ce chapitre. Toutefois, si vous désirez
ajouter la possibilité d'utiliser le joystick dans le jeu, n'hésitez pas ! Ca fera un bon entraînement ! 
TP : Mario Sokoban
How to extract text from pdf image file - Select, copy, paste PDF images in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support PDF Image Extraction from a Page, a Region on a Page, and PDF Document
extract color image from pdf in c#; online pdf image extractor
How to extract text from pdf image file - VB.NET PDF Image Extract Library: Select, copy, paste PDF images in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support PDF Image Extraction from a Page, a Region on a Page, and PDF Document
pdf image text extractor; extract jpeg from pdf
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 282 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
Attaquons maintenant notre premier TP utilisant la SDL 
Cette fois, je crois vous l'aurez compris, notre programme ne sera pas une console mais bel et bien une fenêtre 
Quel va être le sujet du TP aujourd'hui ? Il va s'agir d'un jeu de Sokoban ! 
Peut-être que ce nom ne vous dit rien, mais le jeu je suis à peu près certain que vous le connaissez, c'est un classique des casse-têtes. 
Voici une capture d'écran du programme que nous allons réaliser : 
Alors, ça vous dit quelque chose maintenant ? 
Cahier des charges du Sokoban
A propos du Sokoban
"Sokoban" est un terme japonais qui signifie "Magasinier". 
Il s'agit d'un casse-tête inventé dans les années 80 par Hiroyuki Imabayashi. Le jeu a remporté un concours de programmation à l'époque.
Le but du jeu 
Il est simple à comprendre : vous dirigez un personnage dans un labyrinthe. Il doit pousser des caisses pour les amener à des endroits
précis. Le joueur ne peut pas déplacer 2 caisses à la fois. 
C# PDF Text Extract Library: extract text content from PDF file in
PDF file. Ability to extract highlighted text out of PDF document. Supports text extraction from scanned PDF by using XDoc.PDF for .NET Pro. Image text extraction
extract pdf images; extract images from pdf files without using copy and paste
VB.NET PDF Text Extract Library: extract text content from PDF
Extract and get partial and all text content from PDF file. Extract highlighted text out of PDF document. Image text extraction control provides text extraction
how to extract pictures from pdf files; extract photos pdf
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 283 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
Si le principe se comprend vite et bien, cela ne veut pas dire pour autant que le jeu est toujours facile. Il est en effet possible de
réaliser des casse-têtes vraiment... prise de tête 
Pourquoi avoir choisi ce jeu ? 
Parce que c'est un jeu populaire, que je trouve intéressant et qu'on peut réaliser 
rien qu'avec ce qu'on a appris dans les cours de ce site. 
Alors bien sûr, ça demande de l'organisation. La difficulté n'est pas vraiment dans le codage mais dans l'organisation. Il va en effet falloir
découper notre programme en plusieurs fichiers .c intelligement, essayer de trouver les bonnes fonctions à créer etc. 
C'est aussi pour cette raison que j'ai décidé cette fois de ne pas construire le TP comme les précédents : je ne vais pas vous donner des
indices et puis une correction à la fin. Au contraire : 
je vais vous montrer comment je réalise tout le projet de A à Z. 
Et si je veux m'entraîner tout seul ?
Pas de problème ! Allez-y lancez-vous, c'est même très bien ! 
Il vous faudra certainement un peu de temps : personnellement ça m'a pris une bonne petite journée, et encore c'est parce que j'ai un
peu l'habitude de programmer et que j'évite certains pièges courants. Ca ne m'a pas empêché de me prendre la tête à 2 ou 3 reprises
quand même 
Sachez qu'un tel jeu peut être codé de nombreuses façons différentes. Je vais vous montrer ma façon de faire : ce n'est pas la meilleure,
mais ce n'est pas la plus mauvaise non plus 
Le TP se terminera par une série de suggestions d'améliorations, et je vous proposerai de télécharger le code source complet bien
entendu. 
Encore une fois : je vous conseille d'essayer de vous y lancer par vous-mêmes. Passez-y 2 ou 3 jours et faites de votre mieux. Il est
important que vous pratiquiez. 
Le cahier des charges
Le cahier des charges, c'est un document dans lequel on écrit tout ce que le programme doit savoir faire. 
En l'occurence, que veut-on que notre jeu soit capable de faire ? C'est le moment de se décider ! 
Voici ce que je propose : 
Le joueur doit pouvoir se déplacer dans un labyrinthe et pousser des caisses.
Il ne peut pas pousser 2 caisses à la fois.
Une partie est considérée comme gagnée lorsque toutes les caisses sont sur des objectifs
Les niveaux de jeu seront enregistrés dans un fichier (par exemple "niveaux.lvl").
Un éditeur sera intégré au programme pour que n'importe qui puisse créer ses propres niveaux (bah oui tant qu'on y est hein 
)
Voilà ça fait déjà pas mal je crois 
Il y a des choses que notre programme ne saura pas faire, ça aussi il faut le dire : 
C# PDF insert image Library: insert images into PDF in C#.net, ASP
Create high resolution PDF file without image quality losing in ASP.NET application. Add multiple images to multipage PDF document in .NET WinForms.
extract pictures pdf; extract image from pdf acrobat
VB.NET PDF File Compress Library: Compress reduce PDF size in vb.
Reduce image resources: Since images are usually or large size, images size reducing can help to reduce PDF file size effectively.
extract image from pdf online; pdf image extractor online
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 284 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
Notre programme ne pourra gérer qu'un seul niveau à la fois. Si vous voulez coder une "aventure" avec une suite de niveaux, vous
n'aurez qu'à le faire vous-mêmes à la fin de ce tp 
Il n'y aura pas de gestion du temps écoulé (on sait pas faire ça encore) ni du score.
En fait, avec tout ce qu'on veut faire déjà (notamment l'éditeur de niveaux), y'en a pour un petit moment. 
Je vous indiquerai à la fin du TP une liste d'idées pour améliorer le programme. Et ce ne seront pas des paroles en l'air,
car ce sont des idées que j'aurai moi-même implémentées dans une version plus complète du programme que je vous
proposerai de télécharger. 
En revanche, je ne vous donnerai pas les codes sources de la version "complète" pour vous forcer à travailler (faut pas abuser 
)
Récupérer les sprites du jeu
Dans la plupart des jeux 2D (que ce soit des jeux de plateforme ou de casse-tête comme ici), on appelle les images qui composent le
jeu des sprites. 
Dans notre cas, j'ai décidé qu'on créerait un Sokoban mettant en scène Mario (d'où le nom "Mario Sokoban"). Comme Mario est un
personnage populaire dans le monde de la 2D, on n'aura pas trop de mal à trouver des sprites de Mario. 
Il faudra aussi trouver des sprites pour les murs de briques, les caisses, les objectifs etc. 
Si vous faites une recherche sur Google de "sprites", vous trouverez de nombreuses réponses. En effet, il y a pas mal de sites qui
proposent de télécharger des sprites de jeux 2D auxquels vous avez sûrement joué par le passé 
Personnellement, je me suis servi sur : http://www.panelmonkey.org/ 
Vous en trouverez aussi sur : http://www.videogamesprites.net/ 
... et bien entendu Google vous en donnera d'autres 
Voici les sprites que j'ai récupérés. J'ai fait un peu de retouches sur certains pour qu'ils soient à la bonne dimension : 
Sprite
Description
Un mur
Une caisse
Une caisse placée sur un objectif. 
J'ai juste légèrement "rougi" la caisse sous Photoshop.
Un objectif (où l'on doit mettre une caisse).
Le joueur (Mario) orienté vers le bas
Mario vers la droite
Mario vers la gauche
Mario vers le haut
Télécharger toutes les images
Voilà, avec ça on a tout ce qu'il faut 
Comme vous le voyez, les images ont parfois eu besoin de légères retouches. Ce ne sont pas des retouches difficiles à faire (même moi
qui suis un gros nul sous Photoshop je m'en suis sorti, alors pourquoi pas vous 
Notez que j'aurais très bien pu n'utiliser qu'un sprite pour le joueur. J'aurais pu faire en sorte que Mario soit toujours
VB.NET PDF insert image library: insert images into PDF in vb.net
VB.NET code to add an image to the inputFilePath As String = Program.RootPath + "\\" 1.pdf" Dim doc New PDFDocument(inputFilePath) ' Get a text manager from
how to extract images from pdf in acrobat; pdf extract images
C# PDF File Split Library: Split, seperate PDF into multiple files
Application. Best and professional adobe PDF file splitting SDK for Visual Studio .NET. outputOps); Divide PDF File into Two Using C#.
how to extract images from pdf file; extract image from pdf java
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 285 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
orienté vers le bas, mais le fait de pouvoir le diriger dans les 4 directions ajoute un peu plus de réalisme je trouve. Ca ne fera
qu'un petit défi de plus à relever 
Ah, et j'ai aussi fait une petite image qui pourra servir de menu d'accueil au lancement du programme : 
Cette image se trouve dans le pack d'images que je vous ai fait télécharger plus haut. 
Important : vous noterez que ces images sont dans différents formats. Il y a des GIF, des PNG et des JPEG. Nous allons donc avoir besoin
de la librairie SDL_Image. 
Pensez à 
configurer votre projet pour qu'il gère la SDL et SDL_Image. Si vous avez oublié comment faire, revoyez les chapitres
précédents. 
Si vous ne configurez pas votre projet correctement, on vous dira que les fonctions que vous utilisez (comme IMG_Load) n'existent pas !
Le main et les constantes
A chaque fois qu'on commence un projet assez important, il est nécessaire de bien s'organiser dès le départ. 
En général, je commence par me créer un fichier de constantes constantes.h ainsi qu'un fichier main.c qui contiendra la fonction
main (et uniquement la fonction main). Ce n'est pas une règle : c'est juste ma façon de fonctionner. Chacun a sa propre façon de faire. 
Les différents fichiers du projet
Je propose de créer dès à présent tous les fichiers du projet (même s'ils restent vides au départ). 
Voici les fichiers que je crée : 
constantes.h : les définitions de constantes globales à tout le programme
main.c : le fichier qui contient la fonction main (fonction principale du programme).
jeu.c : fonctions gérant une partie de Sokoban
jeu.h : prototypes des fonctions de jeu.c
editeur.c : fonctions gérant l'éditeur de niveaux
editeur.h : prototypes.
fichiers.c : fonctions gérant la lecture et l'écriture de fichiers de niveaux (niveaux.lvl par exemple).
fichiers.h : prototypes.
Allons-y donc, on va commencer par créer le fichier des constantes. 
C# PDF File Compress Library: Compress reduce PDF size in C#.net
Reduce image resources: Since images are usually or large size, images size reducing can help to reduce PDF file size effectively.
pdf extract images; extract jpeg from pdf
VB.NET PDF File Merge Library: Merge, append PDF files in vb.net
When you have downloaded the RasterEdge Image SDK for also provided you with detailed PDF processing demo Imaging.Demo directory with the file name RasterEdge
pdf image extractor; extract image from pdf file
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 286 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
Les constantes : constantes.h
Voici le contenu de mon fichier de constantes : 
Code : C
/*
constantes.h
------------
Par mateo21, pour Le Site du Zér0 (www.siteduzero.com)
Rôle : définit des constantes communes à tout le programme (taille de la fenêtre...)
*/
#ifndef DEF_CONSTANTES
#define DEF_CONSTANTES
#define TAILLE_BLOC         34 // Taille d'un bloc (carré) en pixels
#define NB_BLOCS_LARGEUR    12
#define NB_BLOCS_HAUTEUR    12
#define LARGEUR_FENETRE     TAILLE_BLOC * NB_BLOCS_LARGEUR
#define HAUTEUR_FENETRE     TAILLE_BLOC * NB_BLOCS_HAUTEUR
enum {HAUT, BAS, GAUCHE, DROITE};
enum {VIDE, MUR, CAISSE, OBJECTIF, MARIO, CAISSE_OK};
#endif
Vous noterez plusieurs choses : 
Le fichier commence par un commentaire d'en-tête. Je recommande de mettre ce type de commentaire au début de chacun de
vos fichiers (que ce soient des .h ou des .c). Généralement, un commentaire d'en-tête contient :
Le nom du fichier (constantes.h)
L'auteur (mateo21)
Le rôle du fichier (à quoi servent les fonctions à l'intérieur)
Je ne l'ai pas fait là, mais on met aussi généralement la date de création et la date de dernière modification. Ca permet
de s'y retrouver, surtout dans les gros projets à plusieurs.
Le fichier est protégé contre les inclusions infinies. Il utilise la technique que l'on a apprise à la fin du chapitre sur le
préprocesseur dans la partie II. Ici cette protection ne sert à rien, mais j'ai pris l'habitude de faire ça pour chacun de mes fichiers
.h sans exception.
Enfin, le coeur du fichier. Vous avez une série de defines. J'indique la taille d'un petit bloc en pixels (tous mes sprites sont des
carrés de 34px). J'indique que ma fenêtre comportera 12 x 12 blocs de largeur. Je calcule comme ça les dimensions de la fenêtre
par une simple multiplication des constantes. Ce que je fais là n'est pas obligatoire, mais ça un énorme avantage : si plus tard je
veux changer la taille du jeu, je n'aurai qu'à éditer ce fichier (et à recompiler) et tout mon code source s'adaptera en
conséquence.
Enfin, j'ai défini d'autres constantes via des énumérations anonymes. C'est légèrement différent de ce qu'on a appris dans le
chapitre sur les types de variables personnalisés. Ici, je ne crée pas un type personnalisé, je définis juste des constantes. 
Mais alors c'est exactement comme des defines non ?
Oui, à une différence près : c'est l'ordinateur qui attribue automatiquement un nombre à chacune des valeurs (en commençant
par 0). Ainsi, on a HAUT = 0, BAS = 1, GAUCHE = 2 etc. Cela permettra de rendre notre code source 
beaucoup plus clair par la
suite, vous verrez !
En résumé, j'utilise : 
Des defines lorsque je veux 
attribuer une valeur précise à une constante (par exemple "34 pixels").
Des énumérations lorsque 
la valeur attribuée à une constante ne m'importe pas. Ici, je m'en fous que HAUT vale 0 (ça pourrait
aussi bien valoir 150 ça ne changerait rien), tout ce qui compte pour moi c'est que cette constante ait une valeur différente de
BAS, GAUCHE et DROITE 
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 287 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
Inclure les définitions de constantes 
Le principe, c'est que ce fichier de constantes sera inclus dans chacun de mes fichiers .c. 
Ainsi, partout dans mon code je pourrai utiliser les constantes que je viens de définir. 
Il faudra donc taper la ligne suivante 
au début de chacun des fichiers .c : 
Code : C
#include "constantes.h" 
Le main : main.c
La fonction main est extrêmement simple, je peux même me permettre de vous la donner d'un coup comme ça. En effet, elle n'est pas
plus difficile que ce qu'on a appris dans les chapitres précédents, donc si vous avez suivi récemment ça ne vous posera aucun problème
de compréhension : 
Code : C
/*
main.c
------
Par mateo21, pour Le Site du Zér0 (www.siteduzero.com)
Rôle : menu du jeu. Permet de choisir entre l'éditeur et le jeu lui-même.
*/
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include "constantes.h"
#include "jeu.h"
#include "editeur.h"
int main(int argc, char *argv[])
{
SDL_Surface *ecran = NULL, *menu = NULL;
SDL_Rect positionMenu;
SDL_Event event;
int continuer = 1;
SDL_Init(SDL_INIT_VIDEO);
SDL_WM_SetIcon(IMG_Load("caisse.jpg"), NULL)// L'icône doit être chargée avant
SDL_SetVideoMode
ecran = SDL_SetVideoMode(LARGEUR_FENETRE, HAUTEUR_FENETRE, 32, SDL_HWSURFACE |
SDL_DOUBLEBUF);
SDL_WM_SetCaption("Mario Sokoban", NULL);
menu = IMG_Load("menu.jpg");
positionMenu.x = 0;
positionMenu.y = 0;
while (continuer)
{
SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_QUIT:
continuer = 0;
break;
case SDL_KEYDOWN:
switch(event.key.keysym.sym)
{
case SDLK_ESCAPE: // Veut arrêter le jeu
continuer = 0;
break;
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 288 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
case SDLK_KP1: // Demande à jouer
jouer(ecran);
break;
case SDLK_KP2: // Demande l'éditeur de niveaux
editeur(ecran);
break;
}
break;
}
// Effacement de l'écran
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 000));
SDL_BlitSurface(menu, NULL, ecran, &positionMenu);
SDL_Flip(ecran);
}
SDL_FreeSurface(menu);
SDL_Quit();
return EXIT_SUCCESS;
}
La fonction main se charge d'effectuer les initialisations de la SDL, de donner un titre à la fenêtre ainsi qu'une icône. A la fin de la
fonction, SDL_Quit() est appelé pour arrêter la SDL proprement. 
La fonction affiche un menu. Le menu est chargé en utilisant la fonction IMG_Load de SDL_Image : 
Code : C
menu = IMG_Load("menu.jpg");
Vous remarquerez que pour donner les dimensions de la fenêtre j'utilise les constantes LARGEUR_FENETRE et
HAUTEUR_FENETRE qu'on a définies dans constantes.h
La boucle des évènements 
La boucle infinie gère les évènements suivants : 
SDL_QUIT : si on demande à fermer le programme (clic sur la croix en haut à droite de la fenêtre), alors on passe le booléen
continuer à 0, et la boucle s'arrêtera. Bref, classique.
Appui sur la touche Echap : arrêt du programme (comme SDL_QUIT)
Appui sur la touche 1 du pavé numérique : lancement du jeu (appel de la fonction jouer)
Appui sur la touche 2 du pavé numérique : lancement de l'éditeur (appel de la fonction editeur)
Comme vous le voyez, c'est vraiment très simple. Si on appuie sur 1, le jeu est lancé. Une fois que le jeu est terminé, la fonction jouer
s'arrête et on retourne dans le main dans lequel on refait un tour de boucle. Le main boucle à l'infini tant qu'on ne demande pas à
arrêter le jeu. 
Grâce à cette petite organisation très simple, on peut donc gérer le menu dans le main, et laisser des fonctions spéciales (comme jouer,
ou editeur) gérer les différentes parties du programme.
Le jeu
Attaquons maintenant le gros du sujet : la fonction jouer ! 
Cette fonction est la plus importante du programme, aussi soyez attentifs car 
c'est vraiment là qu'il faut comprendre. Vous verrez après
que créer l'éditeur de niveaux n'est pas si compliqué en fait 
Les paramètres envoyés à la fonction
La fonction jouer a besoin d'un paramètre : la surface ecran. En effet, la fenêtre a été ouverte dans le main, et pour que la fonction
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 289 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
jouer puisse dessiner dedans il faut qu'elle récupère le pointeur sur ecran ! 
Si vous regardez le main à nouveau, vous voyez qu'on appelle jouer en lui envoyant ecran : 
Code : C
jouer(ecran);
Le prototype de la fonction, que vous pouvez mettre dans jeu.h, est donc le suivant : 
Code : C
void jouer(SDL_Surface* ecran);
La fonction ne renvoie aucune valeur (d'où le "void"), mais on pourrait en renvoyer une si on voulait. On pourrait par
exemple renvoyer un booléen pour dire si oui ou non on a gagné.
Les déclarations de variables
Cette fonction va avoir besoin de nombreuses variables. 
Je n'ai pas pensé à toutes les variables dont j'ai eu besoin du premier coup. Il y en a donc certaines que j'ai rajoutées par la suite. 
Variables de type défini par la SDL 
Voici pour commencer toutes les variables de types définis par la SDL dont j'ai besoin : 
Code : C
SDL_Surface *mario[4] = {NULL}; // 4 surfaces pour chacune des directions de mario
SDL_Surface *mur = NULL, *caisse = NULL, *caisseOK = NULL, *objectif = NULL, *marioActuel =
NULL;
SDL_Rect position, positionJoueur;
SDL_Event event;
J'ai créé un tableau de SDL_Surface appelé mario. C'est un tableau de 4 cases qui stockera Mario dans chacune des directions (un vers le
bas, un autre vers la gauche, vers le haut et vers la droite). 
Il y a ensuite plusieurs surfaces correspondant à chacun des sprites que je vous ai faits télécharger plus haut : mur, caisse, caisseOK (une
caisse sur un objectif) et objectif. 
A quoi sert marioActuel ?
C'est un pointeur vers une surface. Il pointe sur la surface correspondant au Mario orienté dans la direction actuelle. C'est donc
marioActuel qu'on blittera à l'écran. Si vous regardez tout en bas de la fonction jouer, vous verrez justement : 
Code : C
SDL_BlitSurface(marioActuel, NULL, ecran, &position);
On ne blitte donc pas un élément du tableau mario, mais le pointeur marioActuel. 
Ainsi, en blittant marioActuel, on blitte soit le mario vers le bas, soit vers le haut etc. Le pointeur marioActuel pointe vers une des cases
du tableau mario. 
Quoi d'autre à part ça ? 
Une variable position de type SDL_Rect dont on se servira pour définir la position des éléments à blitter (on s'en servira pour tous les
sprites, c'est pas la peine de créer un SDL_Rect pour chaque surface !). 
positionJoueur est en revanche un peu différent : il indique à quelle case sur la carte se trouve se trouve actuellement le joueur. 
Enfin, la variable event traitera les évènements, là il n'y a rien de particulièrement nouveau. 
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 290 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
Variables plus "classiques" 
J'ai aussi besoin de me créer des variables un peu plus classiques de type int (entier). 
Code : C
int continuer = 1, objectifsRestants = 0, i = 0, j = 0;
int carte[NB_BLOCS_LARGEUR][NB_BLOCS_HAUTEUR] = {0};
continuer et objectifsRestants sont des booléens. 
i et j sont des petites variables qui vont me permettre de parcourir le tableau. 
Quel tableau ? 
Le tableau carte défini juste en-dessous ! 
C'est là que les choses deviennent vraiment intéressantes. J'ai en effet créé un tableau à 2 dimensions. Je ne vous ai pas parlé de ce
type de tableaux auparavant (pas eu l'occasion d'en parler), mais c'est justement le moment idéal pour vous apprendre ce que c'est. Ce
n'est pas bien compliqué vous allez voir. 
Regardez la définition de plus près : 
Code : C
int carte[NB_BLOCS_LARGEUR][NB_BLOCS_HAUTEUR] = {0};
En fait, il s'agit d'un tableau d'int (entiers) qui a la particularité d'avoir 2 paires de crochets [ ]. 
Si vous vous souvenez bien de constantes.h, vous savez que NB_BLOCS_LARGEUR et NB_BLOCS_HAUTEUR sont des constantes qui
valent toutes les deux 12. 
Ce tableau sera donc à la compilation créé comme ceci : 
Code : C
int carte[12][12] = {0};
Mais qu'est-ce que ça veut dire ?
Ca veut dire que pour chaque "case" de carte, il y a 12 sous-cases. 
Il y aura donc les variables suivantes : 
Code : Autre
carte[0][0] 
carte[0][1] 
carte[0][2] 
carte[0][3] 
carte[0][4] 
carte[0][5] 
carte[0][6] 
carte[0][7] 
carte[0][8] 
carte[0][9] 
carte[0][10] 
carte[0][11] 
carte[1][0] 
carte[1][2] 
carte[1][3] 
carte[1][4] 
... 
Documents you may be interested
Documents you may be interested