Jeu clicker/idle "GOLD MINE" sur Excel

Salut tout le monde,

Mon jeu de Yams étant en attente de validation il est temps pour moi de continuer un autre type de jeu: le clicker/idle (certes limité sur excel) sur un ton de mine d'or (très original je sais )

A noter que tout est en travaux même si c'est déjà sur les rails donc tout n'est pas bien fait ni carré mais suffisamment je trouve pour faire une première petite présentation

titre

Pour rappel un clicker (du type Clicker Heroes pour ne citer que lui) est un jeu ou le joueur enchaine les cliques pour ou faire une action répétitive (par exemple un coffre pour l'ouvrir et avoir de l'or, un monstre pour le taper et le tuer, un jardin pour creuser et obtenir des légumes, etc) dans le but d'accumuler ou tenter d'obtenir une ressource, un objet pour acheter des compétences/améliorations et ainsi pouvoir cliquer plus fort, plus vite et ainsi obtenir plus de ressource et ainsi de suite dans un cycle "infini" ou presque (en général un classement pour savoir qui va le plus loin/le plus rapidement dans le jeu motive les joueurs à la compétition ^^)

La partie Idle fait référence à un état de jeu "au repos" du joueur (contrairement au mode clique actif) ou par exemple en ayant acheter des mercenaires dans le cas d'un jeu ou il faut tuer des monstres en boucle, ceux-ci donc "farm" les monstres pour le joueur pendant son absence/afk en ayant la possibilité de faire des bonus spécifiques pour récompenser ce mode de jeu du type "Si vous ne faites aucune action pendant 30 secondes multiplie vos dégats par 2 et vos gains x1.5"

Ici je vais donc prendre un peu des deux pour faire un petit jeu qui me tient à cœur même si surement peu de personne seront intéressés , cela reste un challenge intéressant je trouve

Le jeu se composera d'un onglet de "jeu"

jeu

- L'image de la mine centrale ou l'on gagne des sous en cliquant dessus

