Игра Lines cross win32 wince

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Игра Lines cross win32 wince

Сообщение kurdt666 » 25.01.2008 03:17:37

Вот наваял игрушку сегодня за часик
Выглядит помоему неплохо играбельно для комуникаторов с тачскринами также при желании можно откомпилировать для win32
Tested on
Lazarus-0.9.24-fpc-2.2.0-20071114-win32 + Lazarus-0.9.24-fpc-2.2.0-20071105-cross-arm-wince-win32

Изображение

Вылажую с сорсами

скачать тут
kurdt666
новенький
 
Сообщения: 34
Зарегистрирован: 28.10.2007 19:46:49

Сообщение Bupyc » 25.01.2008 12:11:27

Ну что, похвально, молодец ... Сам сейчас пытаюсь клиент-серверный проект на Лазарусе под win ce сделать. Понимаю, насколько это нелегко.
Bupyc
постоялец
 
Сообщения: 137
Зарегистрирован: 29.08.2007 18:22:42

Сообщение kurdt666 » 25.01.2008 13:15:36

Bupyc
Удалось както получить доступ к интернету на WINCE ато у меня бузуспешно...
?
kurdt666
новенький
 
Сообщения: 34
Зарегистрирован: 28.10.2007 19:46:49

Сообщение Bupyc » 25.01.2008 14:23:11

Да, вполне. У меня наработана системная база на дельфях. Она основана на невизуальных компонентах VCL. Соответственно под фри паскалем используется библиотека FCL. В отличие от LCL, она под win ce достаточно стабильна (хотя и не без граблей :) ). Работа с сетью организована на самом низком уровне с использованием win api.
Bupyc
постоялец
 
Сообщения: 137
Зарегистрирован: 29.08.2007 18:22:42

Сообщение kurdt666 » 25.01.2008 16:35:14

Пожалуйста можешь показать рабочий пример загрузки гет странички с интернета для WINCE я перепробовал много чего ничего не вышло...
kurdt666
новенький
 
Сообщения: 34
Зарегистрирован: 28.10.2007 19:46:49

Сообщение Bupyc » 25.01.2008 17:07:10

Не, странички я не грузил, я организовывал подключение между клиентом и сервером по своему протоколу. Могу показать как на API подключение организовывать. Хотя такими примерами весь интернет кишит. :)
Bupyc
постоялец
 
Сообщения: 137
Зарегистрирован: 29.08.2007 18:22:42

Сообщение ev » 25.01.2008 18:30:42

Вот наваял игрушку сегодня за часик

имхо неплохо бы
1. сделать шарики покрасивше
2. сделать бинарники для вин, винце и всяких юниксов
ev
долгожитель
 
Сообщения: 1772
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Сообщение kurdt666 » 25.01.2008 18:50:02

ev
шарики покрасивше не умею рисоватья, под вынь32 сделаю ,под линукс не умею компилировать в лаазарусе
Увеличу размер шариков ато мелко слишком вышло...
Еще в планах сделать морской бой с компутером на выньсе ну и кросс конечноже...
но пока хочу реализовать идею одной программы пот пда,движутся дела очень медленно, игры имхо быстрее писать чем взаимодействовать с системой...

Bupyc
да дай пожалуйста примерчик
kurdt666
новенький
 
Сообщения: 34
Зарегистрирован: 28.10.2007 19:46:49

Сообщение ev » 25.01.2008 18:54:32

шарики покрасивше не умею рисоватья

не совсем правильное решение, но все же можно шарики скопировать откуда-нить ;)
ev
долгожитель
 
Сообщения: 1772
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Сообщение Padre_Mortius » 25.01.2008 20:45:39

Пересобрал проект под win32. Проект получился вполне работоспособный. Добавлю еще немного конструктивной критики.
1. избавить исходник от ненужных и пустых процедур и неиспользуемых переменных. размер упадет прилично
2. оформить исходник более читабельно
3. непонятно почему нельзя процедуры и функции типа DeleteBALLLine нельзя было описать в блоке public. Тогда бы не пришлось использовать обращения к компонентам через родителя, коими данные функции изобилуют.

Глубже не копал. тяжело было читать основную часть.

P.S. Самое сложное не написать программу, а поддерживать ее 8)
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение kurdt666 » 25.01.2008 21:01:57

Padre_Mortius
Саму игру писал в детстве на дельфе
Как было - зафигашил особо ничего не менял...
Всетаки игра была за час сделана.. конечно можно усовершенствовать... Флаг в руки сорсы есть... :D
kurdt666
новенький
 
Сообщения: 34
Зарегистрирован: 28.10.2007 19:46:49

Сообщение kurdt666 » 25.01.2008 21:44:23

Сделал версии вин и винсе также сделал игровое поле на весь екран кпк с большими крушочьками
Качать тутже архив обновлен
Изображение


скачать тут
kurdt666
новенький
 
Сообщения: 34
Зарегистрирован: 28.10.2007 19:46:49

Сообщение ev » 25.01.2008 23:06:19

эх.... шарики бы нормальные ;)
и не хватает анимации - насколько я помню шарик должен прыгать при активации и "бежать" к новому месту

скачал под винды...
какой то глюк периодически появляется - обновляется поля с черным мерцанием
ev
долгожитель
 
Сообщения: 1772
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Сообщение kurdt666 » 25.01.2008 23:17:18

Это форма перерисовывается нижняя...
kurdt666
новенький
 
Сообщения: 34
Зарегистрирован: 28.10.2007 19:46:49

Сообщение Bupyc » 29.01.2008 13:21:10

Итак, обещанный пример по работе с сетью

1. Где то в начале программы нужно произвести вызов

var
data : TWSAData;

.....

WSAStartup(257,data);

2. Подключение. Нужно использовать метод ConnectTo( ... ). Остальные методы необходимы для работы ConnectTo.

Код: Выделить всё
function TIntfModule_TCPIPSupp.ConnectTo(Address : String; Port : Integer) : TSocket;
var
  addr     : Integer;
  sockAddr : TSockAddrIn;
  n        : Integer;

begin
result := socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

if IsCorrectIP(Address) then addr := AddressToIP(Address)
                         else addr := ResolveAddress(Address);

sockAddr.sin_family := AF_INET;
sockAddr.sin_port   := htons(Port);

move(addr,
      sockAddr.sin_addr,
      SizeOf(Integer));

if (connect(result,sockAddr,sizeof(TSockAddrIn)) <> SOCKET_ERROR) then
begin
  n := 1;
  setsockopt(result,IPPROTO_TCP,TCP_NODELAY,@n,SizeOf(Integer));
end
  else
begin
  closesocket(result);
  result := INVALID_SOCKET;
end;
end;

function TIntfModule_TCPIPSupp.ProcessIpAddrStr(IpAddrStr : String) : String;
var
  i : Integer;

begin
result := IpAddrStr;

for i := 1 to Length(result) do
  if not (result[i] in ['0' .. '9']) then result[i] := ',';
end;

function TIntfModule_TCPIPSupp.IsCorrectIP(IpAddr : String) : Boolean;
var
  i,n,k,m : Integer;

begin
m := 0;

with TStringList.Create() do
begin
  try
   CommaText := ProcessIpAddrStr(IpAddr);

   if (Count = 4) then
   begin
    for i := 0 to 3 do
    begin
     val(Strings[i],n,k);

     if ((k <> 0) and (n > 0)) then Inc(m);
    end;
   end
    else
   begin
    m := 1;
   end;
  finally
   Free();
  end;
end;

result := m = 0;
end;

function TIntfModule_TCPIPSupp.ResolveAddress(AddressStr : String) : Integer;
var
  hostEnt : PHostEnt;
  pAddr   : PInteger;
  addrStr : String;

begin
result  := 0;
addrStr := AddressStr + #0;
hostEnt := gethostbyname(@addrStr[1]);

if (hostEnt <> NIL) then
begin
  pAddr  := PInteger(hostEnt^.h_addr_list^);
  result := pAddr^;
end;
end;

function TIntfModule_TCPIPSupp.AddressToIP(AddressStr : String) : Integer;
var
  addrBuf : array [0 .. 3] of Byte;
  i       : Integer;

begin
FillChar(addrBuf[0],SizeOf(addrBuf),0);

with TStringList.Create() do
begin
  try
   CommaText := ProcessIpAddrStr(AddressStr);

   for i := 0 to 3 do
    addrBuf[i] := StrToInt(Strings[i]);
  finally
   Free();
  end;
end;

move(addrBuf[0],
      result,
      SizeOf(Integer));
end;




3. Для чтения данных используется стандартная функция recv.
Пример вызова применительно к FPC:

recv(sock,@tmpBuf[0],SizeOf(tmpBuf),0);

где sock - результат функции ConnectTo.

В зависимости от логики программы, вызов recv может быть организован либо в отдельном, либо в основном потоке.

4. Для отправки данных используется функция send. Пример вызова:

send(sock,Buffer[0],BufferSize,0);

5. Закрытие соединения - closesocket(sock)
6. При закрытии приложения не забываем вызвать WSACleanup
Bupyc
постоялец
 
Сообщения: 137
Зарегистрирован: 29.08.2007 18:22:42

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23

Рейтинг@Mail.ru