Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Autres questions


Index du Forum » Autres questions » Supprimer un terme d'une liste
Ninestars Hors ligne Membre Points: 2413 Défis: 22 Message

Supprimer un terme d'une liste

Posté le 26/05/2012 18:52

Bonjour, est-il possible de supprimer un terme dans une liste? Par exemple, j'imagine
{18,22,36,14,58}->List 1
ClrList 1[3]
donc
List 1 = {18,22,14,58}
Et du coup tout les termes suivants "remontent" d'une case et le Dim réduit de 1.


Totoyo Hors ligne Membre d'honneur Points: 16040 Défis: 102 Message

Citer : Posté le 26/05/2012 19:52 | #


Non, il faut que tu crées la fonction toi-même.


{18,22,36,14,58}->List 1
Dim List 1->D
"ELEMENT A SUPPRIMER"?->B
For B->B To D //On décale les éléments suivants de l'élément à supprimer
List 1[B+1->List 1[B
Next
For 1->B To D-1
List 1[B->List 2[B //On copie la Liste 1 dans la Liste 2 sauf la dernière case
Next
ClrList 1 //On nettoie la Liste 1
List 2->List 1 //On copie la Liste 2 dans la Liste 1
ClrList 2 //On nettoie la Liste 2


C'est le premier code qui me soit sorti de la tête, il y a peut-être plus simple.
Btl Hors ligne Ancien modérateur Points: 3879 Défis: 107 Message

Citer : Posté le 26/05/2012 19:58 | #


et oui casio ne nous aide vraiment pas alors on doit tout faire nous même et donc ça devient treeees lent

(ps: totoyo SC2 tu le fais en C ou en basic?)
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
Smashmaster Hors ligne Ancien modérateur Points: 4561 Défis: 253 Message
Ninestars Hors ligne Membre Points: 2413 Défis: 22 Message

Citer : Posté le 26/05/2012 21:13 | #


Domage, j'avais déjà fait une méthode plus optimisée que ce que tu proposes Totoyo, mais ça reste toujours lent...
Merci.
Sinon, il n'y a pas non plus de moyen de changer la dimension d'une liste sans changer les valeurs de cette liste ?
Ne0tux Hors ligne Membre d'honneur Points: 3493 Défis: 265 Message

Citer : Posté le 26/05/2012 21:19 | #


Ton code est très bien Totoyo !

Je voyais plus la chose comme ceci, en une seule boucle :


? -> A    //A = case à supprimer
Dim List 1 -> B    // B = nombre de cases de la List 1
B-1 -> Dim List 2    // Création d'une liste comportant B-1 case

For 1 -> C To B-1    // La boucle s’exécute B-1 fois
   C -> D
   C >= A => Isz D
   List 1[D -> List 2[C
Next    // Fin de la boucle

List 2 -> List 1    // Transfère le contenu de la List 2 dans la List 1, ce qui efface automatiquement la List 1
ClrList 2    // Efface la List 2


Mais les deux se valent !

Mes principaux jeux : Ice Slider - CloneLab - Arkenstone

La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
Totoyo Hors ligne Membre d'honneur Points: 16040 Défis: 102 Message

Citer : Posté le 27/05/2012 10:06 | #


Tu peux augmenter le nombre de cases d'une liste en ajoutant de nouvelles cases.

Par exemple, ta Liste 1 fait 4 cases. Tu fais 0->List 1[5] et ta liste fait désormais 5 cases.

Par contre, tu ne peux pas passer de 4 cases à 6 cases directement de cette façon : 0->List 1[6] car il manque la case 5.

Tu dois utiliser la fonction Augment() qui permet de fusionner deux listes ou deux matrices.

Augment(List 1,{0,0,0->List 1
Tu ajoutes 3 cases à ta liste.
Ninestars Hors ligne Membre Points: 2413 Défis: 22 Message

Citer : Posté le 27/05/2012 10:20 | #


J'ai oublié de préciser, c'est pour réduire la dimension d'une liste.
Merci, je ne connaisais pas l'astuce avec le dernier+1
Totoyo Hors ligne Membre d'honneur Points: 16040 Défis: 102 Message
Purobaz Hors ligne Membre d'honneur Points: 2690 Défis: 110 Message

Citer : Posté le 27/05/2012 11:52 | #


Au pire tu mets un 0 dans la case à supprimer, et dans l'algo qui lit la liste, si la case est égale à 0 tu passes à la case suivante.

Ne0tux, tu peux optimiser ton algo :
C->D
C>=A->Isz D

donne :
C+(C>=A->D

I'll be back !
pour plus de fun
mes programmes fun
de technique
mes projets
et de Swag
les projets que je soutiens
Ne0tux Hors ligne Membre d'honneur Points: 3493 Défis: 265 Message

Citer : Posté le 27/05/2012 13:02 | #


Purobaz a écrit :
Au pire tu mets un 0 dans la case à supprimer, et dans l'algo qui lit la liste, si la case est égale à 0 tu passes à la case suivante.


J'ai faillit le proposer,. C'est un technique comme une autre qui a l'avantage de conserver la même taille de List tout au long du programme.

Purobaz a écrit :
Ne0tux, tu peux optimiser ton algo :
C->D
C>=A->Isz D

donne :
C+(C>=A->D


Exact.

Je ne suis pas à l'aise avec les conditions sous cette forme. J'ai préféré ne pas embrouiller notre ami et ne pas dire de bêtises...

Ceci dit, merci à toi !

Mes principaux jeux : Ice Slider - CloneLab - Arkenstone

La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
Ninestars Hors ligne Membre Points: 2413 Défis: 22 Message

Citer : Posté le 27/05/2012 13:17 | #


Pas possible avec le zero, puisque c'est des listes que j'utilise avec drawstat.
Merci quand même.

J'ai préféré ne pas embrouiller notre ami

Ne t'en fais pas pour moi. J'ai déjà plusieurs années derrière moi
Purobaz Hors ligne Membre d'honneur Points: 2690 Défis: 110 Message

Citer : Posté le 27/05/2012 13:34 | #


Ninestars a écrit :

Pas possible avec le zero, puisque c'est des listes que j'utilise avec drawstat.
Merci quand même.

Mets un nombre très grand alors !
I'll be back !
pour plus de fun
mes programmes fun
de technique
mes projets
et de Swag
les projets que je soutiens
Ninestars Hors ligne Membre Points: 2413 Défis: 22 Message

Citer : Posté le 27/05/2012 14:05 | #


Non, dans mon jeu, il y a un déplacement latérale de la caméra, et les immeubles sont crées alétoirement au fur et à mesure, de même ceux qui sortent de l'écran sont effacés, donc le but c'est d'avoir une liste qui correspond uniquement aux immeubles présents sur l'écran afin de ne pas surcharger en mémoire et d'avoir un jeu fluide.
Purobaz Hors ligne Membre d'honneur Points: 2690 Défis: 110 Message

Citer : Posté le 27/05/2012 14:11 | #


Dans ce cas, tu devrais remplacer les coordonnées des immeubles sortants par celles des immeubles entrants.

C'est un peu le principe de mon jeu => lien.
Malheureusement le scrolling horizontal est assez lent en basic.
I'll be back !
pour plus de fun
mes programmes fun
de technique
mes projets
et de Swag
les projets que je soutiens
Ne0tux Hors ligne Membre d'honneur Points: 3493 Défis: 265 Message

Citer : Posté le 27/05/2012 14:18 | #


Si tu recherche la fluidité, pour effectuer le déplacement latéral de la caméra, change le ViewWindow plutôt que de changer les coordonnées des Lists !

Je n'e sais pas si l'adaptation de cette méthode est possible pour ton jeu mais je te la conseille vivement.

En effet, l'affichage d'un graphisme par le Drawstat est relativement rapide. Ce qui l'est moins, c'est "l'adressage" des coordonnées parfois très nombreuses dans les Lists correspondantes. L'astuce consiste donc à supprimer le temps correspondant à cet adressage, en remplissant les Lists une bonne fois pour toute, et en changeant les paramètres du ViewWindow, afin de décaler l'élément graphique.

J'espère que cela pourra t'aider, même si j'ai l'impression que tu ne pourras pas l'utiliser pour ton jeu actuel.

Sinon, en résumé, voici le code pour supprimer une valeur d'une liste (Merci Puro' pour l'optimisation) :

?->A
Dim List 1->B
B-1 -> Dim List 2
For 1->C To B-1
C+(C>=A->D
List 1[D->List 2[C
Next
List 2->List 1
ClrList 2


Mes principaux jeux : Ice Slider - CloneLab - Arkenstone

La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
Purobaz Hors ligne Membre d'honneur Points: 2690 Défis: 110 Message

Citer : Posté le 27/05/2012 14:59 | #


Pour décaler le drawstat tu peux aussi faire :
List 1 - 2 -> List 1
C'est aussi très rapide.
I'll be back !
pour plus de fun
mes programmes fun
de technique
mes projets
et de Swag
les projets que je soutiens
Ninestars Hors ligne Membre Points: 2413 Défis: 22 Message

Citer : Posté le 27/05/2012 15:01 | #


Purobaz, je vais voir, pour changer, ca risque d'être pire étant donné que l'espace, la hauteur et la largeur de chaque batiment est aléatoire.

Ne0tux, j'ai déjà fait avec le ViewWindow

EDIT :
Pour décaler le drawstat tu peux aussi faire :
List 1 - 2 List 1
C'est aussi très rapide.

Je dois faire ça pour les trois listes (batiment, ennemis, tir) donc c'est pour cela que j'ai fait avec le viewwindow.
Deplus avec ViewWindow on peut faire des zooms
Dark storm Hors ligne Labélisateur Points: 11541 Défis: 176 Message

Citer : Posté le 29/05/2012 18:24 | #


c'est une adaptation de Canabalt ? (les immeubles aléatoires...)
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Ninestars Hors ligne Membre Points: 2413 Défis: 22 Message

Citer : Posté le 29/05/2012 19:54 | #


Peut être, je ne connais pas mdr.
Mais j'ai laché ce projet, ce n'était qu'un entraînement, je suis en train de faire un Age of Empire.

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 v42 © créé par Neuronix et Muelsaco 2004 - 2021 | Il y a 35 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