Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Vos tutoriels et astuces


Index du Forum » Vos tutoriels et astuces » Vos méthodes de programmation
Ray Hors ligne Membre Points: 1338 Défis: 18 Message

Vos méthodes de programmation

Posté le 25/07/2012 23:00

Bonsoir à tous, je créé ce sujet pour vous demander quelles sont vos méthodes de programmation.
Je précise que je ne savais pas où placer ce sujet, alors si son emplacement pose problème, ça ne me dérange pas qu'il soit déplacé.

Bref, voici un modèle de post pour connaître votre méthode :
Modèle
Masquer
Initialisation :
Fenêtre Texte :
codes/explications
Fenêtre Graphique :
codes/explications

Boucle principale du logiciel :
Avant la boucle principale :
codes/explications
Interface :
codes/explications
Partie Getkey :
codes/explications
Partie code du logiciel :
codes/explications

Menu principal :
Interface :
codes/explications
Passage à la boucle principale :
codes/explications

Mémoires utilisées :
Sauvegarde :
Vos Moyens de sauvegarde
Mappage (jeux) :
codes/explications

Autres parties du programme :
Mettez ce que vous voulez ici

Ordre de programmation :
1-
2-
3-
4-
etc...

Comment avez-vous des idées de logiciels ?


Voici ma méthode de programmation :
Initialisation :
Fenêtre Texte :
Lbl 0
ClrText
0->A~Z
[Variables à initialiser]

Je commence souvent mes programmes par un "ClrText", pour dire d'être sur que aucun ancien affichage soit sur l'écran au démarrage du logiciel.
Ensuite je met mes variables à zéro pour éviter d'avoir des problèmes plus tard.
Enfin, je met les chiffres qu'il faut dans les variables.

Fenêtre Graphique :
Lbl 0
[Configurations de l'écran]
ClrGraph:ViewWindow 1,127,0,1,63,0
0->A~Z
[Variables à initialiser]

Tout d'abord, je met les configurations de l'écran (AxesOff, etc...), puis j'efface la fenêtre graphique pour ensuite la réinitialiser. enfin, je fais la même chose pour les variables que pour la fenêtre textuelle.

Boucle principale du logiciel :
Avant la boucle principale :
[Initialisation des variables]
[Début de l'initialisation de l'interface]
While 1
[Boucle Principale]
WhileEnd

Rien à expliquer...

Interface :
Locate X,Y,""
ou
""
ou
[Codes graphiques(PlotOn, etc...)]

Je fais toujours mes interfaces avec ces codes ci-dessus.

Partie Getkey :
Getkey->[TETA]
If [TETA]=[Chiffre]
Then [Le Code]
ifEnd
If [TETA]=[Chiffre]
etc...

Je prend le Getkey que je met dans [TETA] puis je fais le code si tel bouton est appuyé.

Partie code du logiciel :
Je n'ai pas de code spécifique pour les jeux, tout dépend de ce que j'ai décidé de créer, ça peut être des conditions ou des lignes qui s’exécutent automatiquement.
Si le code m'embrouille, je le divise en plusieurs fichiers (exemple : mon RQuest)
et, si les fichiers sont petits, et pas repris à plusieurs reprises, soit je laisse les fichiers séparés, soit je les remets dans le fichier principal.

Menu principal :
Interface :
Locate X,Y,""
ou
""
ou
[Codes graphiques(PlotOn, etc...)]

Exactement la même chose que dans l'interface du programme, j'ai une tendance à faire les menus en utilisant le moteur graphique du programme.

Passage à la boucle principale :
J'initialise un morceau de l'interface, plus précisément les parties fixes pour éviter de faire ramer le programme.

Mémoires utilisées :
Sauvegarde :
j'utilise principalement les listes pour sauvegarder des positions, des variables, et même parfois le programme pioche directement dans les listes pour économiser des variables.

Mappage (jeux) :
J'utilise souvent les matrices, et, comme très souvent mes jeux utilisant les matrices sont en fenêtre textuelle, j'utilise des matrices de 7x21, tout l'écran.

Autres parties du programme :
je n'ai pas d'autres parties spécifiques pour mes programmes

Ordre de programmation :
1-Initialisation
2-Avant la boucle principale
3-Interface
4-Partie GetKey
5-Partie du code du logiciel
6-Menu Principal
7-Optimisations du code

Voilà, j'espère que vous prendrez le temps d'expliquer comment vous programmez


Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 23/02/2014 10:04 | #


Enfin Dsz et Isz sont prévus pour les variables, pas pour les listes et les matrices malheureusement.
Après j'ai pas regardé pour la vitesse mais ça m'a l'air correct, j'ai jamais eut de problème de lenteur avec ça.

Sinon, une astuce pour aller plus vite lors de l'affichage d'un terrain avec le tile mapping (une case de matrice = un élément du terrain), le mieux, c'est de tout mettre dans un sous-programme qui les affiches (ou mettre une autre condition qui englobe les affichages) et de n'y aller que si un élément existe: sinon le programme va faire tout les tests d'élément quand il n'y a rien et prendre plus de temps, par exemple:
exemple
Cliquer pour enrouler
For 1→X To Xmax //Xmax= longeur du terrain
For 1→Y To Ymax //Ymax= largeur du terrain
Mat A[Y,X→E
If E //si un élément est présent
Then
//le contenu qui suit peut aussi être mis dans un sous-programme
If E=1
Then //on affiche un mur par exemple
IfEnd
If E=2
Then //on affiche des pièges
IfEnd
...
IfEnd
Next
Next

C'est un exemple mais ça permet d'aller plus vite que si on avait pas mis If E
Lephenixnoir En ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 23/02/2014 10:33 | #


Ou alors:
Not E=>Next

Ça évite un bloc supplémentaire
Mais tu as raison
J'avais déja utilisé cette astuce.
En plus c'est un bon exemple. Dans ce cas, je ne sais pas s'il serait vraiment plus rapide de mettre à jour des listes pour faire un DrawStat que des simplement faire des F-line avec des coordonnées relatives.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 23/02/2014 10:37 | #


Ça dépend de la taille et de la complexité de tes sprites: si c'est un truc tout simple, type un carré, c'est mieux d'utiliser les f-line tandis qu'un personnage soigné sera plus simple en DrawStat: le drawStat devient intéressant pour des gros trucs.
Lephenixnoir En ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 23/02/2014 10:44 | #


Dans l'ensemble je m'arrangeais plutôt pour tourner entre 3 et 6 traits par tile.
En moyenne il me fallait une vingtaine de secondes (de mémoire) pour afficher une map moyennement chargée en décor.
Le problème c'est lorsque, des fois, il y a des traits "indépendants" que je ne sais pas gérer avec le DrawStat: je ne programme plus en Basic depuis des plombes (en fait je suis à la recherche d'un projet intéressant )

Ajouté le 23/02/2014 à 10:51 :
Petits tests:

1000 affectations:
Var - 2.5 s
List - 8.5 s
Mat - 5.5 s

1000 lectures (sans affectation)
Var - 2 s
List - 6 s
Mat - 5s

C'est bien ce que je pensais
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Totoyo Hors ligne Membre d'honneur Points: 16103 Défis: 102 Message
Ninestars Hors ligne Membre Points: 2462 Défis: 24 Message

Citer : Posté le 23/02/2014 12:05 | #


Lephenixnoir a écrit :
Le problème c'est lorsque, des fois, il y a des traits "indépendants" que je ne sais pas gérer avec le DrawStat

Il suffit de mettre un point super éloigné, il ne sera pas dessiné.
Par exemple :
{1,2,999,3,4}
Lephenixnoir En ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 23/02/2014 12:10 | #


Bien vu
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 23/02/2014 12:11 | #


Pour ça je fais souvent 128-> <variable> pour éviter de répéter la valeur (souvent θ)
Lephenixnoir En ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 23/02/2014 12:15 | #


Pour économiser 2 octets à chaque fois ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 23/02/2014 12:20 | #


Quand tu commence à avoir de gros éléments ou plein d'éléments tu es content de gagner un peu de place, sourtout pour les gros projets.
Ninestars Hors ligne Membre Points: 2462 Défis: 24 Message

Citer : Posté le 23/02/2014 12:29 | #


Sinon moi je mes juste e9
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 23/02/2014 13:12 | #


Chacun fait comme il veux... Sinon, quand vous cherchez un algo pour vos progs, vous préférez utiliser une feuille et un crayon, blocnote ou directement sur la caltos? Perso c'est un peu les 3, mais j'ai un petit cahier dans lequel je note tout.
Lancelot Hors ligne Membre Points: 1274 Défis: 160 Message

Citer : Posté le 23/02/2014 14:13 | #


J'utilise plus une feuille de brouillon moi. je les recycle
Calculatrices : Casio 35+ SH4 (modifiée 75) et fx-CG 20 PRIZM
Projets que je soutiens
Des exemples parmi tant d'autres
Pokémon Jade de Dododormeur
Zelda de Smashmaster
Super Geek Brothers de Siapran
Mes Programmes
Mes Programmes
Mes Projets
Mes Projets
ColorLib
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
Lephenixnoir En ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 23/02/2014 14:32 | #


Ma tête
Ensuite ça sort sur la calto (correct dans 90% des cas)
Et merde j'ai encore mis ce smiley qui passe pas
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 23/02/2014 14:46 | #


Je le fais aussi dans ma tête mais j'aime bien avoir un suport écrit pour le récupérer après.
Lephenixnoir En ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 23/02/2014 14:57 | #


Bien sûr
C'est vrai que des fois ce serait bien que j'ai des notes... que je n'ai jamais écrites.

Exemple, une fonction qui te retourne un pixel dans un tableau d'unsigned char:
int PixEdit_GetPixel(int x,int y)
{
  int px = ((_SIZE_X-1)>>3)+1;
  return (*(image+y*px+((x-x%8)>>3))>>(x%8))&1;
}

Quand il a fallu la modifier...

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Pseudopourri Hors ligne Membre Points: 182 Défis: 9 Message

Citer : Posté le 23/02/2014 16:55 | #


Réponse au message d'Alphacreator du 22/02/2014 à 22h30:
Ça fait à peu près 6 mois que je commence à programmer et je me suis jamais vraiment intéssé aux list/matrices (du moins jusqu'à maintenant où j'ai des gros projets en drawstat) j'ai appris à les utiliser il y a peine 2/3 mois et je ne les aiment pas trop car ça prend pas mal de place pour pas grand chose.
je code en...
je code en:

-ASM (assembleur) sur x86 et gb-Z80
-locomotive basic/amstrad basic
-Basic Casio
-VBS
-Batch
-Bash
-Python 3.4
-html
-CSS
-javascript
-Lua
-brainfuck
-ruby

Il faut savoir que je ne maitrise pas parfaitement tout ces langages

[/spoiler]
Remerciment

Ma calto: graph 75
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 23/02/2014 17:01 | #


Je comprend, mais tu verra qu'ils servent beaucoup pour le stockage à long terme, les listes et les matrices sont très utilisées dans les jeux... (je fais un jeu de gestion médival et je ne pourrais pas m'en passer)
Pseudopourri Hors ligne Membre Points: 182 Défis: 9 Message

Citer : Posté le 23/02/2014 18:11 | #


Il servent (j'ai pas mal de projet ou je compte les utiliser)mais il ne sont pas très bien optimisées.
je code en...
je code en:

-ASM (assembleur) sur x86 et gb-Z80
-locomotive basic/amstrad basic
-Basic Casio
-VBS
-Batch
-Bash
-Python 3.4
-html
-CSS
-javascript
-Lua
-brainfuck
-ruby

Il faut savoir que je ne maitrise pas parfaitement tout ces langages

[/spoiler]
Remerciment

Ma calto: graph 75
Btl Hors ligne Ancien modérateur Points: 3879 Défis: 107 Message

Citer : Posté le 23/02/2014 20:15 | #


Casio et l'optimisation une longue histoire d'amour
Un excellent tuto video qui vous explique comment transférer des fichiers de l'ordinateur vers la calculatrice et vice versa ma chaine youtube
mes jeux
mes jeux

Jouez à 6 sur une seule calto : Curve Fever
Un die and retry qui vous fera bieeeen rager Test Andropov
un très bon sokoban
le seul vrai jeu de foot en basic : FIFA 12
Ca c'est ce que j'appelle un jeu de reflexion jewel master
Qui vaincra l'intelligence artificielle de cet othello
Le célèbre pacman
Et tant d'autres BTL's games

Le jeu du mois de Novembre et award du jeu le plus dur de l'année 2013 MultiTask, testez-le
Lephenixnoir En ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 23/02/2014 20:23 | #


Déjà qu'il y a des conneries assez monumentales dans la bibliothèque du système.
Ajoutez-y la magnificence de l'interpréteur BASIC (dont on se demande parfois s'il n'est pas ralenti exprès).
Alors vous pourrez toujours optimiser vos programmes ça restera nul

Merci CASIO
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 83 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd