Продолжаю написание игры футбольный менеджер.
Теперь на Delphi.
Т.к почти еще ничего не знаю надеюсь на вашу помощь.
Для начала: как сделать выбор 1 пункта из нескольких?
(при выборе в зависимости от пункта переменной присваивается значение)
Это могут быть "радио"- кнопки или выбор из списка.
Не могу разобраться как связать фому с unit'ом.
Набросайте пожалуйста как сделать так: см.рис
Вобщем пока проблемы интерфейса.
Ещё:
Как, например, задать background ?
Если есть можно дать ссылку на материал, где это описано.
Эскизы прикрепленных изображений
Поразбирался. Понял ,что задал глупые вопросы...
У меня несколько ListBox'ов.
В одном- запасные,во втором - вратарь,в третьем защита...
Сделал так: выделяю в одном игрока, во втором, нажимаю кнопку и они заменяются.
Как сделать чтобы больше 2х не выделялось игроков?
И как связать эти ListBox'ы с массивом моих игроков?
Чтобы массивы менялись вместе со списками.
Неужели каждый раз переприсваивать?
А как выводить значения переменных или текст что-то типа writeln?
Неужели трудно ответить. Я же не пишу: "Сделайте- ка мне игру"
Просто элементарные вопросы,а мне в помощь
Может тему нужно перенести в написание игр???
Не трудно )
По порядку... С первой порцией, насколько я поняла, уже разобрался.
Label1.Caption:='текст';
ShowMessage('текст');
Насчет ComboBox:
Понимаешь в чем дело,
У меня (на рис.) Слева запасные, а справа разделенный по группам основной состав.
Я сделал так: выделяешь одного и второго, нажимаешь заменить и они меняются.
Все бы хорошо, да только может выделиться больше двух, т.к разделены на группы
по позициям.
Про массив:
Я в listbox элементы из массива игроков записываю. А как после изменения сохранить состав?
Может есть другие варианты??
Эскизы прикрепленных изображений
теперь стало понятнее )))
можно сделать так: несколько радиобаттонов (типа "заменить вратаря", "заменить кто-там-еще-бывает") и в зависимости от них - доступность выбора в листбоксе.
то есть (сорри, проверить наличие свойств не могу - делфи не установлена, пишу по памяти) типа такого:
ListBox1.Enable:=RadioButton1.Checked;
Проект выложил, если это уже можно называть проектом.
Как сделать чтобы какая-нибудь процедура выполнялась сразу после открытия формы?
(А то я сейчас все к кнопкам привязываю)
Потом, как обновлять значения radiobutton.checked ? Цикл сделать?
Пока какое поле с самого начало выбрано, то и доступно.
Обязательно нужно заставочку. Как посоветуешь сделать?
Появляется форма, на ней рисунок (хотя бы небольшой) и название.
Через несколько секунд она закрывается и появляется следующая.
Как лучше рисунок там организовать?
P.S. Не в тему:
Парадокс. Хотел сделать, чтобы одна форма грузилась, нажимаешь
кнопку, она закрывается, открывается другая. В новом проекте
сделал ч/з св-во visible - работает. Вставляю эту вещь в свой
проект - грузятся обе формы.
Прикрепленные файлы
worked.rar ( 6.49 килобайт )
Кол-во скачиваний: 268
Я такую же прогу делал года 2 назад, но все было проще гораздо.
Всё, большое спасибо с тем что было по-тихоньку разобрался
massev: array[1..5] of string = ('забил гол',
'травма','желтая карточка','замена','красная карточка')
procedure TSimForm.Button2Click(Sender: TObject);
var i,r1,r11,r2,r22,usl,g1,g2:byte;
r:byte;
a:array[1..16] of integer;
begin
Listbox2.Items.Clear;
r:=whatteam;
Label1.Caption:=rus_team[1]+' - '+rus_team[2];
Label2.Caption:=Floattostr(0)+' : '+Floattostr(0);
for i:=1 to 10 do
begin
team.init2('spartak');
randomize;
r1:=random(11);
randomize;
r11:=random(11);
randomize;
r2:=random(5);
randomize;
r22:=random(5);
if (r1=0) or (r1=1) then r1:=7;
if r11=0 then exit;
if r2=0 then r2:=5;
if r22=0 then exit;
if r2=1 then
begin
g1:=g1+1;
Label2.Caption:=Floattostr(g1)+' : '+Floattostr(g2);
end;
Listbox2.Items.add('>>>'+squad[r1]^.name+' '+massev[r2]);
randomize;
usl:=random(2);
if usl=1 then
Listbox2.Items.add(' '+squad2[r11]^.name+' '+massev[r22]);
if r22=1 then
begin
g2:=g2+1;
Label2.Caption:=Floattostr(g1)+' : '+Floattostr(g2);
end;
end;
end;
Сорри за такой код в процедуре.
Сейчас сам сел спустя 2 недели, половину не понял.
Подскажите идейку как реализовать выше перечисленное.
Нужно таймер, наверное, поставить и останавливать его, потом запускать?
Гораздо проще реализовать записями.
А подробнее?
Приведи примерчик
Помогите пожалуйста реализовать след. вещь.
У меня симулируется в текстовом режиме матч.
(выводятся события матча из строкового массива в listbox)
Нужно чтобы они выводились с определенной задержкой. (sleep наверное не туда ставлю)
Пользователь должен нажать на кнопку команда, где между массивами игроков
(запасных и основных) он произведет замены.
НУЖНо чтобы после того как он вернется к матчу он продолжился, т.е
опять с задержкой выводились события матча, и в этот же listbox вывелись
те элементы массивов, которые поменял пользователь.
Т.е, например Иванов->Петров
Здесь наверное событийная обработка. Как её реализовать?
Т.к у меня происходят изменения в команде сложно, то можно в примере
просто 2 массива реализовать, а их потом под своё адаптирую.
Прикладываю "легкую" и оч.демо версию.
Чтобы симулировать матч - кнопка "след. игра"
Пожалуйста, помогите. Как это сделать?
Почему?...Почему никто ничего не пишет.
Напишите хоть почему не пишите
ты хочешь передавать управление?
то есть идет матч - пользователь, не останавливая его, меняет игроков - и матч продолжается?
Идет матч, пользователь нажимает на кнопку "пауза" /"стоп"(в матче), матч останавливается,
он заменяет игроков и возобновляет.
Хотя можно не останавливая, только матч будет идти не долго и пока пользователь прокопается в заменах
игра кончится
Мне хоть как-нибудь пока
P.S
Спасибо за отклик
я бы тогда сделала так примерно:
var massev: array[1..5] of string;
//обработчик срабатывания таймера
procedure TForm1.Timer1Timer(Sender: TObject);
var sobytie:byte;
begin
sobytie:=random(4)+1;
Listbox2.Items.Add(massev[sobytie]);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
massev[1]:='гол';
massev[2]:='желтая карточка';
//и так далее
Timer1.Enabled:=false; //это можно в свойствах компонента Timer1
Timer1.Interval:=2000; //это тоже. задержка между событиями в игре
end;
//новая игра
procedure TForm1.Button1Click(Sender: TObject);
begin
Listbox2.Items.Clear;
Timer1.Enabled:=true;
end;
//кнопка стоп
procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled:=false;
end;
Спасибо.
Я почти также уже сделал
Сам догадался.
У меня дальше будут вопросы - обращусь.
Спасибо большое
Вот пока маленький вопросик:
Можно ли вставлять в Delphi файлы .jpg
В учебнике написано можно - а на деле нельзя?
А то bmp много весят!
volvo, спасибо.
мисс граффити, вот ещё что:
События по таймеру выводятся.
А как сделать так чтобы голы выводились не случайно?
У меня есть процедура определения победителя.
На выходе 2 переменные, у 1й значение кол-ва голов, забитых первой командой, у 2й соответственно второй.
Как растянуть вывод этих голов на все время матча?
Т.е голы выводятся не случайно, а согласно значениям этих переменных.
И если таймер например срабатывает каждые 2 секунды, то к 90му(столько минут в матче) срабатыванию в ЛистБоксе уже должны быть выведены все забитые голы.
Нужно распределить все забитые голы между началом и концом матча?
Самое простое решение - ДПСЧ определить время, в которое будет забит каждый из голов. Желательно также проверить, что между вновь вычисленным голом и каждым из предыдущих интервал времени не меньше определенного, например, минута. Если меньше - еще раз вызвать ДПСЧ.
А как создать файл справки и привязать его к кнопке на форме?
Нет, а как windows справку там по-моему .chm файл
Чтобы со скринами
А то что ты предложил можешь подробнее написать?
Да, ещё не подскажете как привязать процедуру записи в файл к SaveDialog?
Как задать тип файла по умолчанию?
Там execute вроде бы, но что-то я никак не разберусь
Вопрос о сохранении в файл в силе. Он сейчас важнее
Спасибо
Ещё 1 глупый мини-вопрос
Как записать в текстовый файл информацию типа
точно так же )))
только вместо assign - assignfile
вместо close - closefile
вместо text - textfile
вроде все отличия...
Спасибо!
А можешь быстренько накинуть пару строк, чтобы создавался новый файл и записывалось как у меня написано
type ar1=array[1..10] of string;
ar2=array[1..10] of integer;
...
procedure InitArrays(var st: ar1; var num: ar2);
var i: integer;
begin
for i:=1 to 10 do
begin
st[i]:='ñòðîêà'+IntToStr(i);
num[i]:=i;
end;
end;
procedure NewFile(const st: ar1; const num: ar2);
var f: TextFile;
i: integer;
begin
AssignFile(f,'c:\res.txt');
//можно сделать проверку, удалось ли создать файл
rewrite(f);
for i:=1 to 10 do
writeln(f,st[i],' ',IntToStr(num[i]));
closeFile(f);
end;
procedure TForm1.Button1Click(Sender: TObject);
var st: ar1;
num: ar2;
begin
InitArrays(st,num);
NewFile(st,num);
end;
end.
Спасибо, только вот у меня одна неувязочка.
Может быть опять глупая ошибка, но все же.
Если я пишу в файл 1 строку по указанной ниже процедуре, т.е без цикла - всё нормально
А вот так выдаетя ошибка:
procedure Initarr(var st_name:ar1;var reit:ar2);
var a:byte;
begin
for a:=1 to 17 do
begin
st_name[a]:=squad[a]^.name;
reit[a]:=squad[a]^.koef_gk;
end;
end;
Здесь:
Ещё: как дописывать в созданный файл?
Т.е я один раз записал, как не стирать то, что уже было, а дописать прямо туда ещё.
Что здесь изменить:
procedure NewFile(const st: ar1; const num: ar2);
var f: TextFile;
i: integer;
begin
AssignFile(f,'c:\res.txt');
//можно сделать проверку, удалось ли создать файл
rewrite(f);
for i:=1 to 10 do
writeln(f,st[i],' ',IntToStr(num[i]));
closeFile(f);
end;
Скорее всего финальный вопрос в этой теме
Столкнулся с проблемой, при повторном запуске init_footballers , которая из файла считывает информацию и заносит в массив - появляется ошибка.
Насколько разобрался нужен деструктор. Помогите пожалуйста его написать
Описание на всякий случай :
TPeople = object
age: integer;
name: string;
constructor init(AName: string; AnAge: integer);
end;
PTFootballer = ^TFootballer;
TFootballer = object(TPeople)
code_position: TPosition;
code_team: integer;
k,koef_gk,koef_df,koef_md,koef_f: byte;
price:word;
acting: TPosition;
procedure print;
constructor init(AName: string; AnAge: integer;team, position: string;akoef_gk,akoef_df,akoef_md,akoef_f: byte);
{procedure print_info(i:integer); }
function Raschet:word;
end;
var
count_footballersk: integer;
footb_array:array[1..max_footballers] of PTFootballer;
players,i: integer;
namets:array[1..20] of string;
squad,squad2: array[1 .. 20] of PTFootballer;
{-------------------------------------------------------}
constructor TPeople.init(AName: string; AnAge: integer);
begin
age := AnAge;
name := AName;
end;
{-------------------------------------------------------}
constructor TFootballer.init(AName: string; AnAge: integer;team, position: string;akoef_gk,akoef_df,akoef_md,akoef_f: byte);
var
p: TPosition;
i: integer;
Aprice:word;
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; }
koef_gk := Akoef_gk;
koef_df := Akoef_df;
koef_md := Akoef_md;
koef_f := Akoef_f;
price:=raschet;
end;
{------------------------------------------------------------}
procedure init_footballers(const filename: string);
function _toint(s: string): integer;
var _result, _error: integer;
begin
val(s, _result, _error);
_toint := _result;
end;
function _copy(var s: string; count: integer): string;
begin
_copy := copy(s, 1, pred(count));
delete(s, 1, count);
end;
var
f: text;
s: string;
f_n, f_t, f_p: string; f_a,f_ccc, f_cgk, f_cdf, f_cmd, f_cf: integer;
begin
assign(f, filename); reset(f);
count_footballers := 0;
while not seekeof(f) do begin
inc(count_footballers);
readln(f, s);
f_n := _copy(s, pos(' ', s));
f_a := _toint(_copy(s, pos(' ', s)));
f_t := _copy(s, pos(' ', s));
f_p := _copy(s, pos(' ', s));
f_cgk := _toint(_copy(s, pos(' ', s)));
f_cdf := _toint(_copy(s, pos(' ', s)));
f_cmd := _toint(_copy(s, pos(' ', s)));
f_cf := _toint(s);
new(
footb_array[count_footballers],
init(f_n, f_a, f_t, f_p,f_cgk, f_cdf, f_cmd, f_cf)
);
end;
close(f);
end;
посоветуйте пожалуйста хорошую зоо клинику в москве