Demande d'avis sur l'utilisation de PureBasic

Vous avez développé un logiciel en PureBasic et vous souhaitez le faire connaitre ?
Aliass
Messages : 23
Inscription : lun. 17/sept./2012 8:09

Demande d'avis sur l'utilisation de PureBasic

Message par Aliass »

Bonjour à tous,

En premier lieu je ne suis pas persuadé d’être dans la bonne rubrique mais les autres me semblaient trop spécialisées pour poser mon « problème » donc par avance désolé si le post n’est pas au bon endroit.

J’ouvre ce post pour solliciter votre expertise afin de définir si l’utilisation de PureBasic est la meilleure solution pour répondre à mon « problème ».

Je veux réaliser une application qui sera utilisée lors de la création de scénarios pour jeux de rôles. L’application doit également permettre de présenter les éléments réalisés lors de l’écriture des scénarios.

Création d’un scénario :
Lors de l’écriture d’un scénario il est souvent fait appel à des aides de jeu sous forme de plan ou d’images. L’application à développer devra permettre de réaliser ces plans.

Représentation des aides de jeu :

Le principe de l’application nécessite d’utiliser un moniteur secondaire qui servira de « plateau de jeu » se moniteur pourra être positionné « à plat » sur la table (écran vers le haut) cependant, faire attention à d’éventuels problèmes de surchauffe.
Sur ce moniteur, le plateau de jeu sera représenté par une matrice de 20 cases par 12 cases. Chaque case représentera un emplacement sur lesquels pourront être positionnées des figurines représentant les joueurs.
Par exemple : une matrice de 1520 pixels par 912 pixels sur un moniteur de 20 pouces affichant une résolution de 1600 pixels par 1000 pixels donne un résultat ayant une échelle acceptable.
Question :
PureBasic est il à même de gérer plusieurs affichages ? (un affichage principal avec la fenêtre de gestion pour le maitre de jeu et un affichage secondaire en plein écran pour présenter aux joueurs le plateau de jeu)


Réalisation des plans :
Chaque plan est constitué de plusieurs couches d’objets empilés afin de constituer l’image présentée aux joueurs.
Chaque couche est construite à partir d’éléments graphiques piochés dans des bibliothèques de formes de bases, représentation de sols, morceaux de murs, portes, accessoires, meubles, etc. (chaque objet graphique a une taille multiple de 76 pixels).
Pour chaque couche, certaines zones peuvent être transparente et de ce fait laisser apparaitre sur ces zones les éléments de la couche inférieure.
Voici une idée des couches à gérer :
50 - Zone visible
45 - Ambiance (nuit, brouillard, clair)
40 - PnJ / Mobs
35 - Objets sur meubles
30 – Meubles / Objets sur le sol
25 - Portes / Fenêtres
20 - Murs
15 - Accessoires de sol (tapis, paillassons, etc.)
10 - Revêtement de sol (parquet, etc.)
05 - Sol
00 - Sous-sol
L’application doit permettre de réaliser ces plans par assemblages des objets graphiques sélectionnés dans des bibliothèques.
Il doit être également possible de définir une ambiance sonore pour le plan courant et également des sons ponctuels déclenchés par le maitre de jeu.
Questions :
PureBasic est il adapté pour la création d’images ayant plusieurs couches chacune d’elles élaborées à partir d’éléments graphiques disponibles sous formes de fichiers png avec des zones transparentes ?
La mise en œuvre de sons et de musiques sont ils possibles (musiques à faire « tourner en boucle » et sons à déclencher ponctuellement « par-dessus » la musique) ?
La sauvegarde des plans utilisera surement une description au sein d’un fichier xml, la création et la lecture de ce format est il aisé avec PureBasic ?


Suivi du scénario :

La fenêtre principale de l’application doit pouvoir proposer plusieurs types de contrôles afin d’apporter au maître de jeu des outils d’aides (prise de notes, boutons de déclenchement d’événements [sons ponctuels, activation désactivation de musiques, déclenchement de modifications graphiques], listes de choix du ou des plans à afficher, etc)
Question :
PureBasic offre t’il les outils de création des IHM windows ?

Par avance merci pour vos commentaires.
Avatar de l’utilisateur
Ar-S
Messages : 9475
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Demande d'avis sur l'utilisation de PureBasic

Message par Ar-S »

Tout ceci me parait réalisable avec PB.
- il gère le son en multi canaux si besoin
- il detecte les différents ecrans donc une fenêtre par écran ne me parait pas sorcier à gérer
- il gère les images ayant une couche alpha pour la transparence. (on peut créer du sprite à gogo), il gère aussi les collisions.
- il gère le XML (jamais testé par contre)
~~~~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
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Demande d'avis sur l'utilisation de PureBasic

Message par Le Soldat Inconnu »

J'ai utilisé le XML, ça se fait très bien. Et tout le reste me semble tout à fait réalisable aussi :)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Aliass
Messages : 23
Inscription : lun. 17/sept./2012 8:09

Re: Demande d'avis sur l'utilisation de PureBasic

Message par Aliass »

Bonjour,

Merci pour ces réponses.
Suite à la lecture de vos confirmations je me suis penché plus avant sur la documentation de PB afin d’identifier les fonctions clés dont j’aurai besoin pour faire fonctionner l’application.

La premier fonction est de pouvoir gérer les 2 écrans afin d’afficher sur chacun d’eux les données, soit destinées au maitre de jeu (écran 0) soit aux joueurs (écran 1).
Je n’ai pas de problème pour identifier le « contexte » de chaque écran avec la bibliothèque « desktop » par contre, je ne vois pas comment sélectionner un écran ou l’autre en fonction de ce que je dois afficher.
Idéalement je souhaite être en mode fenêtre sur l’écran 0 et en mode plein écran sur l’affichage 1 ou y afficher une fenêtre plein écran sans bordure ni contrôle.

Pour ce qui est de la manipulation des images je n’ai pas approfondi mais il semble qu’il y ai une multitude de fonctions autour des sprits.
Les sons semblent eux aussi bien servis et pour le XML je vous fais confiance…

Si vous avez une piste pour la méthode de sélection de l’écran d’affichage, je suis preneur.
Nota : L’écran N°1 ne fait que de la représentation d’objets qui sont « pilotés » depuis la fenêtre de contrôle située sur l’écran 0.

D'avance merci pour vos réponses.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Demande d'avis sur l'utilisation de PureBasic

Message par falsam »

Bonjour Aliass. En mode fenêtré ou plein écran, tu auras dans ton programme au moins deux fenêtres ouvertes.
Pour sélectionner une fenêtre, utilise la fonction SetActiveWindow()

Bienvenu sur ce forum :)
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
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Demande d'avis sur l'utilisation de PureBasic

Message par falsam »

Un peu de code pour te montrer qu'on peut assigner des valeurs dans une fenêtre ou une autre sans forcement demander à changer de fenêtre.

Code : Tout sélectionner

Enumeration
  #Mainform1
  #Field1
  
  #mainform2
  #Field2
EndEnumeration


Define.l Event, WEvent, MEvent, GEvent, TEvent

Global WindowStyle1.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered
Global WindowStyle2.i=#PB_Window_SystemMenu|#PB_Window_Maximize

Procedure Open_MainForm()
  ExamineDesktops()
  
  ;Ouverture de la fenetre sur le premier écran (fenetrée et Centrée)
  OpenWindow(#Mainform1, 0, 0, 500, 400, "New Form 1", WindowStyle1)
  StringGadget(#Field1, 10, 20, 150, 22, "")
  
  ;Ouverture de la fenetre sur le 2eme ecran (Plein écran)
  OpenWindow(#Mainform2, DesktopWidth(1), 0, 500, 400, "New Form 2", WindowStyle2)
  StringGadget(#Field2, 10, 20, 150, 22, "")
  
  ;Mettre une valeur dans Field1
  SetGadgetText(#Field1, "Valeur 1")
  
  ;Mettre une valeur dans Field2
  SetGadgetText(#Field2, "Valeur 2")
    
  ;Je reviens sur la fenetre 1 (pas grand interet dans ce cas)
  SetActiveWindow(#Mainform1)
  
EndProcedure

Procedure Start()
  ;Initialisation application, police, etc .. 
  Open_MainForm()
  
EndProcedure

start()

Repeat
  Event  = WaitWindowEvent(10)
  WEvent = EventWindow() 
  MEvent = EventMenu()
  GEvent = EventGadget()
  TEvent = EventType()
  Select Event
    Case #PB_Event_Gadget
      Select GEvent
          
      EndSelect
        
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver
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%
Aliass
Messages : 23
Inscription : lun. 17/sept./2012 8:09

Re: Demande d'avis sur l'utilisation de PureBasic

Message par Aliass »

Super !!

C'est exactement ce que je chercher.
Je vais faire des essais de gestion de la fenêtre secondaire.

Merci.
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Demande d'avis sur l'utilisation de PureBasic

Message par graph100 »

Tiens un code que j'utilisais pour une fenêtre en plein écran, et avec la détection de l'autre écran.

Par contre je ne sais pas si le deuxième écran se positionne toujours aux coordonnées (W0, 0)
W0 étant la largeur du premier écran.
Il me semble que sur ma carte graphique on peut définir la position du deuxième écran par rapport au premier.
Dans ce cas les commandes natives de PB me semble insuffisante pour trouver le décalage entre les écrans...

Code : Tout sélectionner

Enumeration
	#ww_Principale
	#ww_plein_ecran
EndEnumeration



If OpenWindow(#ww_Principale, 0, 0, 200, 200, "Test", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget)
	ButtonGadget(0, 50, 50, 60, 60, "Carré")
EndIf

nb_desktop = ExamineDesktops()
Plein_ecran.b = #False


If nb_desktop > 1
	w0 = DesktopWidth(0)
	h0 = DesktopHeight(0)
	
	w = DesktopWidth(1)
	h = DesktopHeight(1)
	
	
	
	If InitSprite() = 0
		MessageRequester("Erreur", "Message d'erreur")
	EndIf
	
	
	If OpenWindow(#ww_plein_ecran, w0, 0, w , h, "Test - Plein écran", #PB_Window_BorderLess, WindowID(#ww_Principale))
		If OpenWindowedScreen(WindowID(#ww_plein_ecran), 0, 0, w, h, 0, 0, 0)
			
			Plein_ecran.b = #True
			
		Else
			MessageRequester("Erreur", "Message d'erreur")
		EndIf
		
	EndIf
	
	; Pour l'afficher audessus de toutes les autres fenêtres
	StickyWindow(#ww_plein_ecran, #True)
	
EndIf

;{ variable

Carre.b = #False
delay = 100
t = ElapsedMilliseconds()

x = Random(w - 50)
y = Random(h - 50)

r.d = Random(255) / 255
g.d = Random(255) / 255
b.d = Random(255) / 255

vx = Random(20) - 10
vy = Random(20) - 10

;}


Repeat
	event = WaitWindowEvent(100)
	
	If event = #PB_Event_Gadget
		Select EventGadget()
			Case 0
				If Carre
					SetGadgetText(0, "Rond")
					
					carre = #False
				Else
					SetGadgetText(0, "Rond")
					
					carre = #True
				EndIf
				
		EndSelect
	EndIf
	
	;{ Truc graphique inutile pour afficher qq chose
	If Plein_ecran And ElapsedMilliseconds() - t > delay
		t = ElapsedMilliseconds()
		
		r = r + 0.1
		g = g + 0.15
		b = b + 0.13
		
		x + vx
		y + vy
		
		If x > w - 50 Or x < 0 : vx = - Sign(vx) * Random(20) : EndIf
		If y > h - 50 Or y < 0 : vy = - Sign(vy) * Random(20) : EndIf
		
		ClearScreen(#Green)
		
		If StartDrawing(ScreenOutput())
			
			If carre
				Box(x, y, 50, 50, RGB(255 * Sin(r), 255 * Sin(g), 255 * Sin(b)))
			Else
				Circle(x + 25, y + 25, 25, RGB(255 * Sin(r), 255 * Sin(g), 255 * Sin(b)))
			EndIf
			
			StopDrawing()
		EndIf
		
		FlipBuffers()
	EndIf
	;}
	
Until event = #PB_Event_CloseWindow

End
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Répondre