Pomoč Pri Igri?

Vse kar se tiče programiranja iger.
Odgovori
Krapch
Prispevkov: 3
Pridružen: 02.06.2009 15:01:20

Pomoč Pri Igri?

Odgovor Napisal/-a Krapch » 03.06.2009 18:35:51

LP!

Kot že nekateri tukaj imam tudi jaz problem pri izdelavi delphi igre. In sicer moram narediti, da se vsakih 200 prejetih točk pojavi neka bonus žogica, ki ti da 25točk.
Najlepša vam hvala za pomoč že vnaprej:).

Koda: Izberi vse

Koda:



unit premik;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, ComCtrls, MPlayer;

type
  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    Timer1: TTimer;
    Label1: TLabel;
    Label2: TLabel;
    ProgressBar1: TProgressBar;
    procedure PaintBox1Paint(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure FormActivate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  x,Y_ball,X_ball,Score:integer;
implementation

{$R *.DFM}

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
     with PaintBox1.Canvas do
     begin
          Pen.Color:=clRed;
          Pen.Width:=4;
          MoveTo(PaintBox1.width div 2, PaintBox1.height-20);
          LineTo(PaintBox1.width div 2+20, PaintBox1.height-20);
     end;
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
     with PaintBox1.Canvas do
     begin
          if Key='6' then
          begin
               if x< PaintBox1.Width-20 then x:=x+12;
               Pen.Color:=clRed;
               MoveTo(x, PaintBox1.height-20);
               LineTo(x+20, PaintBox1.height-20);
               Pen.Color:=clWhite;
               MoveTo(x-12, PaintBox1.height-20);
               LineTo(x, PaintBox1.height-20);
          end;
          if Key='4' then
          begin
               if x> 5 then x:=x-12;
               Pen.Color:=clRed;
               Pen.Width:=4;
               MoveTo(x, PaintBox1.height-20);
               LineTo(x+20, PaintBox1.height-20);
               Pen.Color:=clWhite;
               MoveTo(x+25, PaintBox1.height-20);
               LineTo(x+50, PaintBox1.height-20);
          end;
     end;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
     x:=PaintBox1.width div 2;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
     PaintBox1.Canvas.TextOut(X_ball,Y_ball,'   ');
     if Y_ball=PaintBox1.Height-20 then
     begin
           if (X_ball>x-20)and(X_ball<x+20) then
           begin
                Score:=Score +5;
                Label2.Caption:=InttoStr(Score);
           end
           else begin
                     if ProgressBar1.Position<10 then Form1.Close
                     else ProgressBar1.Position:=  ProgressBar1.Position -11;
                     Beep;
           end;
          Y_ball:=0;
          X_ball:=Random(PaintBox1.width);
     end
     else  Y_ball:=Y_ball+10;

     PaintBox1.Canvas.TextOut(X_ball,Y_ball,'O');
end;
end.  

Miha-R
Prispevkov: 2155
Pridružen: 14.05.2001 21:29:53

Pomoč Pri Igri?

Odgovor Napisal/-a Miha-R » 03.06.2009 20:21:35

V kodi, kjer prištevaš nove točke, moraš preveriti, če je trenutni rezultat deljiv z 200 - v tem primeru si presegel novih 200 točk in je čas za bonus; to boš storil z mod funkcijo takole

Koda: Izberi vse

      Score := Score + 5;

      if (Score mod 200) = 0 then
        IsBonusBall := True;
IsBonusBall boš dodal med ostale javne spremenljivke in bo označevala, če je trenutna žogica bonusna t.j. taka, ki ti prinese 25 točk:

Koda: Izberi vse

var
  Form1: TForm1;
  x, Y_ball, X_ball, Score: Integer;
  IsBonusBall: Boolean;
In na koncu boš popravil še enkrat kodo, kjer prištevaš točke; običajno jih dobiš 5, če pa je trenutna žogica bonusna, ti bo program prištel 25 in ukinil bonus. Tisti del kode bo po novem videti takole:

Koda: Izberi vse

      if IsBonusBall then
      begin
        Score := Score + 25;
        IsBonusBall := False;
      end
      else
        Score :=Score + 5;

      if (Score mod 200) = 0 then
        IsBonusBall := True;
Vedno sem želel napisati prav tak odgovor.

Krapch
Prispevkov: 3
Pridružen: 02.06.2009 15:01:20

Pomoč Pri Igri?

Odgovor Napisal/-a Krapch » 03.06.2009 20:47:16

Najlepša hvala, bom probal:D

Krapch
Prispevkov: 3
Pridružen: 02.06.2009 15:01:20

Pomoč Pri Igri?

Odgovor Napisal/-a Krapch » 04.06.2009 14:30:39

Miha, najlepša ti hvala, DELUJE:D:D

Odgovori