AMAZE, JEU DE RÉFLEXION

Utilisateur anonyme - 25 févr. 2006 à 13:40
Debiars Messages postés 285 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 11 février 2018 - 17 févr. 2013 à 15:25
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/36250-amaze-jeu-de-reflexion

Debiars Messages postés 285 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 11 février 2018
17 févr. 2013 à 15:25
Merci, ô Cirec, pour cette correction que je vais m'empresser d'appliquer...

jp
Utilisateur anonyme
17 févr. 2013 à 14:49
Bravo et félicitations pour cette première place!!!

maintenant que le concours est fini ...
on peut corriger une erreur dans le code qui coute
à chaque rotation de pièce pas moins de 6 TBitmap !!!

Heureusement ils sont loin d'être aussi bon qu'il n'y parait chez dvp ...
ils n'ont rien vu ... hahaha

bref pour y remédier c'est simple :
tu mets les 3 premières ligne de la procédure qui suit en commentaire.

procedure TFmain.Angle(bma : TBitmap);
var ec : integer;
bmp : TBitmap;

begin
//bmp := TBitmap.Create;
//bmp.Width := dim;
//bmp.Height := dim;
bmp := RotImage(bma, DegToRad(rangle),
Point(dim div 2, dim div 2), clWhite);
ec := (bmp.Width - dim) div 2;
...
end;

en effet la fonction RotImage crée et renvoie un TBitmap en Résultat ...
il est donc très déconseillé de créer un objet dans le but de récupérer le résultat de cette fonction.

l'explication en est très simple:
// BMP est crée ... un espace mémoire a été alloué
BMP := TBitmap.Create;

// ici c'est RotImage qui crée le TBitmap dans son code
// Result := TBitmap.Create;
// et tu affectes le résultat à BMP !!!!!
BMP := RotImage(bma, DegToRad(rangle),
Point(dim div 2, dim div 2), clWhite);
...
// ici tu libère BMP !!!
// à ton avis c'est quelle instance de TBitmap qui est libérée ?????
BMP.Free;

je te le donne en mille c'est celle de la fonction.
Result := TBitmap.Create;

du coup la première instance créée par
//BMP := TBitmap.Create;
est perdue et jamais libérée

il faut faire attention aux fonctions qui renvoient un objet

en fonction des besoins du code on pourrait aussi faire comme ceci:

with RotImage(bma, DegToRad(rangle), Point(dim div 2, dim div 2), clWhite) do
try
...
finally
Free;
end;

voilà on pourrait changer encore 2-3 choses comme les fonctions
de rotation d'images ... il y a moyen de faire beaucoup plus simple
et plus rapide que la rotation par ScanLine ou Pixels[]
mais comme ça ne nuit pas au fonctionnement du jeu ... à toi de voir ;)

@+
Cirec.
Debiars Messages postés 285 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 11 février 2018
11 févr. 2013 à 11:16
Pour information, Amaze vient de gagner le Défi Pascal 2012 sur Devellopez.com.
cs_pista Messages postés 9 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 18 octobre 2007
30 avril 2006 à 09:54
Bonjour JP
J'ai perdu votre e-mail
Etienne de Giro
Attestation OK
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
10 mars 2006 à 10:57
C' est encore une oeuvre signée "Debiars"!
Du grand art quoi ... Amazing !!!!
Debiars Messages postés 285 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 11 février 2018
2 mars 2006 à 13:56
Il te faudra quand même un peu de patience,Yves...

A+++
yvessimon Messages postés 637 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 9 janvier 2017
2 mars 2006 à 11:48
Si c'est à la demande alors la note passe à 10/10

800x600 me convient

Salutations
Debiars Messages postés 285 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 11 février 2018
2 mars 2006 à 11:41
Salut Yves,

Veux-tu une version 800x600 ou 640x480 ?

Cordialement
yvessimon Messages postés 637 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 9 janvier 2017
2 mars 2006 à 08:54
La fiche est plus grande que mon écran ..

9.99/10

Salutations
Debiars Messages postés 285 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 11 février 2018
26 févr. 2006 à 10:43
Salut Cirec,

Pour l'affichage qui frise, tu peux essayer de réduire la vitesse de déplacement en mettant la variable "pas" à 1 dans la procédure DeplacePion. C'est un problème que je n'ai pas rencontré.

En ce qui concerne le clic sur le pion quand il n'y a pas de déplacement possible, il est utile pour passer la main à l'ordi.
Cela permet une respiration, sinon il y aurait deux insertions consécutives, on risque de perdre le fil. Et puis il y a le cas où le déplacement est possible mais non désiré par le joueur...

Un p'tit compteur, je vais y réfléchir.

Merci pour tes commentaires!

jp
Utilisateur anonyme
26 févr. 2006 à 01:37
J'ai remarqué à certain moment quand l'ordinateur joue l'affichage frise (on ne voit pas le déplacement des pièces) et il reprend une fois que son déplacement à été effectué

En suite selon les pièces ajoutées il se peut qu'il n'y ait pas de déplacement possible mais le jeu attend quand même que l'on clique sur le "pion" pour le déplacer (c'est peut être pas nécessaire)

Un petit compteur de point ou de coup serait le bien venu (où les deux)

Si non je me régale il est génial la grande classe quoi

@+
Cirec
Utilisateur anonyme
25 févr. 2006 à 13:40
Salut,
Comme toujours c'est beau, propre, avec une belle présentation c'est du grand art, forcement c'est du Debiars.

10/10 sans discuter

@+
Cirec
Rejoignez-nous