короче народу мне и kashy нужно срочняка (желательно на завтра) такая прога: " нарисовать мышкой линию, чтоб потом мышкой ей можно было управлять. И отбивать шарик прыгающий в небольшом квадрате, причем чем ближе к краю линии тем больше угол отражения. ""!!!
Магарыч обеспечен полюбасу!!!скиньте или ссылку какуюнить или саму прогу или хоть чонить!!!!У кого есть МЗ скиньте на мз...
СРОЧНО нужна помошь!!!
Сообщений 1 страница 21 из 21
Поделиться12007-10-03 19:14:42
Поделиться22007-10-04 09:41:19
Понятно... короче надо искать исходники dxball'а ))
Поделиться32007-10-23 17:14:10
Пацаны ну помогите мля!!!! срочняк нужно!!!от этой херни зависит наше место в институте!!!!
Поделиться42007-10-23 17:46:21
ТЗ подробнее давай, мож чего и придумается:), а то в [0] ТЗ описана по принципу "шума много, а драки нет". Как препод конкретно сформулировал задачу? И кому сдавать Созанскому или Заярному?
ЗЫ. надо графу в программинге вспоминать а то моделирование прийдется наверно сдавать:(
Поделиться52007-10-23 17:57:55
ЗАярному!!! короче по форме летает шарик ! на какойто определенной высоте находиться ПАЛКА) которая двигаеться с помощью мышки в лево и право!!!и когда шарик попадает на эту палку то он отскакивает как от края формы!!!!
Воть...
Пацаны нид хелп!!!!!
Поделиться72007-10-23 23:52:21
http://www.delphisources.ru/files/sourc … inball.zip
Спасибо огромное! Правда она не запускается пишет нельзя запустить модуль. И я так понял что она содержит эти еб*ные квадраты которые разбивает шарик?
Поделиться82007-10-24 00:39:32
Запускается, на делфе 7.
квадраты перестают разбиваться если убрать стрчку в коде Bricks[i].Visible := FALSE;
Поделиться92007-10-24 00:40:29
В файле frmMain помещаем в комментарии вот так:
unit frmMain; interface uses Windows, Classes, Graphics, Controls, Forms, Dialogs, Menus, ExtCtrls, StdCtrls; type TBallDirection = (bdLeftUP, bdLeftDown, bdRightUp, bdRightDown); type TBrick = class(TShape) public FTimesToHit : integer; FNumberOfHits : integer; end; TBrickArray = Array[0..160] of TBrick; TBricks = TBrickArray; type TformMain = class(TForm) MainMenu1 : TMainMenu; PanelGame : TPanel; miGame : TMenuItem; miNew : TMenuItem; miPauze : TMenuItem; miN1 : TMenuItem; miExit : TMenuItem; miHelp: TMenuItem; ShapeUser : TShape; ShapeBall : TShape; miTakeItEasy : TMenuItem; miBringThemOn : TMenuItem; miHurtMe : TMenuItem; miFoolsPlay : TMenuItem; miKeys: TMenuItem; miAbout: TMenuItem; procedure miTakeItEasyClick(Sender: TObject); procedure miBringThemOnClick(Sender: TObject); procedure miHurtMeClick(Sender: TObject); procedure miFoolsPlayClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure miAboutClick(Sender: TObject); procedure miKeysClick(Sender: TObject); private BallDirection : TBallDirection; GameSpeed : integer; BallSpeed : integer; Difficulty : integer; Bricks : TBricks; procedure StartNewGame(aDifficulty: integer); procedure PlayABall; // procedure BuildTheWall; // procedure ShowDelphi; // procedure CheckTheWall(var NumberOfHits, HorizontalValue, VerticalValue: integer); public end; var formMain: TformMain; implementation {$R *.DFM} procedure TformMain.StartNewGame(aDifficulty: integer); var I : integer; begin BallDirection := bdRightUp; GameSpeed := 15; BallSpeed := aDifficulty; ShapeBall.SetBounds((PanelGame.Width - ShapeBall.Width) div 2, 229, ShapeBall.Width, ShapeBall.Height); { for I := 0 to 160 do begin Bricks[i].Visible := TRUE; Bricks[i].FNumberOfHits := 0; end;} PlayABall; end; {procedure TformMain.BuildTheWall; var I, RowCount, BrickTop, BrickLeft, BrickWidth : integer; begin BrickWidth := 20; RowCount := 0; BrickTop := 24;//0; BrickLeft := 0; if Bricks[0] = NIL then for I := 0 to 160 do begin Bricks[i] := TBrick.Create(Self); with Bricks[i] do begin Parent := PanelGame; FTimesToHit := 1; FNumberOfHits := 0; Width := BrickWidth; Height := 12; Brush.Color := clYellow; Shape := stRoundRect; BrickLeft := RowCount * BrickWidth + 1; SetBounds(BrickLeft, BrickTop, BrickWidth, 12); Inc(BrickLeft); Inc(RowCount); if RowCount >= 23 then begin RowCount := 0; BrickTop := BrickTop + Height; BrickLeft := 0; end; end; end; ShowDelphi; end; } {procedure TformMain.ShowDelphi; var I : integer; procedure DoSetting(aBrick: TBrick); begin aBrick.Brush.Color := clRed; aBrick.FTimesToHit := 2; aBrick.Update; end; begin end;} procedure TformMain.PlayABall; var BallIsOut : boolean; DummyRect : TRect; HorizontalValue, VerticalValue, NumberOfHits, CalculatedLeftPosOfTheBallWhenHittingTheTop : integer; begin HorizontalValue := 0; VerticalValue := 0; NumberOfHits := 0; BallIsOut := (ShapeBall.Top <= 0 - ShapeBall.Height) or (ShapeBall.Top >= (PanelGame.Height + ShapeBall.Height)); while not BallIsOut do begin Application.ProcessMessages; //Set the Pallet of the user to whatever he thinks is right... if GetKeyState(VK_LEFT) < 0 then if ShapeUser.Left > 0 then ShapeUser.SetBounds(ShapeUser.Left - 7, ShapeUser.Top, ShapeUser.Width, ShapeUser.Height); if GetKeyState(VK_RIGHT) < 0 then if ShapeUser.Left < (PanelGame.Width - ShapeUser.Width) then ShapeUser.SetBounds(ShapeUser.Left + 7, ShapeUser.Top, ShapeUser.Width, ShapeUser.Height); if GetKeyState(VK_END) < 0 then begin Application.ProcessMessages; // Application.Terminate; Halt; Application.ProcessMessages; end; //Find and correct the direction of the ball... if ShapeBall.Left <= 0 then begin if BallDirection = bdLeftUp then BallDirection := bdRightUp; if BallDirection = bdLeftDown then BallDirection := bdRightDown; end; if (ShapeBall.Left + ShapeBall.Width) >= PanelGame.Width then begin if BallDirection = bdRightUp then BallDirection := bdLeftUp; if BallDirection = bdRightDown then BallDirection := bdLeftDown; end; if ShapeBall.Top <= 0 then begin if BallDirection = bdLeftUp then BallDirection := bdLeftDown; if BallDirection = bdRightUp then BallDirection := bdRightDown; end; // CheckTheWall(NumberOfHits, HorizontalValue, VerticalValue); if InterSectRect(DummyRect, ShapeBall.BoundsRect, ShapeUser.BoundsRect) then begin //The ball is bouncing against the pallet of the User... inc(NumberOfHits); if BallDirection = bdRightDown then BallDirection := bdRightUp; if BallDirection = bdLeftDown then BallDirection := bdLeftUp; if (ShapeBall.Left + (ShapeBall.Width div 2)) < (ShapeUser.Left + (ShapeUser.Width div 3)) then begin HorizontalValue := 2; VerticalValue := 0; end; if ((ShapeBall.Left + (ShapeBall.Width div 2)) > (ShapeUser.Left + (ShapeUser.Width div 3))) and ((ShapeBall.Left + (ShapeBall.Width div 2)) < (ShapeUser.Left + ((ShapeUser.Width div 3) * 2))) then begin HorizontalValue := 0; VerticalValue := 0; end; if (ShapeBall.Left + (ShapeBall.Width div 2)) > (ShapeUser.Left + ((ShapeUser.Width div 3) * 2)) then begin HorizontalValue := 0; VerticalValue := 2; end; end; //Move the ball... if NumberOfHits > 30 then begin NumberOfHits := 0; inc(BallSpeed); end; case BallDirection of bdLeftUP : ShapeBall.SetBounds(ShapeBall.Left - (HorizontalValue + BallSpeed), ShapeBall.Top - (VerticalValue + BallSpeed), ShapeBall.Width, ShapeBall.Height); bdLeftDown : ShapeBall.SetBounds(ShapeBall.Left - (HorizontalValue + BallSpeed), ShapeBall.Top + (VerticalValue + BallSpeed), ShapeBall.Width, ShapeBall.Height); bdRightUp : ShapeBall.SetBounds(ShapeBall.Left + (HorizontalValue + BallSpeed), ShapeBall.Top - (VerticalValue + BallSpeed), ShapeBall.Width, ShapeBall.Height); bdRightDown : ShapeBall.SetBounds(ShapeBall.Left + (HorizontalValue + BallSpeed), ShapeBall.Top + (VerticalValue + BallSpeed), ShapeBall.Width, ShapeBall.Height); end; ShapeBall.UpDate; Sleep(GameSpeed); BallIsOut := (ShapeBall.Top >= (PanelGame.Height + ShapeBall.Height)); end; showmessage('Ball is out...'); end; {procedure TformMain.CheckTheWall(var NumberOfHits, HorizontalValue, VerticalValue: integer); var I : integer; DummyRect : TRect; Found : boolean; begin I := 0; Found := FALSE; while not Found and (I < 160) do begin if Bricks[i].Visible then if InterSectRect(DummyRect, ShapeBall.BoundsRect, Bricks[i].BoundsRect) then begin Found := TRUE; Inc(NumberOfHits); case BallDirection of bdRightUp : BallDirection := bdRightDown; bdLeftUp : BallDirection := bdLeftDown; bdRightDown : BallDirection := bdRightUp; bdLeftDown : BallDirection := bdLeftUp; end; if (ShapeBall.Left + (ShapeBall.Width div 2)) < (Bricks[i].Left + (Bricks[i].Width div 3)) then begin HorizontalValue := 2; VerticalValue := 0; end; if ((ShapeBall.Left + (ShapeBall.Width div 2)) > (Bricks[i].Left + (Bricks[i].Width div 3))) and ((ShapeBall.Left + (ShapeBall.Width div 2)) < (Bricks[i].Left + ((Bricks[i].Width div 3) * 2))) then begin HorizontalValue := 0; VerticalValue := 0; end; if (ShapeBall.Left + (ShapeBall.Width div 2)) > (Bricks[i].Left + ((Bricks[i].Width div 3) * 2)) then begin HorizontalValue := 0; VerticalValue := 2; end; Bricks[i].FNumberOfHits := Bricks[i].FNumberOfHits + 1; if Bricks[i].FNumberOfHits = Bricks[i].FTimesToHit then Bricks[i].Visible := FALSE; end; Inc(I); end; end; } procedure TformMain.miTakeItEasyClick(Sender: TObject); begin StartNewGame(1) end; procedure TformMain.miBringThemOnClick(Sender: TObject); begin StartNewGame(2) end; procedure TformMain.miHurtMeClick(Sender: TObject); begin StartNewGame(3); end; procedure TformMain.miFoolsPlayClick(Sender: TObject); begin StartNewGame(4); end; procedure TformMain.FormShow(Sender: TObject); begin // BuildTheWall; end; procedure TformMain.FormClose(Sender: TObject; var Action: TCloseAction); var I : integer; begin for I := 0 to 160 do try Bricks[i].Free; Bricks[i] := NIL; except end; end; procedure TformMain.miAboutClick(Sender: TObject); begin MessageBox(Handle, PChar(''Powered by kash & Patrik for Mr. Zaiarnai'), PChar('Use the source, Luke'), MB_OK); end; procedure TformMain.miKeysClick(Sender: TObject); begin MessageBox(Handle, PChar('Arrow keys : move your pallet' + #13 + 'End key : Quit game rapidly and remove from screen.'), PChar('How to play...'), MB_OK); end; end.
И всё работает как надо. Там наверное ещё много чего не нужного, что можно убрать. Я просто не вникал.
p.s. Подсвиров ждёт нас после практики.
Поделиться102007-10-24 14:29:14
хрень кокаето!!!господа програмисты скиньте плиз программу просто летающего шарика!!!! а я сам ее доделаю!!!!
и желательно еще ссылку киньте где моно паскаль скачать!!!
Поделиться112007-10-24 17:30:49
программу, в которой по форме перемещается круг и отскакивает от краев формы? прислать тебе? есть сомнения что ты доделаешь... и очень большие... если хочешь - стучись в аську расскажу если че не понятно как делать
Поделиться122007-10-24 20:33:01
)) я асю твою не знаю!!!! и во вторых! мои умственные способности ты недооцениваешь!!!и в 3 да именно эта прога
Поделиться132007-10-25 09:51:22
погоди... ты хочешь в паскале мышь подключать?
я просто к тому что просто сделать летающий шарик- это 5-10 минут. а все остальное побольше...
Отредактировано DarthCaedius (2007-10-25 09:52:13)
Поделиться142007-10-26 01:15:25
срочняк нужно!!!от этой херни зависит наше место в институте!!!!
ЗАярному!!!
Люди!!! Не смешите!! Заярному?!?!?!?
Не могу...))))
Поделиться152007-10-26 03:02:55
Люди!!! Не смешите!! Заярному?!?!?!?
Не могу...))))
Я думаю, что тебя никто и не пытался рассмешить.
хрень кокаето!!!
Почему хрень? Это то, что вы просили, всё работает. Если закомментировать всё как показанно то получается, как надо, только управление не мышкой а клавишами.
Я не конечно не программист, а учитель информатики, поэтому если меня за ниже приведённый код будут хаять и говорить что кодер из меня некудышный, я с вами спорить не буду. Но это то что попоросили:
скиньте плиз программу просто летающего шарика!!!!
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Timer1: TTimer; procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var x1,y1,x2,y2,h1,h2:integer; {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); begin Form1.Repaint; x1:=x1+h1; y1:=y1+h2; x2:=x2+h1; y2:=y2+h2; Form1.Canvas.Ellipse(x1,y1,x2,y2); Form1.Canvas.Brush.Color:=clred; //Условия отражения //Отражение от нижней границы if y2=Form1.ClientHeight then h2:=-h2; //Отражение от правой границы if x2=Form1.ClientWidth then h1:=-h1; //Отражение от верхней границы if y1=0 then h2:=abs(h2); //Отражение от левой границы if x1=0 then h1:=abs(h1); end; procedure TForm1.FormCreate(Sender: TObject); begin //Начальные координаты x1:=0;y1:=0; x2:=20;y2:=20; //Шаг в пикселях h1:=1;h2:=1; Form1.Timer1.Enabled:=true end; end.
Тут всё просто, только я думаю что это мало поможет. т.к. товарищ Заярный, будет вас просить всё реализовывать через классы, и реализация отскакивания шарика будет проще чем тут, но перед этим, надо будет описать класс точки и класс круга и все их методы.
А потом только делать всё что надо. Но просили именно отскакивание шарика, вот я вам и кинул.
Поделиться162007-10-26 09:00:28
мля сучий инет!!!Неработает когда надо!!!!
Лапочка и чо тут смешного?!?!или Заярный не препод?
Поделиться172007-11-08 20:08:15
Ну вот собственно то, что вам надо. Комменты до конца не расставил(может некоторые неверные), можете доплнить или поправить.
unit Krug; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TPosition = class(TObject) //Класс позиции, родитель TObject constructor CreateXY(IntX,IntY : Longint); //Конструтор класса с двумя параметрами позиции function GetX : longint; // Функции получения координат, они возвращают значение типа longint function GetY : longint; // значение должно присваиваться именам функций private Fx,Fy : longint; protected public published end; //тут заканчивается описание членов класса TPosition TPnt = class(TPosition) //Класс для точки является дочерним классом TPosition //это означает что это класс наследует все методы и //свойства родителя, ниже будут объявленны его собственные //члены function IsVis : boolean; //функция видимости точки, либо видно либо нет function GetColor : TColor;// функция возвращающая цвет procedure Show;//Показывает точку procedure Hide;//Прячет очку procedure Move(NewX,NewY : longint);// двигает точку в указанные,новые координаты Constructor CreatePXY(IntX,IntY : longint); //Конструктор для точки private FVis : boolean; //члены доступные только этому классу FColor : TColor; protected public published end; TCircle = class(TPnt) //Класс круга constructor CreateC(IntX, IntY, R: LongInt);//Конструктор для круга // IntX, IntY, - координаты центра // R=радиус function GetR: LongInt;//возвращает радиус круга procedure Show;//Показать круг procedure Hide;//спрятать круг procedure Move(NewX, NewY :LongInt); //передвигает центр круга в заданную точку private FR : LongInt; protected public published end; TForm1 = class(TForm) Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } Pos:TPosition; Color1:TColor; Pnt:TPnt; Crc : TCircle; i,j,NTX,NTY,R:integer; end; var Form1: TForm1; implementation uses Unit2; {$R *.dfm} //======= Раздел реализации методов и функций классов======== //Класс TPosition function TPosition.GetX : longint; begin GetX:= self.Fx; end; function TPosition.GetY : longint; begin GetY:= self.Fy; end; constructor TPosition.CreateXY(IntX,IntY : longint); begin inherited Create; // конструктор родителя Fx:=IntX; Fy:=IntY; end; //Класс TPoint Constructor TPnt.CreatePXY(IntX,IntY : longint); begin inherited CreateXY(IntX,IntY); ////тут вызывается конструктор TPosition FColor :=$fff000; //Цвет по умолчанию end; function TPnt.IsVis : boolean; begin IsVis:=FVis; end; function TPnt.GetColor : TColor; begin GetColor:=FColor; end; procedure TPnt.Show; var x : integer;CurCol:TColor; begin x:=-1; if (GetX<0) then exit; if (self.GetX = 0) then x:=1; CurCol := Form1.Canvas.Pen.Color; //Переменной присваиватеся текущий цвет формы Form1.Canvas.Pen.Color:= GetColor; FVis:=true; Form1.Canvas.MoveTo(self.GetX+x,self.GetY);//Виртуальный маркер устанавливается в //точку сдвинутую вправо по оси Х на 1 пЫксель Form1.Canvas.LineTo(self.GetX,self.GetY);// Проводится пряма из виртуального маркера в эту точку // в данном случае это будет просто точка Form1.Canvas.Pen.Color:=CurCol; end; procedure TPnt.Hide; var x : integer;CurCol:TColor; begin x:=-1; if (GetX<0) then exit; if (self.GetX = 0) then x:=1; CurCol := Form1.Canvas.Pen.Color; //Переменной присваиватеся текущий цвет формы Form1.Canvas.Pen.Color:= Form1.Canvas.Brush.Color; FVis:=false; Form1.Canvas.MoveTo(self.GetX+x,self.GetY); Form1.Canvas.LineTo(self.GetX,self.GetY); Form1.Canvas.Pen.Color:=CurCol; //тут делается тоже самое, только нарисованная точка отрисовывается с цветом заливки, цветом формы, // но это можно изменить end; procedure TPnt.Move(NewX, NewY : longint); begin Hide; //прячется старая точка self.Fx:=NewX; //переменным класса присваюватся новые значения self.Fy:=NewY; self.Show//отрисовывается новая точка end; constructor TCircle.CreateC(IntX, IntY, R: LongInt); begin inherited CreatePXY(IntX, IntY); self.FR := R; end; function TCircle.GetR: LongInt; begin GetR := FR; end; procedure TCircle.Show; var COld : TColor; begin COld := Form1.Canvas.Pen.Color;//сохраняется текущий цвет в переменную FVis := True; Form1.Canvas.Pen.Color := Self.GetColor; // присваивается lheujq wdtn Form1.Canvas.MoveTo( Self.GetX-FR, Self.GetY-FR); Form1.Canvas.Arc(Self.GetX-FR, Self.GetY-FR, Self.GetX+FR, Self.GetY+FR, 0, 0, 0, 0); Form1.Canvas.Pen.Color := COld; end; procedure TCircle.Hide; var COld : TColor; begin Cold := Form1.Canvas.Pen.Color; FVis := False; Form1.Canvas.Pen.Color := Form1.Canvas.Brush.Color ; Form1.Canvas.MoveTo( Self.GetX, Self.GetY); Form1.Canvas.Arc(Self.GetX-FR, Self.GetY-FR, Self.GetX+FR, Self.GetY+FR, 0, 0, 0, 0); Form1.Canvas.Pen.Color := Cold; end; procedure TCircle.Move(NewX, NewY :LongInt); begin Hide; self.Fx := NewX; self.Fy := NewY; self.Show; end; procedure TForm1.FormCreate(Sender: TObject); begin i:=1;j:=1; R:=40; Crc := TCircle.CreateC(60, 60, R); Crc.Show; NTX:=50;//Начальные точки NTY:=50; Timer1.Enabled:=true end; procedure TForm1.Timer1Timer(Sender: TObject); begin Crc.Move(NTX,NTY); NTX:=NTX+i; NTY:=NTY+j; if (NTX>Form1.ClientWidth-40) then i:=-i; if (NTY=R) then j:=-j; if (NTY>Form1.ClientHeight-40) then j:=-j; if (NTX=R) then i:=-i; end; end.
Поделиться182007-11-12 09:48:13
с меня пиво! или чай с беляшом)) (по желанию)!
биг спс...
Поделиться192007-11-12 11:17:58
Сдал??
Поделиться202007-11-12 23:02:12
с меня пиво! или чай с беляшом)) (по желанию)!
биг спс...
Пиво пьём массово)))
Поделиться212007-11-21 02:58:40
http://webfile.ru/1604782 - Треугольник серпинского
В программе шарика в процедурах
procedure TCircle.Hide;
procedure TCircle.Show;
ищешь вот эту строку
Form1.Canvas.Arc(Self.GetX-FR, Self.GetY-FR, Self.GetX+FR, Self.GetY+FR, 0, 0, 0, 0);
меняешь на
Form1.Canvas.Ellipse(Self.GetX-FR, Self.GetY-FR+20, Self.GetX+FR, Self.GetY+FR);
если к Self.GetY-FR+20 прибавляешь круг сплюснут относительно оси OY. будешь отнимать будет плющится относительно OX.
Обязательное условие - необходимо менять значения в обеих процедурах, иначе будет за собой хвостик таскать.