С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/30: Рейтинг темы: голосов - 30, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 19

Морской бой. Оба игрока компьютер

07.04.2015, 14:28. Показов 6704. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос состоит в том, как реализовать Морской бой, когда оба игрока компьютер.
С распараллеливанием через подключение MPI или эмуляцией выполнения параллельных процессов.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.04.2015, 14:28
Ответы с готовыми решениями:

Морской бой
Удалите: выбор стратегии, делать первый ход, самостоятельную расстановку кораблей. Позиции должны указываться русскими буквами от А до...

Морской бой
Игра "Морской бой".

Пишу морской бой
Пишу игру морской бой... На каком компоненте лучше всего использовать поле для кораблей? stringgrid, image или что-то другое?? ...

47
602 / 550 / 210
Регистрация: 24.01.2012
Сообщений: 1,352
07.04.2015, 14:39
А откуда там параллельные процессы? Это-же пошаговая игра.
0
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
07.04.2015, 14:55
Цитата Сообщение от edukra Посмотреть сообщение
А откуда там параллельные процессы? Это-же пошаговая игра.
Ты не понял. Он похоже про РЕАЛЬНЫЙ морской бой где оба игрока - компы
0
2 / 2 / 1
Регистрация: 15.08.2014
Сообщений: 170
07.04.2015, 15:01
Тоже была задумка. Сделать некоторое количество оружия. Пару персонажей. Написать им свойства и методы. И они должны сами развиваться, вооружаться и воевать. Интересно кто-кого. Тоже самое что и ваш морской бой. Но это по моему уже имитация искусственного интеллекта. И копать тут можно настолько глубоко, сколько у вас есть времени.
0
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
07.04.2015, 16:44
Цитата Сообщение от serg55 Посмотреть сообщение
Тоже была задумка. Сделать некоторое количество оружия. Пару персонажей. Написать им свойства и методы. И они должны сами развиваться, вооружаться и воевать. Интересно кто-кого. Тоже самое что и ваш морской бой. Но это по моему уже имитация искусственного интеллекта. И копать тут можно настолько глубоко, сколько у вас есть времени.
Я о более жёсткой штуке - РЕАЛЬНЫЕ железные корабли, самолеты ракеты рейл-ганы и т.д. Только вместо людей компы. Если не понял то именно к этому и катится планета.
0
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 19
07.04.2015, 20:47  [ТС]
Ладно, вопрос про распараллеливание отпадает.
Но первый остаётся, как сделать так, чтобы ПК играл с ПК?
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
07.04.2015, 22:17
если вы делаете класс, который играет за одну сторону, то в силу ООП, вы можете создать не только 2 но и целый миллион экземпляров класса, и все они будут по очереди ходить на любом заранее выбранном количестве досок

в чем вопрос-то?
параллельность тут ни к чему, пожалуй

Добавлено через 44 секунды
или вам надо, чтобы это было 2 компьютера через сеть?
0
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 19
08.04.2015, 09:56  [ТС]
Ну так, задание такое по курсовой. Морской бой, пк против пк, с распараллеливанием.
С распараллеливанием я разобрался, делаю через имитацию псевдопараллельной работы (потоки).
0
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
08.04.2015, 12:52
Цитата Сообщение от krapotkin Посмотреть сообщение
в чем вопрос-то?
параллельность тут ни к чему, пожалуй
В принципе можно по тем же правилам стрельбы запустить и в реалтайме, при этом потопленный/подбитый клеточка у противника -1 ствол, ну и для разнообоазия попадание в многоклеточный корабль - подбитый свтол выбывает, остальные в течении какого то времени не работают
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
08.04.2015, 14:00
просто игра комп-комп вся пройдет быстрее чем вы отпустите кнопку
тык - и все - результат...
1
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
08.04.2015, 14:58
Цитата Сообщение от krapotkin Посмотреть сообщение
просто игра комп-комп вся пройдет быстрее чем вы отпустите кнопку
тык - и все - результат...
Можно и пауз в процессе натыкать. ну или записать а потом просмотреть замедленно.
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
08.04.2015, 15:04
и все-таки - это в одной программе или два компа друг с другом общаются, второй вариант гораздо сложнее
0
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
08.04.2015, 15:57
Цитата Сообщение от krapotkin Посмотреть сообщение
и все-таки - это в одной программе или два компа друг с другом общаются, второй вариант гораздо сложнее
Запускаем два процесса на одном двухядерном проце - уже упрощение по сравнению с двумя компами так как общятсья можно через общую область памяти а не через сокеты. Теперь можно представить что проц таки одноядерный, ну а псевдомногозадачнось это уже проблемы операционки и проца - т.е. имеем что нам при таких раскладах без разницы сколько процов реально. Теперь еще одно упрощение - делаем два потока в одном процессе - разница с двумя процессами только в том что область памяти внутри одной проги что еще проще реализовать чем COMMON-область средствами ОС. теперь идем дальше - один поток вместо того чтобы считать сам ложит/читает из сокета, что вобщем то не так уж и сложно - фактически чтение/запись в файл. Имеем тоже самое только между двумя компами.
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
08.04.2015, 16:52
можно, конечно, и два потока через TCP связать, это не проблема вовсе. только нужно ли ?
два потока используют общее игровое поле и больше не надо ничего выдумывать
ждем когда ТС выкатит версию )
0
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 19
21.04.2015, 16:54  [ТС]
Не, тут обычный морской бой, где оба игрока ПК. Результат в 1 клик.
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
21.04.2015, 18:38
это все-таки не матрицу нарисовать...
у меня есть заготовка, но добить ее пока не было времени)
0
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 19
21.04.2015, 19:08  [ТС]
Нашёл неплохой код отрисовки поля.
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
Unit Unit1;
 
Interface
 
Uses
  Windows, Messages, Classes, Controls, Forms, Math;
 
Type
  TForm1 = Class(TForm)
    procedure FormPaint(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  End;
  TField=array[0..9,0..9] of integer;
 
Var
  Form1:                 TForm1;
  Field1,Field2:         TField;
  //Цвета
  Colors:                array[-3..3] of Cardinal=($FFFFFF, //Убитый враг
                                                   $FFFFFF, //Убитый свой
                                                   $C8C8C8, //Поле после выстрела
                                                   0,       //не используется
                                                   $C8C8C8, //Поле
                                                   $FF00,   //Свой
                                                   $C8C8C8);//Враг
 
Implementation
{$R *.dfm}
 
//Процедура отрисковки игрового поля
procedure Draw(_x,_y: integer; var Field: TField);
Var
  i,j,x,y: Integer;
Begin
  //Пройдем по массиву и отрисуем поля
  y:=_y;
  For i:=0 To 9 Do
  begin
    x:=_x;
    For j:=0 To 9 Do
    begin
      Form1.Canvas.Brush.Color:=Colors[Field[i,j]];
      Form1.Canvas.Rectangle(x,y,x+21,y+21);
      if Field[i,j]<0 then // Рисуем выстрелы
      Begin
        Form1.Canvas.MoveTo(x   ,y   );
        Form1.Canvas.LineTo(x+20,y+20);
        Form1.Canvas.MoveTo(x+20,y   );
        Form1.Canvas.LineTo(x   ,y+20);
      End;
      inc(x,20);
    end;
    inc(y,20);
  end;
end;
 
//Процедура заполнения игрового поля случайным образом
procedure Fill(var Field: TField);
var
  i,j,k,rand,x,y: integer;
  Ship,P,tmp:     set of byte;
begin
  randomize;
  P:=[];
  for i:=4 downto 1 do
    for j:=1 to 5-i do
    begin
      repeat
        rand:=random(10)*10+random(11-i);          //Выбираем случайное расположение корабля
        Ship:=[max(rand-11,0)..max(rand+i-10,0),
               max(rand-1 ,0)..min(rand+i   ,99),
               min(rand+9,99)..min(rand+i+10,99)];
      until P*Ship=[];                             //Пока не попадётся свободное место
      P:=P+[rand..rand+i-1];      //Добавляем корабль на поле
      if random(2)=0 then         //Поворачиваем поле по часовой стрелке с вероятностью 50%
      begin
        tmp:=[];
        for y:=0 to 9 do
          for x:=0 to 9 do
            if y*10+x in P then
              include(tmp,x*10+y);
        P:=tmp;
      end;
    end;
  for i:=99 downto 0 do
  begin
    Field[0,i]:=1;
    if i in P then
      Field[0,i]:=2+byte(@Field=@Field2);
  end;
end;
 
//отображение поля до выстрела
procedure TForm1.FormPaint(Sender: TObject);
begin
  Draw(0,0,Field1);
  Draw(300,0,Field2);
end;
 
//отображение клеток полей
procedure TForm1.FormCreate(Sender: TObject);
begin
  Fill(Field1);
  Fill(Field2);
end;
End.
Но как ПК и ПК реализовать -- моих знаний пока не хватает.
0
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
21.04.2015, 19:14
Цитата Сообщение от Sculptor8 Посмотреть сообщение
Но как ПК и ПК реализовать -- моих знаний пока не хватает.
Простой вариант - стреляешь рандомно. Соответсвенно куда стрельнул помечаешь, чтобы туда потом не стрелять. если попал - помечаешь не одну клетку а квадрат 3x3. В продвинутом варианте - стреляешь по какой либо системе (паттерну), выбирая рандомно не все поля а из паттерна. например в шахматном порядке обрабатываешь все подряд(выше вероятность быстро поразить большие корабли). когда паттерн закончился рандомно обрабатываешь то что осталось.

Добавлено через 1 минуту
Как вариант - игроки (люди). задают не ходы а паттерны, ну а комп уже по ним играет.
0
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
21.04.2015, 19:39
Sculptor8,
Задайся вопросом сначала расставить кораблики, один корабль должен быть размером 4 клетки, два корабля размером 3 клетки, и нарисуй их в пространстве,потом проще будет.
И это слыш чо, ты все условия соблюди! Корабль не должен касаться к кораблю и тд..
А потом уже и о ходе игры можно подумать.

Добавлено через 15 минут
Ну мое мнение начинать нужно с квадратного массива, там уже проверять и отрисовывать.
Отрисовать конечно не проблема, но вот как организовать перестановку в массиве куда более сложная задача...
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
22.04.2015, 00:00
вот в первом приближении
без контроля
только функционал
Миниатюры
Морской бой. Оба игрока компьютер  
Вложения
Тип файла: 7z SeaBattle.7z (2.07 Мб, 39 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.04.2015, 00:00
Помогаю со студенческими работами здесь

Delphi. Морской бой
Здравствуйте, форумчане. С делфи только начал знакомство, а тут сразу такое задание дали. Прошу помощи. По форуму искал, есть несколько игр...

Головоломка морской бой (нестандартная)
Нужна помощь в написании данной программы, В «акватории» расположите корабли: 4 однопалубных, 3 двухпалубных, 2 трёхпалубных и 1...

Морской бой. ПК против ПК. Delphi
Помогите, пожалуйста, с реализацией Морского боя, где оба игрока компьютер. Знаю, что будет происходить всё в один клик, но так и нужно. ...

Морской Бой по сети. Delphi7
Добрый день форумчане!) У меня вот небольшая проблемка, а именно: пишу морской бой по сети, использовал TClientSocket, TServerSocket. Так...

Морской-бой сетевая игра
Есть исходный код, EXE-файл. Нужно вставить форму. Срочно помогите


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru