2015-03-01
- correction cosmétique
   du modèle du Blog
  ° diaporama occupant
     tout l'écran
  ° message défilant
     démarrant du bord
     droit sous Chrome

Trognon le chaton

En lumière..

Des articles Lesbiens: Camellia Rose ,
Lipsticks [:* Fanny] , Lisa
et des Histoires signées MyLzz59: Mylène écrit (http://mylene-ecrit.blogspot.fr)

Des articles Trans-*: Ma Vie En Rose ,
Wawa's Smile , FtM ? , Thomas Beatie 2

Des Coups de Coeur: EXL ,
Kashimashi ~Girl meets Girl~ ,
Sa Majesté Freddie , Mon Côté Midinette
des Coups de Gueule: Karol relève-toi ,
BlondeBox , 1 pub 2 mR2 [bon courage :D]
et des Coups de Blues: Pile 1 an ,
Baisser de Rideau , Interlude

Du Visual Basic (VB6-VBA): Mlle Hanoï
Boules , Bombes , AnaClock , DigiClock ,
Tris (tetris) ,
et de la Bricologie: Real Barbie Girl

Pis pour les plus grand(e)s, des
S*X TOYS:
DildoBike , Tech To Nique

Et même parfois de la vraie vie:
Impressions de Voyage (Maroc) ,
Chez Mickey , La Tonnelle ,
Nous Nous Sommes Rencontrées

.

La vraie Taunie ..


... Tu me manques :'(


Notre Taz :*




Clock & Zik..

Idée Cadeau..


Attrape-Mouches

dyke goudou gouine homo homoaffectivité homoaffectivity homosexual homosexualité homosexuality homosexuel homosexuelle inverti invertie lesbian lesbianism lesbianisme lesbien lesbienne lez néovagin neovagina réassignation saphique saphisme sapphic sapphism trans transgender transgenre transidentité transidentity transsexalité transsexality transsexual transsexualism transsexualisme transsexuel transsexuelle tribade tribadisme vaginoplastie ...

Le combat continue..

MyLzz59..

.. @gmail.com

Blog français

Ca va encore mieux en le disant.. Important
## Comment "marche" ce Blog / Comment laisser un Commentaire ##

Et pour finir,
Mylène écrit (http://mylene-ecrit.blogspot.fr)N'oubliez pas de visiter aussi
mon blog d'histoires ====>



-MyLzz59-

mardi 27 avril 2010

L’horreur absolue...

...Il n y a pas de mot pour qualifier le «fait divers» qui suit.

(Mylène souhaitait diffuser cette info, mais du fait de son départ dans le bordelais, elle m en a chargé.)

Une info fort peu relayée par les médias...
Notre hôtesse vous avait à l époque mentionné la disparition d’ un couple homosexuel survenu courant mars 2009 non loin de Bourges. Les deux corps avaient été retrouvés ensevelis dans une forêt en juin de la même année, suite aux indications des deux présumés coupables.
On sait maintenant, grâce à l enquête, que les victimes ont été enterrées vivantes... Comment un être humain peut il infliger un tel calvaire à un autre? Une telle barbarie.Je ne sais pas. Je ne comprends pas. C est au delà de mes capacités...
je vous laisse lire l’article déniché sur le net..
Le procureur y indique dans ces lignes que le crime ne semble pas avoir pour mobile, l’homophobie.

Taz

samedi 24 avril 2010

Vacances :P

Ma p'tite femme et notre Miss ont pris le train lundi dernier,
en début de ces vacances scolaires, direction le Bordelais..
..et moi je "descends" les rejoindre en voiture ce samedi,
pour une semaine de congés. Retour dimanche 2 mai.
-MyLzz59-

mercredi 21 avril 2010

Bombes (P)03/2010 MyLzz59

(Rubrique VB-VBA)

0) Intro

A la fin du mois dernier, je vous proposais de me suivre pas à pas dans la réalisation d'un jeu en Visual Basic sous Excel, une feuille dans laquelle il fallait double-cliquer judicieusement sur des boules (enfin, des cases colorées) afin d'en supprimer le plus grand nombre.

J'ai réalisé ce p'tit jeu à la demande de notre fille, comme je l'ai précisé dans l'article correspondant. Un jeu sympathique, et fort simple à réaliser, dont la seule difficulté n'a rien de technique, c'est la compréhension de la notion de "récursivité".

Petit aparté à l'attention de celles et ceux à qui cette notion ne "parle" pas..

L'exemple incontournable lorsque l'on parle de "récursivité" est la fonction mathématique (nan, restez, n'ayez pas peur ) nommée "factorielle". Kêkseksa ? La factorielle d'un nombre entier positif est le produit de tous les nombres entiers depuis 1 jusqu'à lui:
Factorielle(N) = N! = 1x2x3x4x...x(N-1)xN (simplement ça ).
Exemple: Factorielle(5) = 5! = 1x2x3x4x5 = 120

Certes, il n'est pas nécessaire de coder une récursivité pour résoudre une factorielle (sans utiliser la fonction intégrée )

N = Int(Abs(Val(InputBox("Nombre ?")))) ' N entier positif
F = 1 : For T = 1 To N : F = F * T : Next T
MsgBox "Facto(" + Cstr(N) + ") = " + Cstr(F) 
Cependant, réécrivons 5! et ..4!
Factorielle(5) = 5! = 1x2x3x4x5 = 120
Factorielle(4) = 4! = 1x2x3x4 = 24

Sans avoir fait de hautes études mathématiques, il saute aux yeux que la factorielle de 5 est 5 fois la factorielle de 4. La "récursivité", c'est ça Il vous faut deux choses: une relation qui lie les éléments entre eux (ici N! = (N-1)! x N) et une porte de sortie (ici 0! = 1).
Function Factorielle(ByVal N As Long) As Long
If N<0 n="" or="">12 Then Factorielle = -1 : Exit Function ' Erreurs
Factorielle = IIf(N>0, Factorielle(N-1) * N, 1)
End Function
Comment ça marche ? Déjà un mot sur le bridage de N entre 0 et 12, car le résultat d'une factorielle "grimpe" vite, et 13! dépasse la capacité d'un entier long, c'est tout (oui, il existe d'autres formats..) Supposons que l'on demande Factorielle(5). La fonction s'exécute une première fois. Elle doit renvoyer Factorielle = Factorielle(5-1) * 5. VBA "met en attente" Factorielle(5), crée une nouvelle copie (appelée instance) de Factorielle, à laquelle il demande Factorielle(4), laquelle (idem) sera clônée pour calculer Factorielle(3), et ce jusqu'à Factorielle(0). Cette dernière renvoie la valeur 1 à Factorielle(1), qui peut finir son calcul et renvoyer son résultat (1) à Factorielle(2), etc.. Factorielle(4) qui renvoie 24 à Factorielle(5), laquelle nous répond son 120

1) Le Jeu

J'ai concocté un second jeu, basé sur (quasiment) la même feuille interface Excel, et dont l'objet ne sera pas une surprise, puisqu'il est mentionné dans l'article précédent, près de l'exemple de la factorielle car il utilise lui aussi une récursivité, il s'agit d'un ..Démineur

Rappel du principe: dans notre aire de jeu est dissimulée aléatoirement une certaine quantité de bombes. Le but du jeu est de toutes les retrouver, et les marquer d'un drapeau, sans en faire exploser une seule. Pour cela, l'utilisateur(trice) dispose de deux actions, mettre/enlever un drapeau, et dévoiler une case cachée. Dévoiler une bombe la fait exploser, et le jeu est terminé. Une case marquée d'un drapeau est "protégée". Le jeu est gagné lorsque soit exactement toutes les bombes ont été retrouvées, soit il ne reste plus de cases non dévoilées, excepté peut-être seulement des bombes.

Le départ du Démineur consiste à "taper" alétoirement, en espérant trouver une zone vierge de bombe, et non une bombe. Si la case dévoilée ne contient pas de bombe, elle fournit une indication sur la présence ou non de bombes: la quantité de bombes présentes dans les huit cases qui l'entourent (imaginer la case au centre d'un carré de 3 x 3 cases), quantité comprise entre 0 (non affiché) et 8 (le maximum si elle est cernée).

Dans notre Démineur nous allons utiliser les deux actions suivantes:
- le clic droit pour mettre/enlever un drapeau
- le double-clic pour dévoiler une case
Dévoiler une case contenant zéro bombe dévoilera automatiquement (voilà notre récursivité ) toute la surface contiguë exemplte de bombe. J'ai volontairement omis la troisième action présente sur le Démineur inclus dans Windows, l'appui simultané des deux boutons de la souris, combinaison non gérée par Excel.

Voilà, on a fait le tour, entrons

a] Le Décor

Comme mentionné plus haut, il s'agit de celui du jeu précédent (Boules), à la barre d'état près, car les deux cellules fusionnées des libellés des compteurs sont agrandies d'une case chacune, pour accueillir les nouveaux libellés. ===> Code du Décor ICI.


Même recommandation, ne sauvegardez PAS le classeur au format ".xlsX", au risque de perdre le code VBA !!

(Rem: n'hésitez pas à vous référer à l'article décrivant le jeu précédent, pour les explications communes que je ne reprendrai pas ici )

2) Remplir l'Aire de Jeu

a] Définissons tout d'abord notre série de constantes en Zone Déclarations:

* Tit = "Bombes (P)03/2010 MyLzz59" => le titre du jeu
* Ym = 30, Xm = 40 => la taille (lignes, colonnes) de l'aire de jeu
* Nb = 100 => la quantité de bombes dissimulées, arbitraire
* Xt = 2 => abscisse de la cellule fusionnée du titre
* Xb = 18 => abscisse de la cellule fusionnée du nombre de bombes restantes
* Xc = 28 => abscisse de la cellule fusionnée du nombre de cases cachées
* Xr = 32 => abscisse de la cellule fusionnée du pseudo-bouton "Recommencer"
' -----------------
' Zone Déclarations
' -----------------
Const Tit = "Bombes (P)03/2010 MyLzz59"
Const Ym = 30, Xm = 40, Nb = 100, Xt = 2, Xb = 18, Xc = 28, Xr = 32
b] Nettoyage de l'Aire de Jeu: il est identique à précédemment, excepté l'inscription de deux informations cachées sous la barre d'état, dans une zone non accessible de la feuille Excel, à savoir une chaîne texte qui mémorise le contenu réel de l'aire de jeu, et le vrai compteur de bombes non encore marquées, nous les détaillerons plus loin.

Notez au passage que la protection de la feuille est également présente, mais déplacée dans une procédure "Prot", car elle sera utile à différents endroits du code, ce qui évitera de la dupliquer inutilement:
' -------------------
' SUB: Protéger (O/N)
' -------------------
Sub Prot(B As Boolean)
If B Then Sheets(1).Protect "" Else Sheets(1).Unprotect ""
End Sub
c] La boucle de remplissage. Nous allons employer ici un Tableau P(1 To Ym, 1 To Xm) de nombres entiers, similaire à l'aire de jeu. Au départ, toutes ses "cases" sont initialisées à zéro. La boucle (For T=) effectue les Nb (=100) placements de bombes, pour chaque l'on tire une "case" aléatoire (X=Int(Rnd*Xm)+1 et Y=Int(Rnd*Ym)+1) jusqu'à en trouver une qui ne soit déjà une bombe (Loop While)

Chacune de ces "cases" comptabilise le nombre de bombes qui l'entoure, concrètement de zéro (mini) à huit (maxi). Associons la notion de bombe à la valeur inutilisée neuf.

Parcourons le carré dont notre "case" est le centre. Dans les huit "cases" qui entourent la nôtre (si elles existent), incrémentons de un toutes les valeurs non bombes (non neuf).

La boucle de remplissage n'affiche rien dans l'aire de jeu.
' -----------------------
' Crée un Nouveau Terrain
' -----------------------
Sub Remplis()
Randomize Timer
Prot False
Cells(Ym + 5, 1).Value = "Z" + String$(Xm * Ym, "0")
Range(Cells(1, 1), Cells(Ym, Xm)).Interior.ColorIndex = 15
Range(Cells(1, 1), Cells(Ym, Xm)).ClearContents ' Nettoyage
For T = 1 To Nb
    Do: Y = Int(Rnd * Ym) + 1: X = Int(Rnd * Xm) + 1: Loop While PP(Y, X) = 9 ' Bombes
    For Y2 = Y - 1 To Y + 1: For X2 = X - 1 To X + 1
        If X2 >= 1 And X2 <= Xm And Y2 >= 1 And Y2 <= Ym Then
            If X2 <> X Or Y2 <> Y Then
                If PP(Y2, X2) < 9 Then PP(Y2, X2) = PP(Y2, X2) + 1 ' Incrément autour
            Else
                PP(Y, X) = 9 ' Place Bombe
            End If
        End If
    Next X2, Y2
Next T
Cells(Ym + 2, Xt).Value = Tit: Cells(Ym + 2, Xb).Value = Nb
Cells(Ym + 2, Xc).Value = Xm * Ym: Cells(Ym + 6, Xb).Value = Nb 'Marquages
Prot True: MsgBox "Bonne Chance ;)", vbInformation, Tit
End Sub
d] En fait, nous n'allons pas employer un Tableau P(1 To Ym, 1 To Xm) de nombres entiers (si, je sais ce que je dis ). Car un tel tableau, logé en mémoire vive (RAM) a le fâcheux défaut d'être perdu lorsque le programme s'arrête. En clair, l'on ne pourrait reprendre une partie commencée, en rouvrant le classeur sauvegardé, et il faudrait systématiquement générer une nouvelle partie à l'ouverture du classeur

Aussi, allons-nous simuler () ce tableau, sous la forme d'une chaîne de chiffres cachée (la voilà ) dans la feuille. Pour ce faire, nous allons coder une ..Propriété. Cette notion appartient au vocabulaire de la programmation objet (Visual Basic 6 n'est pas un langage orienté objet, car sa panoplie "objet" n'est que partielle), mais rien ne nous empêche de la "détourner" ici..

La procédure "Property Let" simule l'affectation d'une valeur à une pseudo-variable, alors que "Property Get" simule la relecture de la valeur de cette pseudo-variable. C'est pourquoi, dans le code ci-dessus, "PP(Y2, X2) = PP(Y2, X2) + 1" n'indique absolument pas que PP() n'est PAS le simple tableau annoncé en c]
' ---------------------------------------------------------------------
' Property Let: simule l'Ecriture de N [Integer] dans PP(Y,X) [Integer]
' ---------------------------------------------------------------------
Property Let PP(ByVal Y As Integer, ByVal X As Integer, ByRef N As Integer)
If X < 1 Or X > Xm Or Y < 1 Or Y > Ym Or N < 0 Or N > 9 Then Exit Property
Z$ = Cells(Ym + 5, 1).Value
Mid$(Z$, Xm * (Y - 1) + X + 1, 1) = CStr(N)
Cells(Ym + 5, 1).Value = Z$
End Property

' ---------------------------------------------------------------------
' Property Get: simule la Lecture de N [Integer] dans PP(Y,X) [Integer]
' ---------------------------------------------------------------------
Property Get PP(ByVal Y As Integer, ByVal X As Integer) As Integer
If X < 1 Or X > Xm Or Y < 1 Or Y > Ym Or N < 0 Or N > 9 Then PP = -1: Exit Property
PP = Val(Mid$(Cells(Ym + 5, 1).Value, Xm * (Y - 1) + X + 1, 1))
End Property
Rem: l'utilisation d'une Propriété n'était pas indispensable, et nous aurions pu nous "contenter" d'une Function Get_PP(ByVal Y As Integer, ByVal X As Integer) As Integer, et d'un Sub Let_PP(ByVal Y As Integer, ByVal X As Integer, ByRef N As Integer). Simplement je souhaitais introduire la propriété afin de garder une syntaxe d'utilisation similaire à celle d'un Tableau, alors qu'avec un Sub et une Function elle devient moins zolie

Tableau => P(Y2, X2) = P(Y2, X2) + 1
Property => PP(Y2, X2) = PP(Y2, X2) + 1
Sub/Fct => Let_PP Y2, X2, Get_PP(Y2, X2) + 1

3) Comment l'utilisateur(trice) joue..

a] Double-Click

Comme précédemment, nous allons intercepter le Double-Clic dans la Feuille, et substituer à la fonction d'édition de texte d'Excel l'appel de notre procédure d'ouverture de la case visée. La différence c'est que nous allons cette fois récupérer les coordonnées (Y,X) de la cellule grâce à Target. Nous retrouvons le "Cancel = True".

Le Double-Clic peut survenir dans l'aire de jeu, sur le bouton "Recommencer", ou ailleurs. Ailleurs, il ne se passera rien. Sur "Recommencer", une question proposera de réinitialiser le jeu en appelant "Remplis". Enfin, dans l'aire de jeu, nous invoquons un traitement récursif d'ouverture de la cellule, "Pop", que nous verrons plus loin, suivi d'une procédure (qui servira à deux reprises) vérifiant si le jeu est gagné, "TesteGagne". Ne pas oublier de déprotéger puis reprotéger la feuille..
' ------------------
' EVT: Teste la Zone
' ------------------
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Y = Target.Row: X = Target.Column: Cancel = True
If Y = Ym + 2 And X = Xr Then
    If MsgBox("Réinitialiser l'Aire de Jeu ?", _
        vbQuestion + vbYesNo + vbDefaultButton2, Tit) = vbYes Then Remplis
    Exit Sub
End If
If X < 1 Or X > Xm Or Y < 1 Or Y > Ym Then Exit Sub
Prot False: Pop Y, X: TesteGagne: Prot True
End Sub
b] Right-Click

Ce Jeu gère aussi une seconde action, le Clic Droit, afin de poser ou enlever les drapeaux sur les bombes supposées. VBA fournit ici aussi une procédure événementielle, "_BeforeRightClick", dont la syntaxe (imposée) est similaire à la précédente.

Le Clic Droit n'a d'effet que dans l'aire de jeu, et effectue une action fort simple: si la cellule (Target) est non dévoilée, alors on y place un drapeau, et l'on décrémente les compteurs de cases cachées et de bombes à trouver. Si la cellule contient un drapeau, alors on l'enlève au profit de l'état non dévoilé, et on incrémente les mêmes compteurs. Tout autre état de la cellule ne provoquera aucune action.

De la même façon, penser à déprotéger puis reprotéger la feuille, ainsi qu'à tester ensuite si le jeu est gagné.

Le moment est venu de vous parler du "vrai" compteur (caché) de bombes non encore marquées, qui n'est décrémenté que lorsque la case marquée d'un drapeau contient réellement une bombe (If PP(Y, X) = 9). Sachez déjà qu'il sert dans "TesteGagne", à détecter l'une des deux conditions permettant d'afficher "Gagné" sans obliger l'utilisateur(trice) à cliquer (double ou droit) la totalité de l'aire de jeu
' ------------
' EVT: Drapeau
' ------------
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Y = Target.Row: X = Target.Column: If X < 1 Or X > Xm Or Y < 1 Or Y > Ym Then Exit Sub
Select Case Target.Text
    Case "": T = 10: T2 = -1: GoSub SS1
    Case "O": T = 11: T2 = 1: GoSub SS1
End Select
Cancel = True: Exit Sub
SS1: Prot False: Colorie Y, X, 1 * T: Cells(Ym + 2, Xb) = Cells(Ym + 2, Xb) + T2
If PP(Y, X) = 9 Then Cells(Ym + 6, Xb) = Cells(Ym + 6, Xb) + T2
Cells(Ym + 2, Xc) = Cells(Ym + 2, Xc) + T2: TesteGagne: Prot True: Return
End Sub
c] Le Coloriage des Cellules

C'est la procédure dédiée "Colorie" qui va s'en charger. Nous allons lui fournir les coordonnées de la cellule, et ..un nombre entier représentant l'état à afficher:

* 0 => cellule dévoilée vierge de bombe (gris foncé)
* 1 à 8 => cellule dévoilée entourée d'une à huit bombes
* 9 => dévoiler une bombe (un "M" en police WingDings)
* 10 => afficher un drapeau (un "O" en police WingDings)
* 11 => remettre la cellule à l'état caché (supprimer le drapeau)
* 12 => comme 0, mais verte (pour l'état Gagné)
* 13 => comme 0, mais rouge (pour l'état Perdu)

Cette procédure modifie le contenu de la cellule (.Value), la police utilisée (.Font.Name), la couleur de la police (.Font.ColorIndex), et celle du fond de la cellule (.Interior.ColorIndex). L'usage du ColorIndex plutôt que Color rend compatibles les couleurs du jeu avec les versions antérieures à 2007..
' -----------------------------------------------------------------------------
' Sub: Colorie la Case (Y,X) en Fonction du Nombre de Bombes (ou autre..)
' ( N=0..8 ; N=9:Bombe ; N=10:Drapeau ; N=11:Cachée ; N=12:Gagné ; N=13:Perdu )
' -----------------------------------------------------------------------------
Sub Colorie(ByVal Y As Integer, ByVal X As Integer, ByRef N As Integer)
If X < 1 Or X > Xm Or Y < 1 Or Y > Ym Or N < 0 Or N > 13 Then Exit Sub
With Cells(Y, X)
    .Interior.ColorIndex = IIf(N = 13, 30, IIf(N = 12, 10, _
        IIf(N = 11, 15, IIf(N = 10, 19, IIf(N = 9, 3, IIf(N, 17, 16))))))
    .Font.ColorIndex = IIf(N = 13, 30, IIf(N = 12, 10, _
        IIf(N = 11, 11, IIf(N = 10, 11, IIf(N = 9, 1, IIf(N, 8, 16))))))
    .Font.Name = IIf(N > 8 And N < 11, "Wingdings", "Comic Sans")
    .Value = IIf(N > 11, "0", IIf(N = 11, "", IIf(N = 10, "O", IIf(N = 9, "M", CStr(N)))))
End With
End Sub
4) L'ouverture de la cellule ("Pop")

Cette procédure aura pour missions
- de découvrir la case visée
- de gérer le "Perdu" en cas de découverte d'une bombe
- d'ouvrir (en récursif) toute la zone contiguë de zéro bombe

Tout d'abord "Pop" va s'assurer que la cellule visée est dans l'aire de jeu, et qu'elle est non découverte. Entre autres pour protéger de l'explosion une bombe marquée d'un drapeau.

Si tout va bien, après avoir décrémenté le compteur de cases couvertes, intéressons-nous au contenu de la case visée, que l'on aura dévoilée.

* Si elle contient une bombe, le jeu est perdu, il doit s'arrêter. Le plus simple reste de découvrir toutes les cases restantes. Il faut aussi découvrir la bombe. Pourquoi ne pas découvrir toutes les bombes, même celles marquées d'un drapeau ?
If Cells(Y, X).Text = "" Or Cells(Y, X).Text = "O" Then Colorie Y, X, PP(Y, X)
Puis, pour matérialiser que le jeu est perdu, re-colorions en rouge (Colorie ,,13) toutes les cases zéro bombe.
If Cells(Y, X).Text = "0" Then Colorie Y, X, 13
* Si elle contient une des indications "1" à "8", tout est déjà fait.

* Si elle contient zéro, nous allons dégainer notre récursivité Comme pour la boucle de remplissage vue plus haut, parcourons le carré dont notre "case" est le centre. Dans toutes les cases dont la nôtre, si elles existent dans l'aire de jeu et sont couvertes, rappelons Pop
' ----------------------------------
' SUB: Découvrir une Case (Récursif)
' ----------------------------------
Sub Pop(ByVal Y As Integer, ByVal X As Integer)
If X < 1 Or X > Xm Or Y < 1 Or Y > Ym Then Exit Sub
If Cells(Y, X).Text <> "" Then Exit Sub
Colorie Y, X, PP(Y, X): Cells(Ym + 2, Xc) = Cells(Ym + 2, Xc) - 1
Select Case PP(Y, X)
Case 9 ' Bombe
    For Y = 1 To Ym: For X = 1 To Xm
        If Cells(Y, X).Text = "" _
            Or Cells(Y, X).Text = "O" Then Colorie Y, X, PP(Y, X)
        If Cells(Y, X).Text = "0" Then Colorie Y, X, 13
    Next X, Y
    MsgBox "<<<< BOOM >>>>" + vbCrLf + vbCrLf + "Vous avez perdu.. :(", vbCritical, Tit
Case 1 To 8 ' Découvrir
Case 0 ' Découvrir en Récursif
    For Y2 = Y - 1 To Y + 1: For X2 = X - 1 To X + 1
        If X2 >= 1 And X2 <= Xm And Y2 >= 1 And Y2 <= Ym Then
            If Cells(Y2, X2).Text = "" Then Pop Y2, X2
        End If
    Next X2, Y2
End Select
End Sub
5) La détection de l'état Gagné ("TesteGagne")

Voici la dernière étape de ce jeu, celle qui sera appelée après chacune des deux actions de l'utilisateur(trice), pour mémoire le double-clic ou le clic droit, la procédure qui vérifie si le jeu est gagné. La première idée qui vient à l'esprit, c'est de considérer comme gagné un jeu dans lequel il ne reste plus aucune case jouable, et exactement autant de drapeaux que de bombes. Certes, mais quel(le) joueur(se) trouverait amusant de devoir terminer de cliquer partout, une fois les bombes toutes trouvées ? Déjà pas moi

Aussi, je vous propose deux autres conditions de fin sur Gagné, basées sur nos trois compteurs disponibles. Rappel de nos compteurs:
* cases couvertes: démarre à (Xm x Ym), décrémenté à chaque case découverte, décrémenté à la pose d'un drapeau, ré-incrémenté à la suppression d'un drapeau.
* bombes restantes (visible): démarre à Nb, décrémenté à la pose d'un drapeau, ré-incrémenté à la suppression d'un drapeau, indépendamment du contenu réel de la case couverte.
* bombes réelles (caché): démarre à Nb, décrémenté à la pose d'un drapeau, ré-incrémenté à la suppression d'un drapeau, uniquement si la case couverte contient une bombe.

Condition 1: l'utilisateur(trice) a placé des drapeaux sur toutes les bombes, et nulle part ailleurs, les cases restantes ne sont plus que des cases sans bombe => les compteurs bombes restantes (visible) et bombes réelles (caché) sont tous deux à zéro.

Condition 2: l'utilisateur(trice) a dévoilé toutes les cases sauf des bombes (drapeaux ou pas) => cases couvertes = bombes restantes (visible).

Si l'une ou l'autre de ces conditions est vérifiée le jeu passera à l'état Gagné (et doit s'arrêter), nous allons découvrir toutes les cases restantes et re-colorions en vert (Colorie ,,12) toutes les cases zéro bombe (cf. Perdu)
' --------------
' Sub TesteGagne
' --------------
Sub TesteGagne()
If Cells(Ym + 2, Xb).Value = Cells(Ym + 2, Xc).Value Or _
    (Cells(Ym + 2, Xb).Value = 0 And Cells(Ym + 6, Xb).Value = 0) Then
    For Y = 1 To Ym: For X = 1 To Xm
        'If Cells(Y, X).Text = "" _
            or  Cells(Y, X).Text = "O" Then Colorie Y, X, P(Y, X)
        If Cells(Y, X).Text = "" _
            Or Cells(Y, X).Text = "O" Then Colorie Y, X, PP(Y, X)
        If Cells(Y, X).Text = "0" Then Colorie Y, X, 12
    Next X, Y
    MsgBox "<<<< BRAVO >>>>" + vbCrLf + vbCrLf + "Vous avez gagné.. :)", vbInformation, Tit
End If
End Sub
Le Code Complet de ce Jeu est disponible ICI..

-MyLzz59-

dimanche 18 avril 2010

Mélusine

Non, ne cherchez aucun lien avec Mylène Farmer, il n'y en a pas :D

Je vous présente Mélusine, la "p'tite soeur" de la Miss :P

Rhôô, partez pas en courant, c'est pour rire ;) Il s'agit juste de la réalisation d'un délire qui me trottait dans la tête depuis un bout de temps..

Ce squelette d'un mètre dix de haut, tout en plastique alimentaire, provient d'une collection de magazines (découverte du corps humain), un truc hors de prix acheté numéro par numéro chez le marchand de journaux, avec des fascicules somme toute moins mal faits que lui..

Pendant que mes femmes préparaient leurs valises (elles partent pour ces congés scolaires une semaine avant moi), je rafistolais ce squelette dont les emboîtements de la colonne vertébrale ne supportaient plus son propre poids x-(

Un T-shirt et une robe trop petits pour la Miss, quelques minuscules trous sur le crâne pour fixer la perruque rousse et les boucles d'oreilles, un chapeau de déguisement, des bijoux et accessoires, voici Mélusine !

-MyLzz59-

vendredi 16 avril 2010

*** MESSAGE ****

N'oubliez pas de lire (et commenter) la Blagounette publiée par Taz !!
-MyLzz59-

jeudi 15 avril 2010

Sam's Birthday

Nous y revoilà :P

J'ai une mauvaise mémoire des dates, néanmoins les quelques habitué(e)s de ce blog ont vu passer des posts anniversaires pour quelques personnalités..

dont Miss Samantha Fox (la chanteuse, non les actrices X qui ont pris ce nom comme pseudo). => 15/04/2008 ; 15/04/2009

Miss Samantha Karen Fox est née le 15 Avril 1966. Elle fête donc ce jour ses 44 ans :)

Happy Birthday Miss Fox


Que puis-je ajouter à ce que j'ai déjà dit sur Miss Fox ?
Peut-être quelques news..


Côté coeur, je vous l'annonçais déjà dès l'article de 2008, elle file le parfait amour depuis déjà longtemps, d'abord secrètement, puis maintenant officiellement, avec sa manager Myra Stratton, avec qui elle projette de se marier, et d'avoir un enfant.


Côté carrière, même si elle n'est plus vraiment que l'ombre de ce qu'elle était dans les années 1980, celle-ci continue, particulièrement dans les pays anglophones. Il est vrai que celle-ci ne tient qu'à l'encouragement de Myra, sans lequel Sam (elle souhaite être appelée ainsi, pour de différencier des actrices qui ont pris son vrai nom comme pseudo) aurait arrêté..

Quasiment impossibles à trouver en France, ses dernières productions n'ont pas pu rencontrer le public qu'elles auraient mérité..

Exception cependant, son duo
"Touch Me" avec l'improbable Günther (2004)


"Angel with an Attitude" (2005, sortie Europe 2009)


"I Give Myself To You" (2007)


"(Where is my) Midnight Lover" (2008)


Sam Fox & Marc Mysterio - "Tomorrow" (2009)
Le seul inédit du double CD compil' "Greatest Hits" (Sony UK)


Quant à 2010, me direz-vous ? Ben..
Ben Miss Fox nous a concocté une nouvelle surprise, et pas vraiment des moindres ! La brune aux côtés de Sam sur les deux vidéos ci-dessous, ne vous est probablement pas inconnue, c'est Sabrina Salerno, "la" Sabrina qui chantait à l'époque "Boys Boys Boys". Les voir ensemble est pour le moins déroutant, tant à cette époque elles étaient en concurrence, et censées se détester, du moins nous le faisait-on croire..

Dans ces vidéos quelque peu équivoques ;) elles nous annoncent pour cette année un duo, sur la reprise du titre du groupe Blondie "Call Me".





-MyLzz59-

Une p'tite dernière pour la route, la vidéo d'une émission (à prendre pour ce qu'elle vaut) retraçant les carrières de Sam Fox et de Sabrina.

mercredi 14 avril 2010

La pédophilie selon Mgr Tarcisio Bertone

«Nombre de psychologues, de psychiatres, ont démontré qu'il n'y a pas de relation entre célibat et pédophilie, mais beaucoup d'autres ont démontré, et m'ont dit récemment, qu'il y a une relation entre homosexualité et pédophilie [..] C'est la vérité, c'est le problème [..] Cette pathologie touche toutes les catégories de gens, et les prêtres à un moindre degré si l'on regarde les pourcentages.»

Ces odieux propos ont été proférés par le cardinal secrétaire d'Etat Tarcisio Bertone, accessoirement le numéro 2 de l'Eglise Catholique, lors d'une visite officielle effectuée lundi (12/04/2010) à Santiago du Chili.


Car il est évident, du moins pour cet affreux bonhomme et sa clique, indignes représentants de Dieu au sein d'une religion majeure de cette planète, que le ramassis de pédophiles hébergés dans leurs rangs (et jusqu'ici protégés !) ne peut être lié à la question du célibat des prêtres, mais "naturellement" à l'homosexualité !

Certes l'on pourrait se limiter à un haussement d'épaules en considérant ce dérapage comme un énième épiphénomène, malheureusement ce n'est pas le cas, et il convient de s'en indigner, et le combattre, avant qu'il ne soit trop tard ! Car propager à grande échelle de telles inepties discriminatoires a déjà par le passé incité à commettre des crimes en masse !

D'abord, sur quelles "études" se base-t-il pour dire de telles âneries ? Devrait-on, selon lui, penser que la majorité (à défaut de tous) des pédophiles sont des homosexuels ?? Ou que la majorité des homosexuels seraient pédophiles ?? Mais ça va pas, sous sa calotte, au pépère ??

Ensuite, vous admirerez le mot "pathologie". Pour ces gens, les homosexuels seraient donc des malades ! Sans doute comme ceux qui osaient prétendre que la Terre n'était pas plate, et que le soleil ne lui tournait pas autour..

Mais pââssons.. Le numéro 1 de l'Eglise Catholique, le Pape Benoît XVI, a déclaré que dans les cas de pédophilie, les coupables devaient «toujours» être dénoncés à la justice, dans le respect «de la loi ordinaire». Et dans le cas de propos discriminatoires, lesquels sont condamnables de par la "loi ordinaire" ??

Que ces gens fassent le ménage parmi ces pervers qui peuplent leurs rangs, ou laissent la justice des hommes s'en charger s'ils en sont incapables, et qu'ils arrêtent de se mêler de ce qui ne les concerne pas: quelle légitimité à prodiguer des conseils peut avoir un religieux, qui fait voeu de célibat, en ce qui concerne les relations et actes entre deux adultes consentants, fussent-ils de même sexe ?

Les rôles d'une religion sont tout d'abord de servir de vecteur pour amener les croyant(e)s à entrer en communion avec Dieu (peu importe le nom qu'on lui attribue, c'est le même Dieu dans les principales religions monothéistes), et ensuite de prodiguer quelques préceptes simples de vie en communauté, les "tu ne tueras point", etc.. En aucun cas nous expliquer avec qui et comment on doit baiser !!

D'ailleurs, pour rebondir là-dessus, je (re-)propose une correction linguistique, le remplacement du terme "homosexualité" par le terme "homoaffectivité", lequel sous-entend plus justement la réalité: l'attirance affective, les sentiments, et non une simple affaire de baise, entre gens de même sexe..

"Pédé" est le terme injurieux qui est utilisé à l'encontre des personnes homoaffectives. C'est l'abréviation de "pédéraste". Le sens premier de ce mot remonte à l'Antiquité, où existait une sorte de rite initiatique, de passage des garçons à l'état d'adulte, via un acte sexuel commis par un adulte. La "pédérastie", étymologiquement "l'amour des enfants", était donc l'attirance (d'hommes) pour des garçons. Par extension seulement, "pédéraste" a désigné un homosexuel, indépendamment de l'existence d'une attirance pédophile. L'amalgame n'est pas loin..

"Pédophile", terme étymologiquement très proche: "ami des enfants", désigne l'adulte qui manifeste une attirance sexuelle pour des enfants, celui qui passe à l'acte avec un(e) enfant. Ce mot n'intègre aucune notion d'homo- ou hétérosexualité.

"Homosexuel", personne qui manifeste une attirance sexuelle pour les personnes du même sexe, contrairement à "hétérosexuel", pour les personnes du sexe opposé.

-MyLzz59-

Rem: pour rappel, voici le lien vers un ancien article parlant d'un excellent p'tit livre..

« Comment un choix de la vie intime, qui ne porte préjudice à personne et qui de surcroît donne du plaisir à ceux qui le pratiquent a pu déclencher une telle hostilité tout au long de l'histoire occidentale ? Pourquoi cette forme d'amour a-t-elle pendant si longtemps dérangé la société au point de punir de mort des personnes libres et consentantes ? [..] »

[14/04/2010] ..Du nouveau ?

Face au tollé mondial engendré par son numéro 2, le Vatican a pris ce jour par l'intermédiaire de son porte-parole Federico Lombardi une position officielle quelque peu distincte de celui-ci:

«Les autorités ecclésiastiques ne jugent pas de leur compétence de faire des affirmations générales de caractère spécifiquement psychologique ou médical, lesquelles relèvent naturellement des études des spécialistes et des recherches en cours sur le sujet [..] [Bertone] se référait évidemment au problème des abus commis au sein du clergé et non à ceux commis dans l'ensemble de la population.»

J'ai beau relire ces propos, je ne distingue pas vraiment en quoi ils diffèrent des précédents: "affirmations générales", "psychologique ou médical", "études des spécialistes", "recherches en cours", les homos restent des malades qu'il faut étudier pour les guérir, nan ?

Par contre, aucune trace d'excuse (mea culpa) et encore moins de reconnaissance des homos comme "personnes égales aux autres (hétéros)". Bref, seule la formulation change, je doute qu'elle "passe" mieux que la précédente, qui selon moi n'avait rien d'un "acte isolé"..

P'tite consolation, cette anecdote, la France aurait été le premier Etat à réagir aux propos de l'autre calotté, par la voix du ministre des affaires étrangères: «[la France] rappelle son engagement résolu dans la lutte contre les discriminations et les préjugés liés à l'orientation sexuelle et l'identité de genre». Le dire c'est effectivement très bien, "y'a plus qu'à" le concrétiser maintenant !

-MyLzz59-

mercredi 7 avril 2010

Martina a un cancer

