Leaderboard
Popular Content
Showing content with the highest reputation on 16/03/2014 in Messages
-
Bonjour à tous, et bienvenue dans ce premier cours dédié au C. Dans ce cours, nous allons voir pourquoi il est important de comprendre et de programmer en C, puis nous passeront à une partie plus pratique en regardant les outils qui nous sont proposés pour cela. I- Pourquoi apprendre le C? Le C est un langage le plus bas niveau qui existe (après l'ASM bien entendu!), il permet donc de mieux comprendre le fonctionnement de sa machine. Bas niveau? Cela signifie qu'il est simple? Bas niveau ne corresponds pas au niveau de simplicité du C. Il s'agit en faite d'un niveau par rapport à la machine. Plus un langage est bas niveau, plus il sera proche du fonctionnement de la machine, donc difficile. Plus il sera bas niveau, plus il nous permettera de comprendre le fonctionnement de la machine. Nous allons donc avoir plusieurs cours, en ayant pour but de comprendre comment fonctionne notre machine. Pour cela, nous allons nous orienter vers une programmation impérative que nous permet le C, en nous forçant à n'utiliser QUE des appels system (Donc pas de libc! (à titre informatif: c'est la méthode Epitech)). Nous seront donc obligés de re-créer nos propres outils de travail! Vous l'aurez compris: les prochains cours ont pour but de vous apprendre à utiliser de façon extrême le C. Sans utiliser les outils déjà mis à disposition (libs, etc...), pour vous apprendre à comprendre comment ceux-ci fonctionnent! II- Les outils pour programmer en C Le tout premier outils que je vous conseille, c'est d'utiliser LINUX. Pourquoi Linux? Eh bien c'est très simple: Linux propose énormément d'outils de débugage, et beaucoup d'outils de programmation (Make, Valgrind, GDB, Emacs etc...). Ainsi qu'une documentation détaillée des appels system et de la libc (grâce notamment à la commande "man"). Enfin, une protection plus rapprochée du système qui vous évitera de mauvaises suprises lorsque vous jouerez avec la mémoire (je conseille fortement d'utiliser les limitations de ram par users pour éviter les forkbombs et autres malloc infinis). Je vous conseille donc fortement d'utiliser Linux. De mon côté, j'ai opté pour un Debian sur lequel j'ai installé une interface graphique et tout les outils nécéssaires! Je conseille fortement Mint qui est basé sur Debian. Vous pouvez utiliser une machine virtuelle pour faire tourner votre Linux si vous ne souhaitez pas le rajouter au Dump! Ensuite, les outils de base: Nous allons programmer en utilisant 5 outils très importants: Emacs: C'est l'éditeur qui va nous permettre d'éditer nos codes en C. Il est très pratique, mais il faut connaitre les syntaxes et les racourçis qu'il propose! GDB: C'est un excellent débugueur qui permet de fixer des points d'arrêt sur son programme, pour réussir à trouver les problèmes de notre programme! Valgrind: C'est un de mes outils préférés: Il permet de savoir si vous avez bien free tout vos malloc (et donc, bien vidé toute la mémoire) et de repérer les segfaults (à notter: il faut rajouter -g3 aux flags de compilation pour que celui-ci marche pleinement, n'oubliez surtout pas de supprimer -g3 de vos makefiles à la version finale. -g3 rends l'exécutable très lourd). Make: L'outil Make est l'un des plus importants: il nous permettra de créer un "Makefile" qui va nous permettre, grâce à la commande Make, de compiler, et nétoyer notre programme facilement. htop ou top: C'est un invité de commandes pour unix, qui va nous permettre de voir l'avancement et l'utilisation de notre RAM/CPU. Voilà, je vous es donc fait une courte introduction sur tout ce qui es des outils et de la programmation en C! Rendez-vous au prochain cours! Cours écrit par AlexMog. Contact: alexmog [at] live [point] fr4 points
-
Bienvenue pour ce tout premier cours sur le C: L'introduction au C. Dans cette première partie, nous allons voir de quoi se compose un programme "de base" en C. I- Avant propos. J'aimerais vous informer au niveau des cours qui vont suivre: Le but étant de travailler en étant le plus près possible du fonctionnement de la machine, les seules fonctions autorisées (et vous le verrez pendant les exercices) sont les fonctions System (Googlisez tout ça!). Donc merci de jouer le jeu jusqu'au bout, et de ne pas utiliser de fonctions "interdites" . II- Notre premier programme. Nous allons créer notre tout premier programme. Le but de ce programme est d'afficher une lettre. Avant tout: Un programme en C est composé de fonctions, et plus particulièrement de la fonction "main" cette fonction est la fonction principale appelée lors du lancement de notre programme. Commençons donc par créer un fichier test.c qui contient notre main: int main() { } Pour compiler notre programme, nous allons utiliser GCC. Pour des raisons personnelles et utilitaires, je code sous linux, je vais donc vous proposer de suivre tout mes cours sous linux. Vous aurez donc des informations sur la compilation en ligne de commande. Pour compiler notre programme grâce à GCC, il faut utiliser la commande suivante: gcc test.c -o test Un fichier "test" viens d'être créé. Vous pouvez le lancer: ./test Oh! Nous avons compiler notre premier programme en C... Qui ne fait rien (pour l'instant!). Revenons donc à notre but principal: Créer un programme qui affiche une lettre. Nous allons donc avoir besoin d'une fonction système d'affichage qui s'appelle "Write" (Lisez le man de Write pour avoir plus d'informations sur cette fonction!). Créons donc une fonction "my_putchar" qui prendra en argument une variable de type char (caractère) et qui aura pour but de l'afficher: void my_putchar(char c) { write(1, &c, 1); } int main() { } Voila! Nous avons notre fonction d'affichage! A present, affichons notre premier caractère! void my_putchar(char c) { write(1, &c, 1); } int main() { my_putchar('A'); } Compilons tout ça... Oh! Lorsqu'on lance notre programme, il affiche un A ! Un autre exemple: HelloWorld. Le but de ce programme est d'afficher HelloWorld. Reprenons la base précédente: void my_putchar(char c) { write(1, &c, 1); } int main() { } Et affichons notre "HelloWorld": void my_putchar(char c) { write(1, &c, 1); } int main() { my_putchar('H'); my_putchar('e'); my_putchar('l'); my_putchar('l'); my_putchar('o'); my_putchar('W'); my_putchar('o'); my_putchar('r'); my_putchar('l'); my_putchar('d'); } On compile tout ça, et on obtient un joli "HelloWorld"! III - Les variables de type char[] Nous allons à présent stocker notre chaine de caractères "HelloWorld" dans un tableau de Char, puis nous allons l'afficher: void my_putchar(char c) { write(1, &c, 1); } int main() { char mon_mot[] = "HelloWorld"; my_putchar(mon_mot[0]); my_putchar(mon_mot[1]); my_putchar(mon_mot[2]); my_putchar(mon_mot[3]); my_putchar(mon_mot[4]); my_putchar(mon_mot[5]); my_putchar(mon_mot[6]); my_putchar(mon_mot[7]); my_putchar(mon_mot[8]); my_putchar(mon_mot[9]); } En compilant nous obtenons exactement le même résultat de précédemment. IV - Les includes. Avant de commencer avec les includes, sachez que tout ce qui commence par un # sera une commande interprétée par le compilateur. Les includes permettent d'inclure (logique) le contenu d'un fichier. Il est utilisé pour inclure les .h (headers) dans les fichiers. Par exemple, la fonction "write" est disponible car le système nous la propose, néanmoins, elle n'est pas déclarée (ce qui provoque un "warning" dans votre code) pour remédier au warning, il suffira d'inclure le header unistd.h. comme ceci: #include <unistd.h> Les includes system se font avec des <> alors que les includes locales se font avec des "". Ainsi ma fonction est déclarée, le compilateur sait qu'elle existe, je peux donc l'utiliser sans soucis! V- Allons un peux plus loin. A present, affichons notre HelloWorld avec une boucle (je vous laisse la joie de découvrir le fonctionnement de la boucle en cherchant sur le net): void my_putchar(char c) { write(1, &c, 1); } int main() { char mon_mot[] = "HelloWorld"; int i = 0; while(mon_mot[i] != '\0') { my_putchar(mon_mot[i]); i = i + 1; } } Voila! Nous venons de réafficher "HelloWorld". Pourquoi je vérifie la valeur de "mon_mot" dans le while? C'est très simple. Ce qui définit la fin d'une chaine de caractères, c'est le caractère '\0' qui est égal à 0. Or, si un while reçoit 0 en paramètre, il s'arrête. Le while va donc continuer, jusqu'à la fin de la chaine! Voilà, je ne vous en dirrais pas plus sur ce cours, le but étant de vous donner envie d'en savoir plus par vous même. A bientôt pour le prochain cours! Cours écrit par AlexMog. Contact: alexmog [at] live [point] fr3 points
-
Coucou, Voici une astuce toute simple pour les freenautes, qui va vous permettre de regarder les chaînes TV de votre freebox sur votre PC grâce au lecteur multimédia VLC Media Player. Pratique si vous n'avez pas de télé ou si celle-ci est occupée par une autre personne de votre famille. Pour cela, ouvrez VLC (à jour) et cliquez sur "Liste de lecture" dans le menu "Vue" : Dans le menu à gauche, déroulez "Internet" puis cliquez sur "Freebox TV" : La liste des chaînes de votre Freebox TV apparait. Il ne vous reste plus qu'à double cliquer sur la chaîne que vous souhaitez regarder pour la lancer : Autorisez l'accès dans votre pare feu lorsque ceci vous est demandé : La chaîne TV s'affiche ensuite : Vous pouvez changer de chaîne à l'aide des flèches gauche et droite, mettre en pause une chaîne et reprendre le visionnage plus tard à partir du moment où vous avez arrêté.. Note : TF1, M6 et W9 et les autres chaînes de la firme M6 ne sont malheuresement pas disponibles sur PC. Téléchargement VLC : http://www.videolan.org/vlc/ Source : 6ma.fr Cordialement, Soon2 points
-
Pour se faire il vous faudra : - Un ordinateur sous Windows - Skype, pour plus de facilités Tout d'abord connectez-vous normalement avec un compte sur Skype, celui que vous voulez. Ensuite, fait Windows + R Dans la fenêtre qui apparaît écrivez : C:\Program Files\Skype\Phone\Skype.exe /secondary ou C:\Program Files (x86)\Skype\Phone\Skype.exe /secondary Cela dépend de où vous avez installé Skype Une nouvelle fenêtre Skype se lance, maintenant connectez-vous avec votre deuxième compte2 points
-
Bonjour ! J'ai demandé de au créateur de Kore de reprendre la présentation qu'il a écrit pour vous présenter ce langage sur Melinyel donc voilà : Qu'est-ce que Kore ? Kore est un langage de programmation orienté objet dont le compilateur est en cours de développement. Le compilateur génère des exécutables x86. L'objectif défini du projet est d'une part d'aboutir sur un langage générique qui soit accessible, concis, et performant, et d'autre part, de faciliter la création de jeux vidéo via sa librairie standard. Par ces objectifs, il faut comprendre qu'il s'agit de synthétiser ce qui peut l'être, de clarifier les syntaxes, et de disposer de base de librairies multimédia basées sur DirectX, OpenGL, etc. Pourquoi un énième langage ? La création d'un langage de programmation performant est sans doute l'une des plus intéressantes épreuves que l'on puisse imaginer pour un développeur. Bien que l'exercice en tant que tel soit plus un travail au long cours qu'un obstacle, il n'en reste pas moins extrêmement enrichissant, cela mettant en œuvre une multitude de techniques et de connaissances. Bien sûr, même si l'intérêt personnel est nécessairement (et heureusement) là, ce n'est pas la seule raison à la création de Kore. Lorsque j'ai commencé à développer des jeux il y a plus d'une dizaine d'années de cela, j'ai entrepris l'apprentissage du Dark Basic, un langage dont la simplicité n'a d'équivalent que son manque d'optimisations. Au fil des années, j'ai fini par être amené à développer des dizaines de plugins pour le langage dans le but de l'améliorer. Mais au final, le résultat restait décevant, et c'est bien logique : le cœur du langage reste assez lent, chose que l'on ne peut malheureusement pas contrer en tant qu'utilisateur. Depuis, même si l'envie ne manque pas, le fait de développer avec ce langage est assez rebutant. Parallèlement à cela, je n'ai rencontré à ce jour aucune solution gratuite et ouverte permettant de développer des jeux performants tout en gardant la simplicité de mise en oeuvre d'un Dark Basic. La plupart des outils qui disposent d'une telle facilité sont le plus souvent payant ou fermés, et les langages tels que le C++, s'ils amènent les possibilités, ils impliquent également un développement dont les contraintes nuisent au plaisir de développer. J'ai donc commencé à créer mon propre langage sur ce modèle que j'avais apprécié du Dark Basic, à savoir simplicité du langage et mise en oeuvre immédiate. Performances ? Les exécutables générés à l'heure actuelle par Kore ont des performances intéressantes : dans les tests que j'ai pu effectuer (boucles sur des tests, calculs, etc), il en ressort que ceux-ci présentent une rapidité équivalente à celle du C dans la plupart des cas (compilation GCC/Visual Studio, optimisations off). Cette rapidité est liée au fait que le compilateur génère directement du code Assembleur (la source .asm est générée automatiquement lors de la compilation, en même temps que l'exécutable), et utilise un design similaire et compatible à celui du C. Pourquoi le nom de Kore ? Par le passé, Kore fut connu sous les noms de Jade, ou encore JadeBasic. Avec l'avancée du développement du compilateur (débuté en 2006), le potentiel du langage fit qu'il devint intéressant de chercher à se détacher d'un nom trop commun, et qui fut récupéré par d'autres outils au fil des années. Le nom "Kore" provient initialement d'une transformation du terme "C ore" (minerai de C), lié à la compatibilité du langage avec le C. Le choix du nom fut acté en raison des multiples sens dont il était porteur : la symbolique du noyau, forte pour un langage de programmation qui forme le coeur de tout logiciel. La signification du nom "Kore" qui lu en hiragana signifie "cela", "this" intéressante pour un langage objet. Ou encore le lien avec Perséphone, également appelée Kore, qui est la déesse grecque fille de Déméter. Kore étant en effet un langage intégrant une mécanique forte d'application de la loi de Déméter. Quelles sont les caractéristiques du langage ? Le langage suit trois principes régissant sa syntaxe : - ne pas avoir à écrire ce qui n'est pas utile à la lecture, si le compilateur est capable de le déduire - disposer d'une écriture concise mais claire, de mots-clés rapides à écrire et faciles à mémoriser - le langage ne doit pas limiter l'utilisateur dans l'accès bas niveau Syntaxe : Les sources d'inspiration du langage sont le C, le C#, Ruby, Eiffel, et Dark Basic. Kore emprunte différentes fonctionnalités à ceux-ci, notamment le principe d'accès uniforme. Typage : Le typage des variables est statique : une fois une variable typée, celle-ci ne peut plus changer de type. Le typage peut être explicitement realisé, mais également inféré par le compilateur : celui-ci déduit le type d'une variable à partir de l'expression qui lui est assignée. L'intérêt de cela est de permettre une plus grande souplesse d'écriture sans avoir à préciser constamment les types. Cela correspond typiquement à l'un des principes de Kore : le compilateur peut déduire le type, et le préciser n'est pas indispensable à la compréhension. do // Boucle infinie. ... loop while conditionVraie ... end repeat ... until conditionVraie Boucles : Les boucles implémentées sont plutôt classiques : do // Boucle infinie. ... loop while conditionVraie ... end repeat ... until conditionVraie Conditions : Là encore du classique : if conditionVraie then ... if conditionVraie ... end if conditionVraie ... else ... end if conditionVraie ... elsif ... else ... end Modules : Les programmes créés en Kore sont découpés sous forme de modules. C'est la structure hiérarchiquement de plus haut niveau. Un module peut contenir des classes, des fonctions et du code. Le code contenu au sein d'un module permet d'exécuter un code d'initialisation au chargement de celui-ci. Par défaut, le code écrit l'est dans le module "main" qui est exécuté au lancement d'une application. module nomDeModule // classes, énumération, etc. def nomDeProcedure ... end def nomDeFonction as TypeRetourne ... return valeurRetournee end // du code ici end Orienté objet : Kore est orienté objet, dans la mesure de l'utilité et de l'efficacité des notions de l'orienté objet. Toutes ces notions ne sont/seront pas nécessairement incluses au langage. Une partie des fonctionnalités à ajouter est déjà établie, mais tout est susceptible d'évoluer grandement au fil de l'avancée du développement et des retours. class NomDeClasse as ClasseHeritee champ1 as TypeChamp // constructeur def new end // destructeur def delete end def nomDeMethode ... end def nomDeMethode2 as TypeRetourne ... return valeurRetournee end self def nomDeMethodeDeClasse ... end end a = NomDeClasse.new // Instanciation. a.nomDeMethode // Appel de méthode d'instance. NomDeClasse.nomDeMethodeDeClasse // Appel de méthode de classe a.delete // Destruction. Enumérations : Les énumérations permettent de gérer des listes de valeurs à utiliser comme paramètres. Les valeurs peuvent être définies explicitement si besoin est. enum NomEnumeration Champ1, // vaut 1 Champ2, // vaut 2 Champ3 = 8, // vaut 8 Champ4 // vaut 9 end test = NomEnumeration.Champ3 // variable de type NomEnumeration valant Champ3 Tableaux : Les tableaux en Kore sont des conteneurs de données multidimensionnels de type jagged array : unTableau as integer() // Déclaration explicite d'un tableau d'entier. unAutreTableau = integer(10) // Déclaration inférée et assignation d'un tableau de 10 integer. unAutreTableau(0) = 13 // Assignation unTableau = Classe(10,10) // Déclaration inférée et assignation d'un tableau de 10x10 Classe... unTableau(0,0) = Classe.new // ... qui doivent être instanciéss. Itérateurs : Les itérateurs permettent de manipuler plus facilement les listes de données grâce à la boucle for...in : def iterateur as int() a = 0 while a <= 15 yield a // Retourne une valeur déclenchant une exécution du for. a++ end end for a in iterateur a.print // Affiche les nombres de 0 à 15. end Ou encore : def premiers as int() yield 3 yield 5 yield 7 yield 11 yield 13 end for a in premiers a.print end Headers : Pas besoin ici de headers au sens C/C++ du terme, le compilateur analyse préalablement le code avant de le compiler. Déclarez, c'est prêt à l'emploi. Ce que je tends à appeler "header", ce sont les fichiers permettant d'importer des .lib. Moyennant la création d'un code d'import, toute bibliothèque suivant la conventions d'appel C standards cdecl, et exportant ses noms de fonction peut être utilisée. Le code est détaillé un plus bas. Evolution du langage : Décembre 2006 : - début du projet sous forme de CLI (Command Line Interpreter) - déclaration implicite de variables - calculs arithmétiques Courant 2007 : - support des tests logiques if...endif et if...else...endif - boucle do...loop Décembre 2007 : - support de l'appel de fonctions externes issues de DLL Juillet 2008 : - implémentation de la gestion des DLL comme plugins - gestion des chaînes de caractères - implémentation des fonctions utilisateur (0.007) - typage des variables (0.007) - support des structures à un niveau (0.008) Août 2008 : - support des tableaux - itération for...to...next - code semi-compilé (bytecode interprété) Septembre 2008 : - code compilé, utilisation de FASM (0.010) - les structures gèrent plusieurs niveaux d'imbrication (structures de structures) - implémentation d'opérateurs de manipulation des pointeurs (& et $) Octobre 2008 : - remplacement des fichiers .dlls par les fichiers .lib - ajout d'un format de header pour les .lib - boucle while...endwhile Novembre 2008 : - implémentations des tableaux dynamiques - suppression du CLI et de l'interpréteur de bytecode, le langage est dès lors uniquement compilé - début de création de l'IDE "Dragon" Janvier 2009 : - options de compilations : SUBSYSTEM, ENTRY - support de l'assembleur dans le langage (asm...endasm) Février 2009 : - support des calculs sur des nombres à virgule flottante - support des conversions de type - les fonctions gère maintenant pleinement les types de retour - reprise à zéro du compilateur - début d'implémentation des classes - amélioration du if pour gérer la structure if...then et if...elseif...else...endif - mots-clés break et continue - implémentation d'un garbage collector de type "mark and compact" Courant 2009 : - retrait du garbage collector - debug et modifications mineures Courant 2010 : - arrêt du support des structures - debug et modifications mineures Mai-Juin 2011 : - support des classes (méthodes et champs) - debug et modifications mineures Août 2011 : - implémentation des énumérations - implémentation des self def (méthodes statiques) - support des surcharges de méthodes et fonctions - modification du modèle de header (utilisation de la syntaxe du langage) - modifications de syntaxe : mot-clé de fin de structure unique "end", définition de fonction/méthode par le mot-clé "def" - déclarations à typage inféré - ajout des itérateurs pour la boucle for...in - révision des tableaux. - début de travail sur l'IDE Septembre 2011 : - adoption du principe d'accès uniforme - implémentation des setter - début d'implémentation des références non nulles - mécanique de transfert d'appel permettant le respect de la loi de Déméter (couplage minimum) - implémentation des constructeurs par setter Octobre 2011 : - mise en place des débuts du contrôle d'accès (public, private, etc) - établissement de la mécanique de def over (override avancé), et override de champs - transformation des types standard en classe - établissement de la mécanique de postfix Février 2013 : - coup de boost sur l'IDE Avril 2013 : - left et right shift - opérateurs booléens - amélioration des modules - type booléen - type string - implémentation du switch - début de la réécriture du compilateur en Kore - renommage du langage Création de bibliothèques supplémentaires : Cette section s'adresse aux personnes qui souhaiteraient développer (dans le futur) des bibliothèques supplémentaires pour Kore. Le langage a été conçu pour permettre à tout le monde de créer et d'ajouter sa propre bibliothèque au langage. La création de telles bibliothèques s'effectue de manière simple, soit via des LIB, soit des DDL (uniquement Windows à l'heure actuelle, donc). La seule chose à faire pour rendre votre bibliothèque compatible avec Kore est de créer un fichier reprenant la convention (avec entre crochet l'optionnel) : [self] def NomDeFonction([arg1 as type, arg2 as type...argn as type]) [as type] alias NomDeFonctionCompile Le nom de la fonction est celui qui sera utilisé sous Kore. Le nom de fonction compilé est le nom interne de la fonction dans votre bibliothèque après compilation et name mangling. Vous devez nécessairement préciser la commande include "Bibliothèque.extension" pour que votre code soit fonctionnel. Exemple : module kore<br> include "Jade_Console.lib" class Console self def write(value as string) alias "_Print" self def write(value as bool) alias "_PrintBool" self def write(value as int) alias "_PrintInt" self def write(value as float) alias "_PrintFloat" self def pause alias "_Pause"<br> end <br>end Le fichier de code Kore créé devra être placé dans le dossier "Headers", tandis que la bibliothèque compilée le sera sous le dossier "Library". Historique : 12/07/2008 : Première release publique (v0.001) 13/07/2008 : Release v0.002 13/07/2008 : Release v0.003 13/07/2008 : Release v0.004 14/07/2008 : Release v0.005 26/07/2008 : Release v0.006 27/07/2008 : Release v0.007 27/07/2008 : Release v0.008 13/09/2008 : Release v0.011 A venir : Release v0.100 Aucun téléchargement disponible à l'heure actuelle Tout avis sur le langage et sa syntaxe m'intéresse : est-ce simple, complexe ? Agréable à lire ? Quelles fonctionnalités vous sembleraient intéressantes pour un langage de ce genre ? Il faut des avis, donc allez-y, lâchez-vous ! Voici les sources de ce langage : https://github.com/kore-lang/compiler1 point
-
Bonjour à tous ! Aujoud'hui, j'ai envie de vous faire découvrir mon jeu favori ! Il est assez ancien et pas très connu, mais pour moi, c'est le meilleur :3 QUAKE III ARENA (Alors, rien qu'a la vue du logo, moi j'ai envie d'y jouer) I. Tout d'abord, c'est quoi ce jeu ? II. Premier pas dans le jeu (images prises, pour la plupart, sur une présentation de quake en anglais ici ) Tout d'abord, quand vous arrivez dans le jeu, vous tomber sur ce menu. Je vous conseille d'aller tout d'abord dans SETUP, histoire d'aller personnaliser votre joueur et de vérifier les commande du clavier. Voici l'écran ou vous pourrez choisir votre avatar : Une fois ceci fait, retourner au menu, et selectioner single player (mieux vaut déjà bien se faire la main en solo avant de passer en multijoueurs !) Voici un écran du choix de niveau (ici le premier) Et voici dans les niveaux plus avancés : Une fois que vous avez cliquer sur FIGHT (en bas à droite), cet écran apparait (choix de la difficulté du niveau) : Sachant que dès le mode hardcore, c'est vraiment hardcore ! Le mieux étant Bring it on Vous voici lancer dans une arène ! Faites le tour, regarder un peu ou vous êtes ^^ Ramassez tous ce que vous trouver ! Ce sont des munitions et des armors pack (bustes flottants or ou rouge), de la vie (les croix), des armes bien sur, et également des bonus ! Il existe beaucoup d'armes dans Quake, sachant que vos armes de bases sont la mitraillette et la scie. Pour changer d'arme, il suffit de faire rouler la,molette de votre souris. A vous de voir laquelle vous préférer ! Il existe 4 types de bonus dans Quakes, cachés dans les niveaus : Quake Damage : permet de tuer deux fois plus rapidement. Invisibility : permet de se rendre invisible aux yeux des autres joueurs. Super Health : permet d'avoir plus de vie, plus longtemps. Personal teleporter : permet de se teleporter là ou sont les autres joueurs. (pour l'activer, appuyer sur la touche Entrée) Tous ces bonus SAUF le Personal teleporter se trouvent sur un socle avec un pentacle dessus : Le but étant de tuer un certains nombre de fois les adversaires ! les petits carrés en bas à droite représente (de gauche à droite ) : le nombre de fois que l'on doit tuer (ici 20) / si le carré est en bleu, c'est notre score, s'il est en rouge, c'est celui des adversaires (il est à droite en bleu, et à gauche en rouge ) sinon en bas à gauche, c'est les munitiions, et après, c'est notre vie ! Une fois votre objectif atteint, voici le podium : III. Les différents niveaux Le jeu est divisé en 7 tiers de 4 niveau chacun, et il faut tous les avoir gagné pour pouvoir passer au niveau suivant ! Plus les niveaux augmentent, plus il y a d'adversaires, d'armes différentes, d'arènes de plus en plus vastes, bref de quoi passer du bon temps ! Voila ! Je crois que je vous ai tout dit, après si vous avez des questions n'hésitez pas ! J'espère vous avoir donner envie de jouer :3 ps : si on tire plusieurs fois sur un cadavre il explose \o/ Bon bah j'vais jouer moi.1 point
-
Bonjour, Comme vous l'avez entendu ou remarqué, YouTube bride ses connexions pour le FAI Free. Je vous invite donc à suivre ce petit tutoriel afin de contourner cette limitation : http://reload.eez.fr/blog:2013:03:06:contourner_les_ralentissements_entre_free_et_youtube Nelidon.1 point
-
Salut all, Je me suis enfin motivé à faire une intro sur l'ajax et son utilisation simplifié avec JQuery. Comme le veut la tradition du manque d'humour avec l'ajax: Donc pour ceux qui ne savent pas ce qu'est l'ajax, en gros c'est à la place de faire recharger votre site pour quelques données vous faites une requêtes en arrière plan, c'est utile dans les shoutboxs ou pour faire certain effet sur les sites (par exemple). L'ajax c'est du javascript rien à foutre de ce que vous dites et NON son utilisation par JQuery ne fait pas de vous un "dev" en ajax... Comme je l'ai dis au dessus c'est l’exécution d'une requête en arrière-plan donc il faut l'initialiser > configurer la requête > l'envoyer (> récupérer réponse) Initialisation: var request; if (window.XMLHttpRequest) { request = new XMLHttpRequest(); } else if (window.ActiveXObject) { // Un petit test pour IE car ils savent pas faire comme les autres... request = new ActiveXObject("Microsoft.XMLHTTP"); } else { alert("Votre système d'exploitation internet ne semble pas supporter l'ajax.."); } Envoyer une simple requête (comme si vous alliez sur la page): request.open("GET", "fichier.php", true); request.send(null); donc vous avez dans ce cas 2 fonctions .open() et .send(): -open(): vous "ouvrez" une requête enfin de lui expliquer comment elle doit s’exécuter en 3 paramètres: -- "GET" : type d'envoie de la requête -- "fichier.php" : le fichier/page sur le quel il va être exécute -- true : mode asynchrone -send(): envoie de la requête dans ce cas présent il y a null car il n'y a aucun envoie de donnée maintenant un envoie un peut plus complexe, on va faire un système d'inscription à un newsletter par requête post ._. code html (compliqué *tousse*): <input id="mail" type="email"> <input id="send" type="button" onClick="inscription();"> El js (ajax): function inscription() { var mail = document.getElementById("mail").value; request.open("POST", "fichier.php", true); request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); request.send("?mail=" + mail); request.onreadystatechange = function() { if (request.readyState == 4 && request.status == 200) { alert(request.responseText); } } } Dans cet exemple j'ai fais une fonction du nom d'inscription, le fichier "fichier.php" dit si l'inscription a été validé ou non, -open(): cette fois-ci ce n'est pas une requête GET mais POST donc je récupére les données en php avec $_POST[]; -setRequestHeader(): fonction optionnel pour préciser des paramètres dans l'entête de la requête -send(): je mets en forme la variable que j'ai récupéré du nom de mail, les variables doivent être mit selon la norme RFC-1738 exemple : ?variable=123&var2=Bonjour&page=recherche&patati=p atata -onreadystatechange : c'est l'eventement qui est généré lors de l'envoie des différents étapes de l'envoie -readyState et status : je test le stade de la requête pour voir si elle est valide:: --readyState: --- 0 : requête non initialisé --- 1 : connexion au serveur établie --- 2 : requête envoyée --- 3 : traitement de la requête --- 4 : réponse reçu --status: --- 200: "Ok"... je sais pas comment expliquer --- 404: page non trouvée -responseText : retourne la reponse de la requête sous forme de texte brut et la version simplifiée (en JQuery): vous avez 3 possibilité qui reviennent presque au même : $.ajax, $.get et $.post, j'ai expliqué la différence au dessus (le $.ajax et similaire au $.get). La syntaxe pour un simple envoie avec $.ajax: $.ajax({url:"fichier.php"}); La syntaxe pour un simple envoie avec $.get et un petit message à la fin de l'envoie: $.get("fichier.php", function() { alert("requête envoyée"); }); La syntaxe pour envoie avec variables avec $.post et recupération des données (fonctionnel avec $.get sans les variables entre {}): $.post("fichier.php", { page : "mmotrick", methode : "ajax", version : 3 }, function(data, statut){ alert("Réponse requête: " + statut + "# " + data); }); ...1 point
-
1 point
-
1 point
-
J'ai hésité entre oui et Diplodocus, et comme il manque un "s" à "Tu m'aime déjà" j'ai choisi Diplodocus! #chieuse En tout cas, bienvenue sur le forum! (les erreurs de jeunesse niveau pseudo, ça va j'ai pas connu ça *ouf*)1 point
-
1 point
-
Bienvenue à toi! Etant le dieu de la prog de ce forum (LOWL, ok, nojoke, 2nd année Epitech RPZ!), je te conseille de start par du C , le C et le C++ étant très proches (ce qui semble normal... C++ = amélioration du C)! Dans tous les cas, n'hésite pas à poser tes questions, nous serons tous ravis de te répondre! J'espère te voir souvent sur Melinyel! Cordialement, AlexMog. ==== A Bientôt dans la section programmation! ps: Ton orang-outang de Laponie qui t'aime <31 point
-
J'ai hésité entre Oui et Diplodocus, mais après un rapide conseil par mon orang-outang de Laponie orientale, j'ai opté pour le Oui. Soit le bienvenue sur le forum, si tu as besoin de quoique ça soit, n'hésite pas à demander. Des tutoriels / guides en programmation et justement en C / C++ ne devraient pas tarder à arriver.1 point