- Les informations récapitulative de la partie en cours à droite et à gauche de la mine (ressources: or que l'on gagne en cliquant sur la mine, gemme que l'on peut découvrir en cliquant qui sera utilisé pour les compétences, argent que l'on obtient en revendant une mine)

- Les compétences (3 manuelles et 3 automatiques, chaque seconde le gain automatique sera ajouté dans la réserve) et leurs couts, niveaux, effet sur la partie du bas

- Les compétences a activer (3 au total dont surement 1 qui se débloquera spécialement) sur la partie droite

En parallèle de cela, pour donner un aspect "infini" au jeu, je vais mettre en place un système de revente de la mine (ce qui fera gagner la ressource ARGENT donc) en fonction de bonus particulier, du nombre de niveaux acheté dans les diverses compétences (et récompenser les longues parties, cela donne un aspect tactique s'il faut continuer ou pas la mine en cours) et les gemmes en possessions (le joueur repart de 0 dans une nouvelle mine mais du coup s'il avait par exemple 900 Gemmes cela vaut peut être le coup d'attendre 1000 pour avoir le bonus permanent de 1 dans les compétences active, pour tenter de mettre un aspect "tactique")

vente

Pour la première possibilité de revente je pense mettre du genre une condition si le joueur atteint 1.e6 d'or et/ou 300 niveaux acheter dans n'importe quelle compétences)

Avec cette argent on pourra donc acheter des "améliorations" (tout n'est pas définis encore comme vous pouvez le voir)

amelioration

Mais aussi et fur et a mesure du nombre de mine que l'on va remettre on va pouvoir débloquer des "professions" (surement 1 point gagné par mine revendu sauf bonus particulier) pour avoir des bonus parallèle (onglet totalement en cours de construction, quand on passe sur les images des compétences cela affichera les informations sur la partie haute de l'écran)

profession

Comme on peut le voir la flèche à gauche indique la progression (on a 5 mine actuellement et le premier palier étant à 10 mines on est bien à la moitié de la progression); une fois à 10 mines revendus minimum on pourras ne plus être "apprenti" et choisir une branche de spécialisation du type pour la première des bonus pour un type de jeu actif en clique, pour la deuxieme un bonus pour type de jeu idle et la troisième un bonus pour le gain de gemmes (je prévois dans la partie Apprenti de pouvoir au final débloquer 1 puis 2 spécialisation en plus mais dans le late game du genre 50mine puis 100mines; je pense aussi que moyennant de l'argent on pourra supprimer une spécialisation pour réattribuer les points gagnés et tester autre chose ou passer en mode afk)

Surement un petit onglet "accomplissement" pour le fun et le challenge que cela procure au joueur

accomplissement

Enfin à voir une quête de connexion journalière de 100 gemmes par exemple (on pourra voir des types de quêtes aussi du style "cliquer 1000 fois" ou "gagner 5e20 or" ou "acheter 200 niveaux" mais bon à voir l’intérêt d'une chose pareil, déjà un clicker/idle sur excel faut trouver son public même si je veux faire un truc un minimum ficelé si possible

C'est bien beau tout ça mais le souci c'est que faire des lignes de codes n'est pas le plus compliqué, cela sera l'équilibrage/intérêt du jeu que ce soit en terme de mécanismes et de design.

Questions pour vous:

Que pensez-vous de l’intérêt de ce type de jeu sur Excel?

L'aspect général graphique est bien?

Seriez-vous intéressé pour y jouer un peu?

Au vu de la description toute relative, voyez vous un lien/intérêt entre tous les possibilités (améliorations, compétences qui ramasse automatiquement de l'or, les professions, la quête journalière, les accomplissements)

Enfin si ce genre d'aventure vous tentes n'hésitez pas comme d'habitude à me contacter ou répondre ici, par exemple:

- Vous avez des commentaires/idées/envies: la discussion est ouverte

- Vous avez toujours voulu faire un petit jeu même sur excel et vous vous demandez comment on peut bien arriver avec VBA à répondre à ce besoin et vous voulez y participer : pas de souci même si travailler à plusieurs est toujours un défi ça sera avec plaisir

- Vous avez quelque sprite en stock qui traine ou vous avez des idées mais il fallait un petit projet pour débuter sans trop de pression: c'est avec plaisir que j'incorporerais vos sprite pour avoir le plaisir de les voir utiliser dans un jeu

- Vous aimez le game design (par exemple les mécanismes du jeu en général ou sur les évolutions de compétences en terme de cout/effet) ou tout simplement vous êtes un fanatiques des maths et vous aimez ça: vos idées et/ou votre aide seront les bienvenues même s'il s'agit d'un simple jeu excel, venez vous échauffez ici avant de sauter dans le grand bain plus tard !

C'est d’ailleurs sur cette dernière partie que cela sera le plus dur pour équilibrer le jeu; surtout si je suis seul à y réfléchir je ne ferais pas des couts/effet très compliqués ni des compétences trop nombreuses (voir même je supprimerais la partie profession pour ne laisser que les améliorations pour mieux maitriser le jeu) pour éviter d'être soit trop simple, soit trop dur et dans le cas donc pas intéressant à jouer ^^

Merci à veux qui auront la patience de tout lire

ECG

Bonjour et bonne année @ vous ExcelCoreGame !

Meilleurs vœux et santé, sans oublier la richesse !

Voyez vous en creusant un peu dans les "vieux sujets", pour ne pas dire dans la mine, je fais un petit up de votre message pour prendre des nouvelles de ce projet.

Je vous avoue qu'il m'est complètement passé inaperçu l'année dernière, pourtant je surf sur les forums (ici) et les sujets !

@ bientôt

LouReeD

Merci et meilleurs vœux aussi @LouReeD

Le petit jeu est toujours en cours de développement (doucement mais surement).

L'aspect général commence à ce peaufiner:

- Une partie "jeu" avec 3 compétences manuelles, 3 compétences automatiques, 3 skills activable et 3 compétences d'améliorations de skills

- Une partie "prime journalière" avec 6 compétences/bonus associées qui utilisera des points spéciaux à chaque prime validée

- Une partie "amélioration de la mine" avec 6 compétences/bonus aossociées qui utilisera l'argent de la revente des mines

- Une partie "profession" avec sans trop entrer dans les détails 6 compétences/bonus de base, 3 compétences spécial clique manuel, idem 3 pour clique automatique et 3 compétences d'amélioration du gain de gemme/skill activable (qui utilisera des points que l'on gagne spéciaux lors de la vente d'une mine en parallèle de l'argent mais qui nécessitera un peu plus d'avancer plus loin dans le jeu à chaque fois alors que l'argent pourra être farmer si le joueur est motiver)

- Une partie "accomplissements" juste pour avoir une idée de son avancement/mini objectif

Il me reste encore pas mal de modification des compétences/bonus pour obtenir quelque chose de satisfaisant globalement avant d'améliorer l'équilibrage des couts/gain; je ferais une version bêta ici pour faire tester dans tous les cas

ECG

Et bien... J'ai du mal à tout saisir, mais je pense que ça doit gratter la tête !

Bon courage pour la suite !

@ bientôt

LouReeD

Disons que je ne suis pas game designer donc j'essaye de pas trop faire compliqué mais un minimum intéressant oui ^^

Bonjour,

c'est un peu votre jeu avec "clic clic clic clic" qui m'a lancé sur Magic Draw !

C'est un jeu où il faudra cliquer aussi ! A gogo ! Mais en sachant s'arrêter sur la bonne couleur !

@ bientôt

LouReeD

@ bientôt

LouReeD

Hop je pense être arriver à une version bêta assez stable (en tout cas sur mon pc ^^), il reste encore pas mal de boulot pour empêcher le jeu de crasher avec des nombres trop gros et surtout un équilibrage du jeu mais dans l'ambiance général on y est

J'ai mis des boutons pour gagner de l'or, gemme, points etc pour tester un peu tout rapidement, forcement cela peut boguer si vous "trichez trop" rappel double max valeur vers E308

Il manque des images pour arriver à moins d'1mo pour le poster ici

Je ferais un description des actions qu'il me reste demain surement vu l'heure mais j'avais envie de le mettre en ligne ce soir

courage à ceux qui vont regarder

29beta-gold-mine.xlsm (906.58 Ko)

Bonsoir,

je n'ai pas tout compris ! Si ce n'est qu'il faut cliquer sur la mine pour faire de l'or et récolter des gemmes...

Mais en cliquant sur un des boutons à coté de la mine, le gain était tellement énorme que je suis passé en valeur OR exponentiel : 1.3 E etc...

Après, le clignotement du curseur du à une boucle temporelle je présume, m'obsède...

J'ai vu sur le net, un fichier avec un chrono qui tourne sans que cela se voit, mais je n'ai pas saisi le code, il y avait des Modules de class et certainement des API, mais visuellement c'était bien, pas de clignotement.

Pourquoi ne pas faire "comme moi" pour vos présentation graphique statique comme sur la feuille où il y a les trois "diplômes" ?

En effet, à force de cliquer on fini par cliquer partout et du coup on sélectionne ces ensembles de shape...

Un imprime écran puis un copier/coller dans Paint© puis mise en place de l'arrière plan et hop ! seul le texte dynamique est à gérer.

Bon courage pour la suite.

Dommage que le code ne soit pas accessible...

@ bientôt

LouReeD

C'est un simple jeu de clicker/idle comme il en existe des milliers

On clique sur la mine pour récolter de l'or et pouvoir acheter des trucs qui font récolter plus et ainsi de suite ^^

En effet les boutons à coté de la mine sont la pour la bêta (gain x10 et 100 cliques d'un coup), pour pouvoir tester le jeu sans y passer 3 ans, cela ne sera pas disponible sur la version finale

Pour le gain exponentiel pas de souci on va dire, sauf si je redimensionne le jeu (ce qui se peut) on va jusqu'au utiliser jusqu'au max de la variable Double soit 1.79769313486231570 E + 308 (d'ou l'affichage en mode scientifique)

Le clignotement est surement du à toute les fonctions qui tournent et le Application.OnTime même si au final en le désactivant et en ne faisant rien mon excel mouline pour je ne sais qu'elle raison X)

Je ne penses pas pouvoir le résoudre du coup malheureusement

Oui ces shapes c'est agaçant, après dans la version finale je vais espacer un peu mieux tout ça mais j'ai peur que si je fais trop gros cela peut pénaliser l'expérience de jeu car on a tous des écrans différents

Je ne sais pas trop quoi faire même si on peut au final modifier soit même la taille des shapes mais bon pas super super

C'est une bonne idée l'imprime écran même si du coup en cliquant à coté on déplace quand même la shape de l'imprim écran ce qui ne change pas trop le souci final je dirais ^^

En général je fais en dynamique car je fais un jeu français/anglais donc tout est traduit à la volée et que la moitié des informations sont dynamiques mais bon je peux faire 2 imprimes écran au final, je vais y réfléchir et tester ^^

Sinon faut que je trouve un moyen ergonomique pour le bouton d'achat

Edit: je peux simplement mettre des shapes invisible devant les textes dynamiques, c'est surement la meilleur solution mais bon si le joueur veut redimensionner... aie

Salut à tous,

Je fais une refonte de mon code en utilisant des classes personnalisées, c'était devenu une usine à gaz avec que des fonctions partout.

L'ensemble du jeu est de plus en plus abouti, il restera l'équilibre du jeu à revoir mais la c'est pas gagné ^^

Je vous tiens au courant

ECG

un petit exemple de code pour les amélioration via une classe personnalisé, y a surement mieux mais c'est beaucoup plus lisible pour moi au final, avant j'avais des variables et des fonctions un peu partout, la tout sera centralisé (du moins je trouve dans ma tête, chacun sa façon de coder on va dire , certains sauteront surement au plafond en lisant tout ça héhéhé)

En premier lieu je définis ma classe :

Option Base 1

Public Type CLASSE_AMELIORATION
    NumeroClasse As Integer
    NomFrancais As String
    NomAnglais As String
    DataLigneLevel As Integer
    LevelActuel As Double
    Cout As Double
    LevelMax As Double '-1 pour infini
    TypeEffet As String ' + ou x
    EffetParLevel As Integer
    EffetTotal As Double
    LabelDescription As String
    LabelBoutonAchat As String 
    LabelBoutonRefus As String
    LabelLevel As String
    LabelNom As String
    LabelCout As String
    DescriptionFrancais As String
    DescriptionAnglais As String
End Type

vu qu'on est en option base 1 et que j'ai 6 amélioration différentes, je déclare une array de classe personnalisé, j'aurais pu les nommer une par une mais cela me suffit pour boucler dessus; si j'en avait eu beaucoup plus à gérer peut être que j'aurais fait autrement au final:

Public LISTE_CLASSE_AMELIORATION(6) As CLASSE_AMELIORATION

A l'acceptation des macros je lance l'initialisation de mes classes et l'affichage de celles ci.

Je boucle donc sur les borne de ma liste d'amelioration existante, si je rajoute une amélioration rien à changer:

Function DECLARATION_ALL_CLASSE_AMELIORATION()
Dim BALAYAGE_CLASSE As Integer

'lors de l'initialiasation du classeur on déclare toutes les classes d'amelioration
'et on raffraichi la feuille d'amelioration

For BALAYAGE_CLASSE = LBound(LISTE_CLASSE_AMELIORATION) To UBound(LISTE_CLASSE_AMELIORATION)
    DECLARATION_CLASSE_AMELIORATION (BALAYAGE_CLASSE)
    AMELIORATION_RAFFRAICHI_AFFICHAGE (BALAYAGE_CLASSE)
Next

La première fonction sert donc à déclarer/mettre à jour une classe ciblé:

Function DECLARATION_CLASSE_AMELIORATION(NUMERO_CLASSE As Integer)

'pour mettre à jour une classe en particulier

Select Case NUMERO_CLASSE

    Case 1:
        With LISTE_CLASSE_AMELIORATION(NUMERO_CLASSE)
            .NumeroClasse = NUMERO_CLASSE
            .NomFrancais = "nom FR 1"
            .NomAnglais = "nom ANG 1"
            .DataLigneLevel = LIGNE_AMELIORATION_SKILL_1_LEVEL
            .LevelActuel = Sheets(FEUILLE_DATA).Cells(.DataLigneLevel, COLONNE_DATA).Value
            .Cout = 10 + .LevelActuel * 10
            .LevelMax = -1 '-1 pour infini
            .TypeEffet = "+" ' + ou x
            .EffetParLevel = 5
            .EffetTotal = .EffetParLevel * .LevelActuel
            .LabelDescription = "INFO_AMELIORATION_1"
            .LabelBoutonAchat = "ACHAT_AMELIORATION_1"
            .LabelBoutonRefus = "REFUS_AMELIORATION_1"
            .LabelLevel = "INFO_LEVEL_AMELIORATION_1"
            .LabelNom = "INFO_NOM_AMELIORATION_1"
            .LabelCout = "INFO_COUT_AMELIORATION_1"
            .DescriptionFrancais = "Effet par level: " & .TypeEffet & .EffetParLevel & " or par coup manuel de base" & vbCrLf & _
                                   "Effet total: " & .TypeEffet & .EffetTotal & " or par coup manuel de base" & vbCrLf & _
                                   "S'applique que sur le clique manuel de base (+1 par défaut)"

            .DescriptionAnglais = "descrp ang 1"

        End With

   'etc etc sur mes 6 ameliorations

    Case 6:
        With LISTE_CLASSE_AMELIORATION(NUMERO_CLASSE)
            .NumeroClasse = NUMERO_CLASSE
            .NomFrancais = "nom FR 6"
            .NomAnglais = "nom ANG 6"
            .DataLigneLevel = LIGNE_AMELIORATION_SKILL_6_LEVEL
            .LevelActuel = Sheets(FEUILLE_DATA).Cells(.DataLigneLevel, COLONNE_DATA).Value
            .Cout = 10000 + .LevelActuel * 10000
            .LevelMax = -1 '-1 pour infini
            .TypeEffet = "x" ' + ou x
            .EffetParLevel = 2
            .EffetTotal = .EffetParLevel ^ .LevelActuel
            .LabelDescription = "INFO_AMELIORATION_6"
            .LabelBoutonAchat = "ACHAT_AMELIORATION_6"
            .LabelBoutonRefus = "REFUS_AMELIORATION_6"
            .LabelLevel = "INFO_LEVEL_AMELIORATION_6"
            .LabelNom = "INFO_NOM_AMELIORATION_6"
            .LabelCout = "INFO_COUT_AMELIORATION_6"
            .DescriptionFrancais = "Effet par level: " & .TypeEffet & .EffetParLevel & " gain de gemme par coup manuel/automatique"  & vbCrLf & _
                                   "Effet total: " & .TypeEffet & .EffetTotal & " gain de gemme par coup manuel/automatique" & vbCrLf & _
                                   "S'applique que sur le gain par clique manuel ou automatique (et pas les compétences de Prime)"

            .DescriptionAnglais = "descrp ang 6"

        End With

Ensuite on affiche/rafraichi, tant que la classe est bien déclaré alors tout se fera automatiquement

Function AMELIORATION_RAFFRAICHI_AFFICHAGE(NUMERO_CLASSE As Integer)
Dim CLASSE_SELECTIONNEE As CLASSE_AMELIORATION
Dim POURCENTAGE As Double

CLASSE_SELECTIONNEE = LISTE_CLASSE_AMELIORATION(NUMERO_CLASSE)

'on remet à jour les informations de la page amelioration

'on affiche les noms/descriptions/effet selon la langue
If EST_FRANCAIS Then
    Sheets(FEUILLE_AMELIORATION).Shapes(CLASSE_SELECTIONNEE.LabelNom).TextFrame2.TextRange.Characters.TEXT =          CLASSE_SELECTIONNEE.NomFrancais

    Sheets(FEUILLE_AMELIORATION).Shapes(CLASSE_SELECTIONNEE.LabelDescription).TextFrame2.TextRange.Characters.TEXT =             CLASSE_SELECTIONNEE.DescriptionFrancais
Else
    Sheets(FEUILLE_AMELIORATION).Shapes(CLASSE_SELECTIONNEE.LabelNom).TextFrame2.TextRange.Characters.TEXT =             CLASSE_SELECTIONNEE.NomAnglais

    Sheets(FEUILLE_AMELIORATION).Shapes(CLASSE_SELECTIONNEE.LabelDescription).TextFrame2.TextRange.Characters.TEXT =             CLASSE_SELECTIONNEE.DescriptionAnglais
End If

'si on est inférieur au niveau max ou qu'on a pas de niveau max
If CLASSE_SELECTIONNEE.LevelMax = -1 Or (CLASSE_SELECTIONNEE.LevelActuel < CLASSE_SELECTIONNEE.LevelMax) Then

    'si on assez de point pour acheter on affiche
    If EST_VALEUR_ARGENT_DISPONIBLE_VALEUR(CLASSE_SELECTIONNEE.Cout) Then
        Sheets(FEUILLE_AMELIORATION).Shapes(CLASSE_SELECTIONNEE.LabelBoutonAchat).Visible = True
        Sheets(FEUILLE_AMELIORATION).Shapes(CLASSE_SELECTIONNEE.LabelBoutonRefus).Visible = False
    Else
        Sheets(FEUILLE_AMELIORATION).Shapes(CLASSE_SELECTIONNEE.LabelBoutonAchat).Visible = False
        Sheets(FEUILLE_AMELIORATION).Shapes(CLASSE_SELECTIONNEE.LabelBoutonRefus).Visible = True
    End If

    'si on n'a pas de level max on affiche juste le level actuel
    If CLASSE_SELECTIONNEE.LevelMax = -1 Then
        Sheets(FEUILLE_AMELIORATION).Shapes(CLASSE_SELECTIONNEE.LabelLevel).TextFrame2.TextRange.Characters.TEXT = _
            "x " & CLASSE_SELECTIONNEE.LevelActuel
    Else
        'sinon XX/YY
        Sheets(FEUILLE_AMELIORATION).Shapes(CLASSE_SELECTIONNEE.LabelLevel).TextFrame2.TextRange.Characters.TEXT = _
                "x " & CLASSE_SELECTIONNEE.LevelActuel & "/" & CLASSE_SELECTIONNEE.LevelMax
    End If

    'pour le moment je n'utilise pas cette partie du code, je suis en train d'y réfléchir

    'cout XX/YY(ZZ%)
    POURCENTAGE = Round(CDbl(Sheets(FEUILLE_DATA).Cells(LIGNE_ARGENT, COLONNE_DATA).Value / _
                    CLASSE_SELECTIONNEE.Cout) * 100, 2)

    'on bloque à 100% pour l'affichage
    If POURCENTAGE > 100 Then
        POURCENTAGE = 100
    End If

    'Sheets(FEUILLE_AMELIORATION).Shapes(CLASSE_SELECTIONNEE.LabelCout).TextFrame2.TextRange.Characters.TEXT =         Sheets(FEUILLE_DATA).Cells(LIGNE_ARGENT, COLONNE_DATA).Value & "/" & CLASSE_SELECTIONNEE.Cout & " (" & POURCENTAGE & "%)"

    Sheets(FEUILLE_AMELIORATION).Shapes(CLASSE_SELECTIONNEE.LabelCout).TextFrame2.TextRange.Characters.TEXT = _
         CLASSE_SELECTIONNEE.Cout

Else
    'on a atteint le niveau max donc on ne peut plus acheter de level

    'on cache le bouton d'achat
    Sheets(FEUILLE_AMELIORATION).Shapes(CLASSE_SELECTIONNEE.LabelBoutonAchat).Visible = False
    Sheets(FEUILLE_AMELIORATION).Shapes(CLASSE_SELECTIONNEE.LabelBoutonRefus).Visible = False

    'on est au level max
    Sheets(FEUILLE_AMELIORATION).Shapes(CLASSE_SELECTIONNEE.LabelLevel).TextFrame2.TextRange.Characters.TEXT = _
        "x " & CLASSE_SELECTIONNEE.LevelActuel & "(LEVEL MAX)"
End If

End Function

Enfin, quand on clique pour acheter un level cela donne donc:

Function AJOUTE_LEVEL_AMELIORATION()
Dim BALAYAGE_CLASSE As Integer
Dim CLASSE_SELECTIONNEE As CLASSE_AMELIORATION

'code annexe 
With CLASSE_AMELIORATION_ERREUR
    .NumeroClasse = 0
End With

'si on est déjà en train d'acheter un level d'amelioration on ne continue pas
If EST_EN_ACHAT_AMELIORATION = True Then
    Exit Function
End If

EST_EN_ACHAT_AMELIORATION = True

CLASSE_SELECTIONNEE = CLASSE_AMELIORATION_ERREUR
'on tente de retrouver la classe
For BALAYAGE_CLASSE = LBound(LISTE_CLASSE_AMELIORATION) To UBound(LISTE_CLASSE_AMELIORATION)
    If Application.Caller = LISTE_CLASSE_AMELIORATION(BALAYAGE_CLASSE).LabelBoutonAchat Then
        CLASSE_SELECTIONNEE = LISTE_CLASSE_AMELIORATION(BALAYAGE_CLASSE)
        Exit For
    End If

Next

'si on a bien retrouvé la classe
If CLASSE_SELECTIONNEE.NumeroClasse <> 0 Then

    'on verifie qu'on est sur la bonne feuille sinon on ne fait rien
    If ActiveSheet.Name = FEUILLE_AMELIORATION Then

        'si on a le montant toujours disponible 
        If EST_VALEUR_ARGENT_DISPONIBLE_VALEUR(CLASSE_SELECTIONNEE.Cout) Then

            'si on est inférieur au niveau max ou qu'on a pas de niveau max
            If CLASSE_SELECTIONNEE.LevelMax = -1 Or (CLASSE_SELECTIONNEE.LevelActuel < CLASSE_SELECTIONNEE.LevelMax) Then

                'on retire le cout
                RETIRE_ARGENT (CLASSE_SELECTIONNEE.Cout)

                'on ajoute un niveau
                Sheets(FEUILLE_DATA).Cells(CLASSE_SELECTIONNEE.DataLigneLevel, COLONNE_DATA).Value = _
                    Sheets(FEUILLE_DATA).Cells(CLASSE_SELECTIONNEE.DataLigneLevel, COLONNE_DATA).Value + 1

                'vu qu'on a retirer des points on raffraichi toutes les classes, leurs infos et les infos general
                Call DECLARATION_ALL_CLASSE_AMELIORATION

                'on recalcule les gains de gold/gemme etc
                Call RECALCULE("GOLDMANUEL")
                Call RECALCULE("GOLDAUTO")
                Call RECALCULE("GEMME")

            End If

        End If

    End If

Else

    Call AFFICHE_ERREUR(0)

End If

EST_EN_ACHAT_AMELIORATION = False

End Function

Si je veux donc changer par exemple la formule de calcule de cout, effet par level etc, j'ai juste à modifier dans la déclaration le .cout ou .effetparlevel et l'affichage ainsi que le recalcule (qui font donc appel à LISTE_CLASSE_AMELIORATION(X).effettotal dans les formules)

Il y a forcément d'autre fonction et bricole autour de tout ça mais voila le principal pour ceux qui se demandent comment je gère un peu les données

Bonsoir,

attention à ne pas confondre Classe et Type, un objet avec un Type personnalisé, et une Classe avec un module de Classe

Quand j'ai appris à utiliser le Type personnalisé, j'ai pu constater comme vous que cela simplifiait les choses.

Pour "La quête des Héros" je suis en train de voir si c'est opportun de partir sur une Classe, ou plutôt "plus simplement" rester avec un Type personnalisé.

Le type personnalisé, je suis également en train de m'en servir sur la bataille naval, et je m'en sert dans Snake et bien d'autre application.

Bravo @ vous pour cette orientation de programmation qui fait que le code s'oriente "pro" ! .-)

Bon courage pour la suite.

@ bientôt

LouReed

Il me semblait que par définition une classe est un type personnalisé mais j'avoue que cela me passe au dessus en général (classe/type/structure et compagnie)

Qu'entends tu par une classe personnalisé du coup pour heroes quest par exemple?

merci

Les modules de classes vont "plus loin" que les types personnalisés.

En ce sens qu'un type personnalisé vous permet de regrouper (en simplifiant) plusieurs variables sur une seule :

Type LouReeD

ma variable 1 as integer

ma variable 2 as string

ma variable 3 as boolean

En Type

LRD as LouReeD

Et on peut l'utiliser comme ceci : LRD.ma variable 2 = "5 ans"

Mais voilà, ma variable 2 string est limitée à du string avec une assignation par "="

Le module de classe permet donc d'aller plus loin en ce sens où l'équivalent de cette valeur peut subir "automatiquement" du code VBA pour arriver à un résultat différent.

J'ai du mal à l'expliquer c'est pourquoi j'ai du mal à le mettre en place dans le jeu et à voir d'où je pars et où je veux aller.

Si mon héro trouve un objet "5", ce 5 en objet va lui permettre de gagner des points de combat, mais ceux-ci dépendent du héros

donc dans un code du module de classe des héros, le code qui reçois un objet va "travailler" pour en sortir un résultat en prenant en compte plusieurs paramètres, et donc pour le Barbare un 5 donnera 8, mais pour l'elfe, un 5 donnera 2...

Mais dans le code du jeu il suffit de dire "héro barbare ramasse 5" et hop = 8 en point de combat.

Toute l'écriture "difficile" est cachée derrière ce module de classe.

J'avais trouvé un bon tuto la dessus et c'est ce qui m'a donné envie de partir là dessus, mais je crois que j'arrive aux limites de ma compréhension du codage !

Alors oui j'ai réussi à le mettre en pratique sur ma dernière application "Suivi des activité" mais c'est très limité var cela ne gère que le clic sur un lablel de USF, mais pour un code de gestion, le USF peut avoir une centaine de label !

Donc pour moi l'idée est d'avoir un module de classe bien conçu avec des ramifications dans toutes les sens en fonction du personnage, de ce qu'il possède, de son énergie, de son expérience etc... et ensuite il suffit dans le code de jeu d'envoyer des données "simple" et elles sont digérées par le module.

Pour reprendre l'idée du 5 qui donne 8 pour le barbare et 3 pour l'elfe, le code pourrait être :

if héro barbare and babare_vie > 6 and barbare_esprit< 9 then

point de combat barbare = 8

elseif héro = elfe and elfe_vie >2 and elfe_esprit >5 then

point de combat elfe = 3

elseif héro = nain etc....

Avec le module de classe

héro_objet = 5 (après traitement héro combat = 8)

C'est un peu comme des fonctions mais plus complexe, bref vous avez compris que je n'ai pas tout compris !!!

C'est comme le jeu du démineur en USF, il est basé sur des modules de classe si je me souvient bien.

@ bientôt

LouReeD

Rechercher des sujets similaires à "jeu clicker idle gold mine"