Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Nuevo en el foro, y poco experimentado en el Delphi (https://www.clubdelphi.com/foros/showthread.php?t=88390)

Vilkov 29-05-2015 21:28:34

Nuevo en el foro, y poco experimentado en el Delphi
 
Buenas tardes a todos desde Catalunya!
Tengo algunas dudas, que no se bien en que apartado van, en caso de que me haya equivocado de sitio, y un administrador lo cambia o algo así, se lo agradezco!
Bueno, aquí van las dudas, y el por que de las mismas.
Yo estoy estudiando primero de automatización y robótica industrial, y en la parte de informática, nuestro profesor nos ha encomendado la tarea de realizar un juego, que lleve una matriz, que haya respuesta de "verdadero" o "falso", y que las preguntas el programa las haga a partir de los datos que hemos introducido en un StringGrid.
Hasta ahora, he logrado hacer el diseño y la parte del juego, pero no tengo ni la menor idea de como hacer para que al clicar el botón "iniciar", en un StaticText, me salga el nombre aleatorio de los datos del grid, y que si yo elijo la opción correcta o incorrecta se me ilumine un panel de verde u otro de rojo ( esto último si), y que además de todo eso, me contabilice los fallos y/o los aciertos.
El juego trata de un panel con una imagen con varias banderas, y un shape, con el cual anteriormente en la parte de diseño he creado un .txt con las coordenadas y la bandera, gracias al cual he rellenado automáticamente el stringgrid, y ahora necesito que el programa me pida una bandera y si clico en la coordenada correcta, me la de por buena, y si doy en la incorrecta, por mala.
Vamos, que necesito ayuda en lo siguiente:
1 - Como hacer que al clicar en "iniciar" el StaticText me muestre un dato ( de texto ) aleatorio del StringGrid.
2 - Si elijo la respuesta incorrecta el juego contabilice 1 fallo, y lo mismo para el acierto.

Mil gracias a todos, siento no haber escrito antes ninguna presentación ni nada, llevo como 1 semana con lo mismo y no soy capaz encontrar nada, y como he visitado mucho este foro para informarme de según que cosas, acudo a vosotros personalmente.
Gracias a todos, ayudéis o no.
:D:)

nlsgarcia 29-05-2015 22:23:03

Vilkov,

Cita:

Empezado por Vilkov
...nuestro profesor nos ha encomendado la tarea de realizar un juego...he logrado hacer el diseño y la parte del juego, pero no tengo ni la menor idea de como hacer para que al clicar el botón "iniciar", en un StaticText, me salga el nombre aleatorio de los datos del grid...

¡Bienvenido al Club Delphi! :D

Revisa esta información:
Espero sea útil :)

Nelson.

Vilkov 29-05-2015 22:35:33

Gracias!
Ahora me lo revisaré, a ver si se me queda algo, hay que decir que a veces soy bastante duro de mollera. Y sobre todo cuando he de entregar el trabajo en 2 días xDD
A ver que hacemos!!

Casimiro Notevi 29-05-2015 23:09:51

Cita:

Empezado por Vilkov (Mensaje 492703)
Gracias!
Ahora me lo revisaré, a ver si se me queda algo, hay que decir que a veces soy bastante duro de mollera. Y sobre todo cuando he de entregar el trabajo en 2 días xDD
A ver que hacemos!!

Si llevas una semana sin saber cómo hacerlo, tenías que haber empezado por el principio: leer y aprender.

También ten en cuenta algo esencial: Divide y vencerás.
De las tareas que tienes que hacer, ve dividiéndolas lo más simples que puedas y vas haciéndolas por separado. Ejemplos:
- Rellenar un stringrid
- Crear un número aleatorio
- Mostrar la respuesta leyendo del stringrid, según ese número aleatorio.
- etc.

Vilkov 29-05-2015 23:18:18

Cita:

Empezado por Casimiro Notevi (Mensaje 492704)
Si llevas una semana sin saber cómo hacerlo, tenías que haber empezado por el principio: leer y aprender.

También ten en cuenta algo esencial: Divide y vencerás.
De las tareas que tienes que hacer, ve dividiéndolas lo más simples que puedas y vas haciéndolas por separado. Ejemplos:
- Rellenar un stringrid
- Crear un número aleatorio
- Mostrar la respuesta leyendo del stringrid, según ese número aleatorio.
- etc.

Si es que solo me quedan 2 cosas por hacer, y tengo códigos apuntados en la libreta, de clase, pero me cuesta organizarlos.

Casimiro Notevi 29-05-2015 23:23:28

Pues di exactamente qué problema tienes, qué no comprendes, qué necesitas, muestra tu código y dinos qué hace, cómo lo hace, qué error muestra, etc.

Vilkov 30-05-2015 00:11:36

Errores, no tengo ninguno, basicamente, por que todo lo que he hecho hasta ahora, me ha salido.
Lo que he hecho hasta ahora, es el diseño, que es donde pongo un Shape encima de una bandera ( es una imagen con varias banderas ), el nombre y me guarda el nombre y las coordenadas en un .txt, aquí acaba la parte del diseño ( que sirve basicamente para guardar las coordenadas de las banderas, para poder tirarlas a un grid, y utilizarlas en el juego ).

Ahora viene la parte del juego propiamente dicho; Al entrar al juego ( que es un form dentro de un proyecto, en el cual está también el diseño ), cuando clique en un botón que he llamado "Inicio", quiero que en un Static Tex, me ponga un país, el cual ha de ser sacado del grid de forma aleatoria, para que con el nombre del país, yo busque la bandera que le pertenece. Es solo eso.

Yo ya tengo en la libreta apuntados códigos para que después en caso de que acierte o falle, me de un mensaje de acierto o error.
Pero lo mas importante es eso de que me saque un nombre aleatorio del grid y me lo ponga en el StaticText.

Casimiro Notevi 30-05-2015 00:26:51

Sí, lo entendí, por eso pregunto, qué no sabes hacer de eso, en qué parte tienes problemas, ¿qué código estás probando?, ¿qué resultados estás obteniendo?, etc.

nlsgarcia 30-05-2015 06:28:12

Vilkov,

Cita:

Empezado por Vilkov
...nuestro profesor nos ha encomendado la tarea de realizar un juego...he logrado hacer el diseño y la parte del juego, pero no tengo ni la menor idea de como hacer para que al clicar el botón "iniciar", en un StaticText, me salga el nombre aleatorio de los datos del StringGrid...

:rolleyes:

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Buttons, Grids, jpeg, Math, ComCtrls;

type

  TShape = class(ExtCtrls.TShape);

  TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    StringGrid1: TStringGrid;
    StaticText1: TStaticText;
    BitBtn1: TBitBtn;
    Shape1: TShape;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    StatusBar1: TStatusBar;
    procedure FormCreate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure ValidateImage(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  SelectImage : Integer;
  PreviousImage : Integer;
  RndImg : Array of Byte;
  Success, Error : Integer;
  StartGame : Boolean = False;

  Ask : Array[0..2] of String = ('¿Cual es la Imagen del Universo?',
                                 '¿Cual es la Imagen de la Tierra?',
                                 '¿Cual es la Imagen de la Galaxia Espiral?');

implementation

{$R *.dfm}

// Configura los componentes de la aplicación
procedure TForm1.FormCreate(Sender: TObject);
var
   Row, Col : Integer;

begin

   // Configura StaticText1
   StaticText1.Caption := 'Click al Botón con el Bombillo';
   StaticText1.Font.Color := clNavy;
   StaticText1.Font.Name := 'Tahoma';
   StaticText1.Font.Size := 12;

   // Configura Image(x) y Button(x)
   Image1.Center := True;
   Image1.Stretch := True;
   Image1.Picture.LoadFromFile('Image\Universe.jpg');
   Button1.Tag := 0;
   Button1.OnClick := ValidateImage;

   Image2.Center := True;
   Image2.Stretch := True;
   Image2.Picture.LoadFromFile('Image\Earth.jpg');
   Button2.Tag := 1;
   Button2.OnClick := ValidateImage;

   Image3.Center := True;
   Image3.Stretch := True;
   Image3.Picture.LoadFromFile('Image\Spiral Galaxy.jpg');
   Button3.Tag := 2;
   Button3.OnClick := ValidateImage;

   // Configura y carga StringGrid1 en base al arreglo Ask
   StringGrid1.FixedRows := 0;
   StringGrid1.FixedCols := 0;
   StringGrid1.RowCount := 3;
   StringGrid1.ColCount := 1;

   for Row:= 0 to StringGrid1.RowCount - 1 do
      for Col:= 0 to StringGrid1.ColCount - 1  do
      begin
         StringGrid1.Cells[Col,Row]:= Ask[Row];
         StringGrid1.ColWidths[Col] := 300;
      end;

   StringGrid1.Selection := TGridRect(Rect(-1, -1, -1, -1));

   // Configura BitBtn1 
   BitBtn1.Glyph.LoadFromFile('Image/Help.bmp');

   // Configura Shape1
   Shape1.Brush.Color := clSkyBlue;
   Shape1.Brush.Style := bsSolid;
   Shape1.Canvas.Font.Name :='Tahoma';
   Shape1.Canvas.Font.Size := 14;

   // Configura StatusBar1
   StatusBar1.Panels.Add.Text := 'Aciertos';
   StatusBar1.Panels.Items[0].Width := 200;

   StatusBar1.Panels.Add.Text := 'Errorres';
   StatusBar1.Panels.Items[1].Width := 200;

end;

// Valida la imagen seleccionada
procedure TForm1.ValidateImage(Sender: TObject);
begin

   if not StartGame then
      Exit;

   // Verifica y contabiliza las respuestas
   if SelectImage = TImage(Sender).Tag then
   begin

      Shape1.Canvas.Font.Color := clGreen;
      Shape1.Canvas.Font.Style := [fsBold];
      Shape1.Canvas.TextOut(135,1,'¡Correcto!   ');

      Inc(Success);

      StatusBar1.Panels.Items[0].Text := Format('Aciertos = %d',[Success]);

   end
   else
   begin

      Shape1.Canvas.Font.Color := clRed;
      Shape1.Canvas.Font.Style := [fsBold];
      Shape1.Canvas.TextOut(135,1,'¡Incorrecto!');

      Inc(Error);

      StatusBar1.Panels.Items[1].Text := Format('Errorres = %d',[Error]);

   end;

end;

// Selecciona una pregunta al random y configura la interfaz
procedure TForm1.BitBtn1Click(Sender: TObject);
var
   Row : Integer;
   Select : Boolean;
   i : Integer;

begin

   Randomize;

   PreviousImage := SelectImage;

   // Selecciona de forma equiprobable una pregunta sin repetición consecutiva
   repeat

      Select := True;
      repeat
         Row := Random(3);
      until Row <> PreviousImage;

      if Length(RndImg) = 3 then
         SetLength(RndImg,0);

      for i := Low(RndImg) to High(RndImg) do
      begin
         if RndImg[i] = Row then
         begin
            Select := False;
            Break;
         end
      end;

      if Select then
      begin
         SetLength(RndImg,Length(RndImg)+1);
         RndImg[High(RndImg)] := Row;
      end;

   until Select;

   SelectImage := Row;

   StaticText1.Caption := StringGrid1.Cells[0,Row];
   StringGrid1.Selection := TGridRect(Rect(0, Row, 0, Row));
   Shape1.Canvas.TextOut(135,1,StringOfChar(' ',20));

   StartGame := True;

end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, Implementa un juego básico de preguntas, como se muestra en la siguiente imagen:



Notas:

1- El código propuesto tiene como único objetivo, servir de guía a los requerimientos planteados en el Msg #1.

2- La configuración de los controles, se hace mediante código para facilitar la visualización de la configuración de los mismos.

3- El código propuesto esta disponible en : GameUniverse.rar

Espero sea útil :)

Nelson.

Vilkov 01-06-2015 08:47:48

Mil gracias!
Voy a probar de adaptarlo a mi programa! :D ^\||/


La franja horaria es GMT +2. Ahora son las 10:38:17.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi