Purecross

Programmation avancée de jeux en PureBasic
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

@hackotedelaplaque
tu as même réglé en passant mon problème de positionnement du crayon quand on quitte puis revient sur l'écran via l'appel à l'API avec ShowCursor_
Souvent je vois dans les codes un ShowCursor_(#True) sans test pour savoir si le curseur est deja afficher ou non, et c'est comme la drogue, c'est maaaaaaaaal :P En faisant un ShowCursor_() à chaque boucle, on envoi un message à chaque boucle alors qu'une seule foi suffit et evite de surcharger la liste des evenements :)
Chapeau pour la maîtrise des constantes comme #WM_LBUTTONUP, #WM_CLOSE.
Enfait c'est une habitude, plus court que #PB_Event_CloseWindow ou Select EventType() : Case : #PB_EventType_LeftClick : ... Et puis c'est plus pratique car tu peut remplir les cases facilement sans relacher le bouton de la sourie avec un variable d'etat. Par exemple :

Dans les déclarations globales :

Code : Tout sélectionner

Global FillCross.b ; va nous permetre de savoir si le bouton droit est enfoncer pour remplir les cases
Dans le Select wEvent, remplacer le Case #WM_LButtonDown par :

Code : Tout sélectionner

          Case #WM_LBUTTONDOWN ;Si le bouton droit est enfoncé, on met FillCross à #True
            FillCross = #True
            
          Case #WM_LBUTTONUP ; Si le bouton droit est relaché, on met FillCross à #False 
            FillCross = #False
Juste avant l'affichage des cases, ajouter :

Code : Tout sélectionner

    ; Remplissage des cases si FillCross = #True et que la case n'est pas -1, -1
    ;
    If FillCross = #True And CrayonCrossX > -1 And CrayonCrossY > -1
      Cross(CrayonCrossX, CrayonCrossY)\Sprite = #Cross
    EndIf
Bon c'est tout aussi faisable avec MouseButton(1) = 0 ou 1, mais je trouve plus parlant LButtonDown et LButtonUp :P
Y'a même plus de InitMouse(), tout se fait en zappant la lib mouse, ni même de gestion de collisions.
Comme je disais, il n'y a pas vraiment besoin de la lib Mouse(), tout se passe en fenetré sans avoir besoin de capture la sourie pour emepecher l'utilisateur de sortir de la fenetre. La lib Mouse est surtout utile en plein écran où lorsqu'on veux simplement que le curseur reste sur l'écran.
C'est presque plus du Purebasic là !
Au contraire! C'est du pure PureBasic :lol:
Pas de doutes aussi, pour les tableaux plutôt qu'une liste, je suis convaincu. J'y avais pensé mais je bloquais sur les limites de "Redim" (que tu n'utilises même pas d'ailleurs, je me suis cherché la complication pour rien !)
Un redim aurait été mieu car là j'alloue un espace plus grand que necessaire. Un tableau de #Max_Cross * #Max_Cross maximum alors qu'un utilisateur peut juste faire des tableau de 5 * 5 s'il en a envie. Mais bon c'est pas enorme non plus voir meme négligeable pour 125 octets non utilisés 8)

Code : Tout sélectionner

; On calcul sur quelle case est le crayon
    CrayonCrossX = Round((CrayonX  - 200) / 12 + MaxCrossX / 2, 1) - 1
    CrayonCrossY = Round((CrayonY  - 200) / 12 + MaxCrossY / 2, 1)  - 1 

Code : Tout sélectionner

; on calcul la postion en x/y de la case
      Cross(x, y)\x = 200 + ((x - MaxCrossX / 2) * 12)
      Cross(x, y)\y = 200 + ((y - MaxCrossY / 2) * 12) 
Je vais essayer d'expliquer. L'idée : On à un écran de 400 x 400, pour centrer les cases il est plus simple de deplacer l'origine (0; 0) au millieu de l'écran (donc en 200; 200) et pour ça il suffit de soustraire 200 en X et en Y (ainsi si X = 200 alors CrossX = 0, si X = 384 alors CrossX = 184 ou encor si X = 25 alors CrossX = -175). Bref ça nous permet de nous reperer par rapport au centre.
Voila l'idée globalement. On aurait pu faire comme ça mais le hic c'est que le nombre de case est variable!

Dans le 2eme block, on veux placer les cases de 0 à MaxCrossX et MaxCrossY (c'est à dir le nombre max de cases qu'un utilisateur A choisi, et non #Max_Cross qui lui definit le nombre max de case qu'un utilisateur PEUT choisir). Pour les placer on pourait partir du centre (200; 200) et on ajouter X * la taille d'une case mais elle serait en la partie sud-est de l'ecran seulement (X * Taille d'une case sera toujours positif (à part si la taille est negative mais bon... :P )). On prend donc le principe de l'idée plus haut et on l'applique à X soit X = X - Le nombre max de case / 2 . Ainsi X va aller de -MaxCrossX/2 à +MaxCrossX/2 et les cases seront bien centrées.

C'est pas facil à expliquer... :roll:

Dans le 1er block, c'est toujours le meme principe : On soustrait 200 à la position du curseur pour avoir l'origine en 0; 0, puis on divise par la taille d'une case car l'ecran peut etre remplis de n * taille d'une case. Et là, comme tout a l'heure, si on parcourt pas de -MaxCrossX / 2 à +MaxCrossX / 2 la premiere case ne va pas se trouver au nord-ouest mais au sud-est.
Le round(.., 1) - 1 c'est simplement que pour un tableau de 5 x 5 on aura MaxCrossX = 5 et MaxCrossY = 5 mais en realité on parcoura le tableau de 0 à 4 (l'element 0 etant pris en compte, de 0 à 4 il y a bien 5 éléments).

Code : Tout sélectionner

Mais ça a l'air de ressembler à ce que je faisais avec mes variables MargeX et MargeY
C'est à peut pret ça, sauf que tu partais d'en haut à gauche et ça marche tres bien aussi, mais apres pour trouver sur quelle case se trouve le curseur c'est un peut plus chiant. Et puis j'ai l'habitude de faire comme ça alors :P

Je sais pas si j'ai été clair dans mes explications (a vrai dir c'est pas vraiment mon truc lol) mais si tu comprends toujours pas, je te ferais un schémas :)

@Dobro :
Je viens d'écouter ton interpretation, c'est super! J'ai meme applaudis a la fin, mais je pense que t'a pas entendu car c'etait tout noir apres :P
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

cederavic a écrit : @Dobro :
Je viens d'écouter ton interpretation, c'est super! J'ai meme applaudis a la fin, mais je pense que t'a pas entendu car c'etait tout noir apres :P
Merci :D c'est super cool ! :D

ps : en cliquant sur mon pseudo, vous aurez acces a toutes mes autres videos.. (y en a plusieurs pages :lol: )


Merci encore :)
hackotedelaplaque
Messages : 121
Inscription : mer. 21/janv./2004 22:18

Message par hackotedelaplaque »

@ Cederavic

Dis moi tu es télépathe en plus d'être balèze en code ? 8O
Et puis c'est plus pratique car tu peut remplir les cases facilement sans relacher le bouton de la sourie avec un variable d'etat
Je voulais réaliser cet effet sans revenir à MouseButton(1) = 0 ou 1 et j'ai même pas eu à poser la question pour être exaucé !


Tu as été parfaitement clair et j'ai maintenant bien saisi tous les détails du bloc de code (je bloquais sur le round()) et tout l'intérêt dans ce cas précis (redimensionnement oblige) de placer l'origine au centre.

Un sacré coup de pouce en vérité ! Merci !
Si tu décides un jour de donner des cours par correspondance, je suis client ! :D

J'ai intérêt à livrer un bon petit projet à la communauté maintenant. :oops:
En plus ce jeu, pour ceux qui connaissent, est très prenant et devient vite une drogue pire que le sudoku !

@Dobro
Au fait, j'ai aussi trouvé ton interprétention très sympa ! Limite nostalgique, ça m'a même donné la chair de poule.
Heureusement que t'as pas joué bonne nuit les petits, j'aurais versé une larme !

[edit] @ Dobro : c'est bon je l'ai finalement versé ma larmichette, sur ton hotel california ! Que celui qui n'a pas de troubles souvenirs sur cette chanson me jette la 1ère pierre...
10 CLS
20 PRINT "Vive PureBasic"
30 GOTO 20
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

en cliquant sur mon pseudo, vous aurez acces a toutes mes autres videos.. (y en a plusieurs pages )
J'ai adoré "The persuader" ça a bercé mon enfance.
On dirait que t'es plusieur pour interpréter ça 8O

Il ont combien de doigts sur ta planete :D

Sincerement t'es beau, et ça fait tout drole de te voir en vrai.
Moi j'aurais pu aussi, j'fait tellement de "pipo" :lol:
Cette musique m'a ému, je sais je m'emeu d'un rien, mais c'est vrai.

Et bah moi maintenant, je connais une vedette qui passe à la télé et je lui parle tous les jours...en fait j'en connais deux, l'autre etait lyonnaise (of course).

Merci de ce pure moment de bonheur 8)

PS: peut etre si je peux me permettre une critique, un passage en institut pour l'épilation des gambettes :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

:lol: :lol: Merci !!

pour la part niveau emotion c'est plus mon adaptation de

"Jacquou le croquant" qui me fait quelque chose :)

http://www.dailymotion.com/Dobro8/video ... uant_music

je trouvais cette musique super belle a l'époque ou le feuilleton etait diffusé :D

la partition n'existant apparemment pas, j'ai du rechercher le morceau d'oreille

Merci a vous :)

Désolé d'avoir pollué le Topic :oops:
Répondre