From e0f1a16a8ba99143e139811dacaa9f2b985dbbc2 Mon Sep 17 00:00:00 2001 From: skalogryz Date: Tue, 26 Jan 2010 06:51:09 +0000 Subject: [PATCH] iphonelazext: cleanup the code of iarkanoid git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1143 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../examples/iArkanoid/gameengine.pas | 48 ++--- .../iphonelazext/examples/iArkanoid/iArk.lpi | 164 ++++++++++++++++-- .../iphonelazext/examples/iArkanoid/iArk.pas | 15 +- 3 files changed, 176 insertions(+), 51 deletions(-) diff --git a/components/iphonelazext/examples/iArkanoid/gameengine.pas b/components/iphonelazext/examples/iArkanoid/gameengine.pas index 405c455a0..05b71ac9c 100644 --- a/components/iphonelazext/examples/iArkanoid/gameengine.pas +++ b/components/iphonelazext/examples/iArkanoid/gameengine.pas @@ -29,7 +29,6 @@ type TBrick = record bounds : TRect; - hitRect : TRect; health : Integer; flash : Integer; end; @@ -39,20 +38,19 @@ type TArkanoid = class(TObject) private fPaddleX : single; - procedure SetPaddleX(const AValue: single); protected - procedure BoundsBack(const HitRect: TRect; var dx, dy: single); procedure BallMove(var move: TGameItem; atime: single); procedure ResetPaddle; + procedure SetPaddleX(const AValue: single); public bricks : array [0..99] of TBrick; brickCount : Integer; - balls : array [0..9] of TGameItem; - ballcount : Integer; - width : Integer; - height : Integer; - PaddleY : single; - PaddleW : single; + balls : array [0..9] of TGameItem; + ballcount : Integer; + width : Integer; + height : Integer; + PaddleY : single; + PaddleW : single; constructor Create(awidth, aheight: Integer); procedure InitBricks; @@ -95,15 +93,6 @@ begin fPaddleX := AValue; end; -procedure TArkanoid.BoundsBack(const HitRect: TRect; var dx, dy: single); -var - my : Integer; -begin - my := HitRect.Top + (HitRect.Bottom - HitRect.Top) div 2; - if abs(my - dy)>5 then dy := -dy - else dx := -dx; -end; - procedure InitMoveRecord(sx, sy, dx, dy: single; var r: TMoveRecord); var diff : single; @@ -114,7 +103,6 @@ begin r.dy:=dy; diff:=dx-sx; - //todo: if diff<>0 then begin r.k:=(dy-sy) / diff; if r.k<>0 then r.divk:=1/r.k @@ -200,11 +188,12 @@ var hitidx : Integer; hsides : THitSides; hitsides : THitSides; - hlen : single ; + hlen : single; hitlen : single; hpnt : TPoint; hitpnt : TPoint; mr : TMoveRecord; + br : TRect; begin with move do begin if sticked then Exit; @@ -252,23 +241,23 @@ begin dec(bricks[hitidx].health); end; - if (cy >= PaddleY-5) and (cx >= PaddleX) and (cx <= PaddleX + PaddleW) and (dy>0) then begin - t := (cx - PaddleX) / PaddleW; + br:=Bounds( Round(PaddleX), Round(PaddleY), Round(PaddleW), 2); + if HitRect(br, mr, hpnt, hsides) then begin + t := (hpnt.x - PaddleX) / PaddleW; t:=pi*(1-(t*0.8+0.1)); dx := cos(t)*ballVelocity; dy := -sin(t)*ballVelocity; - cy := PaddleY-5; + cy := hpnt.y; + cx := hpnt.x; end else if cy > height then begin ResetPaddle; Exit; end; - x:=cx; y:=cy; end; end; - procedure TArkanoid.ResetPaddle; var i : integer; @@ -297,14 +286,6 @@ begin height := aheight; end; -procedure MakeHitRect(const boundsRect: TRect; var hitRect: TRect); -begin - hitRect.left := boundsRect.left - 3; - hitRect.Top := boundsRect.top - 3; - hitRect.right := boundsRect.right + 3; - hitRect.bottom:= boundsRect.bottom+ 3; -end; - procedure TArkanoid.InitBricks; var i : Integer; @@ -319,7 +300,6 @@ begin for i:=0 to brickCount - 1 do begin bricks[i].health := random(4)+1; - MakeHitRect(bricks[i].bounds, bricks[i].hitRect); bricks[i].flash:=0; end; end; diff --git a/components/iphonelazext/examples/iArkanoid/iArk.lpi b/components/iphonelazext/examples/iArkanoid/iArk.lpi index e5f3ca252..64244c7e7 100644 --- a/components/iphonelazext/examples/iArkanoid/iArk.lpi +++ b/components/iphonelazext/examples/iArkanoid/iArk.lpi @@ -11,9 +11,10 @@ + <UseAppBundle Value="False"/> <UseXPManifest Value="True"/> <Icon Value="0"/> - <ActiveEditorIndexAtStart Value="0"/> + <ActiveEditorIndexAtStart Value="1"/> </General> <VersionInfo> <ProjectVersion Value=""/> @@ -35,27 +36,35 @@ <RunParams> <local> <FormatVersion Value="1"/> - <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> + <LaunchingApplication Use="True" PathPlusParams="'/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone Simulator.app/Contents/MacOS/iPhone Simulator'"/> </local> </RunParams> - <Units Count="3"> + <Units Count="5"> <Unit0> <Filename Value="iArk.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="iArk"/> - <CursorPos X="17" Y="96"/> - <TopLine Value="94"/> + <CursorPos X="29" Y="279"/> + <TopLine Value="262"/> <EditorIndex Value="0"/> - <UsageCount Value="20"/> + <UsageCount Value="30"/> + <Bookmarks Count="1"> + <Item0 X="1" Y="79" ID="2"/> + </Bookmarks> <Loaded Value="True"/> <SyntaxHighlighter Value="Delphi"/> </Unit0> <Unit1> <Filename Value="gameengine.pas"/> <UnitName Value="gameengine"/> - <CursorPos X="1" Y="1"/> - <TopLine Value="1"/> - <UsageCount Value="10"/> + <CursorPos X="1" Y="50"/> + <TopLine Value="35"/> + <EditorIndex Value="1"/> + <UsageCount Value="16"/> + <Bookmarks Count="1"> + <Item0 X="1" Y="197" ID="3"/> + </Bookmarks> + <Loaded Value="True"/> <SyntaxHighlighter Value="Delphi"/> </Unit1> <Unit2> @@ -66,10 +75,143 @@ <UnitName Value="project_iphone_options"/> <CursorPos X="17" Y="82"/> <TopLine Value="67"/> - <UsageCount Value="10"/> + <UsageCount Value="9"/> </Unit2> + <Unit3> + <Filename Value="../../../../fpc/rtl/objpas/sysutils/sysstrh.inc"/> + <CursorPos X="40" Y="33"/> + <TopLine Value="18"/> + <UsageCount Value="14"/> + </Unit3> + <Unit4> + <Filename Value="../../../../fpc/packages/cocoaint/src/uikit/UIScreen.inc"/> + <CursorPos X="14" Y="51"/> + <TopLine Value="37"/> + <UsageCount Value="10"/> + </Unit4> </Units> - <JumpHistory Count="0" HistoryIndex="-1"/> + <JumpHistory Count="30" HistoryIndex="29"> + <Position1> + <Filename Value="gameengine.pas"/> + <Caret Line="256" Column="19" TopLine="248"/> + </Position1> + <Position2> + <Filename Value="gameengine.pas"/> + <Caret Line="63" Column="14" TopLine="48"/> + </Position2> + <Position3> + <Filename Value="gameengine.pas"/> + <Caret Line="294" Column="1" TopLine="264"/> + </Position3> + <Position4> + <Filename Value="gameengine.pas"/> + <Caret Line="1" Column="1" TopLine="1"/> + </Position4> + <Position5> + <Filename Value="gameengine.pas"/> + <Caret Line="41" Column="13" TopLine="26"/> + </Position5> + <Position6> + <Filename Value="gameengine.pas"/> + <Caret Line="42" Column="25" TopLine="26"/> + </Position6> + <Position7> + <Filename Value="gameengine.pas"/> + <Caret Line="63" Column="60" TopLine="48"/> + </Position7> + <Position8> + <Filename Value="gameengine.pas"/> + <Caret Line="85" Column="31" TopLine="70"/> + </Position8> + <Position9> + <Filename Value="gameengine.pas"/> + <Caret Line="90" Column="17" TopLine="70"/> + </Position9> + <Position10> + <Filename Value="gameengine.pas"/> + <Caret Line="95" Column="11" TopLine="70"/> + </Position10> + <Position11> + <Filename Value="gameengine.pas"/> + <Caret Line="263" Column="19" TopLine="241"/> + </Position11> + <Position12> + <Filename Value="iArk.pas"/> + <Caret Line="177" Column="24" TopLine="172"/> + </Position12> + <Position13> + <Filename Value="iArk.pas"/> + <Caret Line="170" Column="27" TopLine="146"/> + </Position13> + <Position14> + <Filename Value="iArk.pas"/> + <Caret Line="173" Column="67" TopLine="158"/> + </Position14> + <Position15> + <Filename Value="gameengine.pas"/> + <Caret Line="256" Column="55" TopLine="242"/> + </Position15> + <Position16> + <Filename Value="gameengine.pas"/> + <Caret Line="1" Column="1" TopLine="1"/> + </Position16> + <Position17> + <Filename Value="gameengine.pas"/> + <Caret Line="44" Column="1" TopLine="29"/> + </Position17> + <Position18> + <Filename Value="gameengine.pas"/> + <Caret Line="293" Column="22" TopLine="273"/> + </Position18> + <Position19> + <Filename Value="gameengine.pas"/> + <Caret Line="1" Column="1" TopLine="1"/> + </Position19> + <Position20> + <Filename Value="gameengine.pas"/> + <Caret Line="293" Column="22" TopLine="278"/> + </Position20> + <Position21> + <Filename Value="gameengine.pas"/> + <Caret Line="315" Column="1" TopLine="300"/> + </Position21> + <Position22> + <Filename Value="gameengine.pas"/> + <Caret Line="1" Column="1" TopLine="1"/> + </Position22> + <Position23> + <Filename Value="gameengine.pas"/> + <Caret Line="293" Column="1" TopLine="278"/> + </Position23> + <Position24> + <Filename Value="iArk.pas"/> + <Caret Line="171" Column="34" TopLine="265"/> + </Position24> + <Position25> + <Filename Value="iArk.pas"/> + <Caret Line="1" Column="1" TopLine="1"/> + </Position25> + <Position26> + <Filename Value="iArk.pas"/> + <Caret Line="129" Column="1" TopLine="110"/> + </Position26> + <Position27> + <Filename Value="iArk.pas"/> + <Caret Line="1" Column="1" TopLine="1"/> + </Position27> + <Position28> + <Filename Value="gameengine.pas"/> + <Caret Line="1" Column="1" TopLine="1"/> + </Position28> + <Position29> + <Filename Value="gameengine.pas"/> + <Caret Line="46" Column="1" TopLine="34"/> + </Position29> + <Position30> + <Filename Value="gameengine.pas"/> + <Caret Line="51" Column="13" TopLine="31"/> + </Position30> + </JumpHistory> </ProjectOptions> <CompilerOptions> <Version Value="8"/> diff --git a/components/iphonelazext/examples/iArkanoid/iArk.pas b/components/iphonelazext/examples/iArkanoid/iArk.pas index bff7302ff..99b50638e 100644 --- a/components/iphonelazext/examples/iArkanoid/iArk.pas +++ b/components/iphonelazext/examples/iArkanoid/iArk.pas @@ -160,13 +160,18 @@ end; function isCoordNearPabble(game: TArkanoid; x, y: single; Border: Integer): Boolean; var - p : TPoint; - r : TRect; + p : TPoint; + r : TRect; + px,py : Integer; + pw : Integer; begin p.x := Round(x); p.y := Round(y); - r := Bounds(Round(game.PaddleX) - Border, Round(game.PaddleY) - Border, Round(game.PaddleW)+Border*2, PaddleHeight + Border*2); - Result := PtInRect(r, p); + px:=Round(game.PaddleX)-Border; + pw:=Round(game.PaddleW)+Border*2; + py:=Round(game.PaddleY)-Border; + r:=Rect(px, py, px+pw, Round(UIScreen.mainScreen.bounds.size.height)); + Result:=PtInRect(r, p); end; procedure MyMainWindow.touchesBegan_withEvent(touches: NSSetPointer; event: UIEvent); @@ -271,8 +276,6 @@ var pool : NSAutoreleasePool; retVal : Integer; -{$R iArk.res} - begin randomize; pool := NSAutoreleasePool(NSAutoreleasePool.alloc).init;