3. Функциональная модель решения задачи
Функциональная модель решения задачи представлены на рисунке 2.
Рисунок 2 – Функциональная модель решения задачи для функции BLOW
4. Программная реализация решения задачи
; открываем файл для чтения
(setq input_stream (open «d:\\field.txt»:direction:input))
; считываем поле противника
(setq field (read input_stream))
; закрываем файл
(close input_stream)
; количество кораблей
(setq user_ship 10)
; убиваем корабль
(defun set_missing_comp (lst i j ip jp)
(setq k (if (>= (- i 1) 0) (- i 1) i))
(setq l (if (>= (- j 1) 0) (- j 1) j))
(loop
(do
()
((or (> k (+ i 1)) (>= k 10)))
(do
()
((or (> l (+ j 1)) (>= l 10)))
(if (eql (nth l (nth k lst)) 1)
(progn
(setq k 10)
(return t)
)
)
(setq l (+ l 1))
)
(setq k (+ k 1))
)
(return nil)
)
(setq k (if (>= (- i 1) 0) (- i 1) i))
(setq l (if (>= (- j 1) 0) (- j 1) j))
(loop
(do
()
((or (> k (+ i 1)) (>= k 10)))
(do
()
((or (> l (+ j 1)) (>= l 10)))
(if (not (eql (nth l (nth k lst)) '*)) (setf (nth l (nth k lst)) '~))
(setq l (+ l 1))
)
(setq k (+ k 1))
)
(return nil)
)
t
)
; шагаем по направлению «креста»
(defun set_missing (lst i j ip jp)
(if (>= (- i 1) 0)
(if (and (/= (- i 1) ip) (eql (nth j (nth (- i 1) lst)) 1))
(set_missing lst (- i 1) j i j)
)
)
(if (>= (- j 1) 0)
(if (and (/= (- j 1) jp) (eql (nth (- j 1) (nth i lst)) 1))
(set_missing lst i (- j 1) i j)
)
)
(if (< (+ i 1) 10)
(if (and (/= (+ i 1) ip) (eql (nth j (nth (+ i 1) lst)) 1))
(set_missing lst (+ i 1) j i j)
)
)
(if (< (+ j 1) 10)
(if (and (/= (+ j 1) jp) (eql (nth (+ j 1) (nth i lst)) 1))
(set_missing lst i (+ j 1) i j)
)
)
(if (eql (nth j (nth i lst)) 1) (setf (nth j (nth i lst)) '*))
)
; функция, реализующая удар по полю
(defun blow(lst)
; выбираем случайную клетку
(setq i (random 10))
(setq j (random 10))
(setq n (nth j (nth i lst)))
(cond
((eql n 1)
(progn
; значение в клетке = 1
; убиваем корабль
(set_missing lst i j i j)
(set_missing_comp lst i j i j)
(setq user_ship (– user_ship 1))
(if (/= user_ship 0) (blow lst))
)
)
((eql n 0)
(progn
; значение в клетке 0
; промахнулись
(setf (nth j (nth i lst)) '~)
(blow lst)
)
)
; уже были в этой клетке – выбираем другую
((or (equal n '*) (equal n '~)) (blow lst))
)
lst
)
; убиваем противника!!!
(blow field)
; файл для записи
(setq output_stream (open «d:\\destroy_field.txt»:direction:output))
; записываем побитое поле противника
(print field output_stream)
; закрываем файл
(close output_stream)
5. Пример выполнения программы
Пример 1.
Рисунок 3 – Поле кораблей
Рисунок 4 – Расстрелянное поле кораблей
Пример 2.
Рисунок 5 – Поле кораблей
Рисунок 6 – Расстрелянное поле кораблей
Пример 3.
Рисунок 7 – Поле кораблей
Рисунок 8 – Расстрелянное поле кораблей
Заключение
Приведенный пример анализа игры «Морской бой» показывает возможность использования логических игр для углубленного изучения таких разделов математики, как комбинаторика, теория множеств и теория вероятностей. Заметим, что изучение даже простейших игровых ситуаций позволяет сформулировать проблемы, которые представляют интерес для современной информатики и теории поиска.
Итогом работы можно считать созданную функциональную модель реализации стратегии игры «Морской бой». Созданная функциональная модель и ее программная реализация могут служить органической частью решения более сложных задач.
Список использованных источников и литературы
1. Бронштейн, И.Н. Справочник по математике для инженеров и учащихся втузов [Текст] / И.Н. Бронштейн, К.А. Семендяев. – М.: Наука, 2007. – 708 с.
2. Кремер, Н.Ш. Высшая математика для экономистов: учебник для студентов вузов. [Текст] / Н.Ш. Кремер, 3-е издание – М.:ЮНИТИ-ДАНА, 2006. C. 412.
3. Петросян, Л.А. Игры поиска [Электронный ресурс] / Л.А. Петросян, А.Ю. Гарнаев. – М.: СПбГУ, 1992. С. 314.
4. Реализация игры «Морской бой» [Электронный ресурс] – Режим доступа: http://aka-alex.narod.ru/index.htm
5. Семакин, И.Г. Основы программирования. [Текст] / И.Г. Семакин, А.П. Шестаков. – М.: Мир, 2006. C. 346.
6. Симанков, В.С. Основы функционального программирования [Текст] / В.С. Симанков, Т.Т. Зангиев, И.В. Зайцев. – Краснодар: КубГТУ, 2002. – 160 с.
7. Степанов, П.А. Функциональное программирование на языке Lisp. [Электронный ресурс] / П.А. Степанов, А.В. Бржезовский. – М.: ГУАП, 2003. С. 79.
8. Хювенен Э. Мир Лиспа [Текст] / Э. Хювенен, Й. Сеппянен. – М.: Мир, 1990. – 460 с.
... до expression2. В том случае, когда значение expression1 оказывается больше значения expression2, тело цикла не будет выполнятся вовсе. 2. РАЗРАБОТКА ПРОГРАММЫ 2.1 Постановка задачи Составить программу для игры в «Морской бой» игрока с компьютером. Программа должна позволять расставлять корабли на поле 10 х 10, контролировать правильность их расстановки, давать противникам возможность ...
... помещен. С компонентом связывается объект класса TStatusPanel, который определяет панели компонента. Этот компонент находится на странице Палитры компонентов Win32. 2. РАЗРАБОТКА ПРОГРАММЫ 2.1. Постановка задачи Разработать игровую программу «Морской бой», которая включает игровую панель, состоящую из двух полей для человека и компьютера. На поле расставляются 10 кораблей разного класса. Четыре ...
... Нет col_dec = 1 col_ship = col_ship + 1 Рис. 6. Функция Disposition или Generation Тестирование Чтобы проверить корректность работы программы нужно провести тестирование. Бой с противником продолжается до полной победы, т.е. пока не будут уничтожены все 10 кораблей одного из противников. Если первым свои корабли потерял компьютер, игроку выводится сообщение о победе Рис. 7. ...
... дипломной работе. Нами был проведен эксперимент в начальной школе ОАО «Газпром» и в Православной гимназии города Москвы, целью, которого являлось выявление влияния информационных технологий на отношение к миру у детей младшего школьного возраста с различным мировосприятием. 6.В первой части эксперимента в качестве прототипа было выбрано исследование, проведенное в США, Японии, Мексике Центром ...
0 комментариев