- •Занятие 1. "Постановка задания для разработки игры Змейка. Работа с двумерным массивом"
- •Правила самостоятельной разработки игр данного курса
- •Работа с двумерным массивом в Java
- •Применение двумерного массива при создании игр
- •Постановка задания по созданию игры Змейка
- •Разделение задания для трех уровней сложности
- •План разработки проекта
- •Алгоритм для реализации игры Змейка
- •Перемещать голову змейки в нужном направлении.
- •Удалять хвост змейки. Удаление хвоста равносильно записи нулевого значения в элемент массива, где находилось число, отвечающее за хвост змейки.
- •Итог занятия
- •Занятие 2. "Постановка задания для разработки игры Морской бой"
- •Постановка задания по созданию игры Морской бой
- •Разделение задания для трех уровней сложности
- •Рекомендации для реализации игровых полей игры Морской бой
- •Алгоритм для реализации игры "Морской бой"
- •Генерация кораблей на игровом поле
- •Итог занятия
- •Занятие 3. "Постановка задания для разработки игры Пасьянс-Косынка"
- •Правила игры Пасьянс-Косынка
- •Упаковка файлов изображений внутрьJar-архива
- •Работа со списком в Java
- •Import java.Util.ArrayList;
- •Постановка задания по созданию игры Пасьянс-Косынка
- •Разделение задания для трех уровней сложности
- •Алгоритм перемешивания карт в колоде
- •Создание массива списков значений
- •Итог занятия
- •Заключение
- •Занятие 1. "Разработка игры Змейка. Первый и второй уровень сложности"
- •Рекомендации для изучения программного кода игр
- •Изучаемый программный код необходимо самостоятельно вводить с клавиатуры в среде разработки, глядя на образец в печатном издании.
- •Каждую строчку, каждый фрагмент программного кода стараться максимально разобрать и понять смысл. Не следует бездумно переписывать программный код и запускать!
- •Моменты, которые вызывают особые сложности в понимании, стараться нарисовать на бумаге или пройти пошагово.Например, цикл, который использует формулу с изменяющимися переменными в цикле.
- •Старайтесь больше экспериментировать с записанным программным кодом. Изменяйте значение кого-нибудь параметра и запускайте программу. Смотрите на изменения.
- •После разбора фрагмента программного кода –закрывайте книгу и начинайте пытаться записать свой программный код,который выполняет тоже самое, при этом, не заглядывая в книгу - с чистого листа.
- •Реализация первого уровня сложности игры Змейка Подготовка изображений для игры Змейка
- •Создание проекта и файлов классов игры Змейка
- •Реализация второго уровня сложности игры Змейка(начало)
- •Итог занятия
- •Занятие 2. "Разработка игры Змейка. Второй и третий уровень сложности"
- •Реализация второго уровня сложности игры Змейка(завершение)
- •Реализация третьего уровня сложности игры Змейка
- •Механизм перемещения змейки
- •Итог занятия
- •Занятие 3. "Разработка игры Морской бой. Первый уровень сложности"
- •Создание проекта и файлов классов игры Морской бой
- •Итог занятия
- •Занятие 4. "Разработка игры Морской бой. Второй уровень сложности"
- •Реализация второго уровня сложности игры Морской бой
- •Обозначения состояния ячейки игрового поля
- •Отрисовка игрового поля на основании двумерного массива
- •Ситуация выхода за пределы массива
- •Генерация однопалубных кораблей
- •Генерация четырехпалубного корабля
- •Итог занятия
- •Занятие 5. "Разработка игры Морской бой. Третий уровень сложности"
- •Реализация третьего уровня сложности игры Морской бой
- •Выполнение ходов игроком и компьютером
- •Стратегия ходов компьютера
- •Итог занятия
- •Занятие 6. "Разработка игры Пасьянс-Косынка. Начало первого уровня сложности"
- •Подготовка изображений для игры
- •Создание проекта и файлов классов игры Пасьянса-Косынка
- •Реализация класса kosinka
- •Реализация класса okno
- •Import javax.Swing.*;
- •Import java.Awt.*;
- •Реализация класса pole
- •Реализация класса karta
- •Import javax.Imageio.*;
- •Import java.Awt.*;
- •Import java.Io.*;
- •Итог занятия
- •Занятие 7. "Разработка игры Пасьянс-Косынка. Завершение первого уровня сложности"
- •Реализация класса stopka
- •Import java.Util.ArrayList;
- •Начало реализации класса game
- •Реализация класса pole
- •Завершение реализации класса game для первого уровня сложности
- •Vidacha();
- •Итог занятия
- •Занятие 8. "Разработка игры Пасьянс-Косынка. Второй уровень сложности"
- •Перерисовка всех стопок карт
- •Stopki[I].Get(stopki[I].Size()-2).Draw(gr);
- •Раздача карт в нижние семь стопок
- •Начало реализации третьего уровня сложности
- •Итог занятия
- •Занятие 9. "Разработка игры Пасьянс-Косынка. Третий уровень сложности"
- •// Получаем номер верхней карты
- •Тестирование переноса
- •Vidacha();
- •Заключение
- •Итог занятия
Разделение задания для трех уровней сложности
Первый уровень сложности содержит перечень минимальных элементов, необходимых для написания приложения:
Создание окна необходимых размеров.
Указание заголовка окна.
Создание общего фона.
Размещение двух кнопок Новая игра, Выход.
При нажатии на кнопку Выход окно должно полностью закрываться.
Создание сеток двух игровых полей10x10.
Нумерация строк двух игровых от1до 10.
Нумерация колонок двух игровых полей буквами от Aдо J.
Подписание игровых полей: Компьютер, Игрок.
При нажатии на кнопку Новая игра на первом уровне сложности ничего не происходит!
Законченный вариант необходимо представить в виде JAR-архива.
Внимание!!!Подробности по каждому пункту первого уровня сложности необходимо смотреть в основном техническом задании.
Вариант игры для первого уровня сложности должен выглядеть так:(см. рис. 18)
Рис. 18
Второй уровень сложности является продолжением первого уровня сложности.В дополнение к первому уровню сложности:
При нажатии на кнопку Новая игра необходимо выполнить расстановку одного четырехпалубного и четырех однопалубных кораблей на игровом поле игрока (см. рис. 19).
При каждом повторном нажатии кнопкиНовая игра корабли должны расставляться новым случайным образом.
Законченный вариант необходимо представить в виде JAR-архива.
Внимание!!!Подробности по каждому пункту второго уровня сложности необходимо смотреть в основном техническом задании.
Рис. 19
Третий уровень сложности:
Является продолжением второго уровня сложности
Выполнение задания в полном объеме
Рекомендации для реализации игровых полей игры Морской бой
Приемы загрузки изображений, работа с таймером отрисовки,отрисовка игрового поля, работа с графикой–для игры"Морской бой" реализуется также как и для игры "Змейка". Такие же приемы были использованы при создании игры "Новогодний дождь". Построение интерфейса пользователя, размещение кнопок, обработка событий при нажатии кнопок – всё это было изучено при создании приложений под Windows с построением интерфейса пользователя. В отличие от игры "Змейка", управление игрой будет полностью осуществляться с помощью мыши. Работа с мышью была рассмотрена при создании приложения для рисования. Все технические моменты можно найти в методической литературе по курсу Java.
Алгоритм для реализации игры "Морской бой"
Основная часть работы–это реализация алгоритма игры "Морской бой".Для решения задачи можно найти несколько различных алгоритмов ее решения. Другими словами, несколько планов (схем)действий.
Для хранения информации о двух игровых полях можно воспользоваться двумя двумерными массивами целых чисел. Размер одного игрового поля 10x10, поэтому размерность каждого массива будет также 10x10. Один массив будет хранить данные игрового поля компьютера, а другой игрока.
// Массив для игрового поля компьютера
int[][] masComp;
// Массив для игрового поля игрока
int[][] masPlay;
//Создаем массив 10x10 - игровое поле компьютера
masComp = new int[10][10];
//Создаем массив 10x10 - игровое поле игрока
masPlay = new int[10][10];
Решим, что свободные ячейки игровых полей будут отмечаться в массиве нулями. Поэтому при старте игры оба массива буду обнуляться:
//Очищаем игровое поле компьютера и игрока
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
masComp[i][j] = 0;
masPlay[i][j] = 0;
}
}
Все данные игровых полей будут храниться в массивах. Различные варианты состояния игрового поля мы будем отмечать отдельным числом.
Один из вариантов выглядит так:
Число один 1:палуба однопалубного корабля
Число два 2:каждая палуба двухпалубного корабля
Число три 3:каждая палуба трехпалубного корабля
Число четыре 4:каждая палуба четырехпалубного корабля
При выстреле в определенную ячейку к ее значению будет прибавляться число семь7
Пространство вокруг корабля будет обозначаться числом минус один -1, в это пространство нельзя поставить другой корабль
Когда корабль будет полностью подбит ко всем значениям его ячеек будем прибавлять еще одно число семь 7
К примеру, начальное расположение кораблей выглядит так (см. рис. 20).
Рис. 20
На основании предложенной схемы –значения в двумерном массиве будут выглядеть так (см. рис.21).
Рис. 21
Сравните вид игрового поля на (см. рис. 20) и его отображение в двумерном массиве (см. рис. 21). Все палубы кораблей отмечены значениями: 1,2,3,4, пространство вокруг отмечено минус единицей -1, а все свободные ячейки заполнены нулями0. Таймер отрисовки будет постоянно отрисовывать игровое поле на основании чисел в массиве и программирование логики игры сведется к программированию двумерного массива.Общий подход к созданию игры "Морской бой"полностью совпадает с подходом к созданию игры "Змейка".
При выстреле в любую ячейку прибавляем к ее значению число семь7.
После двух выстрелов по игровому полю оно станет выглядеть так(см. рис. 22). Один выстрел попал и ранил четырехпалубный корабль, а другой выстрел попал мимо (см. рис. 22).
Рис. 22
Теперь посмотрим на изменения в двумерном массиве (см. рис. 23), которое соответствует двум выстрелам. К двум значениям элементов массива прибавилось число семь 7.
Рис. 23
После того как корабль будет полностью подбит ко всем значениям его ячеек прибавляем снова число семь7. Так выглядит игровое поле после трех дополнительных выстрелов, попавших в три палубы четырехпалубного корабля (см. рис. 24).
Рис. 24
Изменения, которые произошли в двухмерном массиве выглядят так (см. рис. 25)
Рис. 25
После четвертого попадания в четырехпалубный корабль значения в ячейках будут 11(4+7) (см. рис.26). После полного уничтожения корабля мы прибавляем ко всем подбитым палубам еще раз число 7, тем самым помечаем, что это палубы полностью убитого корабля. В результате получаем состояние двумерного массива(см. рис. 25).
Рис. 26
Подход, который рассмотрен выше не является единственным и вы можете использовать свой вариант!