Si je vous dis "l'une des plus grandes joueuses mondiales de tennis (si ce n'est la meilleure, la plus titrée), à la retraite, ET ouvertement lesbienne", vous répondrez (à moins d'être trop jeune, auquel cas vous citerez Amélie Mauresmo), évidemment Martina Navratilova !! Cette américaine d'origine tchécoslovaque a dominé les courts de 1973 à 1994, donnant lieu à de nombreuses finales contre Chris Evert (Lloyd)..

Récemment encore, lors d'une exhibition au profit des sinistrés d'Haïti, Martina a prouvé que, malgré ses 53 ans, elle était encore capable de torcher nombre de jeunettes (en tennis, s'entend :D) !!

Hélas pour notre grande championne et active militante LGBT, sa dernière mammographie a fait apparaître une tumeur cancéreuse au sein gauche, qu'elle a annoncée ce jour: "J'ai pleuré [..] Je suis tombée sur le cul, vraiment. Je pensais avoir le contrôle de ma vie et de mon corps et puis il y a ça qui arrive, on ne maîtrise plus du tout.." :'(

Cependant soyez rassurées, les filles, il semblerait que le pronostic soit néanmoins "très bon". Croisons les doigts..

(Sources: People/Reuters, Photo:AFP)

-MyLzz59-

mardi 6 avril 2010

My New Shoes

La suite d'un coup de gueule personnel..

Il y a quelques temps, j'évoquais ici la difficulté que j'éprouve à me chausser, du moins autrement qu'en godillots, fussent-ils jolis, de sécurité, que j'affectionne néanmoins :'(

Aujourd'hui je reviens sur ce sujet, pour vous présenter ma dernière acquisition, comme quoi tout arrive, datant juste du week-end dernier !


Bon, à ce stade, je tiens tout d'abord à vous rassurer sur ma santé mentale: non je n'ai pas acheté une paire dépareillée, même en soldes :D

En début d'année, à la recherche d'un modèle sympa de bottines à talons, je tombais sur deux fins de séries à prix sacrifiés, les Western marron, et des boots noires à boucles, une seule paire de chaque, et pile ma pointure :-o

Dans le magasin, j'étais essentiellement convaincue par les boots noires, j'ai néanmoins bien fait d'acheter les deux paires ! A l'usage je me suis prise d'affection pour les Western, que je trouve bien plus féminines, même pour des chaussures ..homme :P

Ce qui a fini de me décider, c'est un caillou qui, entre temps, a totalement explosé le talon de l'une des boots noires. Ma p'tite femme les a donc portées chez le cordonnier du coin, en lui précisant de ne surtout pas diminuer la hauteur de talon ! La réparation aura coûté aussi cher que la paire de boots, et m'a laissé une désagréable impression: est-ce seulement le désamour, ou a-t-il malgré ma demande raboté mes talons (il a refait les deux boots) ?? x-(

Donc, il y a une dizaine de jours, dans un autre magasin de la même enseigne, je suis restée songeuse devant une paire de Western noires, semblables à mes marron, bizarrement encore la dernière paire de son modèle, et de ma pointure, mais.. pas soldées, au prix fort ! :(

Ce samedi je suis retournée la chercher, elle m'y attendait..

-MyLzz59-

jeudi 1 avril 2010

Agression homophobe

"Le monde est entré dans un nouveau millénaire",
chantait Bruno Pelletier dans "Le Temps des Cathédrales".
Ben faut hélas se rendre à l'évidence, il en demeure
encore pas mal à être restés bloqués sur "Moyen-Âge" :(
Voici les faits:
------------------------------------------------------------------------------------
Samedi dernier (27/03/2010), à Nice, dans l'après-midi, dans le Jardin "Alsace-Lorraine", deux hommes d'environ trente ans, Steeve et Romuald, sont occupés à s'embrasser, comme le feraient n'importe quels amoureux..

Bah, quoi de plus banal, me direz-vous, à part attendrir les quelques passants non indifférents, que peut-il se produire ?

Sauf que Steeve et Romuald ont eu le seul "tort" de ne pas être un homme et une femme, à en croire le comportement inadmissible dont ont fait preuve les arriérés environnants..

C'est tout d'abord une femme bipède femelle homophobe, d'une trentaine d'années également, qui s'approche d'eux, pour les sommer de cesser, sous prétexte "qu'il y a des enfants". Ne voyant pas pourquoi ils ne pourraient pas faire ce que font des couples hétéros, ils refusent. L'homophobe femme bipède femelle se met alors à les insulter et les frapper !

Voyant cela, de "courageux" jeunes délinquants à peine majeurs, prennent la relève, "fort équitablement" à "seulement" huit contre les deux hommes qui s'enfuient, les pourchassant et une fois au sol les tabassant.

Les deux hommes ont évidemment porté plainte.
------------------------------------------------------------------------------------
(Source: LePost.fr / Nice Matin)

Pour rappel, entre autres à l'attention de ces dangereux débiles qui, j'ose l'espérer, seront logiquement lourdement condamnés, la femme comprise, pour agression aggravée d'homophobie:

** L'HOMOSEXUALITE N'EST PAS UNE MALADIE, **
** ET N'A RIEN DE CONTAGIEUX **

L'homosexualité est simplement l'une des orientations sexuelles amoureuses possibles. Chaque individu naît avec une orientation bissexuelle. Laquelle est soit suffisamment dominante envers l'un des deux sexes, soit non. Dans ce premier cas l'enfant s'oriente vers une hétérosexualité latente ou une homosexualité latente, dans le second une bissexualité latente. Deux millénaires de religions monothéistes toutes confondues ont érigé en étendard l'hétérosexualité et condamné les autres orientations.

Personne ne "devient" homosexuel(le) ou bissexuel(le). Simplement, en fonction de son caractère, et de la pression qu'il subit de son entourage, chaque être humain ne pourra choisir QUE d'assumer son orientation si elle n'est pas hétérosexuelle et la vivre plus ou moins pleinement, OU au contraire de se nier et passer sa vie à "faire semblant" jusqu'à parfois n'en plus pouvoir, et finir par se suicider..

Rêvons, en ce premier avril..

Imaginons, qu'un être suffisamment influent dans ce pays.. disons par exemple un certain Nicolas S., grand orateur et accessoirement président depuis 2007, se découvre d'un seul coup le cran de monter à la tribune pour pousser un coup de gueule, comme il a su le faire sur d'autres sujets..

Imaginons-le donc, ou un(e) autre (peu importe), annoncer solennellement aux JT de vingt heures, en vrac..

* que les personnes homosexuelles ou bissexuelles (et les trans-*, j'en profite pour charger :P) sont des personnes comme les autres, qu'ils/elles méritent le même respect, que leur amour est aussi beau et légitime que celui des autres..

* que toute agression, qu'elle soit verbale, psychologique, ou physique, à l'encontre des personnes homosexuelles, bissexuelles (ou trans-* ;)) est indigne d'un humain, qu'elle doit être sévèrement punie, au même titre que toute autre discrimination (origines, couleur ou ethnie, religion..), et qu'il y veillera personnellement..

* qu'il a l'intention de faire inscrire des journées de sensibilisation aux différences, et à leur respect, dans les programmes scolaires, ainsi qu'a l'attention des différents représentants de l'ordre chargés d'accueillir et prendre en charge ces personnes lors de leur dépôt de plainte..

Rêvons..

-MyLzz59-