Aller au contenu

essai challenge par un débutant


Messages recommandés

Posté(e)

Bonsoir,

 

je me lance dans un challenge de débutant.

Afin de sortir de l 'austérité du boulot, je souhaiterais fabriquer un jeu de bonneteau.

(vous savez ce jeu de 3 cartes retournées où il faut retrouver la bonne).

Ce thème pourrait faire l 'objet de choix d 'évolution.

 

La première étape sera de faire dessiner 3 cartes .

Elles seront rectangulaires en polyligne 2d de 10 de large sur 20 de haut, alignées horizontalement, séparées de 10 unités

Le moins de lignes de code possible est souhaité, mais les commentaires sont les bienvenus,

l 'objectif étant de faire connaître des possibilités d' utilisation.

VBA bien sûr.

 

[Edité le 21/10/2007 par nazemrap]

Posté(e)

Très bonne initiatve :

 

l'algorithme devrait ressembler à ça :

 

une boucle de 1 à 3 pour dessiner chaque carte au même endroit et en fin de boucle, les déplacer

 

bonne chance

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

j'ai réussi... mais c'est pas juste, je suis aguerri et en plus j'ai déjà fait des bout de codes similaires..

 

dois-je poster maintenant?

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

Salut,

 

J 'avais pas vu ton message.

Il n 'y a pas beaucoup de volontaires !!!!

Tant pis, on continue.

 

Vas y postes, je mets le mien aussi, on pourra comparer.

J 'ai fait moi ausi une boucle, mais j 'ai inclu le déplacement dans la boucle.

 

'definition des variables pour les 3 cartes (le 0 compte aussi)
Dim carte(2) As AcadLWPolyline
'definition des points nécesssaires à la polyligne 4 sommets avec x et y pour chacun soit 8 valeurs en double précision
Dim pt(0 To 7) As Double
'definition de la variable pour la largeur
Dim largeur As Double
' definition de la variable pour la hauteur
Dim hauteur As Double
' definition d' une varariable entier pour une boucle
Dim fois As Integer
' definition d' une varariable entier pour l 'écart séparant 2 cartes
Dim dep As Double



Public Sub bonneteau_1()

'valoriser  les 3 paramètres de dimension et placement
largeur = 10
hauteur = largeur * 2
dep = largeur * 2

'création des cartes avec une boucle
'3 tours
For fois = 0 To 2
   'point d' origine au tour suivant le placement du point d 'origine est augmenté de la variable de placement
   pt(0) = 0 + (dep * fois): pt(1) = 0
   ' second point bas droite
   pt(2) = pt(0) + largeur: pt(3) = pt(1)
   'troisieme point au dessus du second
   pt(4) = pt(2): pt(5) = pt(3) + hauteur
   'quatrième point en revenant au dessus du premier
   pt(6) = pt(4) - largeur: pt(7) = pt(5)
   'creation de la carte proprement dit avec une polyligne 2d
   Set carte(fois) = ThisDrawing.ModelSpace.AddLightWeightPolyline(pt)
   'propriété qui permet de fermer la polyligne sur son premier point
   carte(fois).Closed = True
Next

End Sub

 

[Edité le 20/10/2007 par nazemrap]

Posté(e)

Bon j'avais pas vue passer le poste mais si tu as d'autre challenge dans le meme genre alors, je veux bien essayer de participer.

 

@+

MDSV31

 

PS: code bien documenté, jamais vue avant.

Dessinateur Indépendant

Posté(e)

'quatrième point en revenant au dessus du premier
pt(6) = pt(4) - largeur: pt(7) = pt(5) 

 

ne sert à rien car tu demande de clore la polyligne à la fin

 

'propriété qui permet de fermer la polyligne sur son premier point
carte(fois).Closed = True 

 

C'est tous ce que j'ai pu remarquer.

 

@+

MDSV31

Dessinateur Indépendant

Posté(e)

Hello,

 

Heu!!

J 'ai besoin de 4 points pour tracer 3 segments et donc de fermer la polyligne après le quatrième point pour rejoindre le premier.

Si je ferme après le troisième j 'ai un triangle non ???

 

 

Posté(e)

Bon d'accord, j'ai commandé un nouveau cerveau pour noêl. J'espere qu'il sera plus efficasse que celui d'origine.

 

Désolé.

 

@+

MDSV31

 

PS: GETCORNER permet de faire des rectangles en lisp il n'y a pas d'equivalent en VBA?

Dessinateur Indépendant

Posté(e)

désolé mais mon PC est en rad, alors je suis coincé pour l'instant mias j'avais fait différement de ce que j'avais proposé :

 

création d'une carte puis rotiation de celle-ci et enfin mirror avec une copie entre chaque action et donc j'avais pas besoin de faire de boucle... ça m'avais réduit la longueur du code.

 

j'avais même pensé à mettre chaque carte dans un calque diférrent pour faire la suite :

on choisi la carte à cherché et la carte à trouvé change de couleur.

 

pour que le Pc choisisse où sera la carte, j'ai pensé à utilisé la fonction RDN puis tester la dernier chiffre en faisant un select case :

 

select case chiffre

case 0,3,6,9

'mettre la carte de gauche dans le calque carte à touver

'et mettre les 2 autres dans un calque quelconque

case 1,4,7

'mettre la carte du milieu dans le calque carte à touver

'et mettre les 2 autres dans un calque quelconque

case else

'mettre la carte de droite dans le calque carte à touver

'et mettre les 2 autres dans un calque quelconque

end select

 

c'est pas super m'ai j'ai trouvé que ça pour changer les cartes de manière aléatoire

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

Hey,

 

-MDSV31 : je ne connait pas d 'équivalant vba pour le rectangle, mais étant donné ma pratique, il est possible que qelquechose puisse exister.D' autres avis viendront peut-être.

 

-Sechanbask : désolé pour ton pc.

Je retiens l 'idée de mettre les cartes sur un calque différent, pour exploiter le tirage, ce sera sans doute Rnd, mais c 'est à mon avis un peu tôt.

Le miroir va être à tester en effet, j 'espère que tu seras bientôt de nouveau opérationnel...

 

Ce serait bien que ces challenges servent, à ceux qui le souhaitent, à s' initier à VBA.

Pour ma part j 'envisage en rapport avec le code précédent, de récupérer la largeur de la carte avec une boite de saisie (fréquente en vba), ce qui permettra d 'adapter la dimension au goût de chacun.

Seule la largeur est nécessaire pour l' instant pour induire le reste des opérations.

Je souhaiterais aussi que les angles soient arrondis, et comme il s' agit d' une polyligne...

Il faut sans doute envisager aussi un zoom étendu.

 

Si il y a des amateurs ....

Posté(e)

mdsv31 :

à ma connaissance, le getcorner ne sert qu'à demander à l'utilisateur de pointer un point pour en faitre un rectangle. Je ne connais pas de get corner pour que le programme fasse tout seul un rectangle sans intervention de l'utilisateur...

 

Mais je peux me tromper par ignorance.

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

Bon voici un code pour des cartes avec les coins arrondis

 

'definition des variables pour les 3 cartes (le 0 compte aussi)
Dim carte(2) As AcadLWPolyline
'definition des points nécesssaires à la polyligne 4 sommets avec x et y pour chacun soit 8 valeurs en double précision
Dim pt(0 To 15) As Double
'definition de la variable pour la largeur
Dim largeur As Double
' definition de la variable pour la hauteur
Dim hauteur As Double
' definition d' une varariable entier pour une boucle
Dim fois As Integer
' definition d' une varariable entier pour l 'écart séparant 2 cartes
Dim dep As Double
' definition d'une variable pour le chanfrein de la carte
Dim ray As Double




Public Sub bonneteau_1()

'valoriser les 3 paramètres de dimension et placement
largeur = 10
hauteur = largeur * 2
dep = largeur * 2
ray = largeur * 0.1
fois = 0

'création des cartes avec une boucle
'3 tours
For fois = 0 To 2
'point d' origine au tour suivant le placement du point d 'origine est augmenté de la variable de placement
pt(0) = 0 + (dep * fois) + ray: pt(1) = 0
pt(2) = pt(0) + largeur - ray: pt(3) = pt(1)
pt(4) = pt(2) + ray: pt(5) = pt(3) + ray
pt(6) = pt(4): pt(7) = pt(3) + hauteur - ray
pt(8) = pt(2): pt(9) = pt(3) + hauteur
pt(10) = pt(0): pt(11) = pt(9)
pt(12) = pt(0) - ray: pt(13) = pt(7)
pt(14) = pt(12): pt(15) = pt(1) + ray
'creation de la carte proprement dit avec une polyligne 2d
Set carte(fois) = ThisDrawing.ModelSpace.AddLightWeightPolyline(pt)
'propriété qui permet de fermer la polyligne sur son premier point
carte(fois).Closed = True
'propriété qui permet d'avoir des coins arrondis
carte(fois).SetBulge 1, Tan(22.5 * 3.14159 / 180)
carte(fois).SetBulge 3, Tan(22.5 * 3.14159 / 180)
carte(fois).SetBulge 5, Tan(22.5 * 3.14159 / 180)
carte(fois).SetBulge 7, Tan(22.5 * 3.14159 / 180)
Next

End Sub 

 

Bon j'ai pas pu mieux faire.

 

@+

MDSV31

Dessinateur Indépendant

Posté(e)

Hello,

 

Wouah!! trop drôle, je ne peux pas résister à mettre ce que j 'avais fait.

 


Public Sub bonneteau_3() 'arrondir les angles avec la méthode bulge

'saisie de la largeur par une boite
largeur = InputBox("Quelle est la largeur de la carte")
hauteur = largeur * 2
dep = largeur * 2
' le rayon sera proportionnel à la largeur
rayon_coin = largeur / 10

'la boucle qui inclut cette fois 8 points qui permettront de "bulger"
'il est recommandé à ceux que cela intéresse d 'aller voir dans l' aide pour setbulge

For fois = 0 To 2
pt(0) = 0 + (dep * fois) + rayon_coin: pt(1) = 0
pt(2) = pt(0) + largeur - (2 * rayon_coin): pt(3) = pt(1)
pt(4) = pt(2) + rayon_coin: pt(5) = pt(3) + rayon_coin
pt(6) = pt(4): pt(7) = pt(5) + hauteur - (2 * rayon_coin)
pt(8) = pt(6) - rayon_coin: pt(9) = pt(7) + rayon_coin
pt(10) = pt(8) - largeur + (2 * rayon_coin): pt(11) = pt(9)
pt(12) = pt(10) - rayon_coin: pt(13) = pt(11) - rayon_coin
pt(14) = pt(12): pt(15) = pt(13) - hauteur + (2 * rayon_coin)

Set carte(fois) = ThisDrawing.ModelSpace.AddLightWeightPolyline(pt)
carte(fois).Closed = True

'boucle imbriquée qui permet de réaliser l 'arrondi
   For coin = 1 To 7 Step 2
   carte(fois).SetBulge coin, (1.414 * rayon_coin) / 4
   Next

Next

End Sub

 

C 'est pratiquement la même chose, mais plus propre pour MDSV31.

Mais j 'ai pas honte, je joue le jeu, je savais bien que cela allait m'être profitable....

J 'ai rajouté un input pour la largeur de la carte, les autres dimensions sont en fonction.

Pour le "SetBulge", je l' ai mis dans une boucle.

J 'ai éxécuté les 2, j 'ai superposé, MDSV31 dépasse les 10.

Fallait bien que je trouve quelque chose.

Il reste le zoom étendu.

 

Qu' est-ce qu' on fait maintenant ?

Posté(e)

Fonction qui permet de convertir degre en radia

 

Public Function DenR(angle)
Pi = 4 * Atn(1)
DenR = (angle * Pi) / 180

End Function

 

 

Et le code pour dessiner les cartes avec un zoom etendu à la fin (en gras)

 

Public Sub bonneteau_1()

'valoriser les 3 paramètres de dimension et placement
largeur = InputBox("Quelle est la largeur de la carte")
hauteur = largeur * 2
dep = largeur * 2
ray = largeur * 0.1

'création des cartes avec une boucle
'3 tours
For fois = 0 To 2
'point d' origine au tour suivant le placement du point d 'origine est augmenté de la variable de placement
pt(0) = 0 + (dep * fois) + ray: pt(1) = 0
pt(2) = pt(0) + largeur - 2 * ray: pt(3) = pt(1)
pt(4) = pt(2) + ray: pt(5) = pt(3) + ray
pt(6) = pt(4): pt(7) = pt(3) + hauteur - ray
pt(8) = pt(2): pt(9) = pt(3) + hauteur
pt(10) = pt(0): pt(11) = pt(9)
pt(12) = pt(0) - ray: pt(13) = pt(7)
pt(14) = pt(12): pt(15) = pt(1) + ray
'creation de la carte proprement dit avec une polyligne 2d
Set carte(fois) = ThisDrawing.ModelSpace.AddLightWeightPolyline(pt)
'propriété qui permet de fermer la polyligne sur son premier point
carte(fois).Closed = True
'propriété qui permet d'avoir des coins arrondis
For fois2 = 1 To 7 Step 2
carte(fois).SetBulge fois2, Tan(DenR(22.5))
Next fois2
Next fois
[b]
ThisDrawing.Application.ZoomExtents
[/b]
End Sub 

 

 

@+

MDSV31

 

Ps: Bon pour l'erreur de largeur c'est rectifié

Ps2:Merci nazemrap pour les commentaire et pour la boite de dialogue

 

Pi modifier merci sechanbask

 

[Edité le 25/10/2007 par mdsv31]

Dessinateur Indépendant

Posté(e)

Bon !!

 

Joli appel de fonction !

ça avance bien, je crois que cette fois on peut garder le code de MDSV31.

Si des commentaires, des variantes ou suggestion, n 'hésitez pas !

 

Quelles cartes choisit-on de représenter ?

(ne demandez pas le valet de pique)

 

Ps pour ceux qui reprennent le code n 'oubliez pas éventuellement la déclaration des variables.

 

[Edité le 25/10/2007 par nazemrap]

Posté(e)

Bon pour les cartes, le mieux pour commencer c'est d'y mettre une forme

 

 

un carre pour la bonne carte

un cercle pour les nauvaises

 

@+

MDSv31

Dessinateur Indépendant

Posté(e)

pour connairte Pi j'utilise la fonction suivante au lieu de me souvenir des nombre :

 

Pi = 4 * Atn(1)

 

bon courage pour la suite moi, je suis toujours en rade de PC...

 

P.S. pour l'imput box, moi je préfère car je trouve ça plus fluide :

 

thisdrawing.utility.getreal

 

J'espère que je ne me suis pas trompé dans la syntaxe...

 

[Edité le 25/10/2007 par sechanbask]

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

sechanbask

 

Pour la suite j'ai un p'tit probléme, je ne trouve pas d'info sur la fonction RDN.

 

Si tu as un exemple, je veux bien regarder ça.

 

Sinon je penser utiliser les XDATA pour mettre les informations de la carte comme cela il ne reste plus qu'à selectionner la carte et lire la XDATA pour savoir si c'est la bonne carte.

Cela évite que les personne triche en regardant les calques pour savoir si c'est la bonne carte.

 

@+

MDSV31

Dessinateur Indépendant

Posté(e)

Bon je pense qu 'on va utiliser tout ça.

 

Quand même, moi j 'aurais bien aimé 3 as : un coeur, un pique un trèfle.

Le coeur sert de base pour tracer les autres.

 

http://www.premiumwanadoo.com/technaulogis/cadxp/bonneteau_01.jpg

Posté(e)

For...

'propriété qui permet d'avoir des coins arrondis

carte(fois).SetBulge 1, Tan(22.5 * 3.14159 / 180)

carte(fois).SetBulge 3, Tan(22.5 * 3.14159 / 180)

carte(fois).SetBulge 5, Tan(22.5 * 3.14159 / 180)

carte(fois).SetBulge 7, Tan(22.5 * 3.14159 / 180)

Next

 

ça fait pas gagner grand chose mais bon.

 

For..............
For i = 1 To 7 Step 2
carte(fois).SetBulge i, Tan(22.5 * 3.14159 / 180)
Next
Next 

 

Bonne continuation

Nous n’ héritons pas de la terre de nos ancêtres.Nous l’empruntons à nos enfants.

Posté(e)

les infos sur la fonction RDN est à lire dans l'aide VBA pas dans l'aide des programmateur d'autocad. Bonne lecture

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

Bonjour,

 

Je pense qu 'il y a eu une mauvaise saisie au clavier, il doit s' agir de [surligneur]Rnd [/surligneur] qui génère un nombre aléatoire ?

 

Pour le déroulement du jeu en lui-même, je pense qu 'il va exister pas mal de possibilités.

le Xdata sera sans doute intéressant car plein de possibilités à faire connaître.

 

La proposition des carrés et cercles est toujours valable, si d 'autres firgures sont proposées, il suffira de substituer.

 

Voici la construction géométrique que j 'envisageais pour le coeur, qui sert de base aux autres.

Ce sont des triangles isocèles, le rayon est le même que l 'arrondi des coins de cartes.

 

http://www.premiumwanadoo.com/technaulogis/cadxp/bonneteau_02.jpg

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité