TOP 20 | Labels PC | Action/Sport | Direction/Tir | Réflexion | Role/RPG | Stratégie | Divers | Add-ins | Projet | Concours Casio | Bric à Brac | MLC | LuaFX |
Calculatrices
Graph 35 à 100 (CFX)
Graph 25/25+ (Pro) (fx-7400)
Graph 75/85/95 (SD) (fx-9860)
Graph 100/100+ (AFX)
ClassPad 300/330
Fx-CG 10/20
Fx-CP 400

Retour aux miniatures
Tri avancé
Liste des programmes
Nom Date
Run
Slide
Arena
Tu Quoque
Kirby DreamLand
Geometry Dash
KT Polar Bear
Pac-Man
Feeries
IPod Spin
SeaRush
Atlantis
L'invasion Sean
Smiley
Swing Copters
Mupong
Street Fighter
Le compte est bon
Runner
IPod FallBlocs
Pages: 1,2,3,4,5,6,7,8 >>

¤ Transférer un programme sur
sa calculatrice

¤ Vous cherchez une fonction ?
Jeux >> Graphs 75/85/95 (SD) >> Add-ins >> Slide
Slide
Version : 1.0 Taille : 60224 octets Ajouté le : 2017-03-26 11:35 Modifié le : 2017-03-26 11:37
Auteur et posteur :
Yatis
Hors ligne
Membre
Niveau: Intermédiaire
Points: 118
Défis: 0
Message
Planète Casio - Add-in Casio - Slide - yatis - Calculatrices
Nombre de visites sur cette page : 706
Score au progrank : 20
Pas encore de note !

Vous devez être inscrit(e) et avoir 20 points ou plus pour noter.
82 téléchargements | Soumettre un test


A cause du changement de processeur des nouvelles Graph 35+ USB, 75 et 95 SD, de nombreux addins sont incompatibles avec ces calculatrices.
Rendre un addin compatible - Plus d'informations sur ce problème - Liste des addins compatibles

Description :

Cette add-in est l\'adaptation du jeu slider, il reprend la plupart des niveaux (il y en a 160) ainsi que 4 « mode » de jeu :
-play (commence du niveaux 1 jusqu\'aux dernier niveaux) (stable)
-levels (menu des niveaux) (stable)
-timed (le joueur doit refaire tout les niveaux dans le désordre avec 2 minute comme temps de départ. (les 80 premier niveaux jouer font gagner 10 secondes, les 70 niveau d\'après 5secondes, puis les dernier niveaux font gagner des dlc de call of duty)) (~stable)
-infinite (génère une map au piff) (bug++)

commande :
-flèche pour bouger
-[F6] : restart
-[EXIT] : pause (+[F6] retour menu base)
-[F5] : recréer un map au piff
-[SHIFT] ou [EXE] : entrée


a venir : une maj pour fix le mode infinite + le mode timed sera refait car jugé trop chiant


Commentaires :


-florian66-
Hors ligne
Rédacteur
Niveau: Aucun
Points: 2216
Défis: 19
Message
Posté le 26-03-2017 à 12:40
Bonjour, bienvenue dans la communauté des programmeurs en C !

J'ai testé ton jeu et je l'ai trouvé bien fait !

Cependant,en ayant regardé la taille de l'addin (60ko), nous nous sommes dit (Lephenixnoir et moi) que l'on devrait regarder un peu le code et donc on s'est penché sur ton stockage des niveaux !

Ce que je vais te proposer comme optimisation te permettra de stocker chaque niveau sur *hum* 19 octets maximum et donc tes 160 niveaux sur 3040 octets ! Ce qui est ridicule !

Notons que tes niveaux sont codés en [i]unsigned char[/i] ce qui fait que chaque nombre que tu stockes prend chacun 1 octet. Donc chaque niveau fait donc 1*18*10 + 1 (nombre max de coups) => 181 octets !

Si on enlève les bordures extérieures (qui sont toujours à 1), on se retrouve maintenant à stoker chaque niveau sur 16*8 octets (128 octets).

Notre méthode d'optimisation serait de stocker chaque "1" ou "0" sur chaque bit d'un nombre (et pas 1 octet avant).
Si chaque ligne est codée sur 2 octets ([i]unsigned short[/i]) * 8 lignes, on arrive donc à 16 octets pour le dessin du niveau. (1 octet = 8 bits)

L'autre problème est de stocker aussi le nombre de coups maximum ainsi que l'emplacement de départ (bloc n°9) et d'arrivée (bloc n°8) du bloc noir.
On va donc stocker les coordonnées (x,y) du bloc de départ dans 1 seul octet (avec x qui prend 4 bits et y, les 4 autres bits) et le nombre de coup maximum dans un octet entier.
On arrive donc à stocker le départ et l'arrivée dans 2 octets + 1 octet (pour le nombre maximum de coups) => 3 octets.

Récapitulons : on a donc les 16 octets du niveau + 3 octets pour le reste => 19 octets

Avec cette méthode, on peut donc écrire :
    static const unsigned char map1[]={
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
        1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
        1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
        1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 1,
        1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
        1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
        1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
        1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,    1}; // ton niveau

Si on optimise :
0000000000000000 => 0 // 1ere ligne de ton niveau
0000000000000000 => 0 // 2eme ligne de ton niveau
1000000000000000 => 32768 // 3eme ligne de ton niveau
0000000000000000 => 0
etc ...;

Pour les coordonées : le départ (bloc n°9) (on part sur un repère orthonomé)
x => 0000 et y => 0100
Donc un octet : 00000100

Idem pour l'arrivée
Et on stocke le nombre de coup dans un `unsigned char`


Pour éditer ou récupérer chaque valeur, les opérateurs bitwise du C te seront d'une grande aide !

En espérant que tu en tiennes compte. Je te souhaite beaucoup de courage pour la suite !

Si tu as des questions, n'hésite pas à la poser !
Yatis
Hors ligne
Membre
Niveau: Intermédiaire
Points: 118
Défis: 0
Message
Posté le 29-03-2017 à 17:49
Merci beaucoup pour tes conseils, je vais essayer d'optimiser tout ça
-florian66-
Hors ligne
Rédacteur
Niveau: Aucun
Points: 2216
Défis: 19
Message
Posté le 04-04-2017 à 08:12
Ah oui, auusi j'ai vu qu'il y avait beaucoup de IsKeyDown(), je pense que tu peux les remplacer par des GetKey(&key); en modifiant ton moteur de jeu de cette façon (GetKey est une fonction bloquante)

calcul des collisions ainsi que de la position
GetKey(&key); //on récupère la touche pressé
switch(key)
    {
    case KEY_CONTROL_UP : ... // on exécuté une action
                         break;
    case KEY...
                         break;
    }


On fait le tout dans une boucle

Publicité et partenaires
Casio Education
Casio éducation

TI-Planet
Casiopeia
Casiopeia
CasioFan, la communauté ClassPad
CasioFan
CodeWalrus
CodeWalrus

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2015 | Il y a 78 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements
Rugby Manager | Jeu de basket | Jeu de handball | Jeu de tennis | Nova Raider | Réparation téléphone | Soccer Rush | Tasty Tale

Planète Casio est un site communautaire indépendant, géré bénévolement et n'est donc pas affilié à Casio | Toute reproduction de Planète Casio, même partielle, est interdite
Les fichiers, programmes et autres publications présents sur Planète Casio restent la propriété de leurs auteurs respectifs et peuvent être soumis à des licences ou des copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd