Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » Refonte de CalcCity
Shadow15510 Hors ligne Administrateur Points: 5503 Défis: 18 Message

Refonte de CalcCity

Posté le 10/10/2021 10:55

Hey o/

Il y a quelques années, j'étais tombé sur CalcCity, de Menno, un jeu de gestion de ville façon Sim's City. J'avais été très séduit par le jeu, mais il restait quelques problèmes notamment des crash de la calto (plus le programme en Anglais )

J'avais voulu refondre le code pour avoir un truc plus propre, mais j'avais pas le niveau et le code était vraiment horrible. Et puis, ces derniers temps, j'ai eu envie de faire un jeu de gestion façon Sim's City… et je me suis dit que nettoyer CalcCity et le porter pour Gint, pouvait être une bonne idée (le programme final serait posté sur la page du jeu d'origine).

Je promet pas d'avancer vite, mais je pense le faire tranquillement. (Faut déjà que j'arrive à comprendre le code )


1, 2, 3, 4 Suivante
Lephenixnoir En ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 10/10/2021 11:02 | #


Je ne connaissais même pas cet add-in dis donc ! Le code n'a pas l'air hyper élégant mais pas non plus hyper compliqué. Si tu as un problème avec n'hésite pas à demander
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Shadow15510 Hors ligne Administrateur Points: 5503 Défis: 18 Message

Citer : Posté le 10/10/2021 11:03 | #


J'y penserais ! Merci

Première étape : convertir les tableaux de 0 et 1 du CasioSDK en image png \o/

Ajouté le 10/10/2021 à 15:34 :
J'ai fait un dépôt : https://gitea.planet-casio.com/Shadow15510/CalcCity et converti les images du jeu d'origine en png (merci Python xD).

Dans les prochaines étapes :
- comprendre les variables du jeu et faire une structure pour cacher tout ça
- idem avec la caméra (faire un truc avec la position de la souris, la position sur la map et le zoom)
- reconstruire un vrai tileset
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Inikiwi Hors ligne Membre Points: 594 Défis: 8 Message

Citer : Posté le 10/10/2021 21:00 | #


hey, ça a l’air super sympa! j'adore simcity!
Shadow15510 a écrit :

Dans les prochaines étapes :
- comprendre les variables du jeu et faire une structure pour cacher tout ça

le code source de simcity de 1987 a été libéré https://github.com/osgcc/simcity
c'est simcity (ms-dos, amstad, atari 800,...) recodé par un des créateurs en c++, toues les mécanique du jeu ce dans ce code.
Shadow15510 Hors ligne Administrateur Points: 5503 Défis: 18 Message

Citer : Posté le 10/10/2021 21:07 | #


Je ne porte pas Simcity mais CalcCity (y a un lien dans le post principal)
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Inikiwi Hors ligne Membre Points: 594 Défis: 8 Message

Citer : Posté le 10/10/2021 21:21 | #


mais ça serait bien de se rapprocher du vrai jeu avec tout les stats(crime, trafic, valeur immobilière, taxes, impôts), car c'est très sympa a jouer.
simcity a été porté sur un 6502 (bbc micro) donc c'est censé pouvoir tourner sur un sh4 (au niveau des performances de calcul, mais j'avoue que simcity sur 8086(ms-dos) c'est comme-même lent )
Shadow15510 Hors ligne Administrateur Points: 5503 Défis: 18 Message

Citer : Posté le 10/10/2021 21:25 | #


CalcCity s'en rapproche vraiment il y a un système taxe, impôt. Ainsi qu'un système crime / sécurité, et une gestion des catastrophes (feux, accident nucléaire, tremblement de terre).
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Inikiwi Hors ligne Membre Points: 594 Défis: 8 Message

Citer : Posté le 10/10/2021 21:27 | #


Shadow15510 a écrit :
- idem avec la caméra (faire un truc avec la position de la souris, la position sur la map et le zoom)
- reconstruire un vrai tileset

au mois ça c’est une super bonne idée
(admirez mon nouvel avatar)
Shadow15510 Hors ligne Administrateur Points: 5503 Défis: 18 Message

Citer : Posté le 10/10/2021 21:29 | #


En parlant du tileset, j'ai terminé le tileset des grandes icônes, il me reste à fusionner quelques trucs et c'est bon.
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Massena Hors ligne Ancien rédacteur Points: 2244 Défis: 11 Message

Citer : Posté le 12/10/2021 21:53 | #


Sympa tout ça !
Encore un jeu de simulation, aussi étonnant que Kikoo qui développe un Plateformer

J'ai toujours voulu jouer à CalcCity, mais il a jamais voulu se lancer sur ma calto. Je jouerai à ton adaptation avec grand plaisir, bon courage
Shadow15510 Hors ligne Administrateur Points: 5503 Défis: 18 Message

Citer : Posté le 12/10/2021 21:54 | #


Merci !
J'ai pas trop avancé, ces derniers jours, j'espère pouvoir commencer à comprendre un peu le code ce week-end (je mise un peu sur les vacances pour avoir de vraies avancées)

Ajouté le 13/10/2021 à 18:00 :
Hey o/
Ayant un peu de temps, je me suis penché vers ce qui sert de main et là, ça commence bien… j'ai une image encodée dans un truc qui doit être de l'hexadécimal… L'image doit faire 128 pixels par 64, mais dans le code, elle est représentée comme une simple liste :
unsigned long im2_C0[] = {
0x00000000,0x00000000,0x00000000,0x00000000,0x7FFFFFFF,0xFFFFFFFF,0xFFFFFFFE,0x0FE03FFE,0x7FFFFFFF,0xFFFFFFFF,
0xFFFC1E0E,0xAFEABFFE,0x7F83FFF3,0xFFC1F3FF,0xFFFD5EAE,0x0FE03FC0,0x7E01FFF3,0xFF00F3BF,0xFFFC1E0E,0xAFEAB054,
0x7C78FFF3,0xFE3C7F3F,0xFFFD02AE,0x03E01540,0x7CFCF0E7,0x867E6413,0xCFFC2A00,0xAB095054,0x78FFE066,0x007FE413,
0x9FFD02AA,0x03401540,0x79FFCE66,0x70FFE673,0x9FFC2A00,0xAB095014,0x79FFFE64,0xFCFFE673,0x3FFD02AA,0x00400500,
0x79FFC064,0xFCFFE673,0x3FE02A00,0xA9094014,0x79F99CE4,0xFCFCE67A,0x7FEA00AA,0x00400500,0x78F39CCC,0xE479CCF8,
0x7F002800,0xA9094014,0x7C0380CE,0x0601CC38,0xFF4A00A4,0x00400500,0x7E0FC4CF,0x0F07CC38,0xFF000000,0x00000014,
0x7FFFFFFF,0xFFFFFFF9,0xFE000000,0x00000000,0x7FFFFFFF,0xFFFFFFC1,0xFC000000,0x00000000,0x7FFFFFFF,0xFFFFFFC3,
0xFFFFFFFF,0xFFFF0FFE,0x7FFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFE1FFE,0x7FFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFC1FFE,
0x7FFFFDFF,0x1FFFFFF8,0x3FFFFFFF,0xFFF83FFE,0x7FFFFAFE,0xEFFFFFFB,0xDFFFFFFF,0xFFF03FFE,0x7FFFFAFD,0xF63438FB,
0xD77FFFFF,0xFFE27FFE,0x7FFFFAFD,0xFDD2D778,0x177FFFFF,0xFFD97FFE,0x7FFFF77D,0xC616D07B,0xDAFFFFFF,0xFFA6FFFE,
0x7FFFF07D,0xF5D6D7FB,0xDAFFFFFF,0xFF7EFFFE,0x7FFFEFBE,0xED96D77B,0xDDFFFFFF,0xFEC5FFFE,0x7FFFEFBF,0x1E56D8F8,
0x3DFFFFFF,0xFD85FFFE,0x7FFFFFFF,0xFFFFFFFF,0xFDFFFFFF,0xFB0BFFFE,0x7FFFFFFF,0xFFFFFFFF,0xFBFFFFFF,0xF71BFFFE,
0x7FFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xEFF7FFFE,0x7FFEFBFF,0xFFFFFDFF,0x83FFFFFF,0xDFF7FFFE,0x7FFE73FF,0xFFFFFDFF,
0xBDFFFFFF,0xBFEFFFFE,0x7FFE7318,0x61C7E58F,0xBD8E3FFF,0x71EFFFFE,0x7FFEAAEB,0xAEBBD977,0x8175DFFE,0xE1DFFFFE,
0x7FFEAA0B,0xAEBBDD07,0xBD067FFD,0xC1DFFFFE,0x7FFEAAFB,0xAEBBDD7F,0xBD7FBFFB,0xC3BFFFFE,0x7FFEDAEB,0xAEBBD977,
0xBD75DFF7,0x87BFFFFE,0x7FFEDB1B,0xAEC7E58F,0x838E3FEF,0x877FFFFE,0x7FFFFFFF,0xFFFFFFFF,0xFFFFFFDF,0xFF7FFFFE,
0x7FFFFFFF,0xFFFFFFFF,0xFFFFFFBF,0xFEFFFFFE,0x7FFFFFFF,0xFFFFFFFF,0xFFFFFF7F,0xFEFFFFFE,0x7FFFFFFF,0xF1C7183F,
0xFFFFFEF8,0x3DFFFFFE,0x7FFFFFFF,0xEEBAEF7F,0xFFFFFDF0,0x7DFFFFFE,0x7FFFFFFF,0xFEBAEF7F,0xFFFFFBE0,0x7BFFFFFE,
0x7FFFFFFF,0xFEBAEEFF,0xFFFFF7C0,0xFBFFFFFE,0x7FFFFFFF,0xFDBAEEFF,0xFFFFEF81,0xF7FFFFFE,0x7FFFFFFF,0xFBBAEDFF,
0xFFFFDF81,0xF7FFFFFE,0x7FFFFFFF,0xF7BAEDFF,0xFFFFBF03,0xEFFFFFFE,0x7FFFFFFF,0xE0C71DFF,0xFFFF7E07,0xEFFFFFFE,
0x7FFFFFFF,0xFFFFFFFF,0xFFFEFE07,0xDFFFFFFE,0x7FFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFE,0x7FFFFFFF,0xFE3FFF7F,
0x7AFFFFBF,0xFFFFFFFE,0x7FFFFFFF,0xFDDFFFFF,0x77FFFFBF,0xFFFFFFFE,0x7775DD77,0x7BF8E363,0x6E872CB1,0xA1F8D65E,
0x76B5AD6B,0x7BF75D5D,0x4EBACB2E,0x96F74D9E,0x7AAEABAA,0xFBF8675D,0x2EBAEBAE,0xB6F75DDE,0x7AAEABAA,0xFBF77B5D,
0x76BAEBAE,0xB6F75DDE,0x7DDF77DD,0xFDD65D5D,0x76BACB2E,0xB6F75D9E,0x7DDF77DD,0xEE396363,0x7ABB2CB1,0xB6D8DE5E,
0x7FFFFFFF,0xFFFFFFFF,0xFFFFEFFF,0xFFFFFFDE,0x7FFFFFFF,0xFFFFFFFF,0xFFFE1FFF,0xFFFFFC3E,0x7FFFFFFF,0xFFFFFFFF,
0xFFFFFFFF,0xFFFFFFFE,0x00000000,0x00000000,0x00000000,0x00000000};

Autant les images avec juste un tableau de 0 et de 1, je voyais assez bien comment la convertir, autant là, j'avoue que je comprends pas comment retrouver l'image au format png ^^'

Merci d'avance !
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Lephenixnoir En ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 13/10/2021 19:05 | # | Fichier joint


Je te conseille cette partie du TDM 18 qui explique en détail l'histoire de l'hexa mieux que je ne pourrais le faire à l'improviste. C'est bien un tableau de bits !

Ah et aussi c'est certainement du row-major, donc tu as tous les bits d'une ligne suivis immédiatement de tous les bits d'une autre. Tu peux mettre la liste dans un programme Python et décoder toi-même ou bien utiliser convert en une seule ligne pour la récupérer.

Je pars de l'hexa sans les caractères supplémentaires :

% cat image.txt
00000000 00000000 00000000 00000000 7FFFFFFF FFFFFFFF FFFFFFFE 0FE03FFE 7FFFFFFF FFFFFFFF
FFFC1E0E AFEABFFE 7F83FFF3 FFC1F3FF FFFD5EAE 0FE03FC0 7E01FFF3 FF00F3BF FFFC1E0E AFEAB054
7C78FFF3 FE3C7F3F FFFD02AE 03E01540 7CFCF0E7 867E6413 CFFC2A00 AB095054 78FFE066 007FE413
9FFD02AA 03401540 79FFCE66 70FFE673 9FFC2A00 AB095014 79FFFE64 FCFFE673 3FFD02AA 00400500
79FFC064 FCFFE673 3FE02A00 A9094014 79F99CE4 FCFCE67A 7FEA00AA 00400500 78F39CCC E479CCF8
7F002800 A9094014 7C0380CE 0601CC38 FF4A00A4 00400500 7E0FC4CF 0F07CC38 FF000000 00000014
7FFFFFFF FFFFFFF9 FE000000 00000000 7FFFFFFF FFFFFFC1 FC000000 00000000 7FFFFFFF FFFFFFC3
FFFFFFFF FFFF0FFE 7FFFFFFF FFFFFFFF FFFFFFFF FFFE1FFE 7FFFFFFF FFFFFFFF FFFFFFFF FFFC1FFE
7FFFFDFF 1FFFFFF8 3FFFFFFF FFF83FFE 7FFFFAFE EFFFFFFB DFFFFFFF FFF03FFE 7FFFFAFD F63438FB
D77FFFFF FFE27FFE 7FFFFAFD FDD2D778 177FFFFF FFD97FFE 7FFFF77D C616D07B DAFFFFFF FFA6FFFE
7FFFF07D F5D6D7FB DAFFFFFF FF7EFFFE 7FFFEFBE ED96D77B DDFFFFFF FEC5FFFE 7FFFEFBF 1E56D8F8
3DFFFFFF FD85FFFE 7FFFFFFF FFFFFFFF FDFFFFFF FB0BFFFE 7FFFFFFF FFFFFFFF FBFFFFFF F71BFFFE
7FFFFFFF FFFFFFFF FFFFFFFF EFF7FFFE 7FFEFBFF FFFFFDFF 83FFFFFF DFF7FFFE 7FFE73FF FFFFFDFF
BDFFFFFF BFEFFFFE 7FFE7318 61C7E58F BD8E3FFF 71EFFFFE 7FFEAAEB AEBBD977 8175DFFE E1DFFFFE
7FFEAA0B AEBBDD07 BD067FFD C1DFFFFE 7FFEAAFB AEBBDD7F BD7FBFFB C3BFFFFE 7FFEDAEB AEBBD977
BD75DFF7 87BFFFFE 7FFEDB1B AEC7E58F 838E3FEF 877FFFFE 7FFFFFFF FFFFFFFF FFFFFFDF FF7FFFFE
7FFFFFFF FFFFFFFF FFFFFFBF FEFFFFFE 7FFFFFFF FFFFFFFF FFFFFF7F FEFFFFFE 7FFFFFFF F1C7183F
FFFFFEF8 3DFFFFFE 7FFFFFFF EEBAEF7F FFFFFDF0 7DFFFFFE 7FFFFFFF FEBAEF7F FFFFFBE0 7BFFFFFE
7FFFFFFF FEBAEEFF FFFFF7C0 FBFFFFFE 7FFFFFFF FDBAEEFF FFFFEF81 F7FFFFFE 7FFFFFFF FBBAEDFF
FFFFDF81 F7FFFFFE 7FFFFFFF F7BAEDFF FFFFBF03 EFFFFFFE 7FFFFFFF E0C71DFF FFFF7E07 EFFFFFFE
7FFFFFFF FFFFFFFF FFFEFE07 DFFFFFFE 7FFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE 7FFFFFFF FE3FFF7F
7AFFFFBF FFFFFFFE 7FFFFFFF FDDFFFFF 77FFFFBF FFFFFFFE 7775DD77 7BF8E363 6E872CB1 A1F8D65E
76B5AD6B 7BF75D5D 4EBACB2E 96F74D9E 7AAEABAA FBF8675D 2EBAEBAE B6F75DDE 7AAEABAA FBF77B5D
76BAEBAE B6F75DDE 7DDF77DD FDD65D5D 76BACB2E B6F75D9E 7DDF77DD EE396363 7ABB2CB1 B6D8DE5E
7FFFFFFF FFFFFFFF FFFFEFFF FFFFFFDE 7FFFFFFF FFFFFFFF FFFE1FFF FFFFFC3E 7FFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFE 00000000 00000000 00000000 00000000

Ensuite je récupère un fichier binaire contenant ces données (au lieu de leur représentation textuelle) :

% xxd -r -p < image.txt > image.bin
# J'obtiens un fichier de 1024 octets puisqu'il y a 256 int de 4 octets chacun

Et enfin je convertis du format brut en PNG avec convert.

% bitswap.py image.bin image.bin # Un détail
% convert -size 128x64 mono:image.bin -negate image.png

Et voilà.


Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Shadow15510 Hors ligne Administrateur Points: 5503 Défis: 18 Message

Citer : Posté le 13/10/2021 20:13 | #


Wow !
Merci beaucoup !!
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Shadow15510 Hors ligne Administrateur Points: 5503 Défis: 18 Message

Citer : Posté le 06/11/2021 10:27 | # | Fichier joint


Quelques nouvelles du front !
Après avoir subit de lourdes pertes lors de la dernière offensive (oui j'ai passé plus de 2 heures sur une erreur conne ) j'ai quand même réussi à bien avancer !

Par rapport aux derniers objectifs que j'avais donné :
  • la structure pour le jeu est terminée
  • la caméra et le curseur sont complètement gérés (avec le curseur de taille variable qui est complètement géré aussi)
  • la structure de la carte n'a posé aucune difficulté
  • j'en avais déjà peu ou prou parlé, le tileset en 15×15 est complètement terminé


En termes d'avancées non prévues, j'avoue être assez content de moi ! Quasiment tous les menus du jeu d'origine sont parfaitement fonctionnels. J'en ai profité pour changer quelques petits détails qui me plaisaient pas trop
  • le menu des options permet de régler la vitesse du jeu, ainsi que de (dés)activer animations in-game et les désastres. La sauvegarde sera dorénavant automatique et non plus manuelle comme c'était le cas avant. Et la distinction bizarre entre "vitesse du temps" et "vitesse du jeu" n'est plus faite, elle reposait sur une sorte d'overclock bizarre et mal géré qui ne sera pas présent.
  • le menu des statistiques est complètement terminé, la barre de scroll présente dans le jeu d'origine a été gardée, j'ai changé quelques trucs au niveau de la présentation : ajout de statistiques et tri des stats par catégories.
  • le premier menu de construction est terminé. Je travaille à repenser une partie de mon code que j'ai du dupliquée : pour l'instant j'ai une fonction qui permet de placer et construire un bâtiment donné en argument, j'aimerai fusionner cette fonction avec ma fonction principale. Le deuxième menu des constructions ne devrait pas poser de problème, 90% des éventuelles problèmes ayant déjà été rencontrés, ça devrait bien se passer.
  • le menu de sélection des taxes et des fonds a été refait à l'identique et est fonctionnel.
  • avec la gestion de la carte et de la caméra, l'affichage et le déplacement dans la carte sont évidemment pleinement gérés depuis quelques temps.


  • Toujours pas d'image parce que je sais pas prendre de screenshot depuis Gint… J'ai utilisé une police custom, ça rend plutôt bien. Et c'est tout pour cette fois
    @RDP

    Ajouté le 23/01/2022 à 18:41 :
    J'ai pas plus avancé, mais j'ai des screenshots ! xD Et c'est parti pour une petite visite en image :

    Le menu principal du jeu avec la map (en haut à gauche c'est le mois - année) :


    Le map en mode "construction" (pour rajouter des bâtiments à la map donc) avec le nom du bâtiment et son prix en haut :


    Les statistiques avec une barre de scroll :


    Le menu des options (avec possibilité de changer la vitesse du jeu, d'enlever les animations, et de supprimer les catastrophes)


    Un des deux menus de construction :


    Le panel des taxes / impôts :

"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Lephenixnoir En ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 23/01/2022 19:00 | #


Joli ! Si je peux me permettre, le texte est parfois dur à lire, surtout sur le deuxième screen et dans une moindre mesure sur les autres. Avoir un fond blanc autour du texte dessiné sur la map (avec un pixel de blanc de marge autour) parait important. Je ne suis pas non plus certain que le 2 pixels d'espacement entre chaque lettre aide la lisibilité.

C'est cool le remix, je ne suis pas très bon à ce genre de jeux mais ça me plaîrait d'en jouer plus
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Shadow15510 Hors ligne Administrateur Points: 5503 Défis: 18 Message

Citer : Posté le 23/01/2022 20:27 | #


Yay~ merci !

Pour le deuxième screen, je suis d'accord, même on calc, c'est pas simple à lire, je vais voir pour corriger ça.

Pour les deux pixels d'espacement, c'est fix, j'avais mal réglé la police dans fxconv. x)

Ajouté le 23/01/2022 à 21:39 :
J'ai revu la police :



"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Lephenixnoir En ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 23/01/2022 21:42 | #


Excellent ! C'est une amélioration sensible je pense.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Shadow15510 Hors ligne Administrateur Points: 5503 Défis: 18 Message

Citer : Posté le 23/01/2022 21:45 | #


Ouaip c'est vrai que c'est plus joli comme ça !

Au niveau de ce qu'il me reste à faire :
  • Le système de sauvegarde
  • Les catastrophes
  • Améliorer le système de construction pour les gros bâtiments et leur destruction
  • Gérer automatiquement les routes, les voies ferrées, les ports, et les côtes
  • Implémenter la détection des bâtiments "larges" (dans le jeu d'origine, mettre 4 bâtiments en carré permet d'avoir un bâtiment plus gros)

Je suis pas sûr d'avoir tout listé, mais quand tout ça sera fait, la refonte aura bien progressé.
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Shadow15510 Hors ligne Administrateur Points: 5503 Défis: 18 Message

Citer : Posté le 20/06/2022 15:26 | #


Alors ! Quelques (bonnes) nouvelles !
Les routes sont complètements gérées, de même pour les chemins ferrés et les côtes. Les gros bâtiments aussi, ainsi toutes les destructions. Les catastrophes sont implémentées aussi. En bref il ne me reste que la sauvegarde à faire pour terminer ce projet.

Et c'est là que le bât blesse… J'ai regardé le header de bfile.h de Gint sans trop comprendre comment ça fonctionne. Dans l'idée j'aimerais un truc assez simple :
1. dans le main avant de tout lancer, je regarde si la sauvegarde existe via BFileFindFirst mais autant le premier argument je vois à quoi il correspond, autant les autres je comprends pas… Si on veut juste savoir si le fichier existe pourquoi demander 4 arguments ? ^^'
2. si le fichier n'existe pas, on s'en occupe pas pour l'instant et on initialise avec des valeurs par défaut
3. sinon on récupère les données via BFileRead juste pour être sûr : handle est un pointeur vers un fichier, pointeur que l'on obtient à l'étape (1) ?
4. avant de quitter on supprime la sauvegarde si elle existait et on créer un nouveau fichier que l'on rempli via BFileWrite mais là aussi j'ai un petit problème : j'ai trois structure de données différentes à stocker, il faut que je fasse une méta-structure qui contient tout et j'envoie ça dans le fichier ?

Voila voila, merci d'avance
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Lephenixnoir En ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 20/06/2022 15:31 | #


La réponse facile est n'utilise pas BFile, utilise <stdio.h>. Pour savoir si le fichier existe, tu peux soit tenter de l'ouvrir en lecture avec fopen() (un peu bourrin, mais si c'est pour charger la partie tu vas le faire de toute façon), soit utiliser stat() de <sys/stat.h> (le valeur de retour vaudra -1 avec errno=ENOENT s'il n'existe pas, et, sauf autre erreur, 0 s'il existe).

N'oublie pas de faire un world switch pour manipuler le système de fichiers.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Shadow15510 Hors ligne Administrateur Points: 5503 Défis: 18 Message

Citer : Posté le 20/06/2022 15:33 | #


Ah x)
Merci de ta réponse je vais regarder ça
C'est quoi un "world switch" ? ^^'
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

1, 2, 3, 4 Suivante

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 v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 224 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