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
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
Le jeu se composera d'un onglet de "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")
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)
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)
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
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
Bonsoir,
je n'ai pas tout compris !
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
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
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