Page 1 sur 1

[RESOLU]Définir les dimensions d'une console?

Publié : dim. 09/déc./2007 9:53
par magiciendu69
Bonjour,
Je suis en 1èere S et je doios donc réaliser un TPE, popour soutenir mon dossier je réalise un programme de simulation de gestion des ressources par les fourmis.
Voici ma question : Lorsque je lance le programme, la fenêtre appellée avec OpenConsole() apparaît de manière arbitraire sur l'écran, y a-t'il un moyen de paramétrer les dimensions et la localisation de cette fenêtre, car sinon elle se superpose à la fenêtre de dessin que j'ouvre plus tard?
Deuxième solution : y a-t'il une commande qui permette de définir la fenêtre de texte comme en arrière-plan, afin qu'elle ne cache pas la fenêtre de dessin?

Merci d'avance pour toutes vos réponses

PS : Si cela peut aider, voici le code :

Code : Tout sélectionner

Largeur = 503
Hauteur = 300                                              
indice = 50
coul_ress = $FF0000
coul_departfond = $FFFFFF
coul_fond  = $99FFFF
coul_fourmi = $000000
nbdepl = 0
Dim Airechasse(Largeur, Hauteur)

Structure fourmi
  ax.l                  ;Anciennes coordonnées de la fourmi
  ay.l
  x.l                    ;Coordonnées actuelles
  y.l
  nx.l                  ;Futures coordonnées
  ny.l
  etat.l                ;Etat de la fourmi(0 = vide, 1 = pleine)
  dx.l                  ;Deplacement de la fourmi
  dy.l
EndStructure

OpenConsole()
EnableGraphicalConsole(1)
PrintN("Appuyez sur espace pour passer a l'etape suivante")
PrintN("Appuyer sur echap pour arreter le programme")
PrintN("Mais tout d'abord, combien de fourmis vont travailler?")
Reponse$ = Input()
nbfourmi = Val(Reponse$)
            
If OpenWindow(0, 0, 0, Largeur, Hauteur, "Aire de chasse", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    If StartDrawing(WindowOutput(0))
      
      Dim fm.fourmi(nbfourmi)
      
      ;Affichage de l'aire de chasse
      Box(0, 0, Largeur, Hauteur, coul_departfond)
      
      Repeat
        Touche$ = Inkey()
      Until Touche$ = Chr(32)
      
      ;On initialise le tableau des ressources et affichage
      For Tabx = 0 To Largeur-1
        For Taby = 0 To Hauteur-1
          If Random(indice)=indice
              Airechasse(Tabx, Taby) = 1
              Plot(Tabx, Taby, coul_ress)
          Else
              Airechasse(Tabx,Taby) = 0
          EndIf
        Next Taby
      Next Tabx

      Repeat
        Touche$ = Inkey()
      Until Touche$ = Chr(32)
      ;On définit les coordonnées de départ des différentes fourmis
      ;On initialise les fourmis comme vides
      For i = 1 To nbfourmi-1
          fm(i)\x = 0.9*Random(Largeur-1)+0.05*Largeur
          fm(i)\y = 0.9*Random(Hauteur-1)+0.05*Hauteur
          fm(i)\nx = fm(i)\x + 1
          fm(i)\ny = fm(i)\y + 1
          fm(i)\etat = 0
          fm(i)\dx = 2*Random(1)-1
          fm(i)\dy = 2*Random(1)-1
      Next
      ;**********************************
      ;Fin de l'initialisation, début du travail
      Repeat
        Touche$ = Inkey()
        For i = 1 To nbfourmi
        ;On défini les anciennes coordonnées de la fourmi en vue des tests
            fm(i)\ax = fm(i)\x
            fm(i)\ay = fm(i)\y
        ;On défini les nouvelles coordonnées de la fourmi
            fm(i)\x = fm(i)\nx
            fm(i)\y = fm(i)\ny
        ;On défini les futures coordonnées de la fourmi en vue des tests
        ;Et on vérifie qu'elles ne sortent pas de l'écran, sinon on inverse le déplacement 
        ;déficient
            fm(i)\nx = fm(i)\x + fm(i)\dx
            fm(i)\ny = fm(i)\y + fm(i)\dy
            If fm(i)\nx = Largeur-1 Or fm(i)\nx = 0
                fm(i)\dx = fm(i)\dx*(-1)
            EndIf
            If fm(i)\ny = Hauteur-1 Or fm(i)\ny = 0
                fm(i)\dy = fm(i)\dy*(-1)
            EndIf
        ;Dessin des nouvelles localisations et effacement des anciennes
            Plot(fm(i)\x,fm(i)\y, coul_fourmi)
            If Airechasse(fm(i)\ax, fm(i)\ay) = 1
                Plot(fm(i)\ax, fm(i)\ay, coul_ress)
            Else
                Plot(fm(i)\ax, fm(i)\ay, coul_fond)
            EndIf  
        ;***************************************
        ;Vérification de la présence de ressources
         
          If Airechasse(fm(i)\x, fm(i)\y) + fm(i)\etat = 1
            nb_ress = Airechasse(fm(i)\ax, fm(i)\ay) + Airechasse(fm(i)\x, fm(i)\ay) + Airechasse(fm(i)\nx, fm(i)\ay) + Airechasse(fm(i)\ax, fm(i)\y) + Airechasse(fm(i)\nx, fm(i)\y) + Airechasse(fm(i)\ax, fm(i)\ny) + Airechasse(fm(i)\x, fm(i)\ny) + Airechasse(fm(i)\nx, fm(i)\ny)
                          
            If fm(i)\etat = 0 And nb_ress < 2
              fm(i)\etat = 1
              Airechasse(fm(i)\x, fm(i)\y) = 0          
            EndIf  
            If fm(i)\etat = 1 And nb_ress > 2
              fm(i)\etat = 0
              Airechasse(fm(i)\x, fm(i)\y) = 1
            EndIf
          EndIf
        Next
        ;****************************
        ;Comptage de boucles
        nbDepl = nbDepl+nbfourmi
        ConsoleLocate(5, 6)
        Print(Str(nbDepl))
      Until Touche$ = Chr(27)
    EndIf
EndIf

Publié : dim. 09/déc./2007 10:50
par RV
Salut,

Pourquoi tu te sers d'une console? :?
Tu ne peux pas tout mettre sur ta window?
Genre un StringGadget pour 'le nombre de fourmis' et un ButtonGadget pour 'lancer le travail'. :)

Publié : dim. 09/déc./2007 11:06
par magiciendu69
D'acc, je vais tenter ça^^
Merci beaucoup!!!

Publié : dim. 09/déc./2007 14:26
par RV
Si ta version de PureBasic n'est pas une demo alors voilà une idée de comment tu peux faire!

(sinon tu ne pourras pas faire fonctionner le code ci-dessous car je me sers de SetTimer_() qui fait partie de l'API auquel tu ne peux pas accéder)

Code : Tout sélectionner

InitSprite()

Global Largeur = 503 
Global Hauteur = 300                                              
Global indice = 50 
Global coul_ress = $FF0000 
Global coul_departfond = $FFFFFF 
Global coul_fond  = $99FFFF 
Global coul_fourmi = $000000 
Global nbfourmi=100
Global nbdepl = 0 
Global travail=0
Global Dim Airechasse(Largeur, Hauteur) 


Structure fourmi 
  ax.l                  ;Anciennes coordonnées de la fourmi 
  ay.l 
  x.l                    ;Coordonnées actuelles 
  y.l 
  nx.l                  ;Futures coordonnées 
  ny.l 
  etat.l                ;Etat de la fourmi(0 = vide, 1 = pleine) 
  dx.l                  ;Deplacement de la fourmi 
  dy.l 
EndStructure 

Procedure Initialisation()
    Global Dim fm.fourmi(nbfourmi) 
    StartDrawing(ScreenOutput())
        Box(0, 0, Largeur, Hauteur, coul_departfond) 
      For Tabx = 0 To Largeur-1 
        For Taby = 0 To Hauteur-1 
          If Random(indice)=indice 
              Airechasse(Tabx, Taby) = 1 
              Plot(Tabx, Taby, coul_ress) 
          Else 
              Airechasse(Tabx,Taby) = 0 
          EndIf 
        Next Taby 
      Next Tabx 
    StopDrawing()

      For i = 1 To nbfourmi-1 
          fm(i)\x = 0.9*Random(Largeur-1)+0.05*Largeur 
          fm(i)\y = 0.9*Random(Hauteur-1)+0.05*Hauteur 
          fm(i)\nx = fm(i)\x + 1 
          fm(i)\ny = fm(i)\y + 1 
          fm(i)\etat = 0 
          fm(i)\dx = 2*Random(1)-1 
          fm(i)\dy = 2*Random(1)-1 
      Next 
EndProcedure
Procedure AuBoulot()
    FlipBuffers()
    StartDrawing(ScreenOutput())
        For i = 1 To nbfourmi 
        ;On défini les anciennes coordonnées de la fourmi en vue des tests 
            fm(i)\ax = fm(i)\x 
            fm(i)\ay = fm(i)\y 
        ;On défini les nouvelles coordonnées de la fourmi 
            fm(i)\x = fm(i)\nx 
            fm(i)\y = fm(i)\ny 
        ;On défini les futures coordonnées de la fourmi en vue des tests 
        ;Et on vérifie qu'elles ne sortent pas de l'écran, sinon on inverse le déplacement 
        ;déficient 
            fm(i)\nx = fm(i)\x + fm(i)\dx 
            fm(i)\ny = fm(i)\y + fm(i)\dy 
            If fm(i)\nx = Largeur-1 Or fm(i)\nx = 0 
                fm(i)\dx = fm(i)\dx*(-1) 
            EndIf 
            If fm(i)\ny = Hauteur-1 Or fm(i)\ny = 0 
                fm(i)\dy = fm(i)\dy*(-1) 
            EndIf 
        ;Dessin des nouvelles localisations et effacement des anciennes 
            Plot(fm(i)\x,fm(i)\y, coul_fourmi) 
            If Airechasse(fm(i)\ax, fm(i)\ay) = 1 
                Plot(fm(i)\ax, fm(i)\ay, coul_ress) 
            Else 
                Plot(fm(i)\ax, fm(i)\ay, coul_fond) 
            EndIf  
        ;*************************************** 
        ;Vérification de la présence de ressources 
          
          If Airechasse(fm(i)\x, fm(i)\y) + fm(i)\etat = 1 
            nb_ress = Airechasse(fm(i)\ax, fm(i)\ay) + Airechasse(fm(i)\x, fm(i)\ay) + Airechasse(fm(i)\nx, fm(i)\ay) + Airechasse(fm(i)\ax, fm(i)\y) + Airechasse(fm(i)\nx, fm(i)\y) + Airechasse(fm(i)\ax, fm(i)\ny) + Airechasse(fm(i)\x, fm(i)\ny) + Airechasse(fm(i)\nx, fm(i)\ny) 
                          
            If fm(i)\etat = 0 And nb_ress < 2 
              fm(i)\etat = 1 
              Airechasse(fm(i)\x, fm(i)\y) = 0          
            EndIf  
            If fm(i)\etat = 1 And nb_ress > 2 
              fm(i)\etat = 0 
              Airechasse(fm(i)\x, fm(i)\y) = 1 
            EndIf 
          EndIf 
        Next 
    StopDrawing()
    ;**************************** 
    ;Comptage de boucles 
    nbDepl = nbDepl+nbfourmi
    SetGadgetText(4,Str(nbDepl)+" déplacement(s)")
EndProcedure

win=OpenWindow(0, 0, 0, Largeur, Hauteur+20, "Aire de chasse", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
If win
    OpenWindowedScreen(WindowID(0),0,20,Largeur,Hauteur,0,0,0)
    CreateGadgetList(WindowID(0))
        TextGadget(1,0,3,100,17,"Nombre de fourmis")
        StringGadget(2,100,0,60,20,Str(nbfourmi),#PB_Text_Right)
        ButtonGadget(3,170,0,100,20,"Lancer le travail")
        TextGadget(4,280,3,200,17,"")
EndIf



Repeat

    event=WaitWindowEvent()
    
    If event=#PB_Event_Gadget
        If EventGadget()=3
            If travail=0
                travail=1
                nbfourmi=Val(GetGadgetText(2))
                Initialisation()
                SetGadgetText(3,"Arrêter")
                DisableGadget(2,1)
                SetTimer_(win,1,10,@AuBoulot())
            Else
                travail=0
                SetGadgetText(3,"Lancer le travail")
                DisableGadget(2,0)
                KillTimer_(win,1)
            EndIf
        EndIf
    EndIf
    
Until event=#PB_Event_CloseWindow

End
Tu remarqueras que je n'ai pas touché à tes structures, déplacements et à l'intelligence artificielle à 4 neurones de tes fourmis! :D