Premier jeu, un Sudoku ambitieux!
Posté le 10/01/2013 21:49
Bonjour a tous, c'est mon premier post.
Ca fait un moment que je lui ce forum et j'ai toujours pu y trouver des reponses, mais la j'aurais besoin d'un peu plus de conseil, c'est pour cela que je me suis inscrit et que j'ai fait ce post.
Il y a quelques années déjà, j'ai eu ma graph 35+ au moment de sa sortie, et j'adorais les sudokus... A l'époque j'avais beaucoup de temps libre et j'ai appris le basic pour écrire un générateur de grilles de sudoku completement aléatoire, chose qui n'existe pas (ou en tout cas que je n'ai pas trouvé).
Apres peu de temps je me suis rendu compte qu'il s'agit d'un probleme np complet et que donc produire 100% de grilles de sudoku 100% aléatoirement est tres difficile. J'ai donc simplifié le probleme, et j'ai écrit un moteur a recursion simple, qui est (beaucoup) plus rapide, au prix de quelques grilles fausses(68% de réussite en moyenne).
Vous pouvez voir le prog de démonstration que j'ai utilisé pour débugger ce moteur, il génère une grille a partir de zéro aléatoirement. Je l'ai appelé
SUDONGIN pour sudoku-engine.
Il a la particularité de pouvoir remplir indifféremment des grilles vierges et des grilles partiellement remplies.
J,ai ensuite écrit rapidement un jeu,
SUDOKU qui exploite cette caractéristique en étant doté non seulement d'un mode de jeu normal, mais aussi d'un solveur.
Fichier joint
Citer : Posté le 11/01/2013 18:26 | #
Sinon, j'utilise Notepad++, qui a l'avantage de géré tout types de fichiers, d'avoir l'indentation automatique, d'être gratuit, de pouvoir modifier les couleurs de coloration, et d'être très léger donc qui tient sur n'importe quelle clé USB, même de 128Mo
Je sais, je fait de la pub, mais bon...
Citer : Posté le 11/01/2013 18:33 | #
Je l'utilise pour html / javascript
Citer : Posté le 11/01/2013 18:35 | #
Bah en même temps il est bien ce logiciel, perso c'est mon main
Citer : Posté le 11/01/2013 19:15 | #
+1 notepad++, je n'utilise que lui en dehors du SDK pourave de casio
-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 12/01/2013 16:30 | # | Fichier joint
bon, bah voila, je vous joins ce que j'ai fait pour le moment, j'ai fait une bonne interface, et une horloge en temps réel.
Et maintenant je commence a porter le moteur que j'ai fait en basic en C.
Si vous testez mon prog vous verrez que meme si le chrono est precis, l'afficheur n'est pas rafraichi en continu. c'est parce que je n'ai pas reussi a rendre GetKey non bloquant, comment faire? J'en ai absolument besoin pour mon jeu puisqu'il faut pouvour s'occuper du curseur et de l'horloge en meme temps...
Citer : Posté le 12/01/2013 18:23 | #
tu peut utiliser IsKeyDown(int keyCode);
si la touche en question (par exemple KEY_CTRL_UP ou KEY_CTRL_EXE) est appuyée, la fonction renvoye 1, sinon 0
cf doc
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 12/01/2013 18:48 | #
Ah merci! J'avais pas vu cette fonctions, j'ai pas encore bien la main avec fxlib
Citer : Posté le 12/01/2013 19:10 | #
n'hesite pas a lire la doc traduite, tu pourra decouvrir des trucs bien utiles!
http://wiki.planet-casio.com/fr/Fxlib.h
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 12/01/2013 19:58 | #
cool. J'avais vu aussi AnyKey() de la librairie Ecode, mais je comprends rien de rien de rien a ce qu'elle renvoie, ni comment elle marche.... quand je regarde son code on dirait meme pas du C mais de l'assembleur bizarre... Tu connais par hasard?
Ajouté le 12/01/2013 à 20:50 :
Sinon, c\'est peut etre possible d\'appeler le GetKey du basic dans le programme en C? Ou est ce qu\'on apprend les syscalls j\'ai du mal a trouver sur le forum?
Citer : Posté le 12/01/2013 20:53 | #
http://www.planet-casio.com/Fr/forums/topic8995-1-%5BSDK-Graph-85%5D-Les-syscalls.html
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 12/01/2013 21:18 | #
oui j'ai regardé.... et apres avoir essayé, ca marche pas. Pourtat je l'ai bien mis greffé sut tin syscall de la RTC... Enfin c'est pas si grave, j'ai trouvé une version non bloquante de GetKey : c'est "GetKeyWait( KEYWAIT_HALTOFF_TIMEROFF, 0, 0, &key); "
Citer : Posté le 12/01/2013 21:21 | #
A propos de GetKeyWait :
La fonction incluse dans le SDK n'a jamais fonctionné, c'est une grosse bourde de Casio.
Mais il existe un syscall qui lui fonctionne (j'en avais parlé ici et il y a plus de détails dans la documentation des syscalls)
http://www.planet-casio.com/Fr/forums/topic11632-2-[Liste]-ADD-IN-compatible-SH4-(Edit-au-21-09-12-0745).html
il a dit ca dans ce topic
PS: il faut recopier l'url complete, la balise bugue avec les crochets
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 12/01/2013 21:24 | #
sérieux -_- Nan mais ******** quoi merci casio...
Citer : Posté le 12/01/2013 21:30 | #
tu peut toujours utiliser le syscall qui fait la meme chose, mais je ne le connais pas
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 12/01/2013 21:40 | #
bah je suis en train de lire la doc et de me baser sur le syscall que tu m'as donné pour essayer de la faire marcher.
Ajouté le 12/01/2013 à 23:35 :
bon si j\'ai bien compris il me faut ca : Keyboard_PRGM_GetKey
Et on l\'appelle avec le code 0x6C4
ou bien ca : KeyBoard_GetKeyWait
et la par contre c\'est le code 0x247
C\'est déjà un début....
J\'ai essayé de mettre le meme code que pour RCT_GetTick mais en changeant pas le bon code, mais ca plante tout...
Ajouté le 12/01/2013 à 23:36 :
unsigned char hnibble:4;
unsigned char lnibble:4;
} TBCDbyte;
typedef struct{
unsigned short exponent:12;
unsigned short mantissa0:4;
TBCDbyte mantissa[7];
char flags;
short info;
} TBCDvalue;
int Keyboard_PRGM_GetKey( TBCDvalue );
static int SysCallCode[] = {0xD201422B,0x60F20000,0x80010070};
static int (*SysCall)(int R4, int R5, int R6, int R7, int FNo ) = (void*)&SysCallCode;
int time_getTicks()
{
return (*SysCall)(0, 0, 0, 0, 0x3B);
}
Keyboard_PRGM_GetKey( &buffer )
{
return (*SysCall)(&buffer, 0, 0, 0, 0x6C4);
}
int PRGM_GetKey(){
TBCDvalue buffer;
Keyboard_PRGM_GetKey( &buffer );
return ( buffer.mantissa0 * 10 + buffer.mantissa[0].hnibble );
}
Ajouté le 12/01/2013 à 23:39 :
Grace a ce code, vous allez pourvoir découvrir de toutes nouvelles erreurs qui vous hanterons pendant des mois!
Citer : Posté le 13/01/2013 08:56 | #
t'as pas encore tester les niveaux de gris toi
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 13/01/2013 15:24 | #
+1 Dodormeur, les sycalls, c'est de la gnognote par rapport aux diaboliques EBR (Exeption Blocked Reset) qu'apportent les niveaux de gris.
-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 13/01/2013 17:09 | #
je veux bien vous croire^^
Quelqu'un sait comment envoyer le 0x6C4?
Citer : Posté le 13/01/2013 18:01 | #
tu n'as pas d'info sur comment il fonctionne?
et est-tu sur du type de la fonction?
-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 13/01/2013 18:24 | #
Bon bah j'appréhende les syscalls comme je peux.
Dans la doc c'est écrit ceci :
0x6C4 is the PRGM-GetKey function and calls 0x247 with KEYWAIT_HALTOFF_TIMEROFF, t. i. non-blocking.
result is a pointer to a 12 byte buffer. The buffer receives the matrixcode as BCD-value.
In case of the slim the matrixcode is automatically converted to the standard type's code! Hence the function is calc type-independent.
The function decrements the row-number by 1 to prevent the occurrence of the invalid BCD-digit "A". F. i. the key F1 yields 79, whereas syscall 0x0247 would return (0x07;0x0A) in this case.
Exception:
in case of the "AC/on"-key BCD-error 1 is returned, t. i. exponent==0xF00 and first nibble of the mantissa==1.
If no key is available, the function returns a BCD-value 0 in result*.
The function's int-return-value is 0 in case of the "AC/on"-key, else 1.
To yield the same function result as PRGM-GETKEY one could use this:
int PRGM_GetKey(){
unsigned char buffer[12];
Keyboard_PRGM_GetKey( buffer );
return ( buffer[1] & 0x0F ) * 10 + ( ( buffer[2] & 0xF0 ) >> 4 );
}
Donc j'ai essayer de reprendre l'exemple à la fin du texte qui, selon l'auteur "renvoie le meme resultat que le GetKey de PRGM en basic.
Donc j'ai cherché la fonction Keyboard_PRGM_GetKey( buffer );
mais elle est introuvable...
Ajouté le 13/01/2013 à 18:25 :
J\'ai réussi a trouver le format CBD pour mettre le resultat et donc j\'ai repris le code d\'interprétation du buffer comme dans l\'exemple. Mais il me manque le principal!
Ajouté le 13/01/2013 à 18:54 :
ah et au fait, je sais que Keyboard_PRGM_GetKey( buffer ); c\'est la fonction d\'une librairie qui existe, le truc c\'est que je ne l\'ai pas! Tout ce que je sais c\'est que cette fonction appelle le syscall 0x6C4.
Ajouté le 13/01/2013 à 20:08 :
Bon je pense que je me rapproche de la bonne réponse :
static int (*SysCall)(int R4, int R5, int R6, int R7, int FNo ) = (void*)&SysCallCode;
int time_getTicks()
{
return (*SysCall)(0, 0, 0, 0, 0x3B);
}
void Keyboard_PRGM_GetKey(unsigned char* pointer)
{
*pointer = (*SysCall)(0, 0, 0, 0, 0x6C4);
}
int PRGM_GetKey()
{
unsigned char buffer[12];
Keyboard_PRGM_GetKey( &buffer );
return ( buffer[1] & 0x0F ) * 10 + ( ( buffer[2] & 0xF0 ) >> 4 );
}
Ajouté le 15/01/2013 à 01:23 :
mon problème est réglé grâce à pierrotll! Le développement peut reprendre son cours
Ajouté le 15/01/2013 à 01:26 :
le bon code c\'est donc ça :
{
(*SysCall)(pointer, 0, 0, 0, 0x6C4);
}
Citer : Posté le 30/01/2013 23:39 | #
Bon en fait le code de pierotll marche pas mais tant pis. j'ai réécrit la fonction avec iskeydown. voila un build de mon programme :
il contient :
-une manipulation de curseur
-une horloge en temps réel.