Einzelnen Beitrag anzeigen

Pegaro

Registriert seit: 4. Mär 2014
3 Beiträge
 
#1

Spiel - Wo liegt Was?

  Alt 9. Mär 2014, 10:12
Hallo zusammen,

für eine Projektarbeit des letzten Kurshalbjahres haben meine Gruppe und ich vorgenommen das "Schlag den Raab" Spiel - Wo liegt Was? zu programmieren. Nun sind wir jedoch an einem Punkt angekommen, wo unser Wissen nicht mehr ausreicht.
Unsere Probleme sind:
1. Beim Zweispieler die Image1.OnMouseDown Prozedur einfügen
2. Ein Timer so einzustellen, dass nach 2 Sekunden der Computer seine Pinnadel setz und dann nochmal 2 Sekunden später die Lösung angezeigt wird.
Der Rest der noch offen ist, schaffen wir noch allein. Diese 2 Probleme jedoch nicht.
Delphi-Quellcode:
unit Unit1;

{$MODE Delphi}

interface

uses
  LCLIntf, LCLType, LMessages, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Buttons;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    ComboBox1: TComboBox;
    Edit1: TEdit;
    Edit2: TEdit;
    Image1: TImage;
    Panel1: TPanel;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    SpeedButton4: TSpeedButton;
    SpeedButton5: TSpeedButton;
    Timer1: TTimer;


    procedure Button1Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure SpeedButton2Click(Sender: TObject);
    procedure SpeedButton3Click(Sender: TObject);
    procedure SpeedButton4Click(Sender: TObject);
    procedure SpeedButton5Click(Sender: TObject);



  private


    { Private-Deklarationen }
  public
 function pinn(x,y:integer):tpoint;
 procedure orte;
 procedure fragen;
 procedure gegner1;
 procedure gegner2;
 procedure gegner3;
    { Public-Deklarationen }
  end;





var
  Form1: TForm1;
  pixX, pixY: integer; xnull, ynull: integer; xmax,yMax: real; xEinheit, yEinheit: real; //für die Koordinatentransformation, siehe function koordinaten und Button1Click
  kilometer: real; //siehe Button1Click - um zu wissen wie viel Kilometer 1 Pixel ist
  k: tpoint; //für Koordinatentransformation der Orte - Tform1.Orte
  i : integer; //für Random - zufällige Ortsauswahl
  m,n:integer; //siehe Image1MouseDown
  l: real; //für die Lösung bei SpeedButton3Click

implementation

{$R *.lfm}

function koordinaten(x,y:real):tpoint; //Koordinatentransformation
    begin
      koordinaten.X:=pixX+round(x*xEinheit); //Längengrad
      koordinaten.Y:=pixY-round(y*yEinheit); //Breitengrad
    end;

  function tform1.pinn(x,y:integer):tpoint; //Pinnnadel Zeichnung
    begin
          image1.canvas.moveto(x,y);
          image1.canvas.brush.color:=clblack;
          image1.canvas.lineto(x+15,y-50);
          image1.canvas.MoveTo(x,y);
          image1.canvas.lineto(x-15,y-50);
          image1.canvas.lineto(x+30,y-50);
          image1.canvas.floodfill(x,y-5,clblack,fsborder);
          image1.canvas.brush.Color:=clred;
          image1.canvas.ellipse(x+25,y-60,x-25,y-35);
      end;

procedure TForm1.Button1Click(Sender: TObject); //Deklarationen
begin
  randomize;
  pixX:=image1.width;
  pixY:=image1.height;
  xnull:=pixX div 2;
  ynull:=pixY div 2;
  xMax:=360;
  yMax:=180;
  xEinheit:=xnull/xMax;
  yEinheit:=ynull/yMax;
  kilometer:=sqrt(sqr(40075.016/pixX)+sqr(20003.9/pixY));
end;

procedure tform1.orte; //Koordinaten der Orte
begin
 if i = 1 then k:=koordinaten(-74,40);//New York
 if i = 2 then k:=koordinaten(10,51);//Brocken
 if i = 3 then k:=koordinaten(37,-3);//Kilimandscharo
 //im Original noch viele weitere Orte
end;

procedure tform1.fragen; //Fragen zu den Orten
begin
  if i = 1
    then panel1.caption:='Wo liegt die größte Metropole der USA?';
  if i = 2
    then panel1.caption:='Wo liegt der größte Berg Sachsen-Anhalts?';
  if i = 3
    then panel1.caption:='Zeige auf der Karte den Kilimandscharo.';
  //im Original noch viele weitere Fragen
end;

procedure tform1.gegner1; //Gegnererstellung - Einfach

VAR a,b,c,d:integer; e:extended;

begin
   if kilometer<>0 then
     c:=Round(500/kilometer);
     //ansonsten kilometer ist 0 und löst SIGFPE aus
     a:=random(k.x+c)+1;
     d:=random(k.y+c)+1;
     e:=sqrt(sqr(a-k.x)+sqr(d-k.y));
   if c > e then
    begin
     pinn(k.x+a,k.y+d);
    end;
end;

procedure tform1.gegner2; //Gegnererstellung - Mittel

VAR a,b,c,d:integer; e:extended;

begin
   if kilometer<>0 then
     c:=Round(250/kilometer);
     //ansonsten kilometer ist 0 und löst SIGFPE aus
     a:=random(k.x+c)+1;
     d:=random(k.y+c)+1;
     e:=sqrt(sqr(a-k.x)+sqr(d-k.y));
   if c > e then
    begin
     pinn(s+a,t+d);
    end;
end;

procedure tform1.gegner3; //Gegnererstellung - Schwer

VAR a,b,c,d:integer; e:extended;

begin
   if kilometer<>0 then
     c:=Round(100/kilometer);
     //ansonsten kilometer ist 0 und löst SIGFPE aus
    a:=random(k.x+c)+1;
    d:=random(k.y+c)+1;
    e:=sqrt(sqr(a-k.x)+sqr(d-k.y));
   if c > e then
    begin
     pinn(s+a,t+d);
    end;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject); //Einzelspieler
begin
  fragen;
  orte;
end;

procedure Tform1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer); //Setzen der Pinnnadel

begin
  m:=Round(Image1.Picture.Width/Image1.Width*X);
  n:=Round(Image1.Picture.height/Image1.height*Y);
  pinn(m,n);
  //Pinn wieder löschen bei nächsten Klick
end;

procedure TForm1.SpeedButton2Click(Sender: TObject); //Zweispieler
begin
  i:=random(3)+1;
  fragen;
  orte;
  //hier OnMouseDown Prozedur
  //diese dann visible:=false;
  //OnMouseDown Prozedur für Spieler 2
  //erste OnMouseDown visible:=true
end;

procedure TForm1.SpeedButton3Click(Sender: TObject); //Runde beenden
begin
 Edit1.text:=inttostr(k.x); //zur Sicherheit, dass die Koordinatentransformation stattgefunden hat
 Edit2.text:=inttostr(k.y); //zur Sicherheit, dass die Koordinatentransformation stattgefunden hat
 //mit ComboBox Schwierigkeitsauswahl
 gegner1; //nur zum test
 //Gegner setzt seinen Punkt nach 2 Sekunden
 //wieder nach zwei Sekunden folgende Lösunganzeige
 image1.canvas.brush.color:=clyellow;
 image1.canvas.ellipse(k.x-10,k.y-10,k.x+10,k.y+10);
 timer1.Enabled :=false;
 l:=(sqrt(sqr(m-k.x)+sqr(n-k.y)));
 panel1.caption:=floattostr(l*kilometer);
end;

procedure TForm1.SpeedButton4Click(Sender: TObject); //nächste Frage
begin
  i:=random(3)+1;
  fragen;
  orte;
  //Bild wieder clearen
end;

procedure TForm1.SpeedButton5Click(Sender: TObject); //Spiel beenden
begin
  //Spiel beenden
end;
end.
Wir hoffen ihr könnt uns helfen.

Grüße

Pegaro

Geändert von Pegaro ( 9. Mär 2014 um 11:36 Uhr)
  Mit Zitat antworten Zitat