Premier projet (CatBot)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Premier projet (CatBot)

Message par Ar-S »

Regarde aussi du côté de openpreferences()
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: Premier projet (CatBot)

Message par poshu »

... En vrai, je n'ai aucune idée de comment débuter avec PB aujourd'hui.

Faut il commencer en utilisant la boucle d’event ou apprendre directement à utiliser des callbacks ?
Faut il commencer par bricoler un peu partout ou directement apprendre à écrire sous forme de modules ?

En gros, faut il commencer rapidement ou prendre le temps d'apprendre les bonnes manières, en sachant que la première solution va donner des résultats plus rapides mais aussi ancrer de mauvais réflexes?

...

Bref, pour la sauvegarde, si tu utilises des structures, il y a une solution beaucoup plus simple : le json. Pour reprendre l'exemple de Boby :

Code : Tout sélectionner

Structure animal
  faim.i
  sommeil.i
  soif.i
  joie.i
EndStructure

Global pet.animal

pet\faim = 1
pet\sommeil = 2
pet\soif = 3
pet\joie = 4

If CreateJSON(0)
	InsertJSONStructure(JSONValue(0), @pet, animal)
	SaveJSON(0,GetTemporaryDirectory()+"save")
EndIf
et pour charger :

Code : Tout sélectionner

Structure animal
  faim.i
  sommeil.i
  soif.i
  joie.i
EndStructure

Global pet.animal

If LoadJSON(0, GetTemporaryDirectory()+"save")
	ExtractJSONStructure(JSONValue(0), @pet, animal)
EndIf

Debug pet\faim
Debug pet\soif
Debug pet\sommeil
Debug pet\joie
L'avantage du json, c'est que ça reflète directement la mémoire de ton programme, pas besoin de rentrer manuellement chaque champ de la structure. En plus, ça permet de prendre des objets complexes comme des listes chaînées ou des tableaux. C'est un peu plus dur à utiliser au début, mais ça va te faire gagner teeeeellement de temps sur la suite...

Et je foutrais une baffe à Boby le weekend prochain histoire de lui apprendre à lire la doc en entier è_é
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Premier projet (CatBot)

Message par Micoute »

Cette idée de projet m'en a donner une autre : c'est d'un programme de prise de rendez-vous où on peut régler l'heure de rappel du rendez-vous, le programme étant juste en sommeil dans le systray et s'éveillant au bon moment.

Merci FR4NK13 pour cette idée géniale que tu as eut.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Premier projet (CatBot)

Message par Ar-S »

@Poshu.
Tu n'as pas tord sur ce doute de "comment débuter en PB". Mais c'est aussi une de ses forces que de proposer plusieurs approches. Pour la grande majorité (à mon avis), nous sommes des hobbyistes de la prog. "Les bonnes manières" sont relatives à nos besoins.
Certes utiliser les nouveaux Callbacks (bind) et les modules peuvent s'avérer utiles et même plus efficaces pour certains projets, mais pour de petits codes/projets, je suis plus d'avis d'y aller au plus simple/facile/traditionnel. Il sera toujours bon d'apprendre et utiliser les fonctions (un peu) plus complexes une fois les rouages de PB maitrisés.
@FR4NK13
Alors tu t'en sors ? :P
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
FR4NK13
Messages : 72
Inscription : mar. 03/juil./2018 9:30

Re: Premier projet (CatBot)

Message par FR4NK13 »

Coucou à tous et merci pour vos messages.
Je trouve un peu de temps donc je repasse par ici pour reprendre mon programme.

Je suis un peu perdue à vrai dire je me sens noyée sous vos nombreux messages :oops:

Je vais essayer de reprendre dans l'ordre et méthodiquement pour n’oublier personne.


Ar-S

- Merci pour ton code modifié que je garde de côté :)
- openpreferences() sert à quoi, ouvrir le fichier sauvegarder avec les données ?


Microdev :

merci pour tes « plans » j’avoue que c’est l’un de mes (nombreux) points faibles…
Que me recommanderais-tu à la place des timers ?
Boby :

Merci pour ton code, mais je ne comprends pas vraiment son fonctionnement, je vois une structure et des variables, ainsi que l’enregistrement de leur valeur qui est 0 par défaut mais comment cela sauvegarde l’évolution de l’animal ? Je dois faire un lien avec mon système de point déjà établi j’imagine.

- A quoi correspond le \ des variables ?
- A quoi correspond « WriteInteger » ? (Je ne comprends pas la doc, ça parle d’un fichier mais je n’en vois pas dans ton code) 
- Pour charger les données, je ne comprends pas, pourquoi deletefile ? Si cela efface les données, comment les récupérer ensuite ?

Autant je comprends « +save » qui sauvegarde, autant je ne comprends pas son but dans le chargement, dans le deuxième code ?

Poshu : Merci pour ton code, le Json a l’air simple, je vais tester :)

Mircoute : Ah bah, ravie d’avoir pu t’inspirer:)


Et oui Ar-s, j’ai enfin fini de répondre à tout le monde, j’ai eu du mal à trouver le temps ces derniers jours ^^’’

Maintenant je fais quelques tests avec tous vos codes en espérant que mon PC n’explose pas mouahahaha

Et je reviens vous poser mes mille et une questions, merci encore:)
Avatar de l’utilisateur
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Premier projet (CatBot)

Message par Ar-S »

Le \ sert à informer le soft que la variable demandée fait partie d'une structure.

Code : Tout sélectionner

Structure Truc
  A.b
  B.b
EndStructure

Global MaVariable.Truc ; MaVariable va utiliser les param A et B de la structure Truc 

; On définit la valeur de A et B pour Mavariable
Mavariable\A = 1
Mavariable\B = 0

; On vérifie
Debug  Mavariable\A
Debug  Mavariable\B
OpenPreference sert bien pour charger/sauver des données dans un fichiers texte.
C'est une variante à la solution JSON que poshu t'a donné.

Regarde dans l'index de la doc OpenPreferences, l'exemple est claire. Ensuite en bas de page clique sur "Preference index", tu auras toutes les commandes liées.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
FR4NK13
Messages : 72
Inscription : mar. 03/juil./2018 9:30

Re: Premier projet (CatBot)

Message par FR4NK13 »

Merci pour l'explication :)

Est-ce qu'il y a moyen de générer un chiffre aléatoire que l'on pourrait enregistrer définitivement dans la variable en la sauvegardant ?

Exemple ;

si VariableSexe = 1 le chat est un mâle, si VariableSexe = 2 le chat est une femelle.

J'ai essayé de mettre (Random (2,1)) dans le code avec le Json de Poshu comme ceci

pet\faim = (Random(2,1))

sauf que bien entendu le chiffre généré aléatoirement change tout le temps, il ne se sauvegarde pas.
Dernière modification par FR4NK13 le jeu. 05/juil./2018 15:05, modifié 1 fois.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Premier projet (CatBot)

Message par falsam »

sauf que bien entendu le chiffre généré aléatoirement change tout le temps, il ne se sauvegarde pas.
Une fois que ta variable à recu 1 ou 2 ne cherche pas à lui donner une autre valeur.

Une piste de réflexion : if .... endif :wink:
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
FR4NK13
Messages : 72
Inscription : mar. 03/juil./2018 9:30

Re: Premier projet (CatBot)

Message par FR4NK13 »

C'est à dire ? je ne comprends pas :lol:

EDIT : On peut "bloquer" la valeur reçue aléatoirement et la sauvegarder définitivement avec une simple condition ?
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Premier projet (CatBot)

Message par falsam »

Voila un code trés simple que tu sauvegarderas dans un dossier

L'objectif principal de ce code et de te montrer comment sauvegarder les paramètres de ton Tamagoshi.

Tu lanceras ce code plusieurs fois de suite en prenant soin de quitter l'application depuis la fenêtre de l'application et non pas depuis l'IDE.

Le schéma de l'application
- Une fenêtre qui ne contiendra rien car ce n'est pas l'objectif.
- Une procédure d'initialisation de ton Tamagoshi
- Une procédure d'importation des données du Tamagoshi.
- Une procédure de sauvegarde des données du Tamagoshi.

Chaque fois que tu chargeras les données du Tamagoshi, un point sera ajouté au score. Ce n'est que pour l'exercice.

Les paramètres de ton Tamagoshi seront dans le même dossier que le code.

Le code commenté

Code : Tout sélectionner

;Oblige à déclarer les variables 
EnableExplicit

;Déclaration des variable
Structure NewTamagoshi
  sexe.i
  score.i
EndStructure

;Création du tamagoshi qui aura pour modéle la structure NewPet
Global TamaGoshi.NewTamagoshi

;Nom du fichier associé au Tamagoshi
Global FileName.s = "tamagoshi.json"

;Plan de l'application
Declare Start()

Declare TamagoshiInit()
Declare TamagoshiLoad()
Declare TamagoshiSave()

Declare Exit()

Start()

Procedure Start()
  OpenWindow(0, 0, 0, 800, 600, "Tamagoshi experience", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  
  
  ; Chargement des paramétres du tamagoshi
  TamagoshiLoad()
  Debug "Hello"
  
  ; ? Le tamagoshi a t'il un sexe ?
  Select TamaGoshi\sexe
    Case  0 ; il en a pas
      Debug "Ooops je suis assexué !!"
      Debug "Au prochain lancement je vous dirais si je suis une fille ou un garçon"
      TamagoshiInit()
      
    Case 1 
      Debug "Je suis un garçon"
      
    Case 2
      Debug "je suis une fille"
  EndSelect
  
  ; ? Quel est mon scrore
  Debug "Mon scrore est de " + TamaGoshi\score + " points"
  
  ; Triggers
  BindEvent(#PB_Event_CloseWindow, @Exit())
  
  Repeat : WaitWindowEvent() : ForEver
EndProcedure

; Je suppose qu'on détermine le sexe du tamagoshi qu'une seule fois
Procedure TamagoshiInit()
  TamaGoshi\sexe = Random(2, 1) 
EndProcedure 

; Importation des paramétres du tamagoshi
Procedure TamagoshiLoad()
  ;Chargement du fichier JSON associé au Tamagoshi
  Protected JSONFile = LoadJSON(#PB_Any, FileName, #PB_JSON_NoCase)
  
  ;? Si il existe 
  If JSONFile
    ExtractJSONStructure(JSONValue(JSONFile), TamaGoshi, NewTamagoshi)
    TamaGoshi\score + 1
  Else
    ;Il n'existe pas de fichier associé au Tamagoshi
  EndIf
EndProcedure 

Procedure TamagoshiSave()
  ;Creation du fichier JSON
  Protected JSONFile = CreateJSON(#PB_Any)
  
  ;Insertion de la structure dans la chaine JSON 
  InsertJSONStructure(JSONValue(JSONFile), Tamagoshi, NewTamagoshi)
  
  ;Sauvegarde de la chaine JSON 
  SaveJSON(JSONFile, FileName)
EndProcedure

Procedure Exit() 
  TamagoshiSave()
  End
EndProcedure
PS : Je sais que Tamagoshi s’écrit en fait Tamagotchi ^-^
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
microdevweb
Messages : 1800
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Premier projet (CatBot)

Message par microdevweb »

Bon ça fait un petit temps que je ne code plus en Pb, mais voici un petit code qui fait naître l'animal et te donne le nombre de seconde de vie.

Nb: fait en mode de fenêtre simple avec un timer.

Lance le soft plusieurs fois et tu verras que la vie tien compte du premier lancement

J'espère que cela pourra t'aider

Module animal

Code : Tout sélectionner

; Projet :  CATBOT
; MODULE : Animal
; AUTHOR : microdevWeb

DeclareModule Animal
  Declare naissance()
  Declare getNbrSecondesDeVie()
EndDeclareModule
Module Animal
  Structure _struct
    date_naissance.l
  EndStructure
  Global filePath.s = "animal.pref" ; chemin de sauvegarde
  Global myAnimal._struct
  Declare load()
  Declare save()
  ;*
  ; regarde si l'animal nait
  ;*
  Procedure naissance()
    With myAnimal
      ; on charge les données
      load()
      If \date_naissance = 0 ; il n'est pas né
        \date_naissance = Date()
        save()
      EndIf 
    EndWith
  EndProcedure
  ;*
  ; donne le nombre de secondes de vie
  ;*
  Procedure getNbrSecondesDeVie()
    ProcedureReturn ( Date() - myAnimal\date_naissance) 
  EndProcedure
  
  ;*
  ; sauve les données dans un fichiers json
  ;*
  Procedure save()
    If CreateJSON(0)
      InsertJSONStructure(JSONValue(0),@myAnimal,_struct)
      If Not SaveJSON(0,filePath)
        MessageRequester("Sauvegarde animal","impossible de sauver le fichier "+filePath,#PB_MessageRequester_Error)
      EndIf
    Else
      MessageRequester("Sauvegarde animal","impossible de créer le Json",#PB_MessageRequester_Error)
    EndIf
  EndProcedure
  ;*
  ; lit les données du fichier json
  ;*
  Procedure load()
    ; Création du fichier si il n'existe pas
        If FileSize(filePath)=-1
            CreateFile(0,filePath)
            CloseFile(0)
        Else
            If Not LoadJSON(0,filePath)
                MessageRequester("Erreur de lecture de l'animal","Impossible d'ouvrir le fichier "+gPreferencesNomFichier,#PB_MessageRequester_Error)
            Else
              ExtractJSONStructure(JSONValue(0),@myAnimal,_struct)
              ; initialise les mois et l'année de départ de la caisse
            EndIf
        EndIf
    
  EndProcedure    
EndModule

Main code

Code : Tout sélectionner

; Projet :  CATBOT
; main
; AUTHOR : microdevWeb
XIncludeFile "Animal.pbi"
#MAIN_FORM = 0
#TIMER = 0

Procedure Exit()
  CloseWindow(#MAIN_FORM)
  End
EndProcedure

Procedure AfficheMinuteNaissance()
  Debug "Nombre de secondes de vie : "+Animal::getNbrSecondesDeVie()
  
EndProcedure

Procedure openMainForm()
  OpenWindow(#MAIN_FORM,0,0,800,600,"CatBot",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  AddWindowTimer(#MAIN_FORM,#TIMER,100)
  BindEvent(#PB_Event_Timer,@AfficheMinuteNaissance(),#MAIN_FORM,#TIMER)
  BindEvent(#PB_Event_CloseWindow,@Exit(),#MAIN_FORM)
EndProcedure

; fait naitre l'animal si nécessaire
Animal::naissance()

; ouvre la fenêtre
openMainForm()

Repeat
  WaitWindowEvent()
ForEver 

Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Premier projet (CatBot)

Message par falsam »

Je pense que Frank est déja englué dans pas mal de chose. Lui balancer un module en pleine gueule n'était pas necessaire. Je rappelle que Frank est un Noob avec Purebasic. Chaque chose en son temps.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
FR4NK13
Messages : 72
Inscription : mar. 03/juil./2018 9:30

Re: Premier projet (CatBot)

Message par FR4NK13 »

Merci beaucoup Falsam, ça marche, ça donne une fille chez moi lol xD

Je vais un peu bidouiler ce code. (C'est comme ça que j'apprends et comprends ; en bidouillant des codes tout fait)
Je m'en vais de ce pas le sauvegarder et l'archiver dans mon dossier de codes d'exemples.


Microwebdev,

Je dois enregistrer les deux fichiers dans le même dossier puis ouvrir le fichier main, c'est bien ça ?
Merci ! :)
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Premier projet (CatBot)

Message par falsam »

Je vais un peu bidouiler ce code. (C'est comme ça que j'apprends et comprends ; en bidouillant des codes tout fait)
Je m'en vais de ce pas le sauvegarder et l'archiver dans mon dossier de codes d'exemples.
Avance pas à pas même si au début ça ne donne pas grand chose. :wink:
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Crystal Noir
Messages : 891
Inscription : mar. 27/janv./2004 10:07

Re: Premier projet (CatBot)

Message par Crystal Noir »

Hello,

Le pb de bidouiller des codes tout fait c'est que tu n'apprends pas à les faire toi même ;) Le mieux c'est de partir de rien et d'y aller pas à pas, même si le code est bordélique et qu'il ne marche pas. En corrigeant toi même les erreurs, tu verras que tu avanceras bien mieux :)
Répondre