короче народу мне и 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.
Обязательное условие - необходимо менять значения в обеих процедурах, иначе будет за собой хвостик таскать.