- •Занятие 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();
- •Заключение
- •Итог занятия
Vidacha();
}
}
}
// Определение стопки на которую нажали мышью
private int getNomKolodaPress(int mX, int mY)
{
// Если стопка не выбрана
int nom=-1;
// Если курсор находится в зоне верхних стопок
if ((mY>=15) && (mY<=(15+97)))
{
if ((mX>=30) && (mX<=(30+72))) nom = 0;
if ((mX>=140) && (mX<=(140+72))) nom = 1;
if ((mX>=360) && (mX<=(360+72))) nom = 2;
if ((mX>=470) && (mX<=(470+72))) nom = 3;
if ((mX>=580) && (mX<=(580+72))) nom = 4;
if ((mX>=690) && (mX<=(690+72))) nom = 5;
}
// Если курсор находится в зоне нижних стопок
else if ((mY>=130) && (mY<=(700)))
{
if ((mX>=30) && (mX<=110*7))
{
if (((mX-30)%110)<=72)
{
nom = (mX-30)/110;
nom += 6;
}
}
}
// Возврат результата
return nom;
}
// Выдача карт из верхней левой стопки
private void vidacha()
{
// Если в стопке есть карты
if (stopki[0].size()>0)
{
int nom;
// Если это первая выдача
if (pervVidacha==true)
{
// Получаем номер случайной карты в стопке
nom = (int)(Math.random()*stopki[0].size());
}
else // Если повторная выдача
{
// Получаем самую верхнюю карту
nom = stopki[0].size()-1;
}
// Получаем карту из стопки с номером 0
karta getKarta = stopki[0].get(nom);
// Делаем отображение картинкой
getKarta.tipRubashka = false;
// Увеличиваем координату на 110 -
// сдвигаем в стопку правее
getKarta.x += 110;
// Добавляем карту в стопку с номером 1
stopki[1].add(getKarta);
// Удаляем карту из стопки с номером 0
stopki[0].remove(nom);
}
else //Если карт уже нет
{
// Вычисляем номер последней карты
// в стопке номером1
int nomPosled = stopki[1].size()-1;
// Переносим карты из стопки с номером 1
// в стопку с номером 0
for (int i=nomPosled;i>=0;i--)
{
karta getKarta = stopki[1].get(i);
// Делаем отображение рубашкой
getKarta.tipRubashka = true;
// Уменьшаем координату на 110 -
// сдвигаем в стопку левее
getKarta.x -= 110;
// Добавляем в стопку с номером 0
stopki[0].add(getKarta);
}
// Очищаем стопку с номером 1
stopki[1].clear();
// Признак первой выдачи меняем на false
pervVidacha=false;
}
}
// Старт игры - Новая игра
public void start()
{
//Очищаем все тринадцать списков
for (int i=0;i<13;i++)
{
//Удаление всех элементов списка
stopki[i].clear();
}
//Производим загрузку
load();
//Раздача карт в нижние семь стопок
razdacha();
//Признак конца игры - false
endGame = false;
//Признак первой выдачи - true
pervVidacha = true;
//Номер выбранной карты
nomKarti =-1;
//Номер выбранной стопки
nomStopki =-1;
}
// Раздача карт в нижние семь стопок
private void razdacha()
{
//Начальная координата по X
int x = 30;
//Перебираем все стопки нижние семь стопок
for (int i=6;i<13;i++)
{
//Добавление карт в стопку
for (int j=6;j<=i;j++)
{
// Получаем номер случайной карты из верхней левой стопки
int rnd = (int)(Math.random()*stopki[0].size());
// Получаем эту карту
karta getKarta = stopki[0].get(rnd);
// Если карта не самая верхняя,
// то показываем ее рубашкой
if (j<i) getKarta.tipRubashka = true;
else getKarta.tipRubashka = false; // Если карта верхняя
// Координата по X
getKarta.x = x;
// Каждую следующую карту располагаем ниже на 20 пикселей
getKarta.y = 130+stopki[i].size()*20;
// Добавляем карту в нижнюю стопку
stopki[i].add(getKarta);
// Удаляем карту из верхней левой стопки
stopki[0].remove(rnd);
}
//Увеличиваем координату по X
// (смещаемся правее)
x+=110;
}
}
// Загрузка изображений колоды
private void load()
{
// Цикл делает 52 шага
for (int i=1;i<=52;i++)
{
// В верхнюю левую стопку загружаем карты
stopki[0].add(new karta("c:\\karta\\k"+(i)+".png", rubashka, i));
}
}
// Метод отрисовки всех стопок карт
public void drawKoloda(Graphics gr)
{
//ВЕРХНЯЯ ЛЕВАЯ СТОПКА
// Если в стопке есть карты
if (stopki[0].size()>0)
{
// Получаем и рисуем самую верхнюю карту
stopki[0].get(stopki[0].size()-1).draw(gr);
}
//ВТОРАЯ СЛЕВА ВЕРХНЯЯ СТОПКА
// Если в стопке более одной карты
if (stopki[1].size()>1)
{
// Получаем и рисуем вторую сверху карту
stopki[1].get(stopki[1].size()-2).draw(gr);
// Получаем и рисуем самую верхнюю карту
stopki[1].get(stopki[1].size()-1).draw(gr);
}
else if (stopki[1].size()==1) // если в стопке одна карта
{
// Получаем и рисуем самую верхнюю карту
stopki[1].get(stopki[1].size()-1).draw(gr);
}
//ЧЕТЫРЕ ДОМАШНИЕ СТОПКИ
for (int i=2;i<=5;i++)
{
//Если в стопке более одной карты
if (stopki[i].size()>1)
{
// Получаем и рисуем вторую сверху карту
stopki[i].get(stopki[i].size()-2).draw(gr);
// Получаем и рисуем самую верхнюю карту
stopki[i].get(stopki[i].size()-1).draw(gr);
}
else if (stopki[i].size()==1) // если в стопке одна карта
{
// Получаем и рисуем самую верхнюю карту
stopki[i].get(stopki[i].size()-1).draw(gr);
}
}
//НИЖНИЕ СЕМЬ СТОПОК
for (int i=6;i<13;i++)
{
//Если в стопке есть карты
if (stopki[i].size()>0)
{
// Перебираем все карты из стопки
for (int j=0;j<stopki[i].size();j++)
{
// Если находим выбранную карту,
// то прерываем цикл
if (stopki[i].get(j).vibrana==true) break;
// Рисуем карты
stopki[i].get(j).draw(gr);
}
}
}
//ПЕРЕНОСИМЫЕ МЫШЬЮ КАРТЫ
// Если имеется выбранная стопка
if (nomStopki!=-1)
{
// Перебираем карты от выбранной и до конца стопки
for (int i=nomKarti;i<stopki[nomStopki].size();i++)
{
// Рисуем карты
stopki[nomStopki].get(i).draw(gr);
}
}
}
}
