Реализация демонстрационной версии игры "Snake" в среде Eclipse с использованием библиотеки Java 2 SDK
Создание игрового поля, на котором появляется две змейки. Реализация логической части программы. Создание игры с применением класса Graphics2D. Метод рисования в окне апплета. Краткое описание алгоритма игры. Математическое описание движения двух змеек.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 03.05.2014 |
Размер файла | 31,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Федеральное агентство по образованию
Государственное образовательное учреждение высшего профессионального образования
«Нижегородский государственный университет им Н.И. Лобачевского»
Курсовая работа
Тема: Реализация демонстрационной версии игры "Snake" в среде Eclipse с использованием библиотеки Java 2 SDK
Выполнил: Студент 2 курса
группы 725-1 Малинин Павел
Проверил: Визгунов А.Н.
Нижний Новгород 2008
Содержание
- Введение
- Глава 1. История
- 1.1 История создания игры «змейка»
- 1.2 Цели и задачи
- Глава 2. Реализация логической части
- 2.1 Создание игры с применением класса Graphics2D
- 2.2 Метод paint
- 2.3 Краткое описание математического алгоритма
- Заключение
- Список использованной литературы
- Приложения
- Введение
- Snake (Питон, Удав, Змейка и др.) -- компьютерная игра, возникшая в середине или в конце 1970-х.
- Игрок управляет длинным, тонким существом, напоминающим змею, которое ползает по плоскости (как правило, ограниченной стенками), собирая еду (или другие предметы), избегая столкновения с собственным хвостом и краями игрового поля. В некоторых вариантах на поле присутствуют дополнительные препятствия. Каждый раз, когда змея съедает кусок пищи, она становится длиннее, что постепенно усложняет игру. Игрок управляет направлением движения головы змеи (обычно 4 направления: вверх, вниз, влево, вправо), а хвост змеи движется следом. Игрок не может остановить движение змеи.
- Глава 1. История
- 1.1 История создания игры «змейка»
- Первой игрой этого плана был игровой автомат Hustle, выпущенный фирмой Gremlin в 1977 году. Одна из первых реализаций (возможно, первая) на домашнем компьютере была сделана в 1979 году на компьютере TRS-80, автор F. Seger (Германия). Вскоре после неё вышла версия для Commodore VIC-20, под названием Worms. Микрокомпьютерная версия игры Hustle была выпущена Milton Bradley для компьютера TI-99/4A в 1980 году.
- В число известных вариантов Питона входит игра Nibbles, некоторое время входившая в комплект MS-DOS.
- Трёхмерная версия Питона существует для телефона Nokia N70 и последующих телефонов Nokia
- 1.2 Цели и задачи
- Цель: Создать законченный вариант игры “Змейка”
- Законченный вариант игры змейка должен содержать:
- Поле на котором буду двигаться две змейки до того момента пока они не съедят друг друга или выйдут за рамки поля в котором происходит движение.
- P. S. Необязательным условием (по желанию учащегося), “змейка” может управляться мышкой (с помощью клавиш на форме), игра может иметь счетчик набранных очков, таблицу лучших игроков, которая может сохраняться и считываться из файла, а также другие элементы которые увеличивают играбельность игры.
- Глава 2. Реализация логической части
- 2.1 Создание игры с применением класса Graphics2D
- Класс java.awt.Graphics2D создает возможность рисования с помощью Java 2D. Класс Graphics2D является подклассом класса Graphics, поэтому имеет все его функциональные возможности для управления графическим контекстом приложения, о чем рассказывалось ранее в этой главе. Чтобы получить доступ к функциональным возможностям класса Graphics2D, необходимо преобразовать ссылку на объект класса Graphics, передаваемую методу paint, в ссылку на объект класса Graphics2D. Java 2D может отображать три типа встроенных графических объектов -- они называются графическими примитивами -- изображения, текст и геометрические фигуры. Имеется семь атрибутов состояния Graphics2D, которые определяют, как воспроизводятся графические примитивы, -- clipping (отсечение), compositing (наложение изображений), font (шрифт), paint (раскрашивание), rendering hints (правила отображения), stroke (отображение линий и контуров) и transforms (преобразования). В таблице на рис. 4.3 описаны все эти семь атрибутов. Атрибуты образуют конвейер, который обрабатывает графические примитивы, подлежащие воспроизведению. На первом этапе конвейера операций определяется, какие примитивы отображать. Затем метод рисования отображает примитив. Для фигур -- это метод draw, для текста -- drawString, а для изображений -- drawlmage- В процессе рисования конвейер применяет разнообразные операции преобразования, заливки и отображения контура. Следующий этап состоит в растрировании нарисованного изображения -- преобразовании его в двумерный массив числовых значений пикселов, называемый растром. На этом этапе конвейер выполняет операции обработки изображения над растром. После этого над растром выполняются операции отсечения и наложения на текущее изображение. Наконец, изображение отображается на устройстве вывода, например, на экране или принтере.
- Атрибут Описание Clipping (отсечение) Определяет область, на которой действуют операции отображения в качестве области отсечения может использоваться любая геометрическая фигура. Compositing (наложение) Набор правил наложения, который управляет взаимодействием пикселов в исходном изображении с пикселами в целевом изображении. Fonts (шрифты) Шрифты создаются из фигур, которые представляют символы и которые будут отображаться - они называются глифами. Текст отображается путем рисования и заливки глифов.
- Paint (рисование) Определяет цвета, узоры и градиенты для заливки и оконтуривания фигур. Rendering Hints (правила отображения) Задает приемы и методы, которые помогают оптимизировать рисование.
- Stroke (отображение линий и контуров) Определяет линии и контур отображаемой фигуры. Transform (преобразование) Определяет линейные преобразования, изменяющие форму изображения.
- Java 2D задает правила, которые указывают графическому ядру, как выполнять эти операции. В последующих разделах представлено несколько функций обработки изображений и отображения геометрических фигур.
- 2.2 Метод paint
- Наиболее интересен для нас метод paint, который выполняет рисование в окне аплета. Вот его исходный текст:
- public void paint(Graphics g)
- {
- g.drawString("Hello, Java world!",
- 20, 20);
- }
- Если посмотреть определение класса Applet, которое находится в файле JavaWorkshop20\JDK\src\java\applet\Applet.java, то в нем нет метода paint. В каком же классе определен этот метод?
- Иерархия классов
- Заглянем в документацию. Выберите из меню Help главного окна приложения Java WorkShop строку Java API Documentation. На экране появится окно браузера, встроенного в Java WorkShop. С помощью этого браузера вы сможете просматривать содержимое справочной системы.
- В разделе Java API Packages выберите библиотеку классов java.applet, а затем в разделе Class Index - строку Applet. Вы увидите иерархию классов:
- java.lang.Object
- |
- +---java.awt.Component
- |
- +---java.awt.Container
- |
- +---java.awt.Panel
- |
- +---java.applet.Applet
- Из этой иерархии видно, что класс java.applet.Applet произошел от класса java.awt.Panel. Этот класс, в свою очередь, определен в библиотеке классов java.awt и произошел от класса java.awt.Container.
- Продолжим наши исследования. В классе java.awt.Container снова нет метода paint, но сам этот класс создан на базе класса java.awt.Component.
- Но и здесь метода paint нет. Этот метод определен в классе java.awt.Component, который, в свою очередь, произошел от класса java.lang.Object и реализует интерфейс java.awt.image.ImageObserver.
- Таким образом, мы проследили иерархию классов от класса java.applet.Applet, на базе которого создан наш аплет, до класса java.lang.Object, который является базовым для всех классов в Java.
- Метод paint определен в классе java.awt.Component, но так как этот класс является базовым для класса Applet и для нашего класса HelloApplet, мы можем переопределить метод paint.
- Вызов метода paint
- Метод paint вызывается, когда необходимо перерисовать окно аплета. Если вы создавали приложения для операционной системы Windows, то наверняка знакомы с сообщением WM_PAINT, которое поступает в функцию окна приложения при необходимости его перерисовки.
- Перерисовка окна приложения Windows и окна аплета обычно выполняется асинхронно по отношению к работе приложения или аплета. В любой момент времени аплет должен быть готов перерисовать содержимое своего окна.
- Такая техника отличается о той, к которой вы, возможно, привыкли, создавая обычные программы для MS-DOS. Программы MS-DOS сами определяют, когда им нужно рисовать на экране, причем рисование может выполняться из разных мест программы. Аплеты, так же как и приложения Windows, выполняют рисование в своих окнах централизованно. Аплет делает это в методе paint, а приложение Windows - при обработке сообщения WM_PAINT.
- Обратите внимание, что методу paint в качестве параметра передается ссылка на объект Graphics:
- public void paint(Graphics g)
- {
- ...
- }
- По своему смыслу этот объект напоминает контекст отображения, с которым хорошо знакомы создатели приложений Windows. Контекст отображения - это как бы холст, на котором аплет может рисовать изображение или писать текст. Многочисленные методы класса Graphics позволяют задавать различные параметры холста, такие, например, как цвет или шрифт.
- Наше приложение вызывает метод drawString, который рисует текстовую строку в окне аплета:
- g.drawString("Hello, Java world!", 20, 20);
- Вот прототип этого метода:
- public abstract void drawString(String str,
- int x, int y);
- Через первый параметр методу drawString передается текстовая строка в виде объекта класса String. Второй и третий параметр определяют, соответственно, координаты точки, в которой начнется рисование строки.
- В какой координатной системе?
- Аплеты используют систему координат, которая соответствует режиму отображения MM_TEXT, знакомому тем, кто создавал приложения Windows. Начало этой системы координат расположено в левом верхнем углу окна аплета, ось X направлена слева направо, а ось Y - сверху вниз (рис. 1).
- Рис. 1 Система координат, используемая методом drawString
- На этом же рисунке показано, как метод drawString нарисует текстовую строку с координатами (xCoord, yCoord).
- 2.3 Описание математического алгоритма
- игра змейка апплет алгоритм
- Программа состоит из четырех классов: Worm Worm2 Main и Shapes. Worm- конструктор для первой змейки принимающий два значения x и y в последствии использующиеся в массиве первой змейки в качестве координат указания расположения змейки.
- public class Worm {
- int x;
- int y;
- public Worm(int a, int b)
- {
- x=a;
- y=b;
- }
- }
- Worm2 - конструктор для второй змейки
- public class Worm2 {
- int x;
- int y;
- public Worm2(int a, int b)
- {
- x=a;
- y=b;
- }
- Класс Shapes имеет несколько методов.
- Метод Paint() принимает значения двумерного массива каждой змейки и рисует цвета в зависимости от значения в массиве. В нашем случае используется три значения:
- 1- рисование первой змейки происходит при передаче числа «1» из двумерного массива
- 2- рисование яблока происходит при передаче числа «2» из двумерного массива
- 3- рисование второй змейки происходит при передаче числа «3» из двумерного массива
- public void paint (Graphics g)
- {
- super.paint (g);
- for (int i=0;i<a.length;i++)
- for (int j=0;j<a.length;j++)
- {
- if (a[i][j]==2)
- {
- Graphics2D graphics2D =(Graphics2D)g; //рисование яблока
- graphics2D.setPaint(Color.red);
- graphics2D.fill (new Ellipse2D.Double (i*20,j*20, 20, 20) );
- int iPoints[]={i*20+12, i*20+11, i*20+14, i*20+18, i*20+20, i*20+18, i*20+16, i*20+14}; // рисование листка на яблоке
- int jPoints[]={j*20+7, j*20+3, j*20-1, j*20-2, j*20, j*20+2, j*20+4, j*20+6};
- GeneralPath leave = new GeneralPath();
- leave.moveTo(iPoints[0], jPoints[0]);
- for(int count=0; count<iPoints.length; count++)
- leave.lineTo(iPoints[count], jPoints[count]);
- leave.closePath();
- graphics2D.setColor(new Color(2, 161, 6));
- graphics2D.fill(leave);
- }
- else
- if (a[i][j]==1) //рисование червяка
- {
- Graphics2D graphics2D =(Graphics2D)g;
- graphics2D.setPaint(Color.black);
- graphics2D.setStroke( new BasicStroke (1.0f) );
- graphics2D.fill (new Rectangle2D.Double (i*20,j*20, 20, 20) );
- graphics2D.setPaint(Color.orange);
- graphics2D.setStroke( new BasicStroke (1.0f) );
- graphics2D.fill (new Rectangle2D.Double (i*20+1,j*20+1, 18, 18) );
- }
- else
- if (a[i][j]==3) //рисование червяка2
- {
- Graphics2D graphics2D =(Graphics2D)g;
- graphics2D.setPaint(Color.black);
- graphics2D.setStroke( new BasicStroke (1.0f) );
- graphics2D.fill (new Rectangle2D.Double (i*20,j*20, 20, 20) );
- graphics2D.setPaint(Color.green);
- graphics2D.setStroke( new BasicStroke (1.0f) );
- graphics2D.fill (new Rectangle2D.Double (i*20+1,j*20+1, 18, 18) );
- }
- }
- }
- Метод dropBonus() в произвольном варианте размещает яблоки на игровом поле. Осуществляется это путем создания двух случайных переменных xBonus и yBonus которые указывают координаты появления яблока.
- Координате присваивается определенное значение и в последствии при попадании змейки на него длина змейки будет увеличиваться.
- public void dropBonus()
- {
- int xBonus;
- int yBonus;
- do{
- Random rand=new Random();
- xBonus=rand.nextInt(39);
- yBonus=rand.nextInt(39);
- }
- while (a[xBonus][yBonus]!=0);
- a[xBonus][yBonus]=2;
- repaint();
- }
- Метод increaseWorm() увеличивает длину змейки на едину, тут присутствует несколько условий зависящие от направления движения змейки.
- public static void increaseWorm2(Worm2 worm2[])
- {
- int n=wormLength2(worm2);
- if(worm2[n-1].x==worm2[n-2].x)
- {
- if(worm2[n-1].y>worm2[n-2].y)
- {
- worm2[n].x=worm2[n-1].x;
- worm2[n].y=worm2[n-1].y+1;
- }
- else
- {
- worm2[n].x=worm2[n-1].x;
- worm2[n].y=worm2[n-1].y-1;
- }
- }
- else
- {
- if(worm2[n-1].x>worm2[n-2].x)
- {
- worm2[n].y=worm2[n-1].y;
- worm2[n].x=worm2[n-1].x+1;
- }
- else
- {
- worm2[n].y=worm2[n-1].y;
- worm2[n].x=worm2[n-1].x-1;
- }
- }
- }
- Зарождение двух змеек появляется с объявлением массивов a и b.
- public int [][] a;
- public int [][] b;
- ……
- a=new int [40][40];
- b=new int [40][40];
- размерность массивов выбрана не случайно так как размер поля 800 на 800 а одна клетка поля занимает квадрат с размером 20 на 20 пикселей.
- Цвет фона определяется как черный так как на нем все хорошо видно, в программе это строчка: getContentPane().setBackground(Color.black);
- В самом начале все значения элементов массива a обнуляем. В будущем это пригодится во время работы метода Paint() который рисует только значения 1 2 и 3.
- for (int i=0;i<a.length;i++)
- for (int j=0;j<a.length;j++)
- a[i][j]=0;
- Далее мы размешаем две змейки на игровом поле и используем массив каждой змейки чтобы указать координаты их месторасположения.
- a[20][20]=2;
- worm[0].x=4;
- worm[0].y=20;
- worm[1].x=3;
- worm[1].y=20;
- worm[2].x=2;
- worm[2].y=20;
- worm[3].x=1;
- worm[3].y=20;
- - первая змейка
- b[20][20]=2;
- worm2[0].x=20;
- worm2[1].y=19;
- worm2[1].x=20;
- worm2[2].y=18;
- worm2[2].x=20;
- worm2[3].y=17;
- worm2[3].x=20;
- worm2[0].y=20;
- - вторая змейка
- После создания обоих змеек на игровом поле мы попадаем в метод formMatrix() в котором осуществляются все операции с нашими змейками. Первом делом мы выбираем количество операций(движений змейки в одну из сторон) и выбрасываем яблока обращаясь к методу dropBonus().
- Random r=new Random(); // задание случайного направления движения
- for(int d=0;d<30;d++)
- {
- int dir=r.nextInt(3);
- int dir2=r.nextInt(3);
- int t=r.nextInt(6);
- int t2=r.nextInt(6);
- в этой части метода происходит объявление и создание случайных переменный которые будут отвечать за выбор стороны движения каждой змейки и ее длину движения в выбранном направлении. Dir и dir2 отвечают за выбора направления первой и второй змейки соответственно, а значения t и t2 за длину перемещения в одну из выбранных сторон первой и второй змейки соответственно.
- Далее идет математическое описание движения каждой змейки в одну из выбранных сторон.
- int n=wormLength(worm);
- for(int j=0;j<n;j++)
- {
- if(j>19)
- break;
- a[worm[j].x][worm[j].y]=1;
- }
- repaint();
- tempX=worm[n-1].x;
- tempY=worm[n-1].y;
- for(int j=n-1;j>0;j--)
- {
- worm[j].x=worm[j-1].x;
- worm[j].y=worm[j-1].y;
- }
- worm[0].y--;
- a[tempX][tempY]=0;
- if(a[worm[0].x][worm[0].y]==2 )
- {
- increaseWorm(worm);
- dropBonus();
- }
- try {
- Thread.sleep(50);
- } catch (InterruptedException e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- Заключение
- В итоге в моей работе получилось создать игровое поле на котором в определенных (разных) местах появляется две змейки , Размер и появление змеек можно менять в зависимости от желания пользователя. Игра начинается после запуска программы. Благодаря использования переменной случайно сгенерированной компьютером получилось сделать две независимые змейки движущиеся в разных направлениях и выбирающих длину своего перемещения. Змейки умеют есть яблоки и увеличиваться в размере. Цели поставленные в данной курсовой работе считаю достигнутыми.
- Удачной вам игры !
- Список использованной литературы
- 1 http://ru.sun.com/java/books/online/
- 2 Книга Х.М. Дейтел, П.Дж. Дейтел, С.И. Сантри: Технологии программирования на Java. Том 1. Графика, JavaBeans
Размещено на Allbest.ru
...Подобные документы
История развития языка программирования Java. История тетриса - культовой компьютерной игры, изобретённой в СССР. Правила проведения игры, особенности начисления очков. Создание интерфейса программы, ее реализация в среде Java, кодирование, тестирование.
курсовая работа [168,1 K], добавлен 27.09.2013Разработка и создание игры "Змейка". Использование динамически-активных принципов языка Java. Графические объекты программы. Описание игры, правила, теоретические сведения. Классы приложения. Типы данных. Реализация. Метод. Объект. Блок-схема игры.
курсовая работа [12,4 K], добавлен 18.06.2008Разработка игры "Экзамен" с применением объектно-ориентированного программирования и языка Java (в среде Eclipse Helios). Структура программы и алгоритм решения задачи. Описание методов и переменных. Экспериментальное тестирование и оценка программы.
курсовая работа [122,5 K], добавлен 19.05.2011Алгоритмическое представление и описание правил игры "Эволюция". Построение диаграммы прецедентов. Разработка графического интерфейса пользователя. Реализация интерфейса в среде Unity. Структура файла сохранения игры. Проектирование поведения компьютера.
дипломная работа [3,3 M], добавлен 18.02.2017Описание пакета прикладной программы Net Beans 8.1. Разработка пользовательского интерфейса апплета. Создание рамочных окон на базе фреймов библиотеки java.swing. Изменение цвета текстовых данных. Проектирование и создание инфологической модели апплета.
контрольная работа [1,8 M], добавлен 11.07.2016Разработка программы логической игры в "крестики-нолики" пять в ряд на поле размера 15х15 клеток с применением графики на языке Pascal с использованием объектно-ориентированного программирования. Структура алгоритма программы и описание ее работы.
курсовая работа [821,5 K], добавлен 13.02.2012Сетевые возможности языков программирования. Преимущества использования Java-апплетов. Классы, входящие в состав библиотеки java.awt. Создание пользовательского интерфейса. Сокетное соединение с сервером. Графика в Java. Значения составляющих цвета.
курсовая работа [508,1 K], добавлен 10.11.2014Описание алгоритма хода ЭВМ в режиме "пользователь-компьютер" в игре "Морской бой". Описание совокупности классов, их полей и методов. Разработка интерфейса и руководства пользователя по проведению игры. Листинг программы, написанной на языке Java.
курсовая работа [645,0 K], добавлен 26.03.2014Разработка программы "Сапер", удовлетворяющей необходимым требованиям эффективности в интегрированной среде программирования Microsoft Visual C++. Специфика создания Windows-приложений. Применение логической игры для развития интереса к обучению у детей.
курсовая работа [511,1 K], добавлен 01.06.2013Написание игры "Lines" на языке Object Pascal в среде Delphi. Алгоритм работы программы. Описание метода генерации поля. Используемые константы и переменные. Форма приложения после старта игрового процесса. Основные элементы формы и обработки событий.
курсовая работа [225,0 K], добавлен 12.04.2012Проект игры "Ловушка", созданный при помощи языка программирования C++. Описание заголовочных файлов. Правила и цель игры "Ловушка". Отображение движущихся объектов игры на экране с помощью заголовочного файла "gameclass.h". Описание игрового процесса.
курсовая работа [70,6 K], добавлен 14.10.2012Приемы программирования в Delphi. Алгоритм поиска альфа-бета отсечения, преимущества. Описание программного средства. Разработка программы, реализующая алгоритм игры "реверси". Руководство пользователя. Листинг программы. Навыки реализации алгоритмов.
курсовая работа [357,1 K], добавлен 28.02.2011Игровая программа "шашки" для игры между человеком и компьютером. Разработка алгоритмов, историческая линия развития задач. Различные подходы к построению систем. Сокращенный листинг программы и описание алгоритма. Компоненты искусственного интеллекта.
курсовая работа [196,2 K], добавлен 26.03.2009Анализ игровых жанров для мобильных устройств и целевой аудитории. Разработка концепции игрового приложения, основной механики, меню и интерфейса игры. Описание переменных скриптов. Реализация выбора цели и стрельбы. Настройка работоспособности игры.
дипломная работа [1,4 M], добавлен 19.01.2017Язык программирования Pascal и его турбооболочка. Аналитический обзор игрового программного обеспечения. Функции модуля Crt. Постановка задачи создания несложной игровой программы "Турбозмей", алгоритм реализации и описание пользовательского интерфейса.
курсовая работа [100,4 K], добавлен 15.05.2014Разработка приложения на WinAPI с реализацией логической структуры в игре "Сапер". Реализация графической части приложения. Проверка на корректность поведения интерфейса программы, работы логической части игры, корректности записи и чтения файла.
курсовая работа [1,1 M], добавлен 17.10.2012Описание правил игры "Морской бой". Особенности современных компьютеров и искусственного интеллекта. Создание общей блок-схемы программы, ее внешний вид. Необходимые переменные, процедуры и функции. Характеристика объектов, используемых в приложении.
курсовая работа [950,1 K], добавлен 05.11.2012Разработка аналога игры "Крестики-нолики", где игроки выбирают размер поля. Правила игры. Интерфейс программы. Главная функция main. Класс XO. Метод вывода поля и хода игроков. Методы поиска крестиков, ноликов. Методы проверки выигрышных ситуаций игроков.
курсовая работа [281,5 K], добавлен 30.01.2018История возникновения и происхождения игры в шашки, ее популярность. Классификация шашечных игр по размерам доски и особенностям правил, виды и варианты шашек. Правила воспроизведения сражений в "Русские шашки". Составление алгоритма и кода программы.
курсовая работа [250,3 K], добавлен 28.01.2012Принципы написания консольных приложений на языке Java в среде Eclipse. Составление программы завтрака на основе списка продуктов, передаваемых в качестве параметров в командной строке. Создание пакета для классов, интерфейса, базового класса иерархии.
лабораторная работа [1,2 M], добавлен 01.05.2014