'Exemple
'16-Une notification-7-Bla bla-
"" -> Str 1
"16- ---" -> Str 2
"0123456789" -> Str 3
Goto 2
'■■■■■■ ADD ■■■■■■
Lbl 1
? -> Str 1
If StrLen(Str 1) > 0 : Then
If StrCmp(StrMid(Str 1, 1, 1), "=") = 0 : Then
Exp(StrMid(Str 1, 2, StrLen(Str 1))) -> F
Prog "BS-FCTS"
Else
1 -> A
StrLen(Str 1) -> L
'■■■■■ CONTENT ■■■■■
StrJoin("-", Str 2) -> Str 2
StrJoin(Str 1, Str 2) -> Str 2
StrJoin("-", Str 2) -> Str 2
'■■ 1ST NUMBER 21■■■
&MOD(;L, 10) + 1 -> A
StrMid(Str 3, A, 1) -> Str 4
StrJoin(Str 4, Str 2) -> Str 2
'■■ 2ND NUMBER, 21■■
If L >= 10 : Then
(L - &MOD(;L, 10)) / 10 + 1 -> A
Else
1 -> A
IfEnd
StrMid(Str 3, A, 1) -> Str 4
StrJoin(Str 4, Str 2) -> Str 2
IfEnd
IfEnd
Goto 2
'■■ END ADD NOTIF ■■
'■■ NOTIFICATIONS ■■
Lbl 2
1 -> A
Cls
ViewWindow 1, 127, 0, 1, 63, 0
ClrText
BG-None
Text 1, 36, "NOTIFICATIONS"
F-Line 1, 56, 127, 56
Str 2 -> Str 4
StrLen(Str 4) -> L
Text 1, 1, L
Text 1, 14, "c"
StrLen(Str 4) -> L
12 -> I
'■■■■START PRINT■■■■
While I < 58
'◆◆◆ STR LENGTH ◆◆◆
Exp(StrMid(Str 4, 1, 2)) -> A
'◆◆◆ EXTRACT STR ◆◆◆
StrMid(Str 4, 4, L) -> Str 4
'◆◆◆ PRINT STR ◆◆◆
If A <= 28 : Then
Text I, 5, StrMid(Str 4, 1, A)
Else
Text I, 5, StrMid(Str 4, 1, 28)
I + 6 -> I
Text I, 5, StrMid(Str 4, 29, A - 28)
IfEnd
'◆◆ DEL "-" STR 4 ◆◆
StrMid(Str 4, A + 2, L) -> Str 4
StrLen(Str 4) -> L
L < 1 => Break
7 + I -> I
WhileEnd
Text 56, 70, " "
F-Line 109, 2, 109, 9
F-Line 109, 9, 126, 9
Text 57, 111, "EXIT"
F-Line 85, 2, 85, 9
F-Line 85, 9, 106, 9
Text 57, 87, "CLEAR"
F-Line 69, 2, 69, 9
F-Line 69, 9, 82, 9
Text 57, 71, "EXE"
"" -> Str 4
'■■■■ END PRINT ■■■■
0 -> G
While G != 31 And G != 29 And G != 39 And G != 49
GetKey -> G
WhileEnd
G = 31 Or G = 29 => Return
G = 39 => "16- ---" -> Str 2
G = 49 => Goto 1
Goto 2
WhileEnd
Citer : Posté le 12/11/2017 08:27 | #
Ça a l'air intéressant à la fois niveau gameplay (stratégie) et niveau graphismes. Bien joué !
Est-il possible de détruire ou pousser des blocs, ou est-ce qu'ils deviendraient des murs permanents ? (Le premier me semble plus malin, sinon on pourrait vite bloquer la situation.)
Par ailleurs, est-ce que tous les soldats ont les mêmes capacités, ou se comportement différement en terme de vitesse de déplacement, force des coups, fréquence de pose de blocs... ?
Citer : Posté le 12/11/2017 18:58 | #
Alors déjà merci pour ton avis.
Et c'est vrai que ça pourrait être une bonne idée les murs déplaçables, je pense que je vais mettre cette fonctionnalité.
Concernant, les soldats, je pensais à faire des classes où types de soldats qui auraient des attaques/capacités différentes cependant je pense que pour le moment je vais rester sur des soldats avec les mêmes attaques (Coup de poing, bombe, bloc) et les mêmes capacités (vitesse, force, résistance) et peut-être des spawners d'items pour ajouter un peu plus de fun. A voir ...
En gros, pour l'instant, je préfère faire quelque chose de simple et ajouter des fonctionnalités au fur et à mesure.
Citer : Posté le 12/11/2017 19:00 | #
... et tu as raison, on a déjà vu beaucoup de projets trop ambitieux se casser la figure.
Protip : Tu peux sortir tes images de ton spoiler, ça fera une plus belle vitrine pour ton topic, et les images ça influence beaucoup les visiteurs. =p
Citer : Posté le 12/11/2017 19:18 | #
Merci pour le conseil, c'est vrai que j'ai vu plein de fois des jeux qui avaient l'air bien mais qui n'avaient aucune image. C'est quand même dommage, c'est la première chose que l'on voie
Ajouté le 17/11/2017 à 23:24 :
SEMAINE 1
Bonjour !
J'ai fini le cahier des charges à 95%, les 5% restants seront les choses auxquels je n'ai pas pensé. J'ai essayé de développer vraiment le fonctionnement des sauvegardes et des fonctions car c'est assez complexe. D'où le reste un peu moins développé.
J'ai commencé à réfléchir sur les différents systèmes du jeu (Menus/ Moteur Graphique).
N'ayant pas beaucoup de temps libre, je ne pense pas que le projet va avancer très vite chaque semaine mais j'essaierai de faire de mon mieux.
Liens : Cahier des charges , Changelog , Programmes, Images
Citer : Posté le 18/11/2017 07:38 | #
Wow, on voit que t'as de la suite dans les idées ! J'ai jamais vu un descriptif aussi impressionant pour un projet personnel x)
Fais attention seulement à l'optimisation de ton programme (la règle d'estimation est : plus il y a de code et plus ça pue pour toi), tu risques d'avoir des surprises.
Citer : Posté le 18/11/2017 08:15 | #
Fait gaffe, les images ne s'affichent pas si t'es pas connecté avec le compte Google
Les héberger ailleurs devrait résoudre le problème
Ajouté le 18/11/2017 à 09:17 :
Bon, je viens de finir le GDoc, et en effet t'as bien posé les bases, c'est important pour un projet de cette envergure.
Quelques remarques plus ou moins en vrac :
Gestion des variables
C'est une très bonne idée d'avoir recensé les variables dans un tableau, toutefois je pense que tu aura quelques limitations à un moment où un autre, à cause des boucles et appels à des sous-programmes.
Selon moi, la représentation sous forme de graphe (un arbre dans notre cas) me paraît beaucoup plus adaptée.
Chaque nœud est un niveau de programme : une boucle, une condition, un sous-programme, etc.
Tu associe à chaque nœud les variables qu'il utilise. Pour un nouveau nœud, tu peux utiliser n'importe quelle variable qui n'est ni dans ses ascendants, ni ses descendants. C'est beaucoup plus modulable que de réserver des variables pour chaque niveau.
Je sais pas si je suis clair, au besoin demande moi, je peux faire un schéma.
Les maps
Tu peux largement optimiser les maps. Ton idée d'enchainer les cases de la matrice sans lien avec la grille de jeu est un bon début, mais tu peux faire beaucoup mieux : stocker plusieurs points de la grille dans une seule case de matrice
Imaginons une map de 6×5 :
100100
101001
000001
110011
On commence par convertir en flux de bits (dans une liste par exemple) :
1 1 0 0 1 1 1 0 0 1 0 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 0 0 1 1
Sachant que la calto peut enregistrer des nombres jusqu'à 10^8 sans perte de précision, on peut enregistrer jusqu'à log_2(10^8) = 26,57 bits dans une seule case. Pour pas être emmerdés, disons 25 bits.
On sépare le flux de bits en paquets de 25 :
1 1 0 0 1 1 1 0 0 1 0 0 1 0 1 0 0 1 0 0 0 0 0 1 1 - 1 0 0 1 1
On converti chaque paquet du binaire vers le décimal :
27038851 19
On sauvegarde uniquement ces deux valeurs. Pour décompresser, on fait l'inverse.
Le gain de place va se faire au stockage, en effet c'est beaucoup trop lent de décompresser à chaque update de la map.
Mais ça donne un sacré gain, dans notre cas 1-2/30 = 93%
Les fonctions
Très bonne idée de faire ça, ça permet de structurer le projet de manière claire, sans avoir des milliers de sous-programmes, etc.
Seul point noir : il faut optimiser le nombre de tests à faire pour jumper le plus vite possible là où ça t'intéresse. Si t'as 100 fonctions, et que tu veux exécuter la dernière, c'est stupide de faire 99 tests juste avant.
Pour ça, deux méthodes :
1 – Tu sélectionnes les fonctions vraiment critique pour lesquelles la vitesse est importante, tu les mets dans un autre sous-programme. Il en faut au max 5 à 10 dedans je pense.
2 – Tu utilise les labels. Je sais c'est moche, mais pour le coup c'est plus rapide que des fonctions.
F < 10⇒Goto 1
F < 20⇒Goto 2
F < 30⇒Goto 3
Label 1
If F=1
Then …
IfEnd
Return # Ne pas oublier le Return après chaque fonction pour ne pas tenter d'exécuter les autres
If F=2
Then …
IfEnd
Return
Label 2
If F = 12
Then …
IfEnd
De plus, avec ce système, tu peux facilement grouper tes fonctions au sein du fichier.
Le coup des codes d'erreur est aussi une bonne idée, et même si du coup ça alourdi un peu la syntaxe le code n'en est que plus safe (si c'est bien fait)
Voilà, c'est à peu près tout pour le moment, si t'as des questions, y'a suffisament de gus compétents qui squattent ici pour t'aider, que ce soit ici pour les questions importantes, ou la shout si c'est rapide à résoudre.
Ah oui, n'hésite pas à te présenter, ça te donnera les points nécessaires pour accéder à cette fameuse shout, un espace de discussion instantané particulièrement apprécié et actif.
Ajouté le 18/11/2017 à 09:18 :
Au fait, ma signature est particulièrement adaptée en l'occurence
Citer : Posté le 18/11/2017 19:47 | #
Merci pour vos retours !
Wow, on voit que t'as de la suite dans les idées ! J'ai jamais vu un descriptif aussi impressionant pour un projet personnel x)
Fais attention seulement à l'optimisation de ton programme (la règle d'estimation est : plus il y a de code et plus ça pue pour toi), tu risques d'avoir des surprises.
Merci
Je vais essayer d'optimiser comme je peux.
Fait gaffe, les images ne s'affichent pas si t'es pas connecté avec le compte Google
Les héberger ailleurs devrait résoudre le problème
Ajouté le 18/11/2017 à 09:17 :
Bon, je viens de finir le GDoc, et en effet t'as bien posé les bases, c'est important pour un projet de cette envergure.
Quelques remarques plus ou moins en vrac...................................................
Merci beaucoup d'avoir pris le temps de lire le GDoc et d'avoir fait un post avec autant de conseils.
Pas bête l'idée de l'arbre avec les variables, je vais essayer de faire ça.
Concernant la compression des maps, j'y avais pensé car je m'étais rendu rendu compte qu'on pouvait stocker jusqu'à 10 chiffres sans perte par contre je n'avais pas pensé à en faire du code binaire. Merci pour l'astuce
Pour les fonctions, je vais très surement mettre ces fonctionnalités
Et pour finir, c'est vrai qu'il est souvent bien plus difficile de finir que commencer, j'en ai l'expérience avec d'autres petits projets
Liens : Cahier des charges , Changelog , Programmes, Images
Citer : Posté le 18/11/2017 20:11 | #
Hé ben, c'est pas souvent qu'on a des projets de cette taille, bonne chance
Si tu as accès à un ordinateur je te conseille d'utiliser BIDE qui t'aidera à t'y retrouver dans le b****l qu'est le basic casio
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 18/11/2017 21:44 | #
Merci
Et oui j'utilise déjà BIDE, c'est vraiment pas mal, je galère juste parfois à ouvrir le fichier mais en faite, je pense que c'est juste parce que je l'enregistrais juste au format .bide sans mettre à coté le fichier .g1m
Ajouté le 24/11/2017 à 21:55 :
SEMAINE 2
Cette semaine j'ai avancé sur 2 choses :
- L'algorithme qui permet de générer les données pour tracer les traits de la map.
Les variables et indices de listes seront surement changés, mais le fonctionnement est là.
0 -> A~Z
{e9} -> List 3
{e9} -> List 4
List 1[1] -> C
List 1[2] -> D
1 -> A
1 -> B
1 -> I
0 -> E
'A=CASE X C=MAX X
'B=CASE Y D=MAX Y E=RESULT CONTENT ADJACENT CASE IF CASE EXIST
For 1 -> B To D
For 1 -> A To C
ClrText
Locate 1, 1, "A:"
Locate 1, 2, "B:"
Locate 1, 3, "I:"
Locate 4, 1, A
Locate 4, 2, B
Locate 4, 3, I
'■■■■ IF CASE=1 ■■■■
If List 1[2 + I] = 1 : Then
'■■■■■■■ X++ ■■■■■■■
0 -> E
2 + I + 1 <= 2 + C * D => List 1[2 + I + 1] -> E
If (E != 1 Or A = C) And (List 1[2 + I] = 1) : Then
Augment(List 3, {e9, A + 1, A + 1}) -> List 3
Augment(List 4, {e9, B, B + 1}) -> List 4
IfEnd
'■■■■■■■ X-- ■■■■■■■
0 -> E
2 + I - 1 > 2 => List 1[2 + I - 1] -> E
If (E != 1 Or A = 1) And (List 1[2 + I] = 1) : Then
Augment(List 3, {e9, A, A}) -> List 3
Augment(List 4, {e9, B, B + 1}) -> List 4
IfEnd
'■■■■■■■ Y++ ■■■■■■■
0 -> E
2 + I + C <= 2 + C * D => List 1[2 + I + C] -> E
If E != 1 Or B = D : Then
Augment(List 3, {e9, A, A + 1}) -> List 3
Augment(List 4, {e9, B + 1, B + 1}) -> List 4
IfEnd
'■■■■■■■ Y-- ■■■■■■■
0 -> E
2 + I - C > 2 => List 1[2 + I - C] -> E
If E != 1 Or B = 1 : Then
Augment(List 3, {e9, A, A + 1}) -> List 3
Augment(List 4, {e9, B, B}) -> List 4
IfEnd
IfEnd
I + 1 -> I
Next
Next
Augment(List 3, {e9}) -> List 3
Augment(List 4, {e9}) -> List 4
'■■■■■ SCREEN ■■■■■■
List 3 * 7 -> List 3
List 4 * 7 -> List 4
ViewWindow 1, 127, 0, 1, 63, 0, 1, Dim List 3, 1
S-L-Normal
AxesOff
GridOff
LabelOff
Graph(X,Y)=(List 3[T], List 4[T])◢
- Le système de fonctions. Plus précisément, ce qui permet de récupérer/ajouter/supprimer les données des balises qui n'ont pas d'enfant (pas d'autres balises en eux) sachant que le système sera différent pour les balises qui ont des enfants ( Par exemple la BALISE PLAYERS contient plusieurs fois la BALISE PLAYER)
'■■■■■■■■ BLOCK SOLDIER ■■■■■■■■
'■■■■■■■■■■ FUNCTIONS ■■■■■■■■■■
If F >= 1000 And F <= 9999 : Then
Goto D
IfEnd
'■■■■■■■■■ COMMON ■■■■■■■■■
'■■■■■■■■■■ 1-999 ■■■■■■■■■■
If F = 1 : Then
"Fonction 1"
Return
IfEnd
If F = 2 : Then
"Fonction 2"
Return
IfEnd
If F = 3 : Then
"Fonction 3"
Return
IfEnd
'■■■■■■■■■■ DATA ■■■■■■■■■■
'■■■■■■■■ 1000-9999 ■■■■■■■■
Lbl D
If F >= 1000 And F <= 9999 : Then
' Verifie l'existence de List 1
"BS_SYSTEM" -> List 1[0]
Dim List 1 <= 1 => Goto E
{0,0,0} -> List 2
' ■■ SYSTEM ■■
F = 1010 => 9450398719 -> List 2[2]
F = 1011 => {9438619467, 9450398719} -> List 1
F = 1013 => 9450398719 -> List 2[2]
' ■■ MAP ■■
F = 1013 => 7472298703 -> List 2[2]
' ■■ GAME ■■
F = 1070 => 7472298703 -> List 2[2]
F = 1071 => Augment(List 1, {7472298703}) -> List 1
F = 1073 => 7472298703 -> List 2[2]
' ■■■■ VIEW ■■■■
If (&MOD(;F, 10)) = 0 : Then
1 -> List 2[1]
While List 2[2] != List 1[List 2[1]]
List 2[1] + 1 -> List 2[1]
List 2[1] >= Dim List 1 => Break
WhileEnd
If List 2[2] = List 1[List 2[1]]:Then
List 2[1] + 1 -> List 2[1]
List 1[List 2[1]]
{Ans}
List 2[1] + 1 -> List 2[1]
While (List 1[List 2[1]] < e10)
List 1[List 2[1]]
Augment(List Ans, {Ans})
List 2[1] >= Dim List 1 => Break
List 2[1] + 1 -> List 2[1]
WhileEnd
'SI BALISE N'EXISTE PAS
Else
{ - 404e20}
IfEnd
Return
IfEnd
' ■■■■ ADD ■■■■
If (&MOD(;F, 10)) = 1 : Then
Augment(List 1, List Ans) -> List 1
Return
IfEnd
' ■■■■ MODIFY ■■■■
If (&MOD(;F, 10)) = 2 : Then
Return
IfEnd
' ■■■■ DELETE ■■■■
If ((&MOD(;F, 10)) = 3 )(F != 1013): Then
' LE SYSTEME PARCOURT LIST 1 ET MET LES VALEURS DANS LIST ANS SI CE N'EST PAS A
' SUPPRIMER, ENSUITE IL SUFFIT DE METTRE LIST ANS DANS LIST 1 ET DE RESET LIST ANS
1 -> List 2[1]
List 1[List 2[1]]
{Ans}
2 -> List 2[1]
'CONTENU A GARDER (On se contente donc de le mettre dans List Ans)
While List 2[2] != List 1[List 2[1]]
List 1[List 2[1]]
Augment(List Ans, {Ans})
List 2[1] + 1 -> List 2[1]
List 2[1] >= Dim List 1 => Break
WhileEnd
'SI LA BALISE A SUPPRIMER N'EXISTE PAS
If List 2[2] != List 1[List 2[1]]:Then
{ - 40420}
Return
IfEnd
'CONTENU A SUPPRIMER (On se contente donc de juste l'ignorer)
While (List 1[List 2[1]] < 10)
List 2[1] + 1 -> List 2[1]
List 2[1] > Dim List 1 => Break
WhileEnd
'CONTENU A GARDER (On se contente donc de le mettre dans List Ans)
While List 2[1] <= (Dim List 1)
List 1[List 2[1]]
Augment(List Ans, {Ans})
List 2[1] + 1 -> List 2[1]
WhileEnd
List Ans -> List 1
Return
IfEnd
IfEnd
'■■■■■■■■ NO FUNCTIONS ■■■■■■■■
Lbl E
{ - 40420}
"No fonction"
Return
Je suis conscient que c'est pas beaucoup mais je souhaite quand même communiquer sur l'avancement de mon projet. Vous pouvez toujours consulter le Cahier des charges qui a légèrement évolué et le Changelog avec les évolutions du projet.
Citer : Posté le 26/11/2017 04:46 | #
C'est déjà plus que la plupart d'entre nous
Juste comme ça, je pense que tu le sais déjà, mais la condition 1000 <= F <= 9000 peut se simplifier comme cela : 1000 <= F And F <= 9000 =>Goto D
Au passage, pour ce genre de conditions (appartenance à un intervalle), je conseille d'écrire A<X and X<B. C'est plus naturel comme notation.
Citer : Posté le 01/12/2017 20:44 | # | Fichier joint
Merci
Oui je le savais mais c'était parce que j'avais mis plusieurs lignes de codes à cette endroit pour finalement les déplacer plus bas après. Merci de ton avis
SEMAINE 3
Nouveau système : la Zone de notifications. Elle va permettre de communiquer plus facilement entre joueur et jeu, par exemple, pour informer sur l'état de la partie. Mais aussi pour communiquer entre développeur et programme puisque qu'on peut très bien imaginer un paramètre qui permettrait d'afficher les notifications techniques. D'ailleurs, il est possible d'exécuter des fonctions à partir de ce menu en cliquant sur EXE (F4) puis en écrivant "=[nº fonction]".
Par exemple : "=1" va exécuter la fonction 1.
Le programme ci-dessous est un programme de test mais le système sera mis dans le gros programme avec toutes les fonctions ( je ne l'ai pas fait par manque de temps, en plus il y a des Lbl ).
Il manque juste le mécanisme qui enlève les anciennes notifications automatiquement car la chaine de caractère qui contient toutes les notifications finit par être trop grande et elle cause un erreur de mémoire.
Je clique sur EXE :
Je clique sur CLEAR :
'Exemple
'16-Une notification-7-Bla bla-
"" -> Str 1
"16- ---" -> Str 2
"0123456789" -> Str 3
Goto 2
'■■■■■■ ADD ■■■■■■
Lbl 1
? -> Str 1
If StrLen(Str 1) > 0 : Then
If StrCmp(StrMid(Str 1, 1, 1), "=") = 0 : Then
Exp(StrMid(Str 1, 2, StrLen(Str 1))) -> F
Prog "BS-FCTS"
Else
1 -> A
StrLen(Str 1) -> L
'■■■■■ CONTENT ■■■■■
StrJoin("-", Str 2) -> Str 2
StrJoin(Str 1, Str 2) -> Str 2
StrJoin("-", Str 2) -> Str 2
'■■ 1ST NUMBER 21■■■
&MOD(;L, 10) + 1 -> A
StrMid(Str 3, A, 1) -> Str 4
StrJoin(Str 4, Str 2) -> Str 2
'■■ 2ND NUMBER, 21■■
If L >= 10 : Then
(L - &MOD(;L, 10)) / 10 + 1 -> A
Else
1 -> A
IfEnd
StrMid(Str 3, A, 1) -> Str 4
StrJoin(Str 4, Str 2) -> Str 2
IfEnd
IfEnd
Goto 2
'■■ END ADD NOTIF ■■
'■■ NOTIFICATIONS ■■
Lbl 2
1 -> A
Cls
ViewWindow 1, 127, 0, 1, 63, 0
ClrText
BG-None
Text 1, 36, "NOTIFICATIONS"
F-Line 1, 56, 127, 56
Str 2 -> Str 4
StrLen(Str 4) -> L
Text 1, 1, L
Text 1, 14, "c"
StrLen(Str 4) -> L
12 -> I
'■■■■START PRINT■■■■
While I < 58
'◆◆◆ STR LENGTH ◆◆◆
Exp(StrMid(Str 4, 1, 2)) -> A
'◆◆◆ EXTRACT STR ◆◆◆
StrMid(Str 4, 4, L) -> Str 4
'◆◆◆ PRINT STR ◆◆◆
If A <= 28 : Then
Text I, 5, StrMid(Str 4, 1, A)
Else
Text I, 5, StrMid(Str 4, 1, 28)
I + 6 -> I
Text I, 5, StrMid(Str 4, 29, A - 28)
IfEnd
'◆◆ DEL "-" STR 4 ◆◆
StrMid(Str 4, A + 2, L) -> Str 4
StrLen(Str 4) -> L
L < 1 => Break
7 + I -> I
WhileEnd
Text 56, 70, " "
F-Line 109, 2, 109, 9
F-Line 109, 9, 126, 9
Text 57, 111, "EXIT"
F-Line 85, 2, 85, 9
F-Line 85, 9, 106, 9
Text 57, 87, "CLEAR"
F-Line 69, 2, 69, 9
F-Line 69, 9, 82, 9
Text 57, 71, "EXE"
"" -> Str 4
'■■■■ END PRINT ■■■■
0 -> G
While G != 31 And G != 29 And G != 39 And G != 49
GetKey -> G
WhileEnd
G = 31 Or G = 29 => Return
G = 39 => "16- ---" -> Str 2
G = 49 => Goto 1
Goto 2
WhileEnd
Vous pouvez télécharger le programme (G Drive) (EXE : Permet de mettre une notification ou d’exécuter une fonction , CLEAR : Permet de vider la zone de notifications, EXIT : Permet de sortir)
N'hésitez pas à poser des questions si vous en avez
Liens : Cahier des charges , Changelog , Programmes, Images
Citer : Posté le 02/12/2017 02:23 | #
Pour coup un truc tout con qui peut marcher (avec # ton séparateur) :
"Anciennes notifs" → Str 2
Si longueur Str 1 + longueur Str 2 > 254:
Str 2 = Str 2 - Première notif + "#" + Str 1
Sachant que Str 2 - Première notif devrait pouvoir être obtenu (à quelques indices près) comme ceci :
Citer : Posté le 02/12/2017 08:38 | #
Darks, pourquoi pas StrRight(Str, StrSrc(Str 2, "#")+1) pour extraire ça plutôt ?
Citer : Posté le 02/12/2017 09:02 | #
Alors, il faut savoir que ça enregistre dans ce sens la :
3eme notification, 2 eme notification, 1ere notification
"17-3eme notification-17-2eme notification-17-1ere notification"
Pourquoi ? Parceque c'est beaucoup plus simple de récupérer la taille de la dernière chaîne de caractère au moment de l'affichage
Après on peut imaginer un système de ce genre : (non testé)
Si Str 2 est trop grand :
1 → I
StrLen(Str 4) → L
While I < L
'◆◆◆ STR LENGTH ◆◆◆
Exp(StrMid(Str 2, I, 2)) → A
'◆◆◆ SI IL N'Y A PAS UNE AUTRE NOTIFICATION APRÈS◆◆◆
If ( I + A + 3 ) > L :Then
StrRight(Str 2, A+4) → Str 2
Break
Else
I + A + 4 →I
IfEnd
WhileEnd
Sinon le StrSrc ca renvoie juste la première occurrence, c'est pas problématique ?
Citer : Posté le 02/12/2017 09:35 | #
Parce que StrRight coupe les x caractères de fin (et pas depuis l'index) il me semble.
Donc StrRight(Str, StrLen(Str 2) - StrScr(Srt 2, "#") + 1)
Ajouté le 02/12/2017 à 09:36 :
Bref, sinon j'ai l'impression que tu t'es compliqué la vie pour pas grand chose xD
Citer : Posté le 03/12/2017 10:59 | #
Bon mon système ne peut pas afficher plus de 6 notifications à cause de la taille de l'écran et de la mémoire qui se remplit vite. Donc je pense que je vais sauvegarder les notifications 1,2,3,4,5,6 dans les Str 1,2,3,4,5,6. Ça sera + rapide et + facile d'utilisation.