Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
RobinStone
0 / 0 / 0
Регистрация: 18.05.2015
Сообщений: 42
#1

Управление сквозь сеть

09.02.2016, 18:40. Просмотров 275. Ответов 4
Метки нет (Все метки)

Добрый день уважаемые программисты (стки)!
Поясню задачу:

Хочу написать программу, которая сможет управлять компьютером через сеть. Точнее даже не так...
Пишу игру что-то вроде стратегии и, ну просто не могу как хочу, сделать игру по сети (только не локальной),
друг живёт в другом городе, а в моём случае - это как на другой планете... (дом, семья, дитё).
Эту игру задумали очень давно тогда ещё 48 кб - это было достаточно для всего на свете. Компы типа zx-spectrum и т.д.
В моей игре будет передаваться только текст, а сами программы уже будут решать что с ним делать.

Как это сделать (с наименьшей кровопотерей)? В сетях я не очень, но знаю что адреса динамические у компов обычных и с этим вся загвоздка, однако, как я понимаю, можно в начале заставить программу "сходить", скажем на mail.ru - посмотреть адресс который оставит другая такая же программа и связаться по нему...

Возможно ли такое? И если да, то как?

Буду рад любой помощи. Заранее - спасибо.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2016, 18:40
Ответы с готовыми решениями:

Мячик проходит сквозь ракетку компьютера
Я пишу игру "Пинг-понг" и у меня есть проблема. Во время игры ракетка...

Перенести управление стрелками на управление WASD
Мне нужно чтобы в игре вместо стрелок управление осуществлялось WASD и при этом...

Пройдет ли кирпич со сторонами x,y,z сквозь прямоугольное отверстие со сторонами r и s. Стороны отверстия долж
Пройдет ли кирпич со сторонами x,y,z сквозь прямоугольное отверстие со...

Необычная сеть и удалённое управление
Есть два варианта конфигурации, первый предпочтительней. 1. Комп на семерке...

Сквозь роутеры, Пройти сквозь последовательные роутеры
Всем доброго времени! Проблема в следующем имеются 4 модема (DSL) ASMi-51 для...

4
krapotkin
3344 / 2965 / 1027
Регистрация: 14.04.2014
Сообщений: 14,420
Записей в блоге: 14
09.02.2016, 21:14 #2
нет
нужен внешний сервер, на который обе программы будут ходить, и где будет лежать ваша "переписка"
0
mss
09.02.2016, 21:21
  #3

Не по теме:

где будет лежать ваша "переписка"
Ну для этого, положим, внешний сервер не обязателен.
А вот для того чтобы "снюхаться" через глоб.сеть в условиях дин.адресов с обеих сторон - тут , бесспорно, без минимум одного внешнего сервиса с выделенным адресом не обойтись.

0
northener
пофигист широкого профиля
3256 / 2308 / 629
Регистрация: 15.07.2013
Сообщений: 13,643
10.02.2016, 01:15 #4
Цитата Сообщение от RobinStone Посмотреть сообщение
Эту игру задумали очень давно
Какую, если не секрет?
0
NIKOLAYY
819 / 717 / 339
Регистрация: 22.09.2012
Сообщений: 4,994
10.02.2016, 16:59 #5
Цитата Сообщение от RobinStone Посмотреть сообщение
В моей игре будет передаваться только текст, а сами программы уже будут решать что с ним делать.
Ну дак так и делай.
Твоя программа передает какой то текстовый файл в виде массива на твой сервер по определенному адресу например:
http://myserver/igra.txt

Программа второго игрока получает твой файл igra.txt с таким текстом:

11110000
11110000
11110000
11110000
00002222
00002222
00002222
00002222

Далее программа просто отрисовывывает канву-шарики на текстовом поле беря значения символов из этого массива, смотри я тебе на скрине накидал пример на примере игры уголки!

Игра отрисовывывается из текста который грузится в массив! Можно сразу из текста рисовать не грузя его в массив!

Держи пример кода отрисовки из массива что накидал в программе!

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
const
  kletka_x = 8; //кол-во клеток
  kletka_y = 8;
  razm_x = 32; //размеры клеток
  razm_y = 32;
 
var
  Form1: TForm1;
  i, j: Integer; //цикл
  map: array[0..kletka_x - 1, 0..kletka_y - 1] of string;
  mr: TRect; //рект область для отрисовки
  nx, ny: Integer; //для вычисления ячеек
  zapom: string; //запомнить значение массива где взяли шарик
  zap_x, zap_y: Integer; //запомнить индексы массива куда отпустить
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  // размер имаги = размер клетки * количество клеток
  Image1.Width := razm_x * kletka_x;
  Image1.Height := razm_y * kletka_y;
 
  // заполним массив пустыми клетками (вернее 0- потом отрисуем)
  for j := 0 to 7 do
    for i := 0 to 7 do
    begin
      map[j, i] := IntToStr(0);
 
    end;
 
  // заполним массив красными шариками (вернее 1- потом отрисуем)
  for j := 0 to 3 do
    for i := 0 to 3 do
    begin
      map[j, i] := IntToStr(1);
 
    end;
 
  // заполним массив синими шариками (вернее 2- потом отрисуем)
  for j := 4 to 7 do
    for i := 4 to 7 do
    begin
      map[j, i] := IntToStr(2);
 
    end;
 
  // определение mr-рект области и отрисовка на канву поля шариков из значений массива
  for j := 0 to kletka_x - 1 do
    for i := 0 to kletka_y - 1 do
    begin
      mr := Rect(j * razm_x, i * razm_y,
        j * razm_x + razm_x, i * razm_y + razm_y);
 
      if map[j, i] = '0' then
        Image1.Canvas.StretchDraw(mr, Image2.Picture.Bitmap);
 
      if map[j, i] = '1' then
        Image1.Canvas.StretchDraw(mr, Image3.Picture.Bitmap);
 
      if map[j, i] = '2' then
        Image1.Canvas.StretchDraw(mr, Image4.Picture.Bitmap);
    end;
end;
 
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  // вычисление ячеек исходя из координат по X и Y
  nx := X div razm_x;
  ny := Y div razm_y;
  Caption := ' X = ' + IntToStr(nx) + ', Y = ' + IntToStr(ny);
 
  // показать над какой клеткой мышь
  if map[nx, ny] = '0' then
    Label1.Caption := 'Пустая клетка';
 
  if map[nx, ny] = '1' then
    Label1.Caption := 'Красный шарик';
 
  if map[nx, ny] = '2' then
    Label1.Caption := 'Синий шарик';
end;
 
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  //запоминаем в переменную из массива, где берем шарик
  zapom := map[nx, ny];
 
  //определим исходя из координат X и Y в какой ячейке взяли и запомним
  zap_x := X div razm_x;
  zap_y := Y div razm_y;
 
  // показать над какой клеткой мышь
  if map[nx, ny] = '0' then
    ListBox1.Items.Add('Взята пуст клетка x= ' + IntToStr(zap_x) + ', y= ' +
      IntToStr(zap_y));
 
  if map[nx, ny] = '1' then
    ListBox1.Items.Add('Взят красный шарик x= ' + IntToStr(zap_x) + ', y= ' +
      IntToStr(zap_y));
 
  if map[nx, ny] = '2' then
    ListBox1.Items.Add('Взят синий шарик x= ' + IntToStr(zap_x) + ', y= ' +
      IntToStr(zap_y));
 
  // ListBox1.Items.Add('Взят шарик '+ IntToStr(zap_x) + IntToStr(zap_y));
end;
 
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  // если попытка опустить в пустую клетку то то что запомнили
  // заносим в массив над отпущенной клеткой и тамгде взяли шарик ставим ноль
  if map[nx, ny] = '0' then
  begin
    map[nx, ny] := zapom;
    map[zap_x, zap_y] := '0';
  end;
 
  ListBox1.Items.Add('Отпущен в x= ' + IntToStr(nx) + ', y= ' + IntToStr(ny));
  ShowMessage(IntToStr(zap_x));
  ShowMessage(IntToStr(nx));
 
  if zap_x - nx > 1 then
  begin
    ShowMessage('Нетуда пошол влево!');
  end;
 
  if nx - zap_x > 1 then
  begin
    ShowMessage('Нетуда пошол вправо!');
  end;
 
  // определение mr-рект области и отрисовка на канву из значений массива
  // то есть отрисовка перемещенного шарика
  for j := 0 to kletka_x - 1 do
    for i := 0 to kletka_y - 1 do
    begin
      mr := Rect(j * razm_x, i * razm_y,
        j * razm_x + razm_x, i * razm_y + razm_y);
 
      if map[j, i] = '0' then
        Image1.Canvas.StretchDraw(mr, Image2.Picture.Bitmap);
 
      if map[j, i] = '1' then
        Image1.Canvas.StretchDraw(mr, Image3.Picture.Bitmap);
 
      if map[j, i] = '2' then
        Image1.Canvas.StretchDraw(mr, Image4.Picture.Bitmap);
    end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  // размер имаги = размер клетки * количество клеток
  Image1.Width := razm_x * kletka_x;
  Image1.Height := razm_y * kletka_y;
 
    Image1.Canvas.Font.Size :=10;
  // заполним массив на поле
  for j := 0 to kletka_x - 1 do
    for i := 0 to kletka_y - 1 do
    begin
      map[j, i] := map[j, i];
      Image1.Canvas.TextOut(i * razm_x + 10, j * razm_y + 10, map[j, i]);
    end;
 
end;
 
end.
Далее собираеш значения массива и отсылаеш их используя IdHTTP.
А лучше отсылаеш читать два файла и с массивом и второй файл с булевой переменной котороя определяет кто ходит.

Я бы сделал так:
Мой ход в игре уголки например синими, я сходил свою булеву переменную поставил в false, программно бы выделил в квадратик красный шарик, далее я ни чего сделать немогу пока не получу ответа от сервера.

Получаю ответ от второго игрока (переставил он фишку) как тока он переставил программа фиксирует это и шлет мне белева переменная стает равная true выделяется мой синий квадрат, я понимаю человек тот игрок сходил я получил от него массив, игра отрисовала из значний массива его ход, я вижу куда он сходил и делаю свой ход!

По мимо этого можно создать какой либо лог игры, я специально на форму поместил компонент лист-бокс.
0
Миниатюры
Управление сквозь сеть   Управление сквозь сеть  
10.02.2016, 16:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2016, 16:59

Управление генератором через сеть LAN
Программа управления генератором частот фирмы Rohde&Schwarz модель генератора:...

SPS 3, управление питанием через сеть.
Доброго времени суток всем! Cразу скажу, АДМИНЫ сори, если не там создал тему,...

Сквозь вселенную
Привет всем) Помогите пожалуйста с написанием лабы, очень выручите. "(Частицы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru