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

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

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

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


Бывалый
***

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

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


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

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

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



Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 в любой момент...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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) почему-то производятся с использованием переменной, описания которой я не вижу. Посему можно предположить, что и в каком-нибудь другом месте у тебя будет соблазн использовать эту же переменную, а вдруг ты забудешь ее обнулить или еще как-то инициализировать? Результат - потратишь очень много времени на отладку, потому что в зависимости от порядка вызова методов будешь получать разные результаты...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #45


Бывалый
***

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

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


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

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

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

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


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

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


Профи
****

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

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


Код ESC - 27


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


Бывалый
***

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

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


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


Гость






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


Бывалый
***

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

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


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


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


Бывалый
***

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

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


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


Бывалый
***

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

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


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

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

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

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

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


Бывалый
***

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

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


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


Бывалый
***

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

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


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

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

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


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


Бывалый
***

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

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


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


Бывалый
***

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

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


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


Пионер
**

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

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


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

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


Сообщение отредактировано: striker -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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

 





- Текстовая версия 27.11.2021 6:15
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name