commit 8387033441e81f1eca92ae79a23a950562ca2bf9 Author: Ulf Gebhardt Date: Wed Mar 9 21:45:36 2016 +0100 init commit diff --git a/Snake.cfg b/Snake.cfg new file mode 100644 index 0000000..f498d4b --- /dev/null +++ b/Snake.cfg @@ -0,0 +1,35 @@ +-$A8 +-$B- +-$C+ +-$D+ +-$E- +-$F- +-$G+ +-$H+ +-$I+ +-$J- +-$K- +-$L+ +-$M- +-$N+ +-$O+ +-$P+ +-$Q- +-$R- +-$S- +-$T- +-$U- +-$V+ +-$W- +-$X+ +-$YD +-$Z1 +-cg +-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +-H+ +-W+ +-M +-$M16384,1048576 +-K$00400000 +-LE"d:\programming\delphi\delphi6\Projects\Bpl" +-LN"d:\programming\delphi\delphi6\Projects\Bpl" diff --git a/Snake.dof b/Snake.dof new file mode 100644 index 0000000..18a993c --- /dev/null +++ b/Snake.dof @@ -0,0 +1,87 @@ +[FileVersion] +Version=6.0 +[Compiler] +A=8 +B=0 +C=1 +D=1 +E=0 +F=0 +G=1 +H=1 +I=1 +J=0 +K=0 +L=1 +M=0 +N=1 +O=1 +P=1 +Q=0 +R=0 +S=0 +T=0 +U=0 +V=1 +W=0 +X=1 +Y=1 +Z=1 +ShowHints=1 +ShowWarnings=1 +UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +[Linker] +MapFile=0 +OutputObjs=0 +ConsoleApp=1 +DebugInfo=0 +RemoteSymbols=0 +MinStackSize=16384 +MaxStackSize=1048576 +ImageBase=4194304 +ExeDescription= +[Directories] +OutputDir= +UnitOutputDir= +PackageDLLOutputDir= +PackageDCPOutputDir= +SearchPath= +Packages= +Conditionals= +DebugSourceDirs= +UsePackages=0 +[Parameters] +RunParams= +HostApplication= +Launcher= +UseLauncher=0 +DebugCWD= +[Language] +ActiveLang= +ProjectLang= +RootDir= +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1031 +CodePage=1252 +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= diff --git a/Snake.dpr b/Snake.dpr new file mode 100644 index 0000000..2f89ff8 --- /dev/null +++ b/Snake.dpr @@ -0,0 +1,13 @@ +program Snake; + +uses + Forms, + uMain in 'uMain.pas' {fMain}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TfMain, fMain); + Application.Run; +end. diff --git a/Snake.res b/Snake.res new file mode 100644 index 0000000..b111060 Binary files /dev/null and b/Snake.res differ diff --git a/uMain.dfm b/uMain.dfm new file mode 100644 index 0000000..16fd615 --- /dev/null +++ b/uMain.dfm @@ -0,0 +1,44 @@ +object fMain: TfMain + Left = 259 + Top = 212 + Width = 870 + Height = 640 + HorzScrollBar.Visible = False + VertScrollBar.Visible = False + Caption = 'Snake' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + Menu = MainMenu + OldCreateOrder = False + OnCreate = FormCreate + OnKeyDown = FormKeyDown + PixelsPerInch = 96 + TextHeight = 13 + object Label1: TLabel + Left = 0 + Top = 8 + Width = 37 + Height = 13 + Caption = 'Punkte:' + end + object timer: TTimer + Interval = 100 + OnTimer = timerTimer + Top = 48 + end + object MainMenu: TMainMenu + Left = 128 + Top = 112 + object mSnake: TMenuItem + Caption = 'Snake' + object Spielneustarten1: TMenuItem + Caption = 'Spiel neu starten' + OnClick = Spielneustarten1Click + end + end + end +end diff --git a/uMain.pas b/uMain.pas new file mode 100644 index 0000000..27251d2 --- /dev/null +++ b/uMain.pas @@ -0,0 +1,197 @@ +unit uMain; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, ExtCtrls, Menus, StdCtrls; + +type + TfMain = class(TForm) + timer: TTimer; + MainMenu: TMainMenu; + mSnake: TMenuItem; + Spielneustarten1: TMenuItem; + Label1: TLabel; + procedure FormCreate(Sender: TObject); + procedure StartGame; + procedure FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure timerTimer(Sender: TObject); + procedure Spielneustarten1Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + Points:Integer; + Snake: array of TShape; + Snakehor: Integer; + Snakever: Integer; + Dots: array of TShape; + LastPosX:Integer; + LastPosY:Integer; + end; + +var + fMain: TfMain; + +const + SnakeHead = clBlue; + +implementation + +{$R *.dfm} + +procedure TfMain.FormCreate(Sender: TObject); +begin + + Randomize; + + DoubleBuffered:=True; + + StartGame; + +end; + +procedure TfMain.StartGame; +var i:Integer; +begin + + Snakehor:= 1; + Snakever:= 0; + Points := 0; + for i:=0 to Length(Snake)-1 do Snake[i].Free; + SetLength(Snake,0); + for i:=0 to 2 do + begin + SetLength(Snake,Length(Snake)+1); + Snake[Length(Snake)-1]:=TShape.create(fMain); + Snake[Length(Snake)-1].Parent:=fMain; + Snake[Length(Snake)-1].Shape:=stRoundRect; + Snake[Length(Snake)-1].Width:=10; + Snake[Length(Snake)-1].Height:=10; + if i=0 then + begin + Snake[Length(Snake)-1].Top:=fMain.Height div 2; + Snake[Length(Snake)-1].Left:=fMain.Width div 2; + Snake[Length(Snake)-1].Brush.Color:=Snakehead; + end else + begin + Snake[Length(Snake)-1].Top:=Snake[Length(Snake)-2].Top; + Snake[Length(Snake)-1].Left:=Snake[Length(Snake)-2].Left-10; + end; + end; + + timer.Enabled:=True; + +end; + +procedure TfMain.FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + + if Key = vk_up then + begin + Snakever:= -1; + Snakehor:= 0; + end; + if Key = vk_down then + begin + Snakever:= 1; + Snakehor:= 0; + end; + if Key = vk_left then + begin + Snakever:= 0; + Snakehor:= -1; + end; + if Key = vk_right then + begin + Snakever:= 0; + Snakehor:= 1; + end; + +end; + +procedure TfMain.timerTimer(Sender: TObject); +var i,tempt,templ:Integer; +begin + + for i:=0 to length(Snake)-1 do + begin + if i=0 then + begin + LastPosY:=Snake[0].Top; + LastPosX:=Snake[0].Left; + Snake[0].Top:= Snake[0].Top + Snakever*Snake[0].Height; + Snake[0].Left:= Snake[0].Left + Snakehor*Snake[0].Width; + end else + begin + tempt:=Snake[i].Top; + templ:=Snake[i].Left; + Snake[i].Top:= LastPosY; + Snake[i].Left:= LastPosX; + LastPosY:=tempt; + LastPosX:=templ; + end; + end; + + snake[0].BringToFront; + + if Length(Dots)=0 then + begin + setlength(Dots,1); + Dots[Length(Dots)-1]:=TShape.create(fMain); + Dots[Length(Dots)-1].Parent:=fMain; + Dots[Length(Dots)-1].Shape:=stCircle; + Dots[Length(Dots)-1].Width:=7; + Dots[Length(Dots)-1].Height:=7; + Dots[Length(Dots)-1].Brush.Color:=clRed; + Dots[Length(Dots)-1].Top:=40+Random(fMain.Height-180); + Dots[Length(Dots)-1].Left:=40+Random(fMain.Width-80) + end; + + //kollision + + //Wände + if (Snake[0].left<0) then timer.Enabled:=False; + if (Snake[0].Left+Snake[0].Width*2>fMain.Width) then timer.Enabled:=False; + if (Snake[0].Top<10) then timer.Enabled:=False; + if (Snake[0].Top+Snake[0].Height+60>fMain.Height) then timer.Enabled:=False; + + //Self + for i:=1 to Length(Snake)-1 do + if (Snake[0].Top=Snake[i].Top) and (Snake[0].Left=Snake[i].Left) then timer.Enabled:=False; + + //Dot + if (Snake[0].Left+Snake[0].width>=Dots[0].Left) and (Snake[0].Left<=Dots[0].Left+Dots[0].Width) and (Snake[0].Top+Snake[0].Height>=Dots[0].Top) and (Snake[0].Top<=Dots[0].Top+Dots[0].Height) then + begin + Inc(Points,1000+random(1000)); + Dots[0].Free; + SetLength(Dots,0); + //Neues Schlangenglied + SetLength(Snake,Length(Snake)+1); + Snake[Length(Snake)-1]:=TShape.create(fMain); + Snake[Length(Snake)-1].Parent:=fMain; + Snake[Length(Snake)-1].Shape:=stRoundRect; + Snake[Length(Snake)-1].Width:=10; + Snake[Length(Snake)-1].Height:=10; + Snake[Length(Snake)-1].Top:=LastPosY; + Snake[Length(Snake)-1].Left:=LastPosX; + end; + + + Inc(Points,Random(2)); + + label1.Caption:='Punkte: '+inttostr(Points); + +end; + +procedure TfMain.Spielneustarten1Click(Sender: TObject); +begin + + StartGame; + +end; + +end.