Rechercher - Liste des utilisateurs
Version complète : Le moins de pas possible
Accueil » Postez vos labyrinthes » Le moins de pas possible
1
Xaumina
Il y a un problème avec Pas: j'ai fini deux fois le niveau 3, et il m'a emmené à deux niveaux différents... Et dans le niveau quatre avec le trésor, les pas ne sont pas comptés... (dans le niveau quatre avec tmes flèches, on ne perd pas quand on a dépasser le nombre de pas maximum).
intello
Le niveau 4 avec le trésor , c'est l'endroit de fin ; tu t'es donc trompé d'un pas dans le niveau 3 : normal que les pas n'y sont pas comptés .

Mais je ne vois pas de niveau 4 avec des flèches

Normalement ya des téléporteurs .
Peux-tu m'envoyer un screenshot
Xaumina
Non, je ne peux plus. mais il s'agit peut-être d'un autre niveau.
sjrd
Mes impressions

Concept très intéressant, niveaux bien travaillés. C'est très chouette dans l'ensemble.

Par contre, c'est pas évident de comprendre quand on a perdu, par exemple. Un moyen plus efficace aurait été de faire :
Player.Lose;
Player.ShowMessage('Tu as dépassé le nombre de pas autorisé : tu as perdu !');

plutôt que d'envoyer le joueur dans un endroit qui le "condamne" (mais on ne le comprend pas tout de suite).

Quelques remarques techniques

Il y a aussi un bug dans le niveau 6 (avec les échelles). Car rien ne m'empêche, une fois que je suis sur le mur, de continuer et de changer d'écran tout en restant sur le mur (et là : bardaf, c'est l'embardée). Il faudrait mettre de vrais murs (Mur et non Murebe) sur le bas de l'écran 7.

Au niveau de ton code FunDelphi, chapeau déjà pour avoir déjà pu maîtriser pas mal d'aspects de ce langage

Point de vue stylistique, c'est un peu brouillon par contre. Je t'encourage vivement à respecter ce qu'on appelle l'indentation, c'est-à-dire le nombre d'espaces en tête de ligne. Prends exemple sur les nombreux codes que j'ai moi-même écrits (sur le forum et dans mes labyrinthes). Cela rendra ton code beaucoup plus lisible, et sera un signe de meilleure qualité.

Là je n'ai plus beaucoup de temps dans l'immédiat, mais j'ai d'autres remarques et conseils que je donnerai plus tard (sans doute pas avant jeudi). Par exemple tu aurais pu ne déclarer qu'une seule classe TCounterOnViewPlugin, mais avec trois composants qui utilisent la même classe. Il aurait suffi d'ajouter deux property TextX et TextY, au lieu de les code "en dur". Elles seraient apparues dans l'inspecteur d'objets, où tu aurais pu les modifier séparément par plugin. Je te donnerai plus de détails plus tard.

Ma note

Pour l'instant de je t'ai noté 7/10. Mais je le monterai à 8/10 si tu corriges et améliores selon ces quelques remarques (je suis sévère, mais mes étudiants ne l'ont jamais regretté )
intello
oK je vais corriger ça !
sjrd
Bon alors voici des remarques plus détaillées, qui t'aideront à écrire du code plus joli, et donc de meilleure qualité. De plus, cela t'aidera à mieux comprendre certaines choses.

En-tête
uses
  FunLabyBase, FLBSimpleEffects;

FLBSimpleEffects ne doit plus être utilisé. Je sais, la doc est obsolète FunLabyBase suffit à avoir accès à tous les composants qui sont prévus de base dans FunLabyrinthe.
const
  idGrass = 'Grass';
  idWall = 'Wall';

Ceci doit être supprimé. Le fait de mettre uses FunLabyBase rend ces const inutiles. Je sais, c'est le bouton "Code Source" du ssq qui a produit ce code, et lui en a besoin. Mais une fois que tu passes en fnd et que tu mets le uses FunLabyBase, il faut les supprimer.

Les 3 CounterOnViewPlugin

Comme je l'ai dit dans mon post précédent, il serait mieux de faire un seul type TCounterOnViewPlugin, mais de créer 3 instances de ce type. Il vaut d'ailleurs mieux nommer correctement les trois instances (composants). Tu peux même personnaliser certaines propriétés directement là où tu déclares les 3 instances (dans components). Cela donne :
components
  StepCounter: TCounterOnViewPlugin
    MsgFormat: 'Pas : %d';
    TextX: 12;
    TextY: 8;
  end;

  LevelCounter: TCounterOnViewPlugin
    MsgFormat: 'Niveau %d';
    TextX: 309;
    TextY: 8;
  end;

  MaxStepCounter: TCounterOnViewPlugin
    MsgFormat: 'Pas requis maximum : %d';
    TextX: 12;
    TextY: 280;
  end;

plugin TCounterOnViewPlugin3
  hint 'Pas requis';

  property MsgFormat: string;
  property Counter: Integer;
  property BackColor: TColor32;
  property FontColor: TColor32;
  property TextX: Integer;
  property TextY: Integer;

  on AfterConstruction do
  begin
    inherited;

    MsgFormat := '%d';
    BackColor := clWhite32;
    FontColor := clBlack32;
    TextX := 8;
    TextY := 8;
  end;

  on DrawView do
  var
    Text: string;
    Extent: TSize;
  begin
    Bitmap.Font.Name := 'Tahoma'; {don't localize}
    Bitmap.Font.Size := 8;

    Text := Format(MsgFormat, [Counter]);
    Extent := Bitmap.TextExtent(Text);

    Bitmap.FillRectTS(TextX-2, TextY, TextX+Extent.cx+2, TextY+Extent.cy,
      BackColor);

    Bitmap.RenderText(TextX, TextY, Text, 12, FontColor);
  end;
end;


L'usage de Map[X, Y, Z]

Dans ton code tu as :
field TPas(TGround)
  name 'Terrain à pas + murs';
  image 'Fields/Grass';

  on Entering do
  begin
    CounterOnViewPlugin.Counter := CounterOnViewPlugin.Counter + 1;
  end;

  on Entered do
  begin
    Master.Map['MainMap'].Map[Pos.X+1,Pos.Y+2,Pos.Z].Field := Wall;
  end;
end;

D'abord, pourquoi avoir choisi Entering et Entered ? N'est-il pas plus logique de mettre les deux dans Entered. Pour rappel : Entering sert à empêcher le jouer de venir sur la case. Entered sert à faire quelque chose lorsque le joueur est entré sur la case.

De plus, la ligne compliquée avec Master.Map peut être simplifiée de beaucoup. Je sais, tu es parti de ce que produit le "Code source" des ssq. Mais les ssq ne savent rien, et c'est pourquoi ils mettent toujours beaucoup de code qui en fait est inutile... au cas où. Mais toi, tu sais qu'en fait il n'y a qu'une seule Map, et que c'est celle où se trouve actuellement le joueur que tu veux modifier. Tu peux faire simplement :
Map[Pos.X+1, Pos.Y+2, Pos.Z].Field := Wall;

C'est évidemment valable à tous les autres endroits avec le Master.Map.

if..else et begin..end

effect TBouty(TCounterEffect)
  name 'touby';

  on Execute do
  begin
    if CounterOnViewPlugin.Counter > CounterOnViewPlugin3.Counter then
      Player.MoveTo(Point3D(3, 3, 0))
    else
      Master.Map['MainMap'].Map[5, 79, 0] := Grass;
      CounterOnViewPlugin.Counter := 0;
      Master.Map['MainMap'].Map[6, 79, 0] := Grass;
  end;
end;

Ici il y a un problème de syntaxe. Si tu relis ce passage de l'aide, tu remarqueras que tu dois entourer les trois dernières instructions avec un begin..end supplémentaire. Sinon le else ne porte que sur la première instruction. Quel est le résultat alors ? Eh bien c'est que les deux dernières instructions seront toujours exécutées, même si le test du if est vrai !

Il faut donc écrire (avec au passage, la simplification du Master.Map) :
  on Execute do
  begin
    if CounterOnViewPlugin.Counter > CounterOnViewPlugin3.Counter then
      Player.MoveTo(Point3D(3, 3, 0))
    else
    begin
      Map[5, 79, 0] := Grass;
      CounterOnViewPlugin.Counter := 0;
      Map[6, 79, 0] := Grass;
    end;
  end;

Voilà j'ai atteint le bout J'espère que ces indications pourront t'aider
intello
Voilà un labyrinthe de haut niveau : Pas.
Ce jeu consiste à faire le moins de Pas possible .
7 niveaux où je vous conseille de sauvegarder à chaque débuts de niveau (une idée de Xaumina pour sa rivière inima) sauf si vous voulez les recommencer à chaque fois .

Un jeu qui prend pas mal de temps , et qui est assez difficile dans l'ensemble.
Vous devez télécharger les images de flèches de toutes les couleurs .

N'oubliez pas de mettre le dossier "Laby" dans "Units" .
Si nécessaire , je fournirais une solution.

Ci- joint une image de filtre bleu .

P.S : Et voilà , comme si le premier message n'existait pas
sjrd
Peux-tu rappeler où sont les flèches de toutes les couleurs ? Je ne les retrouve plus
sjrd
Voilà, tu as droit à un 8/10 de ma part, maintenant
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB