Написание игры на Java

Разработка игрового приложения для мобильных устройств на базе операционной системы Android и изучение среды разработки Netbeans IDE. Назначение программы и область ее применения. Инструкция по использованию разработанной программы "Not so Epic Game".

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 22.05.2014
Размер файла 355,7 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Федеральное агентство по образованию Российской Федерации

Рязанский государственный радиотехнический университет

Кафедра вычислительной и прикладной математики

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе

Тема: ”Написание игры на Java”

Выполнил: Студент гр.2413

Фаст В.В.

Рязань 2014

Содержание

Введение

Постановка задачи

Назначение программы и область её применения

Достоинства разработанной программы

Инструкция по использованию разработанной программы

Листинг программы

Заключение

Библиографический список

Введение

В наше время сложно представить себе человека без сотового телефона, планшетного компьютера, смартфона или любого другого портативного мультимедийного устройства. Мы привыкли к тому, что всегда под рукой не только средство связи, но и множество полезных функций, таких как: калькулятор, органайзер, конвертер, календарь, часы. Смартфоны становятся новой мобильной игровой платформой, соревнуясь с классическими карманными игровыми системами вроде Nintendo DS или Playstation Portable.

В устройстве смартфона все довольно просто. Главным образом он состоит из нескольких отдельных блоков - памяти, процессора, который занимается вычислениями, хранилища данных, радиомодуля, который в свою очередь состоит из приемника и передатчика и отвечает за связь. На мой взгляд самое интересное здесь - операционная система, установленная на встроенную память. От операционной системы и ее версии зависят все основные возможности устройства. Смартфоны, как и персональные компьютеры, существуют в абсолютно разных комплектациях и под управлением разных операционных систем, разновидности которых мы рассмотрим далее.

По мере роста продаж мобильных устройств во всем мире, растет и спрос на различные приложения для них.

К сожалению, на сегодняшний день не существуют определенного стандарта средства разработки мобильных приложений. Каждый производитель пытается сделать операционную систему в своем устройстве более уникальной и запоминающейся пользователю, и как следствие возникают вопросы совместимости различных приложений на разных операционных системах.

Выполнение работы требует творческого подхода и применения дополнительных знаний из области программирования. Курсовой проект не предполагает коммерческого использования данного программного продукта.

Основной целью данной работы является разработка игрового приложения для мобильных устройств на базе операционной системы Android. И изучение среды разработки Netbeans IDE.

Постановка задачи

Требуется создать игру, в которой пользователь для победы должен найти спрятанный на карте объект.

Построение алгоритма задачи.

Приложение имеет меню должно состоять из пунктов

- Play

- High Score

- About

- Exit

Нажав на пункт меню «Play» пользователь перейдет непосредственно к игре, завершив которую он увидит свой результат (Время затраченное на нахождение объекта) и предложение ввести свое имя, в случае если в таблице рекордов есть для данного результата места, введя имя пользователь перейдет в меню High Score выйдя из которого он снова окажется в главном меню. В пункте меню «About» пользователь может ознакомиться с информацией о приложении. Пункт «Exit» инициирует выход из приложения

//Для выполнения работы необходимо создать следующие алгоритмы // след граф части

Так же необходимо написать такие графические объекты как элементы фона, земли и непосредственно сами спрайты.

Назначение программы и область её применения

Разработанное мною приложение предназначено для игры в «найди объект» игру.

Данная программа хорошо подходит для траты своего свободного времени.

Программа оснащена удобным интерфейсом и легка в освоении.

Достоинства разработанной программы

«Not so Epic Game»

1) Программа имеет интуитивно понятный интерфейс;

2) Не напрягающая 8-ми битная графика

Инструкция по использованию разработанной программы

После запуска приложения появится главное меню (рис. 4.1).

программа операционный мобильный android

Рисунок 4.1 Главное меню

Для того чтобы приступить к игре нажмите Start Game

Игра рисунок 1

Для победы необходимо найти объект

Игра рисунок 2

Для того чтобы перейти в меню рекордов нажмитеHigh Score

Меню Рекорды

Для перехода в меню «О приложении» нажмите About

Меню «О приложении»

Для выхода из приложения Exit

Листинг программы

package org.netbeans.j1.game.logic;

import java.io.IOException;

import java.util.Timer;

import java.util.TimerTask;

import javax.microedition.lcdui.Graphics;

import javax.microedition.lcdui.game.LayerManager;

import javax.microedition.lcdui.game.Sprite;

import javax.microedition.lcdui.game.TiledLayer;

import org.netbeans.j1.game.MazeCanvas;

import org.netbeans.j1.game.MazeGameDesign;

public class MazeManager extends LayerManager {

static int CANVAS_X;

static int CANVAS_Y;

static int DISP_WIDTH;

static int DISP_HEIGHT;

static int MOVE_LENGTH = 6;

static int MOVE_BUFFER = 4;

static int SQUARE_WIDTH = 32;

static int BACK_TILES;

static int JUMP_INT = 2;

static int JUMP_FRAC_NUM = 1;

static int JUMP_FRAC_DENOM = 2;

static final int NO_JUMP = -6;

static final int MAX_FREE_FALL = 3;

static final int MAX_SPEED = 3;

MazeCanvas myCanvas;

TiledLayer myWalls;

TiledLayer myBackground;

Sprite KosheiSprite;

int myViewWindowX;

int myViewWindowY;

int myIsJumping = NO_JUMP;

int myIsRunning = 0;

private Sprite jamesSprite;

private int lastVertDirection = 0;

private int lastHorDirection = 0;

private MazeManager.SpriteAnimationTask dukeSpriteAnimator;

private Timer timer;

private MazeGameDesign mazeDesign;

public MazeManager(int x, int y, int width, int height, MazeCanvas canvas) {

myCanvas = canvas;

CANVAS_X = x;

CANVAS_Y = y;

DISP_WIDTH = width;

DISP_HEIGHT = height;

}

public void init() throws Exception {

mazeDesign = new MazeGameDesign();

jamesSprite = mazeDesign.getGreywolfS();

KosheiSprite = mazeDesign.getKosheiUndeadS();

KosheiSprite.defineReferencePixel(KosheiSprite.getWidth() / 2, 0);//ex3

dukeSpriteAnimator = new SpriteAnimationTask(KosheiSprite, false);

myWalls = mazeDesign.getEarth();

mazeDesign.updateLayerManagerForLevel1(this);

timer = new Timer();

timer.scheduleAtFixedRate(dukeSpriteAnimator, 0, mazeDesign.KosheiUndeadSseq002Delay);

myViewWindowX = KosheiSprite.getX() - ((DISP_HEIGHT - SQUARE_WIDTH) / 2);

myViewWindowY = KosheiSprite.getY() - ((DISP_HEIGHT - SQUARE_WIDTH) / 2);

System.gc();

}

public void reset() {

remove(jamesSprite);

remove(KosheiSprite);

remove(myWalls);

dukeSpriteAnimator.cancel();

lastVertDirection = 0;

lastHorDirection = 0;

myIsRunning = 0;

myIsJumping = NO_JUMP;

System.gc();

}

public void paint(Graphics g) throws Exception {

g.setColor(MazeCanvas.WHITE);

g.fillRect(0, 0, DISP_WIDTH, DISP_HEIGHT);

setViewWindow(myViewWindowX, myViewWindowY, DISP_WIDTH, DISP_HEIGHT);

paint(g, CANVAS_X, CANVAS_Y);

}

public void requestMove(int hdirection, int vdirection) {

if ((myIsJumping == NO_JUMP) && (vdirection < 0)) {

myIsJumping++;

} else if (myIsJumping == NO_JUMP) {

KosheiSprite.move(0, 1);

if (!checkCollision()) {

myIsJumping = 0;

}

KosheiSprite.move(0, -1);

}

if ((myIsJumping <= MAX_FREE_FALL) && (myIsJumping != NO_JUMP)) {

myIsJumping++;

}

myIsRunning++;

if (myIsRunning > MAX_SPEED) {

myIsRunning = MAX_SPEED;

}

int horizontal = MOVE_LENGTH * myIsRunning;

int vertical = 0;

if (myIsJumping != NO_JUMP) {

vertical = myIsJumping * myIsJumping * JUMP_INT + (myIsJumping * myIsJumping * JUMP_FRAC_NUM) / JUMP_FRAC_DENOM;

if (myIsJumping < 0) {

vdirection = -1;

} else {

vdirection = 1;

}

}

updateSprite(hdirection, vdirection);

boolean vcrash = false;

boolean hcrash = false;

while ((vertical >= 1 && !vcrash) || (horizontal >= 1 && !hcrash)) {

KosheiSprite.move(0, vdirection);

if (checkCollision()) {

KosheiSprite.move(0, -vdirection);

vcrash = true;

} else {

vertical -= 1;

vcrash = false;

myViewWindowY += vdirection;

}

KosheiSprite.move(MOVE_BUFFER * hdirection, 0);

if (checkCollision()) {

KosheiSprite.move(-MOVE_BUFFER * hdirection, 0);

hcrash = true;

} else {

KosheiSprite.move(-MOVE_BUFFER * hdirection, 0);

KosheiSprite.move(hdirection, 0);

horizontal -= 1;

hcrash = false;

myViewWindowX += hdirection;

}

}

if (vcrash) {

myIsJumping = NO_JUMP;

}

if (hcrash) {

myIsRunning = 0;

}

if (KosheiSprite.collidesWith(jamesSprite, true)) {

myCanvas.setGameOver();

return;

}

}

private void updateSprite(int hdirection, int vdirection) {

if (hdirection > 0) {

KosheiSprite.setTransform(Sprite.TRANS_NONE);

} else if (hdirection < 0) {

KosheiSprite.setTransform(Sprite.TRANS_MIRROR);

}

if (lastHorDirection != hdirection) {

KosheiSprite.setFrameSequence(mazeDesign.KosheiUndeadSseq002);

}

if (lastVertDirection != vdirection) {

if (vdirection > 0) {

KosheiSprite.setFrameSequence(mazeDesign.KosheiUndeadSfall);

} else if (vdirection < 0) {

KosheiSprite.setFrameSequence(mazeDesign.KosheiUndeadSjump);

}

}

if ((vdirection != 0) || (hdirection != 0)) {

dukeSpriteAnimator.forward();

} else {

dukeSpriteAnimator.setMoving(false);

KosheiSprite.setFrameSequence(mazeDesign.KosheiUndeadSseq002);

}

lastHorDirection = hdirection;

lastVertDirection = vdirection;

}

boolean checkCollision() {

return KosheiSprite.collidesWith(myWalls, true);

}

private class SpriteAnimationTask extends TimerTask {

private boolean moving = false;

private boolean forward = true;

private Sprite sprite;

public SpriteAnimationTask(Sprite sprite, boolean forward) {

this.sprite = sprite;

this.forward = forward;

}

public void run() {

if (!this.moving) {

return;

}

if (this.forward) {

this.sprite.nextFrame();

} else {

this.sprite.prevFrame();

}

}

public void forward() {

this.forward = true;

this.moving = true;

}

public void backward() {

this.forward = false;

this.moving = true;

}

public void setMoving(boolean isMoving) {

this.moving = isMoving;

}

}

}

package org.netbeans.j1.game.logic;

import org.netbeans.j1.game.GameMIDlet;

import org.netbeans.j1.game.MazeCanvas;

public class GameThread extends Thread {

boolean myShouldPause;

static boolean myShouldStop;

MazeCanvas myDungeonCanvas;

GameMIDlet myDungeon;

private long myLastRefreshTime;

private static long MIN_WAIT = 100;

public GameThread(MazeCanvas canvas,

GameMIDlet dungeon) {

myDungeonCanvas = canvas;

myDungeon = dungeon;

}

private long getWaitTime() {

long retVal = 1;

long difference = System.currentTimeMillis() - myLastRefreshTime;

if(difference < MIN_WAIT) {

retVal = MIN_WAIT - difference;

}

return(retVal);

}

public void pause() {

myShouldPause = true;

}

synchronized void resumeGame() {

myShouldPause = false;

notify();

}

public synchronized void requestStop() {

myShouldStop = true;

this.notify();

}

public void run() {

try {

myDungeonCanvas.getManager().init();

} catch(Exception e) {

myDungeon.errorMsg(e);

}

try {

myDungeonCanvas.start();

} catch(Exception e) {

myDungeon.errorMsg(e);

}

myDungeonCanvas.flushKeys();

myShouldStop = false;

myShouldPause = false;

while(true) {

if(myShouldStop) {

break;

}

myLastRefreshTime = System.currentTimeMillis();

myDungeonCanvas.checkKeys();

myDungeonCanvas.updateScreen();

synchronized(this) {

try {

wait(getWaitTime());

} catch(Exception e) {}

}

if(myShouldPause) {

synchronized(this) {

try {

wait();

} catch(Exception e) {}

}

}

}

}

}

package org.netbeans.j1.game;

import java.io.IOException;

import javax.microedition.lcdui.*;

import javax.microedition.lcdui.game.*;

import org.netbeans.j1.game.logic.MazeManager;

public class MazeCanvas extends GameCanvas

implements CommandListener {

static int CORNER_X = 0;

static int CORNER_Y = 0;

static int DISP_WIDTH;

static int DISP_HEIGHT;

static int FONT_HEIGHT;

static Font FONT;

public static final int BLACK = 0;

public static final int WHITE = 0xffffffff;

public static final int OPAQUE_BLACK = 0xff000000;

public static final int OPAQUE_GREEN = 0x008200;

Display myDisplay;

GameMIDlet myDungeon;

MazeManager myManager;

static boolean myGameOver;

int myGameTicks = 0;

Command myExitCommand;

Command myMenuCommand;

Command myOkCommand;

boolean myMenuMode;

int myFocusedIndex;

public void setGameOver() {

myGameOver = true;

myDungeon.gameOver(myGameTicks);

}

public MazeManager getManager() {

return myManager;

}

static boolean getGameOver() {

return (myGameOver);

}

public MazeCanvas(GameMIDlet midlet) {

super(false);

myDisplay = Display.getDisplay(midlet);

myDungeon = midlet;

setFullScreenMode(true);

DISP_WIDTH = getWidth();

DISP_HEIGHT = getHeight();

if (myManager == null) {

myManager = new MazeManager(CORNER_X, CORNER_Y, DISP_WIDTH, DISP_HEIGHT, this);

}

}

public void start() throws IOException {

myGameOver = false;

myGameTicks = 0;

myDisplay.setCurrent(this);

}

public void reset() {

myManager.reset();

myGameOver = false;

}

public void flushKeys() {

getKeyStates();

}

protected void hideNotify() {

}

protected void showNotify() {

}

public void paint(Graphics g) {

try {

myManager.paint(g);

} catch (Exception e) {

myDungeon.errorMsg(e);

return;

}

g.setColor(BLACK);

g.fillRect(0, 0, getWidth(), 15);

g.setColor(WHITE);

g.drawString(String.valueOf(myGameTicks), getWidth(), 0, Graphics.TOP | Graphics.RIGHT);

g.drawString("Время: ", getWidth() - 30, 0, Graphics.TOP | Graphics.RIGHT);

g.drawString("Найдите Волчару", 0, 0, Graphics.TOP | Graphics.LEFT);

if (myGameOver) {

g.setColor(OPAQUE_GREEN);

g.fillRect(DISP_WIDTH/2 - DISP_WIDTH/3, DISP_HEIGHT/2 - DISP_HEIGHT/4, DISP_WIDTH*2/3, DISP_HEIGHT/2);

g.setColor(WHITE);

g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_LARGE));

g.drawString("GAME OVER", DISP_WIDTH/2, DISP_HEIGHT/2 - 20, Graphics.HCENTER | Graphics.BOTTOM);

g.drawString("Ваш результат " + myGameTicks, DISP_WIDTH/2, DISP_HEIGHT/2, Graphics.HCENTER | Graphics.BOTTOM);

g.drawString("Нажмите", DISP_WIDTH/2, DISP_HEIGHT/2 + 30, Graphics.HCENTER | Graphics.BOTTOM);

g.drawString("любую кнопку", DISP_WIDTH/2, DISP_HEIGHT/2 + 40, Graphics.HCENTER | Graphics.BOTTOM);

}

}

public void updateScreen() {

try {

paint(getGraphics());

flushGraphics(CORNER_X, CORNER_Y, DISP_WIDTH, DISP_HEIGHT);

} catch (Exception e) {

myDungeon.errorMsg(e);

}

myGameTicks++;

}

public void checkKeys() {

if (!myGameOver) {

int keyState = getKeyStates();

int vertical = 0;

int horizontal = 0;

if ((keyState & LEFT_PRESSED) != 0) {

horizontal = -1;

}

if ((keyState & RIGHT_PRESSED) != 0) {

horizontal = 1;

}

if ((keyState & UP_PRESSED) != 0) {

vertical = -1;

}

if ((keyState & DOWN_PRESSED) != 0) {

}

myManager.requestMove(horizontal, vertical);

}

}

public void commandAction(Command arg0, Displayable arg1) {

}

public void keyPressed(int keyCode) {

if (myGameOver) {

try {

reset();

flushKeys();

myDungeon.switchDisplayable(null, myDungeon.getFormUserAndScore());

} catch (Exception ex) {

ex.printStackTrace();

}

}

}

}

Графическая составляющая

Игрок

Деревья(низ)

Деревья(верх)

Элементы фона

Волк

Заключение

В результате проделанной работы было разработано игровое приложение, которое возможно установить на любое мультимедийное устройство под управление операционной системы Android версии не ниже 2.0.

В процессе разработки были исследованы различные операционные системы мобильных устройств, платформы и способы разработки игровых приложений.

Таким образом, можно говорить о том, что поставленные задачи были выполнены в полной мере.

Список использованной литературы.

1. Lukas Hasik, Fabiola Gallegos Rios «MOBILE GAME»место издание год выпуска колво страниц.

2. Брюс Эккель «Философия Java.».

3. Голощапов А. «Google Android программирование для мобильных устройств».

Размещено на Allbest.ru


Подобные документы

  • Разработка клиент-серверного игрового приложения на примере игры в шашки для мобильных устройств на базе операционной системы Android. Обзор мобильных платформ. Экраны приложения и их взаимодействие. Графический интерфейс, руководство пользователя.

    курсовая работа [2,6 M], добавлен 15.06.2013

  • Анализ деятельности группы компаний "Инрэко ЛАН". Общая характеристика, основы проектирования и разработка операционной системы Android. Этапы разработки программного игрового приложения с использованием физики. Скриншоты, отображающие игровой процесс.

    отчет по практике [2,7 M], добавлен 19.07.2012

  • Преимущества операционной системы Android. Проектирование интерфейса приложений. Визуальные редакторы и средства кроссплатформенной разработки. Оптимизация игрового процесса, выбор фреймворка и библиотек. Классификация и характеристика игр по жанрам.

    дипломная работа [2,6 M], добавлен 10.07.2017

  • Архитектура операционной системы Android, набор библиотек для обеспечения базового функционала приложений и виртуальная машина Dalvik. Объектно-ориентированный язык программирования Java как инструмент разработки мобильных приложений для ОС Android.

    дипломная работа [1,6 M], добавлен 08.07.2015

  • Средства разработки развивающих и обучающих игр и используемой программы. Среда выполнения и Dalvik. Разработка приложения для платформы Android. Графический интерфейс и обработка касаний экрана. Разработка экранов приложения и их взаимодействия.

    дипломная работа [2,1 M], добавлен 18.01.2016

  • Структура и архитектура платформы Android. Основные достоинства и недостатки операционной системы Android. Среда разработки Eclipse, платформа Java. Подготовка среды разработки. Вкладка "Погода", "Курс валют", "Новости". Просмотр полной новости.

    дипломная работа [1,0 M], добавлен 11.07.2014

  • Характеристика работы операционной системы Android, используемой для мобильных телефонов. Создание Android проекта в среда разработки Eclipse. Общая структура и функции файла манифест. Компоненты Android приложения. Способы осуществления разметки.

    курсовая работа [1,0 M], добавлен 15.11.2012

  • Архитектура и история создания операционной системы Android. Язык программирования Java. Выбор средства для реализации Android приложения. Программная реализация Android приложения. Проведение тестирования разработанного программного обеспечения.

    курсовая работа [167,8 K], добавлен 18.01.2017

  • Архитектура операционной системы Android. Инструменты Android-разработчика. Установка Java Development Kit, Eclipse IDE, Android SDK. Настройка Android Development Tools. Разработка программы для работы с документами и для осуществления оперативной связи.

    курсовая работа [2,0 M], добавлен 19.10.2014

  • Современное состояние рынка мобильных приложений. Основные подходы к разработке мобильных приложений. Обоснование выбора целевой группы потребителей приложения. Этапы проектирования и разработки мобильного приложения для операционной системы Android.

    курсовая работа [987,1 K], добавлен 27.06.2019

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.