IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

3 страниц V < 1 2 3  
 Ответить  Открыть новую тему 
> Object pascal, Какую тему выбрать?
cooler
сообщение 30.10.2007 18:51
Сообщение #41


Бывалый
***

Группа: Пользователи
Сообщений: 178
Пол: Мужской

Репутация: -  0  +


Вот кое-что решил взять:
Можно сделать, чтобы во время матча(до матча) можно было менять стратегию на игру.
Например, атакующая и защищающаяся.Если по ходу матча команда забивает гол=> защищаемся и
у команды соперника меньше шансов забить гол.
У меня даже уже есть мысли по реализации этих методов.

Имеем: объект TeamStrategy(метод play), у него 2 наследника: Attacktrategy(метод play)
и DefendStrategy(метод play)
см.рис.
Отсюда полиморфизм: для разных стратегий - разный play.

Выскажите пожалуйста своё мнение.Помогите хоть немного с реализацией(хоть для начала
описание)
Play будет виртуальным??



Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 31.10.2007 14:18
Сообщение #42


Гость






Цитата
Play будет виртуальным??
Да, в этом случае Play должен быть виртуальным, иначе наследование теряет смысл... А насчет реализации... Приходит в голову вот такой вариант использования:

type
PStrategy = ^TStrategy;
TStrategy = object
constructor init;
destructor done; virtual;

procedure Play; virtual;
end;

PTAttackStrategy = ^TAttackStrategy;
TAttackStrategy = object(TStrategy)
constructor init;
procedure Play; virtual;
end;
PTDefendStrategy = ^TDefendStrategy;
TDefendStrategy = object(TStrategy)
constructor init;
procedure Play; virtual;
end;


TTeam = object
{ ну, тут что-то что у тебя уже было - игроки и т.д... }

constructor init;
destructor done;

procedure SetStrategy(s: PStrategy);
procedure Run;
private
str: PStrategy;
end;

constructor TStrategy.init;
begin end;
destructor TStrategy.done;
begin end;
procedure TStrategy.Play;
begin end;

constructor TAttackStrategy.init;
begin inherited init; end;
procedure TAttackStrategy.Play;
begin
writeln('attacking');
end;

constructor TDefendStrategy.init;
begin inherited init; end;
procedure TDefendStrategy.Play;
begin
writeln('defending');
end;


constructor TTeam.init;
begin
writeln('team initialization');
SetStrategy(new(PTDefendStrategy, init));
end;
destructor TTeam.done;
begin
if assigned(str) then dispose(str, done);
end;
procedure TTeam.SetStrategy(s: PStrategy);
begin
if assigned(str) then dispose(str, done);
str := s;
end;
procedure TTeam.Run;
begin
str^.Play;
SetStrategy(new(PTAttackStrategy, init));
str^.Play;
SetStrategy(new(PTDefendStrategy, init));
str^.Play;
end;


var
team: TTeam;

begin
team.init;
team.Run;
team.done;
end.


Используя это, ты сможешь на лету менять стратегию игры команды, для этого достаточно будет вызвать SetStrategy в любой момент...
 К началу страницы 
+ Ответить 
cooler
сообщение 31.10.2007 22:08
Сообщение #43


Бывалый
***

Группа: Пользователи
Сообщений: 178
Пол: Мужской

Репутация: -  0  +


Спасибо, volvo, за понимание.

Вот какая вещь уже долго мучаюсь. Ведь простая штука. Или вовсе отупел.

Как сделать, чтобы при выводе на экран каждый игрок писался на отдельной строке.
Куда сунуть приплюсовку координат yy? В цикл пытался - не фурычит.

procedure TFootballer.print_info;
var
a,b:string;
key:char;
begin
str(coeff,a);
str(age,b);
xx:=0;yy:=00;
outtextxy(xx,yy,s_position[code_position]);
outtextxy(xx+25,yy,name);
outtextxy(xx+135,yy,a);
outtextxy(xx+180,yy,'(age ');outtextxy(xx+215,yy,b);
outtextxy(xx+230,yy,')');
end;

procedure TTeam.test_print;
var i: integer;
begin
for i := 1 to players do
squad[i]^.print_info;
end;

procedure printer;
var j:integer;
begin
setbkcolor(1);
setcolor(15);cleardevice;
team.test_print;
readkey;
end;



P.S так как test_print не вызывается из основной программы, то я сделал printer.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 31.10.2007 22:35
Сообщение #44


Гость






Добавляешь параметр в метод print_info...
procedure TFootballer.print_info(i: integer);
var
a,b:string;
key:char; { <--- Вот это тебе зачем? }
begin
str(coeff,a);
str(age,b);
xx:=0; yy := pred(i) * textheight('W') + 5;
outtextxy(xx,yy,s_position[code_position]);
outtextxy(xx+25,yy,name);
outtextxy(xx+135,yy,a);
outtextxy(xx+180,yy,'(age ');outtextxy(xx+215,yy,b);
outtextxy(xx+230,yy,')');
end;

procedure TTeam.test_print;
var i: integer;
begin
for i := 1 to players do
squad[i]^.print_info(i);
end;
... и все в порядке...

А вообще - ты лучше сразу приведи код в порядок, иначе потом не разберешься в том, что делаешь... Не надо заранее описывать переменные, и пользоваться переменными, которые описаны выше по тексту программы. Вообще, в идеале, переменная должна иметь как можно меньшее "время жизни", для чего описываться она должна локально, как можно ближе к тому месту, где используется. Например:

var
i: integer;

type
T = object
j: integer;

procedure P;
end;

...
procedure T.P;
var k: integer;
begin
{
здесь использовать для локальных расчетов переменную i или j - это очень
плохой тон... Если результаты вычисления не должны использоваться в
других методах (это КРАЙНЕ нежелательно, потому что программа получается
запутанной и при изменении одного метода могут быть многочисленные
побочные эффекты), то пользуйся ЛОКАЛЬНОЙ переменной k
}
end;

(небольшое отклонение от темы, но я думаю оно будет полезно)

У тебя же вычисления "местного значения" (я про текущую позицию по X) почему-то производятся с использованием переменной, описания которой я не вижу. Посему можно предположить, что и в каком-нибудь другом месте у тебя будет соблазн использовать эту же переменную, а вдруг ты забудешь ее обнулить или еще как-то инициализировать? Результат - потратишь очень много времени на отладку, потому что в зависимости от порядка вызова методов будешь получать разные результаты...
 К началу страницы 
+ Ответить 
cooler
сообщение 7.11.2007 23:52
Сообщение #45


Бывалый
***

Группа: Пользователи
Сообщений: 178
Пол: Мужской

Репутация: -  0  +


Я вернулся. smile.gif

Да. Про локальные и глобальные переменные знаю. Учил, экзамен сдавал...
Просто привычка плохая: после того как чего-нибудь переделаю переменные, которые объявлял стереть забуду иль ещё что.

Решил с графикой не маяться и дальше в "тексте" делать. Меню только оставил.
Сделал процедуру, которая меняет игроков местами.
Стал делать процедуру расчета общего коэффициэнта команды, да вот какая штука:
переменная коэф. игрока у меня в классе Футболист, а процедура Команды.
Как мне переменную оттуда вытянуть, чтобы сложить и поделить?

Похоже для махинаций с тактиками и составами нужно будет коэффициэнты делить на коэф. вртаря,
защитника и т.д.
Потому что, если я вратаря поставлю в нападение, то ничего не изменится.
А при определении победителя сравнивать коэф. вратаря, защиты ... по отдельности.


P.S. Код -ESC- скажите.

Сообщение отредактировано: cooler - 8.11.2007 0:04
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Tan
сообщение 8.11.2007 1:30
Сообщение #46


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


Код ESC - 27


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
cooler
сообщение 8.11.2007 20:01
Сообщение #47


Бывалый
***

Группа: Пользователи
Сообщений: 178
Пол: Мужской

Репутация: -  0  +


Нужно, наверное,сделать функцию, которая будет инициализировать коэф.Но как?
Перемещение игроков внутри одной команды сделал.
Между командами как?
Здесь событиями нужно делать?
Например, у одной команды пользователь покупает игрока => отправляется событие,
в команду пользователя прибавляется игрок => тоже событие.
И после каждого изменения состава пересчитывать общий коэф. команды.
Помогите реализовать хоть основу.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 8.11.2007 20:37
Сообщение #48


Гость






Цитата
Помогите реализовать хоть основу.
Ты бы показал, что у тебя сейчас-то реализовано, а то ты каждый раз меняешь концепцию, за тобой не угонишься. Неохота собирать какой-то отвлеченный пример, лучше было бы добавить функциональность в уже существующую программу...
 К началу страницы 
+ Ответить 
cooler
сообщение 8.11.2007 20:53
Сообщение #49


Бывалый
***

Группа: Пользователи
Сообщений: 178
Пол: Мужской

Репутация: -  0  +


Выкладываю на ваш суд...
Понимаю, программа мягко говоря не лишена изъянов...
Да и переменные..
Но всё же


Прикрепленные файлы
Прикрепленный файл  PROG.TXT ( 1.12 килобайт ) Кол-во скачиваний: 160
Прикрепленный файл  MODUL.TXT ( 10.68 килобайт ) Кол-во скачиваний: 173
Прикрепленный файл  squad1.txt ( 2.18 килобайт ) Кол-во скачиваний: 181
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
cooler
сообщение 9.11.2007 19:40
Сообщение #50


Бывалый
***

Группа: Пользователи
Сообщений: 178
Пол: Мужской

Репутация: -  0  +


Просили, а что не смотрите?
Я конечно понимаю, что лень скачивать, но выкладывать всю программу в сообщение.... blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
cooler
сообщение 12.11.2007 21:03
Сообщение #51


Бывалый
***

Группа: Пользователи
Сообщений: 178
Пол: Мужской

Репутация: -  0  +


Извините за off,
но просто к сведению: cooler на форуме

http://vlady.uzelok.net/smf/index.php

и я - 2 разных человека, а то сегодня случайно забрёл и обнаружил nea.gif (кстати ник как-нибудь можно сменить, а то он мне уже самому не нравится)

А насчет программы, скоро попробую выложить что-нибудь новенькое

Сообщение отредактировано: cooler - 12.11.2007 21:08
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
cooler
сообщение 12.11.2007 21:42
Сообщение #52


Бывалый
***

Группа: Пользователи
Сообщений: 178
Пол: Мужской

Репутация: -  0  +


Может у кого-нибудь есть примеры как реализуются события?
Или просто какой-нибудь FAQ, а то вообще практически ничего не знаю
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
cooler
сообщение 13.11.2007 19:14
Сообщение #53


Бывалый
***

Группа: Пользователи
Сообщений: 178
Пол: Мужской

Репутация: -  0  +


Меню конечно нужно переделывать,ну это потом.

Вот что, когда я считаю общий коэф. команды проблема:
Нужно создать процедуру, которая рассчитывает общий коэф. команды.
И при изменении состава этот коэф. сразу же бы пересчитывался.
Т.е этот коэф. игрока для команды нужно инициализировать в этой процедуре.
То же самое, если коэф. игроков разделить на вратарский,защ......

Сам-то я эту процедуру напишу, только как инициализировать коэффициенты?


*****************
P.S. Эта тема по-тихонечку превращается в разговор с самим собой....
Со стороны кажется, наверное, странным
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
cooler
сообщение 13.11.2007 21:18
Сообщение #54


Бывалый
***

Группа: Пользователи
Сообщений: 178
Пол: Мужской

Репутация: -  0  +


Вас что так разочаровала моя программа????!!!!?
Почему ничего не пишете?
Может я глупые вопросы задаю?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
cooler
сообщение 14.11.2007 19:53
Сообщение #55


Бывалый
***

Группа: Пользователи
Сообщений: 178
Пол: Мужской

Репутация: -  0  +


7ое сообщение подряд и ни одного ответа...
Аууууууууу!??
В чём дело??
no1.gif unsure.gif mega_chok.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
striker
сообщение 14.11.2007 22:22
Сообщение #56


Пионер
**

Группа: Пользователи
Сообщений: 86
Пол: Мужской

Репутация: -  0  +


ty.
Вот тебе сообщение :-)

Как хоть что-нибудь будет работать выложи.


Сообщение отредактировано: striker - 14.11.2007 22:26
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
cooler
сообщение 14.11.2007 22:28
Сообщение #57


Бывалый
***

Группа: Пользователи
Сообщений: 178
Пол: Мужской

Репутация: -  0  +


Хотелось бы по делу...

Попытка - не пытка.
Вот конструктор Игрока, процедура для расчёта коэф. команды,процедура изменений
в составе.
Что нужно написать вместо вопросов, чтобы значение переменной к передавалось в процедуру
расчёта коэффициента?


constructor TFootballer.init(AName: string; AnAge: integer;
team, position: string; Ak: byte);
var
p: TPosition;
i: integer;

begin
inherited init(AName, AnAge);
for p := low(Tposition) to high(TPosition) do
if s_position[p] = position then begin
code_position := p;
end;

for i := 1 to max_teams do
if s_team[i] = team then begin
code_team := i;
end;
k := Ak;??????????????????????????????
end;


procedure Tteam.Koef;
var i,j:byte;
sumk,teamk:integer;
begin
?????????????????????
?????????????????????

for i:=1 to 11 do
sumk:=0;
sumk:=sumk+tk;
teamk:=trunc(sumk/11);
writeln('TEAM KOEF: ',sumk);
end;



procedure TTeam.changes;
var f,sec,secv: byte;
kk:char;
begin
repeat
write('First player: ');
readln(f);
write('Second player: ');
readln(sec);
clrscr;
secv:=70;
squad[secv]:=squad[f];
squad[f]:=squad[sec];
squad[sec]:=squad[secv];
team.koef;
team.squad_print;
write('Continue ? [Y/N] ');readln(kk);
writeln;
until(kk='n') or (kk='N');
end;



 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

3 страниц V < 1 2 3
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 21.07.2025 11:30
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"