Сказать что код ужасный значит ничего не сказать...
Проблема в следующем:
ты завёл две переменные:
ball:TBall;
point:Tpoint;
и они у тебя ни как не связаны т.е. ты меняешь координаты у point, а выводишь на канву ball т.к. это два совершенно разных объекта то изменение состояния объекта point не влияет на объект ball
Для решения твоей задачи тебе нужен только(!) один объект ball:TBall у этого объекта нужно менять координаты и выводить его на канву. Чтобы сделать доступными в нём твои методы из TPoint которые отвечают за перемещение объекта помести их после модификатора доступ public.
Студент, 1й курс комп. факультета. Задали сделать простенькую программу, чтобы прямо по форме летел шарик по законам физики (вправо — равномерно, вниз — равноускоренно). Сделал, все норм, все работает, но препод вдруг ошарашил: "А где объекты?" Оказалось, что в проге должны быть использованы такие понятия, как "наследование", "класс", "метод", "constructor", а я в этом ни бум-бум. Пытался читать учебник по Object Pascal'ю, переделал прогу, ввел 2 объекта, она компилируется, но после нажатия на кнопку, запускающую шарик, он так и не появляется.
Уверен, у знающего человека это займет 10 мин, на код, не имеющий прямого отношения к объектам, внимание обращать не надо, там все точно работает. Идея такая: есть абстрактный класс TPoint с 2мя свойствами — x и y — координаты центра шарика и обычный класс TBall, который наследуется из TPoint — сам шарик, добавлено еще 1 свойство — радиус. Далее, в implementation, расписаны 3 функции и 3 процедуры считывания и записи этих свойств, а также процедуры TBall.Draw и TBall.clear, соответсвенно, рисующие этот шарик (TBall.clear рисует цветом clbtnFace, т.е. стирает его)
Вот линк на проект: http://dump.ru/files/4/496759575/
Заранее большое-большое спасибо.
Re[2]: Помогите, пожалуйста, разобраться с объектами в Делфи
TPoint = class
private
X1:Integer;
Y1:Integer;
public
function xread:integer;
procedure xwrite(newx:integer);
function yread:integer;
procedure ywrite(newy:integer);
property x: integer read xread write xwrite;
property y: integer read yread write ywrite;
procedure Draw; virtual; abstract;
procedure Clear; virtual; abstract;
end;
TBall = class(TPoint)
private
public
procedure Draw; virtual;
procedure Clear; virtual;
end;
......
var
ball:TBall;
point:Tpoint;
.......
function TPoint.xread: integer;
begin
xread:=x1;
end;
function TPoint.yread: integer;
begin
yread:=y1;
end;
procedure TPoint.xwrite(newx:integer);
begin
x1:=newx
end;
procedure TPoint.ywrite(newy:integer);
begin
y1:=newy
end;
procedure TBall.clear;
begin
with MainForm,Canvas do
begin
brush.color:=clBtnFace;
pen.color:=clBtnFace;
ellipse(x1-15,y1-15,x1+15,y1+15);
end;
end;
procedure TBall.Draw;
begin
with MainForm,Canvas do
begin
brush.color:=clgreen;
pen.color:=clgreen;
ellipse(x1-15,y1-15,x1+15,y1+15);
end;
В результате всего этого я получаю неподвижный шарик в левом верхнем углу формы. Watch показывает
point20,174) и меняется со временем по формулам, как и должно быть
bal0,0) на протяжении всей работы программы.
Подскажите, пожалуйста, как в этом конкретном случае заставить Ball регулярно обновлять свои свойства x и y, которые, по идее, он наследует из Point.
Re[2]: Помогите, пожалуйста, разобраться с объектами в Делфи
TPoint = class
private
X1:Integer;
Y1:Integer;
public
function xread:integer;
procedure xwrite(newx:integer);
function yread:integer;
procedure ywrite(newy:integer);
property x: integer read xread write xwrite;
property y: integer read yread write ywrite;
procedure Draw; virtual; abstract;
procedure Clear; virtual; abstract;
end;
TBall = class(TPoint)
private
public
procedure Draw; virtual;
procedure Clear; virtual;
end;
......
var
ball:TBall;
point:Tpoint;
.......
function TPoint.xread: integer;
begin
xread:=x1;
end;
function TPoint.yread: integer;
begin
yread:=y1;
end;
procedure TPoint.xwrite(newx:integer);
begin
x1:=newx
end;
procedure TPoint.ywrite(newy:integer);
begin
y1:=newy
end;
procedure TBall.clear;
begin
with MainForm,Canvas do
begin
brush.color:=clBtnFace;
pen.color:=clBtnFace;
ellipse(x1-15,y1-15,x1+15,y1+15);
end;
end;
procedure TBall.Draw;
begin
with MainForm,Canvas do
begin
brush.color:=clgreen;
pen.color:=clgreen;
ellipse(x1-15,y1-15,x1+15,y1+15);
end;
end;
.......
point:=Tpoint.Create;
point.xwrite(xc);
point.ywrite(yc);
ball:=TBall.Create;
Ball.Draw;
......
point.xwrite(xc);
point.ywrite(yc);
Ball.clear;
{вычисление новых координат}
point.xwrite(xc);
point.ywrite(yc);
Ball.Draw;
В результате всего этого я получаю неподвижный шарик в левом верхнем углу формы. Watch показывает
point20,174) и меняется со временем по формулам, как и должно быть
bal0,0) на протяжении всей работы программы.
Подскажите, пожалуйста, как в этом конкретном случае заставить Ball регулярно обновлять свои свойства x и y, которые, по идее, он наследует из Point.
Re[3]: Помогите, пожалуйста, разобраться с объектами в Делфи