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
Citer : Posté le 25/07/2012 23:35 | #
La mienne est plus ou moins comme ça:
-initialisations pour le menu
-menu
-initialisations pour le jeu
-boucle principale
-fin de partie
-retour au début
My program is not working, I have no idea why.
My program is working, I have no idea why.
Citer : Posté le 25/07/2012 23:52 | #
J'ai déplacé ce topic dans la partie astuce ;).
Voici ma méthode de programmation :
[u]Initialisation de la fenêtre graphique[/u]
ViewWindow ...
AxeOff
BG-None
0->A~Z
En mode texte je mets juste ClrText:0->A~Z
[u]Gestion des touches en temps réel[/u]
Do
GetKey -> G
If G=31
Then ...
...
IfEnd
If G= 37
Then ...
...
IfEnd
...
...
LpWhile G!=47
[u]Gestion des touches dans un menu[/u]
0->X
Do
Getkey
Ans=72=>1->X
Ans=62=>2->X
...
LpWhile Not X
->Je décompose souvent mes jeux/programmes en plusieurs sous programme pour plus de clarté dans le code
->Pour les sauvegardes j'utilise des matrices.
->Au niveau de l'optimisation je code comme ceci : Lien
Ordre de programmation:
1-Initialisation
2-Moteur du jeu (boucle principal)
3-Les menus
4-Optimisations du code
Dans tous les autres cas je code comme toi.
Citer : Posté le 26/07/2012 00:31 | #
J'ai oublié de préciser que je commençais toujours un programme par "Lbl 0"
On ne sait jamais, si je veut qu'à un moment le jeu redémarre (après avoir fini une partie par exemple)
Citer : Posté le 26/07/2012 09:34 | #
Lbl
Perso, pour les menus, et le getkey, tant que ce n'est pas un jeu d'action, je préfère cette méthode:
0->A~Z
Do
GetKey
LpWhile Ans!=72 And Ans!=62 And...
Ans=72=>1->X //généralement, je lance un sous-prog
Ans=62=>2->X
...
Citer : Posté le 26/07/2012 12:14 | #
pour les menus :
while 1
If U:Then 0->U
Locate X,Y,">"
Locate X,Y+1,">"
Locate X,Y+2,">"
Locate X,Y-1+C,"}"
Ifend
Getkey->G
If G=37:Then 1->U:Isz C
Ifend
If G=28:Then 1->U:Dsz C
Ifend
G=31=>Break
Whilend
C=...
C=...
Sinon je déteste créer des sous programmes à tout va. Pour limiter leur prolifération je fais
0:Prog "XXX"
ou
1:Prog "XXX"
2:Prog "XXX"
et dans le programme XXX
If Ans=0:Then
...
Ifend
If Ans=1:Then
...
Ifend
Citer : Posté le 06/08/2012 10:46 | #
Configuration :
AxesOff
CoordOff
ViewWindow 1,127,0,63,1,0
Si j'utilise le drawstat :
SWindMan
//réglages de StatGraph1
//réglages de StatGraph2
//réglages de StatGraph3
Et bien sûr initialisation des variables dont j'ai besoin.
Structure du jeu :
Programme principal :
-petit générique avec mon pseudo et le nom du jeu
-menu principal qui envoie vers les sous-programmes
Programme du jeu :
-boucle principale type do/while
-à la fin de la boucle condition puis gagné ou perdu
Programme crédits :
-mon pseudo
-le nom du jeu
-remerciements
-date et contexte (concours, etc)
Programme instructions :
-principe du jeu
-touches
-points, objectifs
Pour un grand jeu, je divise la partie jeu en sous programmes.
Gestion des touches :
2 cas de figure :
-le jeu attend une pression : je bloque après l'affichage
WhileEnd
-le jeu tourne toujours et si pression événement : dans la boucle principale j'insère une conditon
Then
IfEnd
Mémoires utilisées :
-pour un groupe de données utiles uniquement le temps d'une exécution et pour les données graphiques les listes
-pour des données uniques utiles uniquement le temps de l'exécution les variables
-pour des données à sauvegarder ou la gestion de maps (donc à plusieurs dimensions) les matrices
Citer : Posté le 06/08/2012 22:04 | #
Pour sauver des données, j'utilise toujours des matrices, puisqu'on utilise les listes en maths...
Citer : Posté le 22/02/2014 19:44 | #
J'ai oublié de préciser que je commençais toujours un programme par "Lbl 0"
On ne sait jamais, si je veut qu'à un moment le jeu redémarre (après avoir fini une partie par exemple)
Met un PROG "aaaaa" à la place comme ça tu économise un lbl
-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
Citer : Posté le 22/02/2014 19:47 | #
/*déterrage: apprend à regarder les dates même si c'est nouveau dans la boîte de réception*/
Et au lieu d'utiliser les lbl vaut mieux utiliser des sous programmes comme ça tu peux revenir là où tu t'es arrêté avant de faire le saut.
Citer : Posté le 22/02/2014 20:14 | #
Je trouve ce topic assez utile, donc un déterrage n'est pas trop grave
Et au lieu d'utiliser les lbl vaut mieux utiliser des sous programmes comme ça tu peux revenir là où tu t'es arrêté avant de faire le saut.
Citer : Posté le 22/02/2014 20:20 | #
10ème niveau de sous-programme
Dans toute ma carière Basic je n'ai JAMAIS utilisé le moindre petit sous programme.
J'ai horreur de ça. Vive les bons vieux Lbl / Goto !
Toutes les formules de Première S.
Toutes les formules de Terminale S.
Un programme de calculs.
Super Mario 3
warrior
Jump Ball
First Fly
►Jeu gagnant des 48h CPC n°12◄
Mon site de discussion pour ados : http://entre-ados.net/ (a brûlé dans l'incendie d'OVH)
Mon éditeur de cours en ligne et plateforme de partage : http://wordline.xyz (a succombé à la concurrence de Google Drive...)
Citer : Posté le 22/02/2014 20:29 | #
Peut être que ça met des erreurs mais je ne vais jamais jusque là même avec beaucoup de sous-progs au total, et en plus l'avantage c'est de pouvoir revenir directement, suffit de s'en servir comme les fonctions en C (et on peut toujours mettre un test de valeur au début pour renvoyer au prog principal si on y entre directement, je fais ça à chaque fois quasiment que j'utilise des sous progs)
Citer : Posté le 22/02/2014 21:22 | #
ça fait très longtemps que je n'utilise plus le Lbl 0 en début de programme.
Et j'utilise souvent les mêmes sous programmes :
-"JEU" qui est le programme principal;
-"JEU.MAP" pour stocker les niveaux;
-"JEU.F" pour mettre toute les fonctions (généralement je met une valeur dans Z qui est ma variable constamment temporaire dans tout mes programmes qui permettra au sous-programme de savoir qu'es-ce que je lui demande).
Pour les fonctions par exemple un afficheur de texte qu'il faut appeler avec la valeur Z=3 je met 3 dans Z, je met le texte à afficher dans la Str 1 puis j'appelle le sous programme, qui s'occupera du reste.
Citer : Posté le 22/02/2014 21:55 | #
Bah ça va juste 2 ans d'écart
Ajouté le 22/02/2014 à 21:57 :
Moi j'utilise aucun sous-prog et j'économise les Lbl (bugé mais utile) et j'essaye d'utiliser le moins de list/matrices
-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
Citer : Posté le 22/02/2014 22:30 | #
Pourquoi? Les listes et les matrices c'est super utile pourtant!
Citer : Posté le 23/02/2014 07:20 | #
J'ai toujours un peu peur que ce soit lent au niveau du CPU (sans compter que les Isz et Dsz sont interdits )
Citer : Posté le 23/02/2014 08:49 | #
Merci d'avoir déterré, j'avais parlé a totoyo de faire ce genre d'astuce dans le tutoriel (sans réponse ) et la, en fait c'est déjà fait ! Merci pseudopourri quand même
Citer : Posté le 23/02/2014 09:38 | #
J'ai toujours un peu peur que ce soit lent au niveau du CPU (sans compter que les Isz et Dsz sont interdits )
Citer : Posté le 23/02/2014 09:50 | #
Je savais pas pour le Dsz X:1 ; ça pourrait m'éviter des bugs
Pour cette histoire de lenteur, je parlais de la manipulation des listes et matrices.
Et, pour autant que je sache, Dsz List1[2] est interdit
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:
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