Jeux vidéo de type bac à sable

23 octobre 2013

Alerte à la faille spatiotemporelle

Arrrgggg,

J'avais décidé de prendre une pause pour faire une coupure pendant les vacances d'été mais quelques difficultés personnelles (et professionnelles) m'ont quelque peu éloigné de la blogosphère et de mes projets puis le temps a filé.

Je vais me répéter (par rapport au post de juin) mais tout n'est pas noir dans tout ça :-)

Je n'ai pas vraiment eut le temps de faire de la programmation sur MAC mais j'ai testé pas mal d'autres choses : le HTML5, jquery, le design, le cloud azure, refaire du php, le MVC, un ou 2 jeux online (mais rien de transcendant), un peu d'arduino, Android.

Bref je ne suis pas resté inactif. je vais recommencer tout doucement à alimenter code moe d'abord car j'ai des tonnes de code à partager (même si je ne sais jamais quoi partager) et ensuite je vais reprendre le dev de jeu (j'ai d'abord un petit jeu à finir en HTML 5 dont je vous parlerai pour commencer).

Sur ce je vous dis à bientôt (si si je vous jure :-) )

Posté par nekogeekaku à 13:32 - - Commentaires [0] - Permalien [#]


17 juin 2013

Ca avance pas

après 15 jours un peu difficile je refais surface.

J'ai essayé d'avancer sur le code réseau en rajoutant le client directement dans le jeu mais je suis confronté à des pertes de messages aléatoires (la hantise de tout développeur) et je patauge.

Je pense avoir voulu aller trop vite (je ne suis pas un novice en interface réseau et j'ai du vouloir griller trop d'étapes) et je vais devoir reprendre à zéro.

Je vais donc créer un exemple entier de chat  (le client et le serveur) pour déterminer ce qui cloche (la fenêtre en mode modal, la couche réseau dans la thread principale,....?)

Mon prochain prototype devrait donc être un serveur et un client de chat.

Heureusement tout n'est pas noir dans ma galaxie et j'ai pu avancer sur mon projet de robotique mais ceci fera l'affaire d'un autre message.

Sur ce je vous laisse ronger votre frein et vous dis à bientôt.

Posté par nekogeekaku à 21:46 - - Commentaires [0] - Permalien [#]

04 juin 2013

Code réseau et déboggage

Cette semaine encore courte (mais c'est la dernière) m'a permis de commencer à travailler sur le réseau.

IMG_2524

J'ai réussi à créer un serveur assez basique acceptant un telnet et affichant le texte tapé dans le telnet. Bon c'est pas très visuel donc je ne vous ai pas mis de copie et à la place je vous mets une photo de mon occupation de ce week-end.

Pour ce qui ne devine pas c'est un robot télécommandé (avec fil) de la marque tamiya. Il manque encore la pince mais ce socle est fonctionnel. L'objectif final (dans quelques mois je pense) est un robot piloté en bluetooth + arduino par mon mac et donc aussi par un iphone (en réutilisant par exemple le code réseau ci-dessus ;-p). Je posterai quelques updates par codemoe.

Je parlais de déboggage dans le sujet : Dragon-bleu (un de mes rares habitués semble t il) s'est proposé de tester mais sans succès. L'application se lance puis quitte immédiatement. Je lui ai envoyé une version qui normalement créé un fichier de log quasiment au démarrage sans plus de succès. Prochaine étape une application basique (bref quasiment un new project dans xcode) pour voir si ce ne serait pas un problème de signature : J'ai bien un ID de développeur iOS mais je n'ai pas pris celui de MAC. Si c'est le cas je ferai chauffer la carte bleue :-p mais je ne pense pas que ce soit réellement la source du problème. Si d'autres ont essayé et réussi (ou pas) n'hésitez pas à vous signaler.

 

Posté par nekogeekaku à 08:18 - - Commentaires [0] - Permalien [#]
Tags : , , ,

31 mai 2013

CodeMoe : l'impression d'un fichier facile sous windows en code

Aujourd'hui je vais vous parler de l'impression.

Pour l'un de mes projets il m'a fallu créer un service qui imprime des rapports provenant de SQL Reports. la récupération d'un rapport par code est maitrisé depuis un moment mais l'impression était une nouvelle composante.

Après 2-3 recherches, j'ai trouvé un code assez efficace chez Microsoft (ici) qui permet d'imprimer un flux (ou un fichier). Le code est assez efficace et je vous le conseille.

Dans mon cas un petit problème supplémentaire s'est ajouté : il s'agissait d'imprimer sur une imprimante à étiquette et là malheureusement je me suis trouvé bloqué par l'imprimante que semble avoir des problème avec ce flux direct. Après pas mal d'essai j'ai finalement trouvé une solution qui même si elle m'oblige à sauver le document sur disque avant est assez efficace. Voici donc le code:

Process process = newProcess();
process.StartInfo.FileName = file;
process.StartInfo.Verb = "printto";
process.StartInfo.Arguments = "\"" + printer + "\"";
process.Start();
process.WaitForInputIdle();
process.Kill();

Comme vous le voyez le code est assez simple. On créé un process sur le fichier et l'on y envoi la commande "printto". Ce fut une surprise assez agréable pour moi car c'est le système d'exploitation qui se charge d'effectuer l'impression pour vous.

Bonne continuation et à bientôt.

Posté par nekogeekaku à 13:57 - - Commentaires [0] - Permalien [#]
Tags : , , ,

27 mai 2013

Ecriture et recherche oui mais code non .....

Pas de code cette semaine mais bon il faut dire que j’avais encore des congés. J’ai néanmoins fait un peu d’écriture et de recherches.

Pour les recherches c’était sur le thème du réseau. Je vais m’appuyer principalement sur le code de l’exemple écho chez Apple (disponible ici). La partie cliente je l’avais déjà réalisée sur un de mes proto précédents mais le serveur était lui écrit en python hors pour des raisons de simplifications je préfère avoir le serveur aussi en Cocoa (principalement pour l’échange des fragments).

 

Pour l’écriture juste 2 pages pour l’instant. Je me concentre sur le mécanisme de jeu des compétences. Ayant bien aimé l’idée des métiers de timber & stone  et Salem plutôt que le système de compétences de Wurm j’ai décidé de procéder comme suit:

Le personnage pourra pratiquer tous les métiers dont:

- des métiers de ressources : bûcheron, cueilleur, mineur (chasseur, pêcheur, fermier,..)

  • des métiers avancés : charpentier, maçon, forgeron , soldat?, ....

Chaque métier aura un niveau et une barre d’xps (avec quelques règles si l’on bascule d’un métier à un autre incitant à se focaliser sur un métier)

Chaque métier débloquera des actions possibles selon son niveau (j’en ai commencé une petite liste) et la fabrication d’outils (selon le métier). L’idée étant d’essayer de rendre les métiers interdépendant pour favoriser l’échange/vente entre joueurs.

 

Bon sur ce je vais soigner mon rhume et voir si j’arrive à aligner quelques lignes de code correctes (Quand je suis un peu à l’ouest j’ai tendance à faire une faute toutes les 2-3 lignes de code :-p )

Posté par nekogeekaku à 13:36 - - Commentaires [0] - Permalien [#]
Tags : , ,


21 mai 2013

Moi de mai rime avec congés :-(

Avec tous ces ponts de mai et un surplus non prévus de congés à solder (il semble que j’ai mal calculé), je n’arrive plus à avancer.

Capture_d__cran_2013_05_16___08Comme vous l’avez vu en fin de semaine j’ai réussi à avancer sur l’optimisation pour retrouver des performances raisonnables.

Je vous met ici un petit exemple de ce que cela donnait quand le cercle est plus petit que ce qu’il faut (c’était fait exprès pour valider ma théorie).

Pour le reste je réfléchi toujours. Est ce que je dois commencer à attaquer le coeur même du moteur de jeu (artisanat, caractéristiques,...) où dois je m’occuper du réseau. Je penche de plus en plus pour le dernier.

Pour le moteur de jeu :

  • l’avantage est que le jeu deviendrait un peu plus intéressant à tester
  • les 2 inconvénients étant : je n’ai qu’une trop vague idée de ce que je veux faire et si je restreint au maximum je risque de limiter mes capacités d’évolutions. L’autre étant que plus je retarde l’intégration du réseau plus elle sera difficile à réaliser.

Pour le réseau:

  • l’inconvénient du réseau est que j’aurai encore plus de mal à trouver des testeurs (pour l’instant il semble que je n’en ai qu’un seul et encore le jeu ne marche pas chez lui) puisqu’il faudra forcément être connecté à internet pour le tester.
  • l’avantage est que le monde sera forcément plus vivant avec quelques joueurs et si j’arrive à le tourner je pourrais ajouter un volet mobile (pouvoir jouer en limité avec smartphone)

 

Je pense que mon plan d’action va être le suivant:

  • Commencer à écrire un moteur réseau ( comme d’habitude un serveur de chat est le bon moyen d’y arriver)
  • mettre sur papier mes idées pour le gameplay pour les fixer

 

Si tout va bien je commencerai donc à vous parler gameplay et réseau la semaine prochaine.

PS: il va falloir que je vous parle d'une variante de minecraft que je viens de découvrir et qui s'annonce intéressante.

Posté par nekogeekaku à 13:22 - - Commentaires [0] - Permalien [#]
Tags : , ,

17 mai 2013

CodeMoe : Restreindre l’affichage en openGL

Aujourd’hui je vais partager avec vous l’un des bouts de code (assez simple) et surtout la méthode que j’ai utilisé pour améliorer les performances de mon code. Il y a pas mal de texte mais c'edst pour placer le contexte et expliquer la démarche.

Ma problématique était la suivante: au début je n’affichai qu’une couche de sol pour mes premiers tests mais pour que le jeu soit intéressante (et ajouter la possibilité de creuser et miner) il me faut plusieurs couches de sols. J’ai donc pensé à 8 couches (inspiré de timber and stone). Mais une fois fait mon jeu s’est mis à ramer. L’explication simple est que je suis passé de 9 (9 fragments) *32*32 (la taille d’un fragment) cubes à afficher (je compte pas les arbres) à 8*9*32*32 cubes à afficher et là mes performances sont catastrophiques.

J’avais plusieurs solutions à ma disposition:

  • utiliser les shaders (il paraît que c’est le top mais je suis toujours à l’étape compréhension  et je bloque un peu dessus)
  • utiliser des algo de faces avant arrière ou autres comme on en trouve (faut juste que je les comprenne)
  • n’afficher que les cubes visibles (en déterminant si un cube est entouré ou pas)
  • une autre méthode?

J’ai pas mal réfléchi en cherchant une solution très simple et élégante et je me suis concentré sur ce qui est dans mon champ de vision et j’ai tout ramené en 2D.

IMG_2460

Comme on le vois dans le petit schéma ci-contre, j’ai un cône/trinagle de vision et je dois déterminer les cubes qui sont à l'intérieur.

Déterminer si un point est à l'intérieur d'un triangle m'a paru trop compliqué (vous vous rappelez il faut que ce soit une optimisation docn simple), j'ai donc eut l'idée du cercle : tous les cubes étant dans le cercle sont visibles.

Au niveau algorithme c'est très facile à déterminer: on calcule le point C. On connait la distance d = 24 (un demi fragment  plus un fragment = 48 le tout divisé par deux.)

Ensuite il suffit au moment de dessiner un cube de savoir si la distance entre son centre (qui est sa position) et le point C est inférieur à la distance. Facile non?

Bon les plus malins auront remarqué que le cercle ne prendra pas en compte les cubes à l'extrème : on peut laisser tomber ou légèrement augmenter le diamètre du cercle.

 

-(float)calculDeDistanceEntre:(NS3DPoint)unPoint et:(NS3DPoint)unAutrePoint
{
//Les coordonnées sont dans un espace cartésien donc on a un triangle rectangle
float a = unPoint.x - unAutrePoint.x;
float b = unPoint.z - unAutrePoint.z;
return sqrtf( (a*a) + (b*b) );
}

 Le NS3DPoint ci-dessus est une structure créée par moi pour représenter un point 3D. Elle suit les mêmes règles que le NSPoint standard.

//La mi-distance est à la moitié d'un fragment et demi ce qui représente 12 =((32+16)*0.5)/2
//le 0.5 représente la taille d'un cube.
float decal =12.0f;
float x = xpos -sin( heading * piover180 ) * decal;
float z = zpos - cos( heading * piover180 ) * decal;

Voilà très peu de code au final et des performances qui ont largement dépassé ce que j'espérai m'évitant d'avoir à gérer d'autres traitements (pour l'instant du moins). 

J'espère que vous aurez réussi à lire jusqu'au bout et que vous avez trouvé cela intéressant.

 

Posté par nekogeekaku à 13:18 - - Commentaires [0] - Permalien [#]
Tags : , , ,

13 mai 2013

Les vacances ...

... c’est fini .... pfiou.... trop court

Bon comme prévu j’ai réussi à tenir 15 jours sans coder une ligne de code (cough cough bah juste 3 lignes mais pour un projet d’électronique) et c’était vraiment pas facile car j’avais un problème de perfromances en suspens.

Je ne suis quand même pas rester inactif:

IMG_2422

J’ai fait un peu de dessin (pour m’y remettre car j’en aurai besoin pour créer un peu les objets et créatures). Je suis pas très fort mais voila un petit exemple. Je compte d’ailleurs en poster régulièrement histoire de m’amuser un peu.

 

J’ai joué un peu : Tera online, la beta de neverwinter online (là j’accroche vraiment), du wurm, du Command and Conquer (le 3 car le 4 est vraiment nul je trouve) et quelques petites parties de jeu sur mon iPad.

 

 

 

 

  

IMG_2447

J’ai profité d’un passage au Futuroscope où avaient lieu les sélection du concours de de robotique pour me remettre un peu à la robotique et à l’électronique.

Bref un combat épique entre le robot mindstorm en mode lanceur de bille et le micro spykee de meccano (en attendant d'acheter le normal) entre ma fille et son grand-père ou l'attaque du robot mindstorm contre la muraille de Kapla avec moi aux commandes (plus l'iphone en caméra et des modifs pour contrer les pièges inventés).

 

 

 J’ai redémarré ce matin un peu de code avec un tutoriel sur cocos2D pour un projet dont je vous parlerai dans 1 ou 2 jours qui va s’appeler papy-mange-oreille. Je pense pas y passer beaucoup de temps mais c’est un projet Fun pour ma fille, sa cousine et leur grand-père et ça va me permettre de laisser les idées mûrir sur l'autre.

J’ai aussi à :

  • implémenter les idées que j’ai eu pour corriger mes problèmes de performances (pour ne pas afficher les cubes non visibles),
  • commencer un tutoriel pour coder un jeu (car c’est toujours ma page sur QT est openGL qui reste dans le top des visites) mais je réfléchi toujours à son contenu,
  • commencer à tester blender (pour des objets 3D autres que cubes),
  • continuer mon apprentissage de l’arduino (l’objectif étant de me servir de l’arduino pour piloter mon robot mindstorm),
  • faire un ebook sur la programmation ou une chaîne youtube.

Hum ....... bon les journées ne font que 24h et je n’ai cité que mes projets Geek alors si quelqu’un connait un système permettant de figer le temps je suis preneur ;-p

Sur ce à bientôt pour parler du projet papy-mange-oreille. 

Posté par nekogeekaku à 13:48 - - Commentaires [0] - Permalien [#]
Tags : , , , ,

26 avril 2013

CodeMoe : remplacer gluperspective en OpenGL

Bonjour,

un tout petit post avant mes vacances (où j'ai l'intentention de ne pas allumer ma machine mais bon y arriverai-je? :-p)

Aujourd'hui un petit bout de code concernant gluPerspective.

Dans le plupart des tutoriaux lorsqu'il s'agit de mettre un place une vision on utilise cette petite métode:

gluPerspective( 45.0f, sceneBounds.size.width / sceneBounds.size.height,0.1f, 300.0f );

Avec un angle de vision à 45° un aspect calculé avec le ratio de l'écran et une vision comprise entre 0.1 et 300.

Mon petit problème est qu'XCode n'aime pas trop cette méthode et déclare systématiquement:

implicit declaration of function 'gluPerspective' is invalid in c99

Bon il y avait une façon simple de le corriger qui était de simplement inclure glu.h

#import <OPENGL/glu.h>

Mais avant de penser simple il m'arrive penser compliqué et j'ai donc réécrit (avec un peu d'aide de google la fonction). Il faut savoir que glPerspective appelle systématiquement glFrustrum.

-(void) setPerspective:(GLdouble) fovy aspect:(GLdouble) aspect zNear:(GLdouble) zNear zFar:(GLdouble) zFar
{
const double pi180 = 0.017453292519943295769236907684886;
// pi/180
GLdouble top, bottom, left, right;
top = zNear * tan(pi180*fovy/2);
bottom = -top;
right = aspect*top;
left = -right;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(left, right, bottom, top, zNear, zFar);
glMatrixMode(GL_MODELVIEW);
}

Globalement on donne à frustrum la taille du rectangle du plan de projection (Il y a pas mal de site qui expliquent les notions mathématiques liées à tout cela dont par exemple celui ci)

Bon tout cela est un peu du pinaillage mais je le trouve néanmoins utile à la compréhension du système de projection.

Sur ce je vous dis à bientôt.

Posté par nekogeekaku à 13:16 - - Commentaires [0] - Permalien [#]
Tags : , , ,

23 avril 2013

Prototype 5 : un petit peu plus de fonctionnalités

Un peu de retard cette semaine pour cause de sortie au restau japonais :-) et de partie de timberandstone où j'ai du mal à décrocher (même si je commence déjà à me lasser un peu)

J'ai néanmoins avancé le développement et vous pouvez maintenant:

Capture d’écran 2013-04-23 à 13

- ajouter plusieurs types de blocs (oui 3 c'est pas encore beaucoup)

- ajouter vos blocs en continuité du bord choisi (et non plus seulement sur le dessus)

J'ai aussi rajouté la transparence (et géré un bug assez classique ou ce qui est derrière le bloc transparent disparait : il faut d'abord afficher les blocs non transparents puis les transparents)

les zones se sauvegardent automatiquent en changeant de zone (mais pas encore lorsque vous faite une modification sans quitter la zone).

Dans l'ensemble j'ai atteint le moteur que je souhaitais même s'il est encore perfectible. Vous le trouverez dans les téléchargements (prototype 5)

Je vais donc maintenant attaquer la deuxième partie à  savoir le contenu ( quêtes, artisannat, ...). Et pour cela il me faut être capable d'afficher des modèles un peu plus complexe (genre des bonhommes) et du texte. Je vais donc retourner à des tutoriaux un peu plus basiques avant d'avancer de nouveau le jeu.

Mais avant tout je vais faire une petite pause (les vacances arrivent et j'en ai bien besoin) alors pas d'inquiétude si je ne poste pas durant les 15 prochains jours c'est normal :-)

Je vous dis donc à bientôt.

Posté par nekogeekaku à 13:17 - - Commentaires [0] - Permalien [#]
Tags : ,