Gå til innhold

Anbefalte innlegg

Videoannonse
Annonse

Hmmz det ble bare surr pga bredden. Går det an å få den til å poste bredere? Hvis du ordner det litt så skal det bli fint igjen.

 

Uansett her har du ett lite spill som jeg lagde til deg basert på det jeg sa til deg tidligere.

 

Lag navn på label og timer selv.

 

Label1 = Ditt skip

Label2 = Skuddet ditt

Label3 = Fiende

Timer1 = Hastigheten på ditt skip

Timer2 = Hastigheten på skuddet ditt

Timer3 = Hastigheten til fienden

 

Før du trykker på kjør så

 

* Opprett 4 labels

* Opprett 3 timers

* Gå inn på events på formen og dobbeltklikk på OnCreate og OnKeyDown

* Gå inn på alle timerene på events og dobbeltklikk på OnTimer

 

Da skal det funke.

 

Bytt ut labels med image hvis du vil ha noen bilder istedetfor, men da må du jo tegne det du skal ha først. Er ikke noe problem å lage bakgrunnsbilde også hvis du vil det.

 

Bare spør hvis du lurer på noe

 

 unit Unit1;



interface



uses

 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

 StdCtrls, ExtCtrls;



type

 TForm1 = class(TForm)

   procedure FormCreate(Sender: TObject);

   procedure FormKeyDown(Sender: TObject; var Key: Word;

     Shift: TShiftState);

   procedure Timer1Timer(Sender: TObject);

   procedure Timer2Timer(Sender: TObject);

   procedure Shoot;

   procedure Timer3Timer(Sender: TObject);

 private

   MoveDirection, ShootDirection: String; // Her oppretter jeg to variabler, en som sier hvilken retning du beveger deg i, og en som sier hvilken retning som skuddet skal bevege seg i

   CanShoot: Boolean; // Denne variablen passer på når jeg kan skyte og når jeg ikke kan skyte

   RandomVar, PointsCounter: Integer; // PointsCounter er en variabel som teller poengene

   OldWidth, OldHeight: integer; // Disse variablene er det den oppløsninga du kjører før du starter spillet legges inn i

 public



 end;



var

 Form1: TForm1;



implementation



{$R *.DFM}



function SetScreenResolution(Width, Height: integer): Longint; //Denne funksjonen gjør at spillet kjører i fullscreen

 var

 DeviceMode: TDeviceMode;

 begin

   with DeviceMode do begin

     dmSize := SizeOf(TDeviceMode);

     dmPelsWidth := Width;

     dmPelsHeight := Height;

     dmFields := DM_PELSWIDTH or DM_PELSHEIGHT;

   end;

   Result := ChangeDisplaySettings(DeviceMode, CDS_UPDATEREGISTRY);

 end;



procedure TForm1.FormCreate(Sender: TObject);

begin

  Form1.Left := 0;                // Her stiller jeg inn formen slik at den står på riktig plass

  Form1.Top := 0;

  Form1.WIdth := 800;

  Form1.Left := 600;

  OldWidth := GetSystemMetrics(SM_CXSCREEN);  // Her legger jeg inn den oppløsninga som du hadde inn i variablene OldWidth og OldHeight. Så hvis du kjører 1024x768 så blir OldWidth 1024 og OldHeight 768.

  OldHeight := GetSystemMetrics(SM_CYSCREEN);

  SetScreenResolution(800, 600);  // Her setter jeg oppløsningen til 800x600, du kan godt forandre den men da må du forandre noen tall lenger nede også

  Form1.Color := clTeal;      // Farge på bakgrunnen og diverse andre ting. Det kan du leke med.

  Label1.Color := ClRed;

  Label2.Color := ClRed;

  Label3.Color := ClBlack;

  Label1.Caption := '';        // Du kan godt skrive inn hvis du vil at en tekst skal komme i det "romskipet" du styrer, eller skuddet eller fienden sitt romskip.

  Label2.Caption := '';

  Label3.Caption := '';

  Label4.Caption := '0';

  Timer1.Interval := 50;       // Her setter jeg hvor raskt mitt skip skal bevege seg

  Timer2.Interval := 30;       // Her setter jeg hvor raskt skuddet mitt skal bevege seg

  Timer3.Interval := 90;       // Her setter jeg hvor raskt fiendens skip skal bevege seg

  Label1.Width := 80;          // Her setter jeg størrelsen på de forskjellige tingene

  Label2.Width := 7;

  Label3.Width := 50;

  Label1.Height := 20;

  Label2.Height := 7;

  Label3.Height := 50;

  CanShoot := True;            // Sørger for at jeg kan skyte med engang

  Form1.HorzScrollBar.Visible := False;  // Ofte når skuddet eller andre ting går utenfor formen kommer det scrollbars opp. Dette er irriterende så bør fjernes.

  Form1.VertScrollBar.Visible := False;

  Label2.SendToBack;           // Her gjør jeg bare slik at skuddet ligger alltid bak skipet

  Label3.Left := 300;           // Her bare plasserer jeg ett par ting

  Label3.Top := -500;

  Label4.Left := 750;

  Label4.Top := 20;

  Label4.Font.Size := 12;       // Setter jeg font size på poeng telleren

  PointsCounter := 0;            // Setter slik at du starter med 0 poeng



  Form1.DoubleBuffered := True;   // Kjekk greie slik at du unngår flimmer, men gjør slik at spillet krever mer ressurser. Dette er ikke merkbart på så små spill som dette.

  Form1.BorderStyle := bsNone;     // Disse tingene bør du sette hvis du skal ha fullscreen. Hvis du experimenterer litt merker du hva de gjør.

  Form1.WindowState := wsMaximized;

end;



procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;  // Her setter jeg hva de forskjellige tastene gjør

 Shift: TShiftState);

begin

 case key of

   vk_up: MoveDirection := 'Up';

   vk_down: MoveDirection := 'Down';

   vk_left: MoveDirection := 'Left';

   vk_right: MoveDirection := 'Right';

   vk_space: Shoot;

end;

end;



procedure TForm1.Timer1Timer(Sender: TObject);       // Denne timeren er over hvordan skipet beveger seg.

begin                                                // Sørger for at romskipet går i den retningen du trykker.

  if MoveDirection = 'Up' then begin                // Hastigheten er 10 som du kan sette høyere hvis du vil at skipet

    Label1.Top := Label1.Top - 10; end               // skal bevege seg raskere

  else if MoveDirection = 'Down' then begin

    Label1.Top := Label1.Top + 10; end

  else if MoveDirection = 'Left' then begin

    Label1.Left := Label1.Left - 10; end

  else if MoveDirection = 'Right' then begin

    Label1.Left := Label1.Left + 10; end;

end;



procedure TForm1.Timer2Timer(Sender: TObject);       // Denne timeren er over skuddet du skyter.

begin

   randomize;                                     // Randomize sørger for at tallet når du benytter deg av random så skal ikke det bli det samme.

   if ShootDirection = 'Up' then begin            // Her gjør jeg slik at skuddet beveger seg i ønsket retning

      Label2.Top := Label2.Top - 20;

   end

   else if ShootDirection = 'Down' then begin

      Label2.Top := Label2.Top + 20;

   end

   else if ShootDirection = 'Left' then begin

      Label2.Left := Label2.Left - 20;

   end

   else if ShootDirection = 'Right' then begin

      Label2.Left := Label2.Left + 20;

   end;



   if (Label2.Top < 0) or (Label2.Top > 600) or (Label2.Left < 0) or (Label2.Left > 800) then // Dette er en if setning som blir sann hvis skuddet går utenfor skjermen

     begin

       CanShoot := True;         // Og når den blir sann så kan man altså skyte igjen.

     end;



   if (Label2.Left > Label3.Left - Label2.Width) and (Label2.Left < Label3.Left + Label3.Width) and (Label2.Top > Label3.Top - Label2.Height) and (Label2.Top < Label3.Top + Label3.Height) then

     begin                                             // Denne if setningen blir sann når skuddet treffer fienden.

       inc(PointsCounter);                             // Da får du ett poeng mer

       Label4.Caption := inttostr(PointsCounter);      // Og det poenget må vises i labelen

       Label2.Visible := False;                        // Skuddet blir da ikke lenger synlig

       Timer3.Interval := Timer3.Interval - 3;         // Fienden blir raskere for hver gang du dreper det

       CanShoot := True;                               // Og du kan også skyte igjen

       Randomvar := random(4);                         // Her lager jeg en random slik at fienden ikke skal starte på samme sted.

         if Randomvar = 0 then begin

           Label3.Left := -200;

           Label3.Top := -200;

         end

         else if Randomvar = 1 then begin

           Label3.Left := 1000;

           Label3.Top := -200;

         end

         else if Randomvar = 2 then begin

           Label3.Left := -200;

           Label3.Top := 800;

         end

         else if Randomvar = 3 then begin

           Label3.Left := 1000;

           Label3.Top := 800;

         end; end;



     if (Label1.Left > Label3.Left - Label1.Width) and (Label1.Left < Label3.Left + Label3.Width) and (Label1.Top > Label3.Top - Label1.Height) and (Label1.Top < Label3.Top + Label3.Height) then

       begin                                                                   // Denne blir sann hvis fienden treffer deg

         Label3.Visible := False;                                              // Da blir fienden borte, dette var fordi ellers kom det opp en "bug" på min skjerm

         Showmessage('Dine poeng ble ' + inttostr(PointsCounter) + '!');       // Poengsummen din kommer opp

         SetScreenResolution(OldWidth, OldHeight);                             // Skjerminstillingene blir satt til det du hadde før

         Application.Terminate;                                                // Spillet avsluttes

       end;

end;



procedure TForm1.Timer3Timer(Sender: TObject);           // Dette er en timer over fienden. 10 er hastigheten (hvor mange pixler den beveger seg omgangen).

begin

     if Label1.Top < Label3.Top then begin

       Label3.Top := Label3.Top - 10; end

     else if Label1.Top > Label3.Top then begin

       Label3.Top := Label3.Top + 10; end;

     if Label1.Left < Label3.Left then begin

       Label3.Left := Label3.Left - 10; end

     else if Label1.Left > Label3.Left then begin

       Label3.Left := Label3.Left + 10; end;

end;



procedure TForm1.Shoot;  // Dette skjer altså hver gang du skyter

begin

   if CanShoot = True then begin        // Først skjekker den om du kan skyte. Det kan du ikke hvis ett skudd er allerede på skjermen

      ShootDirection := MoveDirection;  // Så sørger den for at du skyter i den retningen som du beveger deg i.

      Label2.Visible := True;

      Label2.Top := Label1.Top + round((Label1.Height-Label2.Height)/2); // Her setter jeg høyden på skuddet at den skal være midt på romskipet. Pugg den formelen fordi den får du bruk for masse

      CanShoot := False;                // Nå stiller jeg slik at du ikke kan skyte mer.

        if (ShootDirection = 'Up') or (ShootDirection = 'Down') then begin

           Label2.Left := Label1.Left + round((Label1.Width-Label2.Width)/2); // Her setter jeg bredden på skuddet at den skal være midt på romskipet. Samme som den over, bare at her er det bredde istedenfor bredde

          end

        else if ShootDirection = 'Left' then begin

           Label2.Left := Label1.Left;

          end

        else if ShootDirection = 'Right' then begin

           Label2.Left := Label1.Left + Label1.Width;

          end;

    end;

end;

end.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...