« Draw it » pour Android

Et voila ma nouvelle petite application pour Android.
Comme la version PC, celle-ci permet de piocher des valeurs aléatoires parmis des listes arbitraires.

Lien vers l’application sur le Google Play Store : Draw it

Si vous préférez, voici directement les fichiers apk (signés) hébergés par mes soins : https://www.jumbef.net/dl/drawit/

Une liste par défaut est fournie et tire des valeurs parmis :

  • Vrai/Faux
  • Un nombre de 1 à 6
  • Une des sept couleurs de l’arc-en-ciel

Pour créer vos propres listes, éditez un fichier texte suivant le modèle ci dessous :

<?xml version="1.0" encoding="utf-8"?>
<lists>
  <list name="Your list name here">
    <item name="Your item name here"/>
    <item name="Your item name here"/>
    <item name="Your item name here"/>
    <item name="Your item name here"/>
  </list>
  <list name="Your list name here">
    <item name="Your item name here"/>
    <item name="Your item name here"/>
  </list>
  <list name="Your list name here">
    <item name="Your item name here"/>
    <item name="Your item name here"/>
    <item name="Your item name here"/>
  </list>
</lists>

Vérifiez bien l’encodage (aussi appelé format de caractères) au moment d’enregistrer le fichier.

Vous pouvez utiliser n’importe quel nom et extension pour ce fichier mais le contenu étant en XML je vous conseil de choisir l’extension .xml

Si vous souhaitez participer aux futurs tests lors d’ajout de nouvelles fonctionnalités, voici le lien pour vous déclarer comme testeur :
https://play.google.com/apps/testing/net.jumbef.drawit

Draw It !

Besoin d’un petit programme pour tirer des valeurs au hasard parmis des listes arbitraires ?

Pas de soucis, « Draw It ! » est là pour vous.

Initialement créé pour des idées de dessins, il est fourni avec un fichier INI rempli en conséquence. Libre à vous de le modifier à votre guise.

N’hésitez pas à utiliser les commentaire de cet articles si vous avez besoin d’aide.

Mise à jour : Maintenant disponible : « Draw it » pour Android

BitFlow : Mon premier jeu pour Android

Depuis quelques temps déjà, l’idée de créer un jeu pour Android me trottine dans la tête. Plus histoire d’apprivoiser la bête que dans le but de produire le prochain succès instantanément culte.

Je me suis donc lancé dans le portage d’un jeu que j’avais réalisé il y a quelques années : BitFlow

Pour les détails de l’époque : Voir cet article.

Après quelques heures passées à comprendre les entrailles du graphisme sous Android (ne voulant pas toucher au moteur d’origine du jeu déjà en JAVA), je me suis confronté à la détection des mouvements et des actions tactiles.

A ce moment je me suis dit que suivre quelques didacticiels avant aurait été une meilleure idée que de me lancer dans l’aventure avec juste l’IDE, la doc et mon clavier. Mais bon, je m’en suis sorti et voila le résultat.

Screenshot_2015-08-18-18-35-20

Le jeu est disponible sur le Google Play Store et n’hésitez pas à être francs sur vos retours.

Le moteur est presque prêt !

Et voila, une petite semaine de boulot épisodique et la base du moteur du jeu est prête. Principalement constitué d’interfaces et de classes abstraites, ce moteur n’est pas du tout dédié à un type de jeu et sera facilement utilisable par la suite pour d’autres projets.

Il sera bien sûr libre mais les sources ne seront diffusées qu’une fois nettoyées et commentées.

Voici donc le rendu actuel, utilisez les flèches du clavier pour tester un peu le comportement de l’engin.
Jumbef’s HnS.jar (A lancer avec JAVA)

A bientôt pour la suite !

Ecoute du clavier en JAVA

J’ai longtemps été confronté à un soucis en programmation de jeux en JAVA.

En effet, lorsque vous écoutez le clavier avec une implémentation de l’interface java.awt.event.KeyListener, vous obtenez des déclenchement par de système des évènements keyPressed keyTyped et keyReleased dont les noms sont suffisamment explicites pour la plupart des usages (KeyTyped n’étant pas vraiment utile en fait, juste un petit raccourcis).

Le problème se pose lorsque vous maintenez une touche enfoncée, vous vous attendez à n’avoir que l’événement keyPressed de déclenché et pensez que le keyReleased sera déclenché au moment ou vous relâcherez la touche.
C’est sans compter sur la répétition automatique de frappe qui est gérée par votre système et non pas par la machine virtuelle JAVA.

Sous Windows et MAC (et surement d’autres) vous obtenez une répétition des évènements keyPressed et keyTyped tant que la touche est enfoncée puis un unique keyReleased au moment du relachement.

Sous Linux (au moins avec Xorg) l’évènement keyReleased est lui aussi répété tant que la touche est enfoncée. Ce qui pose un problème tout particulier dans le cas de développement de jeux-vidéos dans lesquels le maintient de touche est monnaie courante.

J’ai longtemps cherché à contourné ce problème en vain, mes recherche me menaient à chaque fois vers un « Impossible à contourné en JAVA, le problème est au niveau natif ».

Et pourtant, découverte aujourd’hui un peu par hasard, un petit détail tout bête.
Le moment ou les évènements keyReleased superflus sont déclenchés ont une particularité que JAVA peut exploiter : Ils sont simultanés par rapport aux keyPressed.

En comparant les valeurs retournées par e.getWhen() on peut facilement distinguer un relâchement simulé par la répétition de frappe du système d’un réél relâchement de la touche.

J’ai honte, j’ai publié cette information un peu trop vite, dans l’euphorie du moment. Il est effet plus compliqué que je ne le pensais car ils ne sont pas toujours déclenchés dans le même ordre. Ce qui pose un gros problème lorsque l’évènement que l’on veut vérifié est déclenché avant celui qui devrait servir de référence.

Pour contourner le problème, voici donc une class abstraite dont vous devrez implémenter les méthodes :

public abstract void keyPressedOrRepeated(java.awt.event.KeyEvent e);
public abstract void keyReleasedOrRepeated(java.awt.event.KeyEvent e);
public abstract void keyReleasedReally(java.awt.event.KeyEvent e);

AbstractKeyAdapterAntiRepeat.java.tar
(Mis à jour le 28 juillet 2012 pour supprimer le bug en cas de relâchement simultané de plusieurs touches)

Son seul défaut connu est qu’elle peut introduire une latence pouvant aller jusqu’à trois millisecondes entre le relâchement réel d’une touche et le déclenchement de l’évènement.

Avis aux testeurs, merci d’avance pour les retours sur différentes plateformes.

Fran6 #4 : Résultats de la GameCompo :

Coder un jeu vidéo en moins de 12 heures à partir de rien ?

Défi relevé par moi même durant la Fran6 #4 à Gouesnac’h

Malgré des débuts difficiles et quelques heures passées à divers dépannages pendant l’Install Party, j’ai le plaisir de vous présenter ma création de ce jour : BitFlow, un shoot’em up pur scoring à défilement horizontal intégralement codé en JAVA.

Le jeu est téléchargeable ici : http://jumbef.net/dl/BitFlow/BitFlow.jar

vous aurez besoin d’une machine virtuelle JAVA pour le faire fonctionner. Celle ci est installée par défaut sur la plupart des ordinateurs, si ça n’est pas le cas, vous pouvez vous la procurer à cette adresse : http://www.java.com/ ou dans les dépôts de votre distribution si vous êtes sous Linux.

GameCompo à la Fran6 #4 de Gouesnach ?

Bonjour tout le monde, en tant que membre de linux quimper, je propose ici à tous ceux qui le souhaite de ce pointer à la Fran6 pour un concours amicale de codage (language/outil au choix) pour réaliser un jeu dans un temps imparti (6 ou 12 heures à voir) lors d’une install/Lan partie.

Voici les infos actuelles sur l’évènement (la GameCompo n’est pas encore sûre)

http://www.linuxquimper.org/1244/fran6-4/
http://www.facebook.com/events/273298792735170/

PS : pour coder, venez avec votre machine et votre doc (risque d’internet très lent sur place) ^^