Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2008, 00:01   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
Радость

Как можно записать этот код покороче:
Код:
IdUDPClient1.Send(#$5C#$70#$6C#$61#$79#$65#$72#$73#$5C); // ;\players\
s:=IdUDPClient1.ReceiveString(5000);
Memo5.Text:=Memo5.Text+s;
if (Memo5.Text='') then begin
Exit;
end;

s1:=TStringList.Create;
StrBreakApart(s,'\',s1);
if s1[7]='ping_0' then
case StrtoInt(a) of
1:begin
GVPlayers.AddRow(1);
GVPlayers.Cells[0, GVPlayers.RowCount-1]:=s1[2];
case StrToInt(s1[4]) of
0:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Alien' ;
1:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Marine' ;
2:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Predator' ;
3:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Corporate' ;
end;
GVPlayers.Cells[3, GVPlayers.RowCount-1]:=s1[8];
GVPlayers.Cells[4, GVPlayers.RowCount-1]:=s1[6];
end;

2:begin
GVPlayers.AddRow(1);
GVPlayers.Cells[0, GVPlayers.RowCount-1]:=s1[2];
case StrToInt(s1[4]) of
0:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Alien' ;
1:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Marine' ;
2:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Predator' ;
3:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Corporate' ;
end;
GVPlayers.Cells[3, GVPlayers.RowCount-1]:=s1[8];
GVPlayers.Cells[4, GVPlayers.RowCount-1]:=s1[6];

GVPlayers.AddRow(1);
GVPlayers.Cells[0, GVPlayers.RowCount-1]:=s1[10];
case StrToInt(s1[12]) of
0:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Alien' ;
1:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Marine' ;
2:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Predator' ;
3:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Corporate' ;
end;
GVPlayers.Cells[3, GVPlayers.RowCount-1]:=s1[16];
GVPlayers.Cells[4, GVPlayers.RowCount-1]:=s1[14];
end;

3:begin
GVPlayers.AddRow(1);
GVPlayers.Cells[0, GVPlayers.RowCount-1]:=s1[2];
case StrToInt(s1[4]) of
0:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Alien' ;
1:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Marine' ;
2:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Predator' ;
3:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Corporate' ;
end;
GVPlayers.Cells[3, GVPlayers.RowCount-1]:=s1[8];
GVPlayers.Cells[4, GVPlayers.RowCount-1]:=s1[6];

GVPlayers.AddRow(1);
GVPlayers.Cells[0, GVPlayers.RowCount-1]:=s1[10];
case StrToInt(s1[12]) of
0:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Alien' ;
1:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Marine' ;
2:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Predator' ;
3:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Corporate' ;
end;
GVPlayers.Cells[3, GVPlayers.RowCount-1]:=s1[16];
GVPlayers.Cells[4, GVPlayers.RowCount-1]:=s1[14];

GVPlayers.AddRow(1);
GVPlayers.Cells[0, GVPlayers.RowCount-1]:=s1[18];
case StrToInt(s1[20]) of
0:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Alien' ;
1:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Marine' ;
2:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Predator' ;
3:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Corporate' ;
end;
GVPlayers.Cells[3, GVPlayers.RowCount-1]:=s1[24];
GVPlayers.Cells[4, GVPlayers.RowCount-1]:=s1[22];
end;
И так до 20 игроков.

Последний раз редактировалось Stilet; 11.07.2008 в 11:40.
Shouldercannon вне форума Ответить с цитированием
Старый 11.07.2008, 00:47   #2
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

запиши так:
Код:
procaedure vibor1;
begin
GVPlayers.AddRow(1);   
GVPlayers.Cells[0, GVPlayers.RowCount-1]:=s1[2];   
case StrToInt(s1[4]) of   
0:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Alien' ;   
1:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Marine' ;   
2:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Predator' ;   
3:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Corporate' ;   
end;   
GVPlayers.Cells[3, GVPlayers.RowCount-1]:=s1[8];   
GVPlayers.Cells[4, GVPlayers.RowCount-1]:=s1[6];
end; 

 //название процедуры - практически любое, на твой вкус
procedure vibor2;
begin
GVPlayers.AddRow(1);   
GVPlayers.Cells[0, GVPlayers.RowCount-1]:=s1[10];   
case StrToInt(s1[12]) of   
0:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Alien' ;   
1:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Marine' ;   
2:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Predator' ;   
3:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Corporate' ;   
end;   
GVPlayers.Cells[3, GVPlayers.RowCount-1]:=s1[16];   
GVPlayers.Cells[4, GVPlayers.RowCount-1]:=s1[14];   
end;  

procedure vibor3; 
begin
GVPlayers.AddRow(1);   
GVPlayers.Cells[0, GVPlayers.RowCount-1]:=s1[18];   
case StrToInt(s1[20]) of   
0:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Alien' ;   
1:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Marine' ;   
2:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Predator' ;   
3:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Corporate' ;   
end;   
GVPlayers.Cells[3, GVPlayers.RowCount-1]:=s1[24];   
GVPlayers.Cells[4, GVPlayers.RowCount-1]:=s1[22];   
end;
потом в своем коде вместо всех этих строчек используй vibor1, vibor2, vibor3
Понятно объяснил?
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 11.07.2008, 11:22   #3
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Не совсем понятно как их потом подцепить (vibor1). Например с 1:begin, 2:begin, 3:begin понятно, они цепляются с помощью
s1:=TStringList.Create;
StrBreakApart(s,'\',s1);
if s1[7]='ping_0' then
case StrtoInt(a) of
1:begin...
Shouldercannon вне форума Ответить с цитированием
Старый 11.07.2008, 11:46   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вместо Этих твоих
Цитата:
case StrToInt(s1[<чето там>]) of
0:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Alien' ;
1:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Marine' ;
2:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Predator' ;
3:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Corporate' ;
end;
сделай так:
Код:
const a:array[1..4] of string=('Alien' ,'Marine','Predator','Corporate' );
...........
GVPlayers.Cells[2, GVPlayers.RowCount-1]:=a[StrToInt(s1[<Нужное тебе число>])]
И так везде по коду.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.07.2008, 12:31   #5
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
Восклицание

Что-то я совсем запутался. Сначала говорили про количество игроков потом перешли на расы. Суть проблемыв том, чтобы сделать код прикреплённый в текстовом файле *.doc (Кошмар.rar) короче и чтобы он не потерял свою функциональность. А то с таким сидеть не возможно к томуже их два и всё это обходится почти в 300000 символов.
Вложения
Тип файла: rar Кошмар.rar (9.4 Кб, 10 просмотров)
Shouldercannon вне форума Ответить с цитированием
Старый 11.07.2008, 13:20   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Shouldercannon
Ты мой пост прочитал внимательно?
Смысл в том чтобы избавить твою прогу от многочисленных case.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.07.2008, 14:01   #7
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

по-моему так:

Код:
procedure part1(N:integer);
begin
   GVPlayers.AddRow(1);
   GVPlayers.Cells[0, GVPlayers.RowCount-1]:=s1[N];
   case StrToInt(s1[N+2]) of
      0:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Alien' ;
      1:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Marine' ;
      2:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Predator' ;
      3:GVPlayers.Cells[2, GVPlayers.RowCount-1]:='Corporate' ;
   end;
   GVPlayers.Cells[3, GVPlayers.RowCount-1]:=s1[N+6];
   GVPlayers.Cells[4, GVPlayers.RowCount-1]:=s1[N+4];
end;

procedure part2(N1, N2:integer);
begin
   While N1 <= N2 do begin
      part1(N1);
      N1 := N1 + 8;
   end;
end; 

....
s1:=TStringList.Create;
StrBreakApart(s,'\',s1);
if s1[7]='ping_0' then
   N := StrtoInt(a);
   if N in [1..20] then part2(2,  2+(N-1)*8);
s1.Free;
....
Это весь код из архива
alexBlack вне форума Ответить с цитированием
Старый 11.07.2008, 14:31   #8
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
Радость

Всё получилось. Все спасибо за помощь.

Последний раз редактировалось Shouldercannon; 11.07.2008 в 22:46.
Shouldercannon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как укоротить string UnD)eaD)Snake Общие вопросы Delphi 6 04.09.2007 17:18