Модераторы: Snowy, Poseidon, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Морской бой 
:(
    Опции темы
IRQ
Дата 7.5.2006, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 7.5.2006

Репутация: нет
Всего: нет



Мне надо написать морской бой. Желательно с поддержкой игры по сети. Необходимо использовать потоки и синхронизацию. Подскажите, какие компоненты нужно использовать для подобного рода программ и как использовать потоки в данном случае. 2 игрока. Я не вижу прямо таких напрашивающихся решеений по использованию потоков. 
PM MAIL   Вверх
Poseidon
Дата 7.5.2006, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 4
Всего: 133



Цитата(IRQ @  7.5.2006,  15:16 Найти цитируемый пост)
Подскажите, какие компоненты нужно использовать для подобного рода программ 
 Когда-то писал морской бой, используя только TImage. В принципе, нечего больше и не надо.

Цитата(IRQ @  7.5.2006,  15:16 Найти цитируемый пост)
и как использовать потоки в данном случае.
 Как и обычное использование потоков. Хотя я не понимаю, зачем потоки использовать. Марской бой - он же, по сути, на random строится. И только при попадании нужно включать вычисления, что бы "ударить" по другой палубе (это при игре с ИИ). Единственное, это можно применить патоки при сонхронизации по сети, т.к. сеть может глючить, и тогда будет ощущение, что зависла прога.
 


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
IRQ
Дата 7.5.2006, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 7.5.2006

Репутация: нет
Всего: нет



Ну про потоки-как раз возможно при работе в сети. Но я всё равно не очень понимаю, как именно использовать. А компоненты я имел ввиду для работы в сети. Что надо? TTcpClient/TTcpServer? Где-то видел про Indy. Или может TClient Socket/TServerSocket. Но этих компонентов я почему-то не нашёл в палитре компонентов Delphi 7. Только если руками прописывать. В BCB 6 эти компоненты есть. 
PM MAIL   Вверх
Тьма
Дата 7.5.2006, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 22.1.2005
Где: Украина, Винница

Репутация: нет
Всего: 4



использовать потоки имеет смысл, если так стоит задание....... 


--------------------
Vir magni ingenii                 
PM MAIL ICQ   Вверх
Poseidon
Дата 7.5.2006, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 4
Всего: 133



Цитата(IRQ @  7.5.2006,  16:22 Найти цитируемый пост)
Но этих компонентов я почему-то не нашёл в палитре компонентов Delphi 7

Цитата
Идёшь в пункт меню Component | Install Packages.
Жмёшь кнопку Add.
Находишь в папке Borland\Delphi7\Bin файл dclsockets70.bpl, тыкаешь на него, нахимаешь "Open".
Нажимаешь ОК.
Радуешься тому, что на вкладке Internet появились два новых компонента - TClientSocket и TServerSocket.



Цитата(IRQ @  7.5.2006,  16:22 Найти цитируемый пост)
А компоненты я имел ввиду для работы в сети. Что надо?
Вот как раз TClientSocket и TServerSocket подойдет
 


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
IRQ
Дата 7.5.2006, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 7.5.2006

Репутация: нет
Всего: нет



Спасибо за информацию о добавлении компонентов smile Но хотел бы ещё узнать про потоки. Как их лучше использовать в этом Морском бое. Ведь играют только 2 игрока. 
PM MAIL   Вверх
Poseidon
Дата 7.5.2006, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 4
Всего: 133



Цитата(IRQ @  7.5.2006,  18:30 Найти цитируемый пост)
Как их лучше использовать в этом Морском бое.
 Зашить в отдельный поток только передачу по сети информацию о ходе.
 


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
IRQ
Дата 8.5.2006, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 7.5.2006

Репутация: нет
Всего: нет



А не подскажите, как юзать ClientSocket/ServerSocket. Я пробовал. Вроде всё соединятеся, но сообщения не отсылаются. 
PM MAIL   Вверх
Poseidon
Дата 8.5.2006, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 4
Всего: 133



Главное, не забывать, что сторона, каторая посылает - это ClientSocket, а сторона, каторая принимает - это ServerSocket. Т.е. в программе должен быть и ServerSocket (для приема) и ClientSocket (для посылки).

Вот пример посылки текста (всю информацию о ходе можно запихнуть в текстовую переменную.


Код
{соеденяемся при запуске программы}

procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1.Port := 1026; // порт можно указать любой, главное, что бы он был свободен.
ServerSocket1.Open;  // запускаем сервер
ClientSocket1.Port:= 1026; // указываем тот же порт, что и у сервера
ClientSocket1.Host:= '127.0.0.1'; // указываем хост или IP сервера. Для тестирования можно указать localhost (127.0.0.1)
ClientSocket1.Open;  // запускаем клиент
end;

{посылаем текст, каторый у нас в Edit1}
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Socket.SendText(Edit1.Text);
end;

{принимаем текст и записываем его в Edit2}
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Edit2.Text:= Socket.ReceiveText;
end;

{закрываем сокеты при выходе}
procedure TForm1.FormDestroy(Sender: TObject);
begin
ClientSocket1.Close;
ServerSocket1.Close;
end;
 


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
IRQ
Дата 9.5.2006, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 7.5.2006

Репутация: нет
Всего: нет



А. Теперь понятно. Просто я пытался юзать TServerSocket.ReceiveText. Но там этого не было smile Попробую так. А как юзать потоки. У меня есть идея как уже говорилось-на игрока по потоку. А синхронизировать как? Сделать например объект Ход и его синхронизировать? 
PM MAIL   Вверх
Poseidon
Дата 9.5.2006, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 4
Всего: 133



Цитата(IRQ @  9.5.2006,  01:27 Найти цитируемый пост)
А как юзать потоки.
 Я уже писал, запихни все работу с сетью в поток, что бы на случай сетевых глюков прога не зависала. Т.е. коннект и передачу сообщения лучше в поток. Так же не мешало бы прикрутить ответ на сообщения. Что-то вроди "сообщение получено". Так во многих сетевых чатах сделано и даже в ICQ-клиентах.
 


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Mechanic
Дата 9.5.2006, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 5.5.2006
Где: Kharkov, Ukraine

Репутация: нет
Всего: 7



В потоках можно сделать анимацию моря, колец от взрывов, мониторинг сети (юзер ушел, пришел), чат между игроками.  А если использовать Indy, так тот синхронный по определению, тут как раз без потоков не обойтись. Например, сидит такой Indy сокет в потоке, и просто ждет очередного пакета, а по приему бросает сообщение в основное окно об очередном событии, а то уж пущай реагирует.
(Свой "Морской бой" делал на TClientSocket, TServerSocket) 
--------------------
Tell me the extensions of the files You backup and I'll tell You who You are..  ©Mch  
PM   Вверх
IRQ
Дата 16.5.2006, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 7.5.2006

Репутация: нет
Всего: нет



Появилось ещё несколько вопросов.
1)Использование TClientSocket/TServerSocket упрошает и формализует работу по сети? Можно было бы использовать TTcpClient/TTcpServer? Или нет смысла. Достатчно первых.
2)Потоки. Я так подумал. На каждого игрока создаётся поток. И может получиться так, что игра идёт, а к серверу (тот, кто создал игру) начинает подключаться кто-то ещё. Игра втроём получается. Здесь видимо тоже надо использовать синхронизацию? Расскажите про эту штуку пожалуйста. Про всякие там синхронизации, приостановки потоков. 
PM MAIL   Вверх
Poseidon
Дата 16.5.2006, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 4
Всего: 133



Один топик - один вопрос!

Цитата(IRQ @  16.5.2006,  18:30 Найти цитируемый пост)
Можно было бы использовать TTcpClient/TTcpServer? Или нет смысла. Достатчно первых.
 Первых достаточно, зачем мудрить?

Цитата(IRQ @  16.5.2006,  18:30 Найти цитируемый пост)
И может получиться так, что игра идёт, а к серверу (тот, кто создал игру) начинает подключаться кто-то ещё.
 Может. И это нужно обрабатывать. Т.е. делать так, что бы к серверу мог подключится только один клиент.
 


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
VJVS
Дата 19.5.2006, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 19.5.2006

Репутация: нет
Всего: нет



Poseidon, как мне поставить TClientSocket/TServerSocket в Delphi7, я никак не могу найти!  smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0638 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.