Re: Помогите, пожалуйста, разобраться с объектами в Делфи6
От: Closer  
Дата: 09.04.06 18:52
Оценка: 1 (1) +1
Здравствуйте, no_such_nick, Вы писали:

[skiped]

Сказать что код ужасный значит ничего не сказать...

Проблема в следующем:

ты завёл две переменные:
  ball:TBall;
  point:Tpoint;


и они у тебя ни как не связаны т.е. ты меняешь координаты у point, а выводишь на канву ball т.к. это два совершенно разных объекта то изменение состояния объекта point не влияет на объект ball

Для решения твоей задачи тебе нужен только(!) один объект ball:TBall у этого объекта нужно менять координаты и выводить его на канву. Чтобы сделать доступными в нём твои методы из TPoint которые отвечают за перемещение объекта помести их после модификатора доступ public.

[skiped]

public
   property x: integer read xread write xwrite;
   property y: integer read yread write ywrite;
     
[skiped]
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Мы были здесь. Но пора идти дальше. (с) Дуглас Коупленд, Рабы "Микрософт"
Помогите, пожалуйста, разобраться с объектами в Делфи6
От: no_such_nick  
Дата: 09.04.06 18:13
Оценка:
Студент, 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]: Помогите, пожалуйста, разобраться с объектами в Делфи
От: no_such_nick  
Дата: 10.04.06 16:39
Оценка:
На данный момент прога выглядит так:

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[2]: Помогите, пожалуйста, разобраться с объектами в Делфи
От: no_such_nick  
Дата: 10.04.06 16:40
Оценка:
На данный момент прога выглядит так:
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]: Помогите, пожалуйста, разобраться с объектами в Делфи
От: no_such_nick  
Дата: 10.04.06 16:51
Оценка:
всё, разобрался, проблема решена.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.