русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Реализация второго уровня сложности игры Змейка(начало)


Дата добавления: 2015-06-12; просмотров: 1803; Нарушение авторских прав


Реализация игры Змейка на втором уровне сложности является продолжением первого уровня сложности. Поэтому мы продолжаем дорабатывать уже существующий проект.

Начнем доработку с класса game. Для этого перейдем в файл game.java.

В первую очередь добавим новые свойства класса к уже имеющемуся свойству mas:

// Двумерный массив для хранения игрового поля

public int[][] mas;

// Текущее направление движения

public int napr;

// Координаты головы змейки

private int gX, gY;

// Количество очков

public int kol;

Голова змейки будет перемещаться в четырех возможных направлениях, поэтому понадобится переменная:

// Текущее направление движения

private int napr;

Условимся, что каждое из четырех направлений будет обозначаться цифрой от 0 до 3 (0 –влево, 1 –вверх, 2 –вправо, 3 –вниз). Для хранения позиции головы змейки в массиве введем еще две переменные:

// Координаты головы змейки

private int gX, gY;

Это номер строки в массиве gY и номер элемента в строке gX.

Для хранения набранных очков добавим переменную:

// Количество очков

public int kol;

Далее добавим несколько строчек в метод start(), который выполняет начальный запуск игры:

// Запуск игры (Старт)

public void start()

{

//Заполняем весь массив нулями

for (int i = 0; i < 30; i++) {

for (int j = 0; j < 30; j++) {

mas[i][j] = 0;

}

}

//Начальное направление - влево

napr = 0;

//Количество очков



kol = 0;

 

//Записываем в переменные координаты головы змейки

gX = gY = 15;

//Создаем начальную змейку с длиной три ячейки

mas[15][15] = 1;

//Формируем первый объект для поедания змейкой

make_new();

}

Зададим начальное направление движения змейки – влево:

//Начальное направление - влево

napr = 0;

Начальное количество очков обнуляем:

//Количество очков



kol = 0;

Координаты головы змейки (номер строки в массиве и номер элемента в строке массива) устанавливаем15:

//Записываем в переменные координаты головы змейки

gX = gY = 15;

В класс gameнужно добавить новый методperemGolova(),который будет отвечать за перемещение головы змейки. Голова змейки отмечена в массиве значением "единица": 1. Перемещение головы змейки сводится к перемещению единицы в массиве, а на прежнее место следует помещать нулевое значение. Единица будет перемещаться в массиве в зависимости от направления движения головы змейки. При перемещении необходимо учитывать выход за границы игрового поля. В этом случае голова змейки должна появляться с противоположной стороны. Для решения этих задач добавим новый метод:

// Перемещение головы змейки

public void peremGolova()

{

//Сразу удаляем голову змейки из текущей ячейки

mas[gY][gX] = 0;

// Если текущее направление влево

if (napr == 0)

{

if ((gX - 1) >= 0)

gX--;

else

gX = 29;

}

// Если текущее направление вверх

else if (napr == 1)

{

if ((gY - 1) >= 0)

gY--;

else

gY = 29;

}

// Если текущее направление вправо

else if (napr == 2)

{

if ((gX + 1) <= 29)

gX++;

else

gX = 0;

}

// Если текущее направление вниз

else if (napr == 3)

{

if ((gY + 1) <= 29)

gY++;

else

gY = 0;

}

// Если съеден объект

if (mas[gY][gX]==-1)

{

// Генерируем новый объект для поедания

make_new();

// Увеличиваем количество очков на 10

kol += 10;

}

 

//Помещаем голову змейки в новую позицию

mas[gY][gX] = 1;

}

Нам известно положение головы змейки в массиве благодаря переменным gY,gX. На текущем месте головы змейки записываем нулевое значение:

// Сразу удаляем голову змейки из текущей ячейки

mas[gY][gX] = 0;

Далее при помощи условной конструкции рассматриваем четыре возможных текущих направления движения змейки:

// Если текущее направление влево

if (napr == 0)

{

}

// Если текущее направление вверх

else if (napr == 1)

{

}

// Если текущее направление вправо

else if (napr == 2)

{

}

// Если текущее направление вниз

else if (napr == 3)

{

}

Если направление движения влево, то выполнится следующий код:

if ((gX - 1)> = 0)

gX--;

else

gX = 29;

Если текущее значениеgXлибо -1, либо больше или равно нулю, то мы не выходим за пределы массива и можно смело уменьшить значение переменной gXна единицу. В противном случае, мы уже выходим за границы массива влево, и голова змейки должна появиться с крайней правой стороны.Поэтому помещаем в переменную gX значение 29. Номера строк массива и позиций в строке массива лежат от 0 до 29 включительно!Используя похожую схему,рассматриваем варианты для трех других направлений движения. Очень удобно зарисовать на бумаге массив, проставить номера строк и номера позиций в строке и рассматривать каждую ситуацию на рисунке,глядя на программный код. Тогда понимание станет более ясным.

Проверяем, что голова змейки перемещается в ячейку с объектом для поедания, такой объект отмечен значением "минус единица" в массиве: -1.

// Если съеден объект

if (mas[gY][gX]==-1)

{

// Генерируем новый объект для поедания

make_new();

// Увеличиваем количество очков на 10

kol += 10;

}

Если объект съеден, то создаем новый объект для поедания с помощью метода make_new()и увеличиваем количество очков на10.

В самом конце метода помещаем единицу в новую позицию головы змейки:

// Помещаем голову змейки в новую позицию

mas[gY][gX] = 1;

Обратите внимание, что до этого мы изменили только значения переменных gYили gX, которые отвечают за позицию головы змейки, но значение в массиве устанавливаем в самом конце.

На этом программный код класса game для второго уровня сложности готов и полностью выглядит так:

public class game

{

// Двухмерный массив для хранения игрового поля

public int[][] mas;

// Текущее направление движения

public int napr;

// Координаты головы змейки

private int gX, gY;

// Количество очков

public int kol;

// Конструктор класса

public game()

{

//Создаем новый массив 30x30

mas = new int[30][30];

}

// Генерация нового объекта в случайном месте

private void make_new()

{

//Глухой (бесконечный цикл)

while(true)

{

// Получаем случайные значения x,y от 0 до 29

int x = (int)(Math.random()*30);

int y = (int)(Math.random()*30);

// Если в этом месте массива нулевое значение

// то помещаем туда объект для поедания змейкой

// и прерываем цикл

if (mas[y][x]==0)

{

mas[y][x] = -1;

break;

}

}

}

// Запуск игры (Старт)

public void start()

{

//Заполняем весь массив нулями

for (int i = 0; i < 30; i++) {

for (int j = 0; j < 30; j++) {

mas[i][j] = 0;

}

}

//Начальное направление - влево

napr = 0;

//Количество очков



kol = 0;

//Создаем начальную змейку с длиной три ячейки

mas[15][15] = 1;

//Записываем в переменные координаты головы змейки

gX = gY = 15;

//Формируем первый объект для поедания змейкой

make_new();

}

// Перемещение головы змейки

public void peremGolova()

{

//Сразу удаляем голову змейки из текущей ячейки

mas[gY][gX] = 0;

// Если текущее направление влево

if (napr == 0)

{

if ((gX - 1) >= 0)

gX--;

else

gX = 29;

}

// Если текущее направление вверх

else if (napr == 1)

{

if ((gY - 1) >= 0)

gY--;

else

gY = 29;

}

// Если текущее направление вправо

else if (napr == 2)

{

if ((gX + 1) <= 29)

gX++;

else

gX = 0;

}

// Если текущее направление вниз

else if (napr == 3)

{

if ((gY + 1) <= 29)

gY++;

else

gY = 0;

}

// Если съеден объект

if (mas[gY][gX]==-1)

{

// Генерируем новый объект для поедания

make_new();

// Увеличиваем количество очков на 10

kol += 10;

}

 

//Помещаем голову змейки в новую позицию

mas[gY][gX] = 1;

}

}



<== предыдущая лекция | следующая лекция ==>
Создание проекта и файлов классов игры Змейка | Реализация второго уровня сложности игры Змейка(завершение)


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.862 сек.