UNE MACHINE À SOUS

blueperfect Messages postés 234 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 21 novembre 2013 - 19 juin 2009 à 17:51
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 17 juil. 2009 à 21:20
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50205-une-machine-a-sous

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
17 juil. 2009 à 21:20
Nan mais merci mais en général on appelle les gens par leur pseudo, mon prénom est là à titre indicatif, et c'est assez incongru (enfin c'est ce que je pense) d'appeler les gens par une information se situant dans leur profil sur une source ...
Merci quand même mais je ne me cache pas ;)

Cordialement, Bacterius !
Mowglinaute Messages postés 41 Date d'inscription dimanche 4 mars 2007 Statut Membre Dernière intervention 27 février 2013
17 juil. 2009 à 10:44
Excellent et amusant pour les moments de détente.
Bonne continuation à l'auteur de cette application.

Dr. Joseph LOMBET.
debiars87 Messages postés 43 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 25 juin 2009
25 juin 2009 à 17:22
Le Dégradés je lai fait simplement pour que les USERS comprenne que c'est une machine à Sous tout simplement,et ajouter du plus à cette simulation.
moi j'ai vue ce dégradés dans une vrai machine à sous dans un Casino prés de chez nous, et j'ai voulu le recopier sur mon code on faisant un peut de trafique on va dire à l'aide d'un logiciel de traitement d'image et voilà le résultat !
On peut les enlever sans problème le titre veut tout dire, par conséquent ça va diminuer le code et le travail à faire!
DEBIARS JUNIOR
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 juin 2009 à 15:28
D'accord, mais il ne sera peut-être pas aussi beau (dégradés, etc ...) que celui-ci. Mais l'intérêt réside dans le code.

Cordialement, Bacterius !
debiars87 Messages postés 43 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 25 juin 2009
25 juin 2009 à 15:05
et pour les explication rien à dire
c'est du vrai à 100% Thanks !!
DEBIARS JUNIOR
debiars87 Messages postés 43 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 25 juin 2009
25 juin 2009 à 15:04
c'est clair que c'est une phrase traduit par google
Which is (( qui est ))... etc , parceque je ne suis pas fort en français
même la description c'est WIKIPEDIA.
j'ai fait de mon mieux de faire tout en français sauf peut être les variables Globaux..etc pour permettre aux USERS de comprendre à peu prés ce que fait le CODE
mais bon ce n'est pas très important dans le bon sens du terme..

Bactérius Essai de faire ta propre version !!
Et puis poste la moi dans cette Email: debiars87@live.fr
et après je vais voir la différence.
Merci d'avance!
DEBIARS JUNIOR
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 juin 2009 à 14:33
Bon je t'ai fait une bonne partie de l'optimisation, à toi de faire le reste (il y en a encore pas mal). Si tu veux, je peux faire ma propre version de cette source (telle que je l'aurai codé, en reprenant les mêmes images que toi), et te l'envoyer (poster sur le site pourquoi pas), et tu pourras le regarder pour voir un peu les différences.
Sinon, comprends-tu ce que tu écris ? J'ai la méchante impression que tu as passé cette phrase dans le traducteur google :
"qui est mis en place à courir après trois arrêts Bobine!"
Ce qui est la traduction littérale de l'anglais "which is set to run after three reel stops", qui veut dire autre chose ("qui est enclenché après trois arrêts de bobine"). Bref, juste pour savoir si tu te contentais de passer des phrases recopiées dans un traducteur où si tu essayerais véritablement de "commenter" ce que tu écris (ce n'est pas que pour les autres, c'est pour toi aussi, dans 2 ou 3 ans si tu veux retrouver cette source tu ne vas pas comprendre tes commentaires).

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 juin 2009 à 14:24
Les explications : le tableau en constante BarColors contient les couleurs des TPanels (ainsi que la couleur de la police) selon si le bonus est atteint. Il se présente alors sous la forme d'un tableau à deux dimensions : deux couleurs, 1 pour le panel et 1 pour la police, et ces deux couleurs à la fois si le bonus est atteint ou pas. Premier paramètre du tableau (Boolean) : False si le bonus n'est pas atteint, True si il l'est. Deuxième paramètre (Integer) : 1 pour la couleur du panel, 2 pour celle de la police.
Ensuite, on met OfferaHold à True si BarNum = 8 (ce que j'ai cru comprendre).
Ensuite, on parcourt chaque composant de la fiche, jusqu'à tomber sur un TPanel (on profite qu'ils soient dans l'ordre). Alors, on va changer sa couleur en fonction (puis on incrémente N qui représente le panel actuel pour passer au suivant). Pour savoir si le bonus est atteint ou pas, une simple condition booléenne suffit : si BarNum est supérieur à l'index du panel (on commence par 0 pour le panel 1, 1 pour le panel 2, etc ...), alors le bonus est atteint, sinon non.
Et voilà comment on compresse 158 lignes de code en 15 lignes ... si tu n'as pas tout compris demande-moi.

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 juin 2009 à 14:19
Voilà le code fonctionnel :

______________________________________________


const
BarColors: array [Boolean, 0..1] of TColor = ((clMaroon, clOlive), (clRed, clYellow));
var
I, N: Integer;
begin
...
OfferaHold :(BarNum 8);
N := 0;
for I := 0 to ComponentCount - 1 do
if Components[I] is TPanel then with TPanel(Components[I]) do
begin
Color := BarColors[BarNum > N, 0];
Font.Color := BarColors[BarNum > N, 1];
Inc(N);
end;
end;
______________________________________________

C'est encore plus concis.

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 juin 2009 à 14:11
Ah une petite seconde le code ne marche pas tout à fait, je l'arrange.

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 juin 2009 à 14:09
Ouhla t'enerve pas comme ça, l'énervement ne conduit qu'à des pertes de contrôle, et peut se retourner contre toi ... Enfin bref.
Entre les lignes de code 206 et 364 : je te montre comment obtenir le même résultat sans faire de redondances abusives :

______________________________________________


const
BarColors: array [Boolean, 0..1] of TColor = ((clMaroon, clOlive), (clRed, clYellow));
var
I: Integer;
Panels: array [1..8] of Pointer;
begin
...
Panels[1] := @Panel1;
Panels[2] := @Panel2;
Panels[3] := @Panel3;
Panels[4] := @Panel4;
Panels[5] := @Panel5;
Panels[6] := @Panel6;
Panels[7] := @Panel7;
Panels[8] := @Panel8;
OfferaHold :(BarNum 8);
for I := 1 to 8 do
with TPanel(Panels[I]) do
begin
Color := BarColors[BarNum > Pred(I), 0];
Font.Color := BarColors[BarNum > Pred(I), 1];
end;
end;
______________________________________________

Et on peut mieux faire.
Les explications dans le prochain commentaire.

Cordialement, Bacterius !
debiars87 Messages postés 43 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 25 juin 2009
25 juin 2009 à 12:50
entre les lignes de code 206 et 364
Un Simple case me fera l'affaire et ne pas répéter les panels
j'ai faits ça parce que c'est mon premier code ici !!
DEBIARS JUNIOR
debiars87 Messages postés 43 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 25 juin 2009
25 juin 2009 à 12:47
"Si tu veux plus de détails, n'hésites pas à demander"
Oui j'aimerai bien que tu me montre comment je procede !!
DEBIARS JUNIOR
debiars87 Messages postés 43 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 25 juin 2009
25 juin 2009 à 12:45
un débat sans suite.
DEBIARS JUNIOR
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 juin 2009 à 09:00
Tu seras bien sympa de pas mentionner mon prénom sur ce site, j'aimerais garder mon pseudonyme.

Cordialement, Bacterius !
debiars87 Messages postés 43 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 25 juin 2009
25 juin 2009 à 01:59
HEU !!
"Offl..." ça veut dire quoi en fait ? " c'est un nouvelle abréviation !! "
non mais attend c'est mon premier code ici !!
et pour l'optimisation j'ai envie que tu m'aide Thomas franchement ton aide est précieuse pour moi!
j'ai envie vraiment d'améliorer ce code.
merci d'avance!
DEBIARS JUNIOR
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
24 juin 2009 à 23:04
Euh j'ai oublié un mot, il faut lire "Tu mets 584 lignes ...".

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
24 juin 2009 à 23:03
Bon, pour être constructif, Offl... Débiars87, ton code est à mon avis à revoir. Tu mets 584 là où il pourrait ne y en avoir que 250. Et il y a trop de TImages. Essaye de centraliser tout ça (un bitmap de "background", dans 1 seul TImage), et dessiner les objets de la machine à sous (cerise, bar, etc ...) dedans ... je sais c'est plus dur mais il faut faire comme ça.
Sinon, il y a trop de redondances. Il y a sûrement un moyen intelligent et concis d'allier simplicité, brièveté et performance (il n'y a qu'à voir entre les lignes de code 206 et 364 ! 158 lignes de code contre 30 si l'on avait codé proprement ...). Si tu veux plus de détails, n'hésites pas à demander.

Cordialement, Bacterius !
debiars87 Messages postés 43 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 25 juin 2009
19 juin 2009 à 22:48
de très Bon conseils
Je vais les noter tout de suite
MERci BLUEPERFECT !!
DEBIARS JUNIOR
blueperfect Messages postés 234 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 21 novembre 2013
19 juin 2009 à 17:51
Yep !

Puisque tu travailles dans le visuel :

* Toutes tes constantes tableaux de chaines, tu peux les intégrer visuellement dans un TDataModule, sous forme de ListBox ou de ValueList...:-)
* L'une des extensions de ton programme semble être le TImageList, mais contenant des images de "grande taille"... Un composant avec une colletion de TBitmap !
* Tu aurais pu grouper les OnTimer, et tu devrais instaurer une logique de réentrance (un test sur un flag à l'entrée...)

Sinon, c marrant !
Rejoignez-nous