Programmer en C pour la Prizm, bis
Posté le 14/02/2012 13:01
Salut à tous! Dans la suite du précédent topic, voici la démarche pour installer le PrizmSDK et l'utiliser.
Honnêtement, je préfère le PrizmSDK (je l'appelle généralement PSDK), il est basé sur GCC, est portable et ne dépend pas du compilateur de Casio/Renesas. Je m'en sers pour tous mes projets sur Prizm. Voyons un peu comment on le configure.
1. Téléchargez le zip du PrizmSDK sur le site de Cemetech [
ici].
2. Dézippez le PSDK dans un dossier vide de préférence pour éviter d'écraser tout fichier personnel/important.
3. Voilà ! Il est prêt à être utilisé.
Une fois le PSDK installé, on peut commencer à programmer. Voyons comment on crée un nouveau projet.
1. Dans le dossier project, copier le dossier default, et renommer ladite copie en le nom du projet (par exemple j'ai nommé mon dossier Bust-A-Move)
2. Dans le makefile, remplacer toutes les occurences du mot "defauflt" par le nom du dossier/projet.
3. Le projet est prêt à être codé, compilé et transféré.
Le Makefile est nécéssaire pour le PSDK pour lui indiquer quoi compiler et comment compiler. Observons-le de plus près
TARGET := $(notdir $(CURDIR))
BUILD := build
SOURCES := src
DATA := data
INCLUDES :=
On définit ici le dossier de destination du projet (le TARGET), le dossier où l'on stocke les binaires temporaires par code source (le BUILD), le/les dossiers contenant les sources (le SRC) et le data (je sais pas ce que c'est, j'ai pas fait attention pour le moment)
MKG3AFLAGS := -n basic:Bust-a-Move -i uns:../unselected.bmp -i sel:../selected.bmp
Ici, on indique au programme qui va compiler le .bin en .g3a de nommer l'addin "Bust-a-Move", d'utiliser les icônes unselected.bmp et selected.bmp pour afficher l'addin dans le menu principal (unselected quand l'addin n'est pas survolé et selected quand il l'est.)
On peut nommer l'addin en fonction de la langue désirée, ainsi
-n basic:Bust-a-Move -n fr:Puzzle-Bobble
Va nommer l'addin Puzzle-Bobble quand la calto est en français et Bust-a-Move autrement. On la la possiblité de choisir un nom pour chaque langue ci-dessous
en - Anglais
es - Espagnol
de - Allemand
fr - Cocorico
pt - Portugais
zh - Chinois (bonne chance pour nommer l'addin en idéogrammes, j'ai pas testé).
Une dernière ligne? Le reste n'est pas modifiable sauf si vous voulez casser le Makefile.
CFLAGS = -Os -std=c99 -Wall $(MACHDEP) $(INCLUDE)
Ici, on indique quelques options pour le compilateur lui-même :
-Os = optimiser la taille du programme au détriment des éventuelles optimisations de performance
-std=c99 = utiliser le langage C en version 1999, on peut ainsi utiliser les rajouts faits pour le C99 (comme déclarer une variable plus ou moins partout).
-Wall = je l'appelle le mur mais ça veut dire Warning ALL. Affiche [b]tous[/b] les warnings. Je considère cette option comme [b]OBLIGATOIRE[/b] car elle montre toute portion de code pouvant être relativement trouble pour le compilateur.
Compiler et nettoyer.
Pour compiler, lancez le make.bat. Il va lancer la procédure de compilation en utilisant le Makefile. Ca permet par exemple de ne recompiler que les fichiers sources qui ont été modifiés. Si, pour des raisons diverses (utilisation de clé usb, changement de dossier...) ça ne compile plus, essayez d'abord de lancer clean.bat, puis make.bat
Transférer automatiquement le g3a à la Prizm.
Prérequis : On va renommer le stockage de la Prizm en "PRIZM". Pour ce faire, branchez la Prizm et entrez en mode USB. Son stockage devrait s'afficher dans l'Ordinateur/Poste de travail. Clic-droit dessus puis renommez en "PRIZM". Ca permettra ensuite à mon outil de reconnaître la calto.
J'ai conçu un petit batch windows qui permet de trouver la calto par le nom de son stockage, créez dans votre dossier de projet un fichier "copy.bat" et collez-y ce code-ci
@echo off
SET /A ligneCourante=0
for %%i in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do (
if exist "%%i:" (
FOR /F "usebackq tokens=7* delims= " %%A in (`VOL %%i:`) DO (
IF %ligneCourante%==0 (
if "%%B" == "PRIZM" (echo Prizm trouvée!
echo Elle etait en %%i:
xcopy *.g3a %%i:\ /Y /Q
pause
echo "-Fin-"
exit
)
SET /A ligneCourante+=1
)
)
)
echo Prizm au Nom de PRIZM introuvable. Verifiez le branchement et le nom du sotckage de la Prizm.
pause
Quand vous voudrez transférer, vous n'aurez qu'à brancher la calto et une fois qu'elle est reconnue, double-clic sur le batch pour lancer la copie!
Et voilà, vous savez le nécessaire pour créer un projet et transférer un addin automatiquement. Amusez-vous bien!
Citer : Posté le 07/11/2013 20:40 | #
par contre fait gaffe, il faut aussi qu'elle tienne assez longtemps pour que tu puisse en faire quelque chose
(RIP ma prizm que je n'ai toujours pas envoyé au SAV )
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 07/11/2013 20:42 | #
Pourquoi donc ?
Citer : Posté le 07/11/2013 20:43 | #
je pense que je l'ai laissé connecté trop longtemps a mon ordi (dans le genre 10 minutes ><) et depuis elle ne veut plus s'allumer
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 07/11/2013 20:51 | #
Ouch... Goto SAV
Zut, faudrait qu'il y ai quelqu'un au bout du saut XD
3500 points
Citer : Posté le 07/11/2013 20:54 | #
de toute façon, je n'utilise jamais de goto, c'est trop sale comme code
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 07/11/2013 22:03 | #
J'en viens à me demande si Fruit Ninja sur la Prizm ne serai pas relativement lent...
ben au pire tu baisse un peu les FPS, mais tu augmente la vitesse des fruits (tu compte l'adapter?)
Fais comme Pierrot : il adapte la vitesse du jeu en fonction des FPS. un jeu qui utilise une techno similaire est SUper Meat Boy. Quand le jeu est en dessous de 60 fps, les vecteurs de vitesses sont multipliés pour compenser le ralentissement et garder une vitesse constante. (Mais cela n'empêche pas de traverser les murs en case de trop gros ralentissement...)
Citer : Posté le 08/11/2013 11:16 | #
Les touches de la prizm me paraissent trop fragile, car le clavier de la prizm n'est pas chiclé, je ne sais pas si c'est une bonne idée de coder un fruit ninja sur la prizm.
Citer : Posté le 08/11/2013 15:16 | #
Fais comme Pierrot : il adapte la vitesse du jeu en fonction des FPS. un jeu qui utilise une techno similaire est SUper Meat Boy. Quand le jeu est en dessous de 60 fps, les vecteurs de vitesses sont multipliés pour compenser le ralentissement et garder une vitesse constante. (Mais cela n'empêche pas de traverser les murs en case de trop gros ralentissement...)
tiens, j'y avais pensé pour mon minecraft, puis j'ai opté pour une autre méthode moins propre mais un peux plus rapide (et la rapidité, c'est de l'or pour un jeu aussi lent que mon minecraft).
j'utilise la méthode des buffers qui sont copiés a l'écran régulièrement (un peux comme pour les niveaux de gris).
après, si j'utilise cette méthode d'adaptation en fonction des fps, ça me permettrais de stabiliser les fps tout en évitant les éventuels crash de la calculatrice du a un timer qui fait des siennes.
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed
-mon tuto sur les Str
Mes calto: G25+, G75
Mon minecraft en dévelopement
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Citer : Posté le 08/11/2013 18:19 | #
Les touches de la prizm me paraissent trop fragile, car le clavier de la prizm n'est pas chiclé, je ne sais pas si c'est une bonne idée de coder un fruit ninja sur la prizm.
Au pire, c'est juste pour dire "On est les premiers à jouer à Fruit Ninja en couleurs sur une calto "
Pas besoin d'y laisser ses touches
Citer : Posté le 09/11/2013 14:58 | #
En fait dans mes jeux sur calto je faisais le rendering en boucle, et entre deux frames je déplaçais les éléments si le temps écoulé depuis le dernier déplacement était suffisant, mais cette technique n'est bonne qu'en cas de FPS élevé, si le rendering prend trop de temps, les déplacements seront ralentis.
Le mieux est de calculer le déplacement en fonction du temps passé depuis le dernier calcul, pour conserver une vitesse de déplacement constante quelque soit le framerate.
Citer : Posté le 10/11/2013 19:55 | #
Salut
Je cherche la fonction qui te renvoie quelles touches sont appuyées , j'ai cherché dans les dosier include mais je n'ai pas vu. Quelqu'un l'aurait ?
Zelda de Smashmaster
Super Geek Brothers de Siapran
Pac-Man
Pac-Man Color
Meta Ball
Add-ins Jetpack Joyride et Pac-Man sur PRIZM (les 2 non commencés mais en réflexion)
A la recherche des sprites jetpack Joride si quelqu'un les a en couleur
Citer : Posté le 12/11/2013 20:53 | #
Oups, réponse un peu tardive...
Tu veux juste tester si une touche en particulier est pressée ou alors récupérer justement la touche pressée (je sais pas si mon explication fait bien ressortir la différence :/ )
Dans le premier cas, je te renvoie à la fonction de PierrotLL (cf ton post sur les fonctions utiles).
Sinon, pour la seconde solution, tu as le getkey de base, mais bloquant, et sinon, j'utilisais il y a un moment celle-ci du même appareil que le getkey de base mais non bloquante !
{
[purple]int[/purple] key;
key = PRGM_GetKey();
[b][blue]if[/blue][/b] (key == KEY_PRGM_MENU)
{
//La tu mets de quoi safe-quit ton prog (t'es pas obligé de garder mais ça conserve le fait que appuyer sur [menu] faisait quitter le programme avec le getkey de base, enfin, plus ou moins)
}
[b][blue]return[/blue][/b] key;
}
[purple]int[/purple] PRGM_GetKey(void)
{
[purple]unsigned char[/purple] buffer[12];
PRGM_GetKey_OS( buffer );
[b][blue]return[/blue][/b] ( buffer[1] & 0x0F ) * 10 + ( ( buffer[2] & 0xF0 ) >> 4 );
}
Perso, je préfère la première, et il me semble qu'elle peut relativement suffire pour la plupart des usages, après, je sais pas ce que tu veux faire .
Modifié par Dark Storm : les commentaires de type // sont automatiquement pris en compte
Citer : Posté le 12/11/2013 23:10 | #
fonction qui te renvoie quelles touches sont appuyées
Cette fonction n'existe pas, la fonction getkey() ne gère pas les multitouches :/ utilise la fonction keydown de pierrotll.
Citer : Posté le 13/11/2013 20:17 | #
Euh... (reformulation) Je cherche une fonction qui te revoie la(es) touche(s) qui est pressée mais que se soit n'importe quelles touches.
Zelda de Smashmaster
Super Geek Brothers de Siapran
Pac-Man
Pac-Man Color
Meta Ball
Add-ins Jetpack Joyride et Pac-Man sur PRIZM (les 2 non commencés mais en réflexion)
A la recherche des sprites jetpack Joride si quelqu'un les a en couleur
Citer : Posté le 13/11/2013 20:19 | #
Regarde mon post trois message au dessus .
Citer : Posté le 13/11/2013 20:51 | #
Non ce n'est pas se que je cherche, je cherche une fonction qui te renvoie le nom (ou un nombre) correspondant à la touche appuyée
Exemple:
Je presse la touche alpha, il me revoit K_ALPHA, de même pour Shift (K_SHIFT).
Ajouté le 13/11/2013 à 20:52 :
oups pardon pas tout vus
C'est bon, merci
Zelda de Smashmaster
Super Geek Brothers de Siapran
Pac-Man
Pac-Man Color
Meta Ball
Add-ins Jetpack Joyride et Pac-Man sur PRIZM (les 2 non commencés mais en réflexion)
A la recherche des sprites jetpack Joride si quelqu'un les a en couleur
Citer : Posté le 05/12/2013 22:42 | #
Est-il possible de programmer en C++ sur la Prizm? Car j'aimerai bien utiliser de la POO.
Citer : Posté le 05/12/2013 22:58 | #
tu peut essayer le meme code que sur le sdk casio, voir si sa marche
tu doit juste mettre tout le code de base/en C dans un
extern "C"{
//le code en C
}
et puis sinon peut-etre qu'il y est de base, vu qu'un code C peut etre compiler par un compilo C++
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 05/12/2013 23:11 | #
tu peut essayer le meme code que sur le sdk casio, voir si sa marche
ça me met l'erreur :
D:/Prizm/PrizmSDK-0.3/projects/XXXXXXX/src/XXXXXXX.c:1:8: error: expected identifier or '(' before string constant
à la ligne extern "C"{
Citer : Posté le 06/12/2013 11:01 | #
Hum, le problème étant que c'est GCC et non G++. GCC s'occupe de uniquement du C quand G++ fait les deux (le C++ est rétrocompatible, ne l'oubliez pas).
Donc Il me semble qu'avec GCC, on ne peut compiler du C++.
Citer : Posté le 06/12/2013 21:40 | #
Ah, dommage :(.