Rapidité boucle

Bonjour,

J'essaie actuellement de reproduire la fameux jeu du serpent sur Excel.

Celui-ci fonctionne à peu près correctement mais il semble que la vitesse de mon reptile diminue lorsque celui-ci grandit.

J'imagine que cela provient du fait que l'ordi ne parvient plus à faire ce que je lui demande assez rapidement.

Voici le fichier en question.

Auriez vu un solution pour le rendre plus efficient ?

Merci d'avance !

22serpent.xlsm (32.61 Ko)

Bonjour,

forcément, un autre y avait pensé !

https://www.blog-excel.com/jeu-du-serpent-excel/

Bonne soirée

Bouben

Bonsoir,

le but n'étant pas de jouer mais de créer et de trouver des solutions à des problèmes, je dirait déjà une chose :

Dim Coul_Serp as long

Coul_Serp = Sheets(3).Cells(4, 2).Interior.Color

est plus rapide en VBA que Sheets(3).Cells(4, 2).Interior.Color à tout bout de champ

Il est plus difficile à VBA d'aller chercher une valeur sur une feuille que de la stocker une fois dans une variable et d'utiliser cette variable par la suite, en plus le code pourrait gagner en clarté car CS pour couleur serpent est court et claire que Sheets(3).Cells(4, 2).Interior.Color, non ?

Je continue de regarder

@ bientôt

LouReeD

PS : il se peut que je regarde aussi l'autre Snake en contrôle label sur Userform !!!


Re

    'Copie des adresses dans un tableau tampon
    For i = 1 To longueur
        Sheets(2).Cells(3, i) = Sheets(2).Cells(1, i) 'lignes
        Sheets(2).Cells(4, i) = Sheets(2).Cells(2, i) 'colonnes
    Next i

Ce tableau tampon, pourquoi ne pas le faire avec un tableau VBA Dim tableau()

après je n'ai pas la vision de votre esprits pour la création de ce tableau mais sous VBA il sera plus rapide que sous "transfert données entre feuille et VBA"

@ bientôt

LouReeD

Merci pour vos réponses

Effectivement j'ai vu ce jeu du serpent et c'est ce qui m'a donnée envie d'essayer de la reproduire à ma sauce.

LouReed :

  • Merci pour le conseil des variables couleurs, je ne pensais pas que le fait d'aller chercher à chaque fois dans la feuille 3 prendrait plus de temps.
  • Concernant le tableau tampon, j'avais d'abord essayé avec la manière que vous proposez (dim tableau()) mais le problème est qu'à chaque fois que le serpent mange une pomme, on doit agrandir le tableau et l'instruction Redim Preserve ne fonctionne pas. J'ai donc opté pour la solution un peu "bourrine" qui ne présente pas ce problème de redimensionnement.

a+

Bonjour,

et l'idée d'un tableau représentant le serpent avec de 1 (par exemple) et des 0 pour les cases où le serpent n'est pas et 2 pour la pomme et 3 trois pour la tête.

ce tableau représenterait les 20 x 20 case du jeu c'est à dire 400 cases allant de la 1 en haut à gauche à la 400 en bas à droite.

Les 400 cases avec une mise en forme conditionnelle fonction de la valeur de la cellule.

et chaque top du jeu inscrire les valeurs du tableau VBA dans la feuille jeu. Plus de problème de longueur du serpent car compris dans les 400 cases... Plus de problème de couleur car comprises dans les MFC.

Plus de problème de vitesse car dès le début on gère la totalité de la taille du serpent...

C'est une idée...

@ bientôt

LouReeD

Solution intéressante mais je vois mal comment effectuer le décalage des cellules à chaque top.

Par exemple, dans le fichier ci-joint :

Comment dire à VBA que la valeur 2 présente dans tableau(5,3) doit se retrouver dans (6,3) en cas de direction "bas", et ce pour chaque cellule du serpent ?

5classeur1.xlsx (12.68 Ko)

de la même manière que vous dites à VBA de stoker en sheets(2) les nouvelles coordonnées.

vous travailler avec ligne et colonne

il faudrait un tableau(ligne,colonne) dimensionné de cette façon Dim jeu(19,19)

avec deux variables supplémentaire tête(1,1) et queue(1,1) afin de connaître leur position sur le jeu...

En fait les "1" intermédiaire ne bougerais pas et ne servirai qu'à vérifier si tête(1,1) = serpent(19,19) = 1, ou un truc comme ça...

ça m'amuse, car je ne suis pas une bête, mais il me plait de chercher.

@ bientôt

LouReeD

Bonjour,

pour que la vitesse de jeu soit constante quelle que soit la longueur du serpent, il faut éviter les boucles qui utilisent une longueur variable.

un suggestion en pièce jointe.

après les autres optimisations proposées pour gagner en performance restent valables.

8serpent.xlsm (33.99 Ko)

Merci h2so4 pour ta proposition. Mais j'ai l'impression que la vitesse demandée dans le code (délai de 0.02s) n'est pas du tout respectée, bien qu'elle soit constante.

Ok LouReed je vois un peu près la philosophie, j'essaie et te tiens au courant.

une autre proposition

11serpent.xlsm (28.38 Ko)

Non en fait ce n'est pas une bonne idée !!!!

je me suis perdu dans les tableaux !!!

h2so4 les a très bien utilisés dans sa deuxième version, ce type de transfert entre tableau est plus rapide qu'une lecture / écriture entre VBA et les feuilles!!!

Donc bravo à lui et moi j'ai fait 34 !!!

Pourquoi ne pas avoir deux ou trois fruits différent, qui provoque un agrandissement différent donc un nombre de point gagné plus conséquent, puis tous les 10 ou 15 points avoir une vitesse de déplacement qui s'accroit ...

@ bientôt

LouReeD

Désolé pour le délai de réponse.

Cette dernière proposition me semble parfaite !

Merci pour vos réponses, je vais essayer d'améliorer ce petit jeu

Rechercher des sujets similaires à "rapidite boucle"