Розробка 2D сенсорної гри: "Астероїди"

Специфіка та процес розробки ігрового застосування до мобільного пристрою. Діаграма послідовності варіантів використання, класів, таблиці. Середовище розробки NetBeans IDE. Рекомендації по встановленню та налаштуванню гри "Астероїди", текст застосування.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 21.01.2013
Размер файла 2,9 M

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

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

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

Вступ

В даний час мобільні технології активно розвиваються. Такий швидкий розвиток мобільних пристроїв та безпровідних технологій зв'язку дає можливість використання інформаційних та обчислювальних послуг у будь-якому місці, де це необхідно. На 2011 рік доля мобільних пристроїв, що підтримують платформу J2ME становить приблизно 70 відсотків. Інтенсивно розвиваються мобільні платформи BlackBerry, Android, iOS та ін..

В залежності від типу мобільного пристрою та сфери використання можуть бути розроблені різні застосування. Немає ніяких сумнівів, що необхідність в різних категоріях мобільних застосуваннях буде постійно збільшуватися, а функціональність мобільних пристроїв - розширюватись. Тому розробка застосувань до мобільних пристроїв ще багато часу буде перспективним напрямком розвитку інформаційних технологій.

Завдання на курсовий проект

Розробити 2D сенсорну гру: "Астероїди". Космічний корабель переміщується у космосі та знищує астероїди різної величини, які рухаються у різних напрямках та з різною швидкістю, поки не розіб'є всі.

Специфіка розробки ігрового застосування

Для того щоб ігрове застосування було зрозумілим для користувача, з досвіду розробників, були підкреслені наступні вимоги мінімалізму.

Мінімалізм ідеї.

Ідея гри повинна бути простою і зрозумілою користувачу.

Проста ідея повинна запасти в душу гравцеві і запам'ятатися надовго.

Мінімалізм дизайну.

Геймплей (ігровий процес) повинен бути максимально простим і зрозумілим без підказок і навчання.

Управління повинне бути простим і підходящим більшості гравців. Небажано робити декілька варіантів управління.

Геймлуп (цикл гри) і ігрова сесія мають бути короткими, але геймплей повинен давати можливість знову і знову перегравати (endless mode або можливість постійного поліпшення результатів).

Рівень повинен бути влаштований так, щоб завжди легко можна було б внести зміни і протестувати їх.

Меню повинно бути максимально простим, як можна менше переходів.

У грі повинно бути якомога менше тексту (в ідеалі тільки назва гри і автори). Все інше - візуально (іконки, стрілочки і т.д.) і інтуїтивно зрозуміло. Це мінімізує роботи по локалізації.

У дизайні повинно бути якомога менше цифр - це спрощує настройку. І, звичайно, як можна менше цифр (крім статистики) має бути надано на обробку гравцеві.

Мінімалізм у графіці.

Маленька кількість об'єктів на сцені / екрані.

Об'єкти не повинні бути величезними. В крайньому випадку повинні будуватися з більш дрібних (скорочуємо розмір по текстурам).

Простий і запам'ятовується зовнішній вигляд головного герою/об'єкт.

Головний герой/об'єкт повинен мати такий вигляд і форму, щоб анімація його була простою, але веселою (якомога менше анімаційної роботи).

Нечіткий, без деталей задній фон.

Елементи графічного інтерфейсу повинні використовувати загальноприйняті стандарти (вид іконок, наприклад). Не потрібно винаходити велосипед.

Мінімалізм програмування.

По максимуму використовувати поточні напрацювання.

Простий дизайн повинен привести до простих алгоритмів та структур даних.

Чим менше коду, тим менше розмір ігрового застосування.

Мінімалізм звукового оформлення.

Легка фонова музика, яка сподобається всім.

Маленька кількість звуків (вони навантажують процесор).

Звуки повинні бути простими, не відволікаючими і не навантажувати, а занурювати в геймплей.

Головний підсумок: всі зайві елементи треба прибирати відразу ж. Якщо прибрати елемент, і виявляється, що без нього можна обійтися, значить, швидше за все, він тут не потрібен.

Опис застосування

Ігрове застосування, яке необхідно розробити, повинно мати головне меню. У якому будуть пункти меню, що дозволять:

Починати нову гру або продовжувати почату раніше.

Змінювати/вимикати звук.

Вихід з гри.

Вікно гри повинно відображувати наступні елементи:

Фон ігрового застосування.

Об'єкт (космічний корабель), що літає за допомогою клавіш.

Астероїди - ціль головного об'єкту, що рухаються хаотично.

Шкала проходження рівня.

Елемент виходу з гри.

При 100 процентному проходженні небезпеки користувач автоматично переходить на інший рівень. При цьому інтенсивність падінь та кількість астероїдів збільшується.

Загальна схема застосування

На рисунку 4.1. зображена загальна схема ігрового застосування «NLO»

Графічний двигун - проміжне програмне забезпечення (англ. middleware), програмний движок, основним завданням якого є візуалізація (рендерінг) двомірної або тривимірної комп'ютерної графіки. Основне і найважливіше відмінність «ігрових» графічних движків від неігрових полягає в тому, що перші повинні обов'язково працювати в режимі реального часу, тоді як другі можуть витрачати по кілька десятків годин на виведення одного зображення.

Інтерфейс користувача - компонент, що відображає хід гри користувачеві та використовується для введення необхідних даних.

Програмні модулі - функціонально закінчені фрагменти програми, оформлені у вигляді окремого файлу з початковим кодом або пойменованої безперервної її частини, призначені для використання в інших програмах. Модулі дозволяють розбивати складні завдання на більш дрібні відповідно до принципу модульності. Звичайно проектуються таким чином, щоб надавати програмістам зручну для багаторазового використання функціональність (інтерфейс) у вигляді набору функцій, класів, констант. Модулі можуть об'єднуватися в пакети і, далі, в бібліотеки. Зручність використання модульної архітектури полягає в можливості поновлення (заміни) модуля, без необхідності зміни іншої системи. У більшості випадків різні модулі можуть запускатися як на одному сервері, так і на різних, для розподілу навантаження і створення розподіленої архітектури.

Ігровий менеджер - фрагмент програми за допомогою якого відбувається керування геймплеєм (ігровим процесом).

Екран головного меню - модуль, що відповідає за відображення головного/початкового меню гри.

Ігровий екран - модуль, що відповідає за відображення головного ігрового екрану.

Ресурси - компонент який містить необхідні графічні зображення та звукові ефекти для відображення гри.

Рис. 1 - Загальна схема застосування

Діаграма варіантів використання

Діаграма варіантів використання (Use-Cases Diagram) - це UML діаграма за допомогою якої в графічному вигляді можна зобразити вимоги до розроблюваної системі.

Діаграма варіантів використання - це вихідна концептуальна модель проектованої системи, вона не описує внутрішній устрій системи. Діаграми варіантів використання призначені для:

Визначення спільного кордону функціональності проектованої системи

Сформулювати загальні вимоги до функціонального поведінки проектованої системи

Розробка вихідної концептуальної моделі системи

Створення основи для виконання аналізу, проектування, розробки і тестування.

Діаграма варіантів використання складається з ряду елементів. Основними елементами є: варіанти використання або прецедент (use case), актор або дійова особа (actor) і відносини між акторами і варіантами використання (relationship).

Як ми бачимо, на рисунку 4.2. зображена діаграма варіантів використання нашого ігрового застосування «NLO».

Актори:

Актором називається будь-який об'єкт, суб'єкт або система, що взаємодіє з розроблюваною бізнес-системою ззовні для досягнення своїх цілей або вирішення певних завдань. Це може бути людина, технічний пристрій, програма або будь-яка інша система, яка служить джерелом впливу на розроблювану систему. Актори взаємодіють з системою за допомогою передачі і прийому повідомлень від варіантів використання. Повідомлення являє собою запит актором сервісу від системи і отримання цього сервісу.

Рис. 2 - Діаграма варіантів використання

Актор «Користувач» - відіграє роль головного актору у всьому ігровому застосуванні. У реальному житті являє собою людину/гравця, зацікавлену у проходженні усіх етапів гри та отриманні головного призу/кубку. Користувач, використовуючи головне меню застосування має можливість входити у гру, продовжувати раніше початий процес або обирати новий, настроювати ефекти звуку, закінчувати процес гри.

Актор «Ігрове застосування» - актор, який являє собою програмні модулі, що відповідають за реалізацію ігрового застосування «NLO». Ігрове застосування має відображати головне меню гри, для вибору типу гри та налаштувань звукових ефектів. Також відображати ігрове поле, генерувати відео та звукові ефекти, зберігати кожен етап гри при виході.

Діаграма послідовності варіантів використання

Діаграма класів та таблиці

Діаграма класів (class diagram) служить для представлення статичної структури моделі системи в термінології класів об'єктно-орієнтованого програмування. Діаграма класів може відбивати, зокрема, різні взаємозв'язки між окремими сутностями предметної області, такими як об'єкти і підсистеми, а також описує їхню внутрішню структуру і типи відносин. На даній діаграмі не вказується інформація про тимчасові аспекти функціонування системи. З цієї точки зору діаграма класів є подальшим розвитком концептуальної моделі проектованої системи. 

Діаграма класів є деякий граф, вершинами якого є елементи типу "класифікатор", які пов'язані різними типами структурних відносин. Слід зауважити, що діаграма класів може також містити інтерфейси, пакети, відносини і навіть окремі екземпляри, такі як об'єкти і зв'язки. Коли говорять про даній діаграмі, мають на увазі статичну структурну модель проектованої системи. Тому діаграму класів прийнято вважати графічним представленому таких структурних взаємозв'язків логічної моделі системи, які не залежать або інваріантні від часу. Діаграма класів складається з безлічі елементів, які в сукупності відображають декларативні знання про предметної області. Ці знання інтерпретуються в базових поняттях мови UML, таких як класи, інтерфейси і відносини між ними та їх складовими компонентами. При цьому окремі компоненти цієї діаграми можуть утворювати пакети для представлення більш загальної моделі системи. Якщо діаграма класів є частиною деякого пакета, то її компоненти повинні відповідати елементам цього пакета, включаючи можливі посилання на елементи з інших пакетів.

У результаті розробки ігрового застосування були створенні наступні класи:

Game Manager, що відповідає класу «Ігровий менеджер».

Main Midlet, що відповідає класу «Ігровий екран».

Obstacle, що відповідає класу «Перешкода».

SS Game Canvas, що відповідає класу «Ігрові межі екрану».

Space Ship, що відповідає класу «Літаюча тарілка».

Star, що відповідає класу «Зірки».

Процес розробки ігрового використання

Процес розробки ігрового застосування складався з наступних кроків:

Проектування то кодування - написання додатку.

Компіляція

Попередня перевірка

Упаковка - створення архівного файлу JAR

Розпакування та розміщення ресурсів використання під контролем емулятору.

Виконання - запуск емулятором ігрового використання

Налагодження - пошук та виправлення помилок.

Для створення «NLO» використовувалось наступне програмне забезпечення:

Java SDK

SDK (від англ. Software development kit) - комплект засобів розробки, який дозволяє фахівцям з програмного забезпечення створювати додатки для певного пакета програм, програмного забезпечення базових засобів розробки, апаратної платформи, комп'ютерної системи, ігрових консолей, операційних систем і інших платформ.

Програміст, як правило, отримує SDK безпосередньо від розробника цільової технології або системи. Часто SDK поширюється через Інтернет. Багато SDK розповсюджуються безкоштовно для того, щоб спонукати розробників використовувати дану технологію або платформу.

Java Development Kit (скорочено JDK) - безкоштовно поширюваний компанією Oracle Corporation (раніше Sun Microsystems) комплект розробника додатків на мові Java, що включає в себе компілятор Java (javac), стандартні бібліотеки класів Java, приклади, документацію, різноманітні утиліти і виконавчу систему Java (JRE). До складу JDK не входить інтегроване середовище розробки на Java, тому розробник, що використовує тільки JDK, змушений використовувати зовнішній текстовий редактор і компілювати свої програми через утиліти командного рядка.

Всі сучасні інтегровані середовища розробки додатків на Java, такі, як NetBeans IDE, Sun Java Studio Creator, IntelliJ IDEA, Borland JBuilder, Eclipse, спираються на сервіси, що надаються JDK. Більшість з них для компіляції Java-програм використовують компілятор з комплекту JDK. Тому ці середовища розробки або включають в комплект постачання одну з версій JDK або вимагають для своєї роботи попередньої інсталяції JDK на машині розробника.

NetBeans IDE

Рис. 3 - Середовище розробки NetBeans IDE

NetBeans IDE - вільна інтегрована середовище розробки додатків (IDE) на мовах програмування Java, JavaFX, Python, PHP, JavaScript, C + +, Ада та ряду інших.

Проект NetBeans IDE підтримується і спонсорується компанією Oracle, однак розробка NetBeans ведеться незалежним співтовариством розробників-ентузіастів (NetBeans Community) і компанією NetBeans Org.

За якістю і можливостям останні версії NetBeans IDE не поступаються кращим комерційним (платним) інтегрованим середах розробки для мови Java, таким, як IntelliJ IDEA, підтримуючи рефакторинг, профілювання, виділення синтаксичних конструкцій кольором, автодоповнення набираються конструкцій на льоту, безліч визначених шаблонів коду та ін .Для розробки програм в середовищі NetBeans і для успішної інсталяції та роботи самого середовища NetBeans повинен бути попередньо встановлений Sun JDK або J2EE SDK підходящої версії. Середа розробки NetBeans за умовчанням підтримувала розробку для платформ J2SE і J2EE. Починаючи з версії 6.0 Netbeans підтримує розробку для мобільних платформ J2ME, C + + (тільки g+ +) і PHP без установки додаткових компонентів.

Рекомендації щодо використання застосування

Технічна характеристика

Мобільні пристрої, що підтримують платформу J2ME.

Рекомендації по встановленню та налаштуванню

Для використання ігрового додатку необхідно перенести файли на мобільний пристрій. Програма налаштується автоматично. Необхідно буде лише запустити керуючий файл.

Рекомендації користувачу

Після запуску ігрового застосування ви потрапите у головне меню гри, яке надасть вам зробити наступне налаштування:

Обрати гру, яку ви почали раніше, або почати гру наново.

Включити/виключити звук у застосуванні.

Вийти з гри.

Рис. 4 - Ігрове застосування

Суть гри полягає у знищенні як можна більше астероїдів космічним кораблем.

Для переміщення по екрану використовуйте ігрові клавіші джойстика мобільного пристрою або цифри.

ігровий застосування netвeans

Текст застосування

GameManager.java

package main;

import java.util.Random;

import java.io.IOException;

import javax.microedition.lcdui.game.Sprite;

import javax.microedition.lcdui.Font;

import javax.microedition.lcdui.Graphics;

import javax.microedition.lcdui.game.GameCanvas;

import javax.microedition.lcdui.game.LayerManager;

import javax.microedition.lcdui.Image;

import java.io.InputStream;

import javax.microedition.media.MediaException;

import javax.microedition.media.Player;

import javax.microedition.media.Manager;

public class GameManager extends LayerManager {

// game parameters

// asteroid

private Image asteroidImage;

private static final String ASTEROID_IMAGE = "/resource/5.png";

private static final int ASTEROID_WIDTH = 50;

private static final int ASTEROID_HEIGHT = 41;

private static final int MAX_OBS = 5; // max asteroids

private int OBS_MAX_X_RATE = 3; // asteroid x speed +

private int OBS_MIN_X_RATE = -3;// asteroid x speed -

private int OBS_MAX_Y_RATE = 4;

private int OBS_MIN_Y_RATE = 1;

//stars

private Image starImage;

private static final String STAR_IMAGE = "/resource/stars.png";

private static final int STAR_WIDTH = 10;

private static final int STAR_HEIGHT = 10;

private static final int MAX_STARS = 30; // max stars displayed

private static final int OBS_RATE = 30; // rate at which ateroids appear

private int obsAppTick =100; // asteroid timer, control the appearence of asteroid

// ship

private Image shipImage;

private static final String SHIP_IMAGE = "/resource/blue_ship.png";

private static final int SHIP_WIDTH = 40;

private static final int SHIP_HEIGHT = 33;

// bullet Image bullet

private Image bulletImage ;

private static final String BULLET_IMAGE = "/resource/shot.png";

private static final int BULLET_WIDTH = 25;

private static final int BULLET_HEIGHT = 25;

// game windows

private int canvasX, canvasY;

private int leftPosX=0, leftPosY=0;// game windows

private int height, width;

// variables and objects

protected boolean GameOver = false; // game condition

private int score = 0; // score

private Random r = new Random(System.currentTimeMillis()); // random generator

protected SSGameCanvas gameCanvas;

private SpaceShip ship;

private Player player = null;

private Bullet bullet ;

// create asteroids array

private Obstacle [] obs = new Obstacle [MAX_OBS];

// create stars array

private Star [] stars = new Star[MAX_STARS];

// temp asteroid

private Obstacle t ;

private Bullet newBullet;

// constructor

public GameManager(int x, int y, int height, int width, SSGameCanvas theCanvas) throws IOException{

super();

this.canvasX = x;

this.canvasY = y;

this.height = height;

this.width = width;

this.gameCanvas = theCanvas;

//setViewWindow();

setViewWindow(leftPosX,leftPosY,width,height);

//---------------------------------------------------------------------

// LOAD SHIP

//---------------------------------------------------------------------

// load ship image

shipImage = Image.createImage(SHIP_IMAGE);

// create space ship

ship = new SpaceShip(shipImage, SHIP_WIDTH, SHIP_HEIGHT);

try {

InputStream in = getClass().getResourceAsStream("/resource/shoting.wav");

player = Manager.createPlayer(in,"audio/x-wav");

player.setLoopCount(1);

player.start();

} catch (MediaException ex) {

ex.printStackTrace();

}

// set it position

ship.setRefPixelPosition(height/2, width/2);

this.append(ship);

bulletImage = Image.createImage(BULLET_IMAGE);

bullet = new Bullet (bulletImage, BULLET_WIDTH, BULLET_HEIGHT);

ship.initBullet(bulletImage, BULLET_WIDTH, BULLET_HEIGHT);

//--------------------------------------------------------------------

// LOAD STARS

//--------------------------------------------------------------------

// create stars

starImage = Image.createImage(STAR_IMAGE);

createStars();

//-------------------------------------------------------------------

// LOAD ASTEROIDS

//-------------------------------------------------------------------

asteroidImage = Image.createImage(ASTEROID_IMAGE);

}

public void paint(Graphics g) {

// paint graphics

paint(g,canvasX,canvasY);

// draw full health bar

g.setColor(255, 255, 250); // red

g.fillRect(canvasX, canvasY, width/2, 10);

// draw current health bar

g.setColor(125, 255, 10); // yellow

if (ship.getHPPercentage()>=0)

g.fillRect(canvasX+1, canvasY+1, convert2Long((ship.getHPPercentage())*(width/2)), 9);

// draw score

g.setColor(255, 255, 255);

g.drawString("" + score, width - 20, 10, g.TOP|g.LEFT);

//game over?

if (GameOver) endGame(g);

// paint background

// background.paint(g);

}

public void advance(int ticks) {

//if (GameOver) return;

int keyState = gameCanvas.getKeyStates();

// turn shift to right

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

ship.moveRight(width);

}

// turn shift to left

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

ship.moveLeft();

}

// speeds up

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

ship.moveUp();

}

// slow down

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

ship.moveDown(height);

}

// fire

if ((keyState & GameCanvas.FIRE_PRESSED) != 0){

try {

newBullet = ship.fire(ticks); // fire new bullet

// throw old bullet away

if (newBullet != null) {

try {

player.stop();

player.setLoopCount(1);

player.start();

}

catch (MediaException ex) {

ex.printStackTrace();

}

this.remove(bullet);

bullet = newBullet;

this.append(bullet);

}

} catch (java.lang.NullPointerException e) { e.printStackTrace();}

System.out.println(" Object created");

}

// create new asteroid if the old has disappeared

try {

createObstacle(ticks);

}

catch (java.lang.ArrayIndexOutOfBoundsException e) {e.printStackTrace();}

if (bullet!= null)

bullet.advance(ticks);

if (!bullet.isAppear())

this.remove(bullet);

// advance stars

updateStars(ticks);

// advance ship

ship.advance(ticks);

// checking collision

// ship's collision with asteroid

t = checkCollisionWithAsteroids(ship);

if (t!=null) {

this.remove(t); // remove collided asteroid

t.destroy(); //destroy asteroid

// if collised

ship.collised(ticks, t.getDamage());

}

// bullet's collision with asteroid

t = checkCollisionWithAsteroids(bullet);

if (t!=null && bullet.isAppear()) {

score += t.getScore() ; // increase score

this.remove(t); // remove collided asteroid

t.destroy(); //destroy asteroid

bullet.destroy();// remove bullet

this.remove(bullet);

}

//if ship is destroyed

if (ship.isDestroyed()) {

this.remove(ship); //

GameOver= true;

}

// scanf for asteroid collision

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

// if object is not null

if ((obs[i]!= null)){

t= this.checkCollisionWithAsteroids(obs[i]);

// if there is collision

if (t!=null)

if (t!=obs[i])// if it does not collided to itself

// reversed direction

if (obs[i].getSpeedX()*t.getSpeedX()>0) {

//

if ((obs[i].getRefPixelY()+obs[i].getHEIGHT())-(t.getRefPixelY() -t.getHEIGHT())<=0 ) {

if (obs[i].getSpeedY() >1 )

obs[i].setSpeedY(obs[i].getSpeedY()-1);

t.setSpeedY(t.getSpeedY()+1);

}

if (obs[i].getRefPixelX()>=t.getRefPixelX()) {

obs[i].setSpeedX(-obs[i].getSpeedX());

t.setSpeedX(t.getSpeedX()+1);

} else {

t.setSpeedX(-t.getSpeedX());

obs[i].setSpeedX(obs[i].getSpeedX()+1);

}

}

else {

obs[i].setSpeedX(-obs[i].getSpeedX());

t.setSpeedX(-t.getSpeedX());

}

}

}

}

public int getRandom ( int min, int max) {

return (Math.abs(r.nextInt()))%(max-min) + min;

}

public void createObstacle (int ticks) throws java.lang.ArrayIndexOutOfBoundsException{

int i = 0;

// check asteroid rate

while ( (ticks -OBS_RATE) > obsAppTick && (i<MAX_OBS) ) {

// this could be done by repositioning the asteroid instead of recreating the object

try {

if (obs[i]!=null) {

// if asteroid disappeared

if (!(obs[i].appear)) {

this.remove(obs[i]); // remove it

//obs[i].destroy(); // destroy it

obs[i].reAppear(getRandom(OBS_MIN_X_RATE, OBS_MAX_X_RATE), getRandom(OBS_MIN_Y_RATE,OBS_MAX_Y_RATE), true, getRandom(0,width));

//obs[i] = (new Obstacle(, ,true,getRandom(0,width)));// create new one

this.append(obs[i]); // add to the phone

obsAppTick = ticks; // set new asteroid timer

}

}

else {

// create asteroids

obs[i]= new Obstacle (asteroidImage, ASTEROID_WIDTH, ASTEROID_HEIGHT);

obs[i].reAppear(getRandom(OBS_MIN_X_RATE, OBS_MAX_X_RATE), getRandom(OBS_MIN_Y_RATE,OBS_MAX_Y_RATE), true, getRandom(0,width));

this.append(obs[i]);

obsAppTick = ticks;

}

}

catch (Exception e){

e.printStackTrace();

}

finally {

i++;

}

}

for ( i = 0; i < MAX_OBS ; i++) {

if (obs[i] != null ){

obs[i].advance(ticks, width, height);

}

}

}

private void createStars() {

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

try {

stars[i]= new Star(starImage, STAR_WIDTH, STAR_HEIGHT, getRandom(0, width), getRandom(0, height));

} catch (java.io.IOException e) {e.printStackTrace();}

this.append(stars[i]);

}

}

private void updateStars(int ticks) {

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

stars[i].advance(ticks, getRandom(0,width), height);

}

}

private Obstacle checkCollisionWithAsteroids(Sprite t) {

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

if (obs[i]!=null)

if (obs[i].collidesWith(t, true)) {

return obs[i];

}

}

return null;

}

protected void endGame(Graphics g) {

GameOver=true;

gameCanvas.stop();

Font f = g.getFont();

int h = f.getHeight()+40;

int w = f.stringWidth("High score")+40;

g.setColor(250,250,250);

g.drawString("Score " + score,(width-w)/2,(height-h)/2,g.TOP | g.LEFT);

}

public int convert2Long (double a ) {

try {

String temp = Double.toString(a);

return Integer.parseInt((temp.substring(0, temp.indexOf("."))));

}

catch (Exception e) { return 0;}

}

}

MainMidlet.java

package main;

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

import javax.microedition.media.Manager;

import javax.microedition.media.MediaException;

import javax.microedition.media.Player;

import java.io.IOException;

import java.io.InputStream;

public class MainMidlet extends MIDlet implements CommandListener{

private SSGameCanvas gameCanvas ;

private Command exitCommand ;

private Player player = null;

public void startApp() {

try {

//create new game thread

gameCanvas = new SSGameCanvas();

gameCanvas.start(); // start game thread

exitCommand = new Command("Exit",Command.EXIT,1);

gameCanvas.addCommand(exitCommand);

gameCanvas.setCommandListener(this);

Display.getDisplay(this).setCurrent(gameCanvas);

}

catch (java.io.IOException e) { e.printStackTrace();}

try {

// start sounds

InputStream in = getClass().getResourceAsStream("/resource/startfly.wav");

player = Manager.createPlayer(in,"audio/x-wav");

player.setLoopCount(1);

player.start();

} catch (MediaException ex) {

ex.printStackTrace();

}

catch (IOException ex) {

ex.printStackTrace();

}

}

public void pauseApp() {

}

public void destroyApp(boolean unconditional) {

if (player != null) {

player.close();

}

System.gc();

}

public void commandAction(Command command, Displayable displayable) {

if (command == exitCommand) {

destroyApp(true);

notifyDestroyed();

}

}

}

Список використаних джерел

1. http://goldie.co.ua/use-cases-diagram/

2. http://habrahabr.ru/

3. http://ru.wikipedia.org/wiki/Заглавная_страница

4. http://monetcom.tpu.ru/wp-content/uploads/2011/09/MAD_coursebook_ru.pdf

5. http://www.codeproject.com/Articles/36521/Mobile-Game-Programming-for-Beginners-Part-2-of-4

6. http://www.codeproject.com/Articles/36060/Mobile-Game-Programming-for-Beginners-Part-1-of-4

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


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

  • Визначення та застосування фракталів. Огляд предметної області, вибір засобів розробки програмного забезпеченя. Побудова діаграми варіантів використання, послідовності дій, класів та компонентів, математичної моделі. Тестування програмного продукту.

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

  • Вибір мови програмування та середовища розробки. Основні можливості мови php та сервера MySQL. Основні переваги середовища розробки NetBeans. Macromedia Dreamweaver як один з популярних середовищ розробки сайтів. Розробка програмного коду сайту.

    контрольная работа [3,0 M], добавлен 16.02.2013

  • Характеристики вузлів системи автоматичного закривання жалюзі. Розробка схеми електричної функціональної. Блок-схема алгоритму роботи пристрою. Середовище розробки програмної частини пристрою. Основні компоненти розробки програмної частини системи.

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

  • Тривимірна модель мобільного робота. Алгоритмізація моделі та її програмної реалізації з використанням бібліотек MFC та OpenGL. Розробка програмного забезпечення. Середовище розробки проекту Microsoft Visual Studio 2010. Керування рухами маніпулятора.

    курсовая работа [462,9 K], добавлен 03.04.2014

  • Комп’ютерна система фірми CodeGear - продукт JGear Team Client (Team In sight) - середовище розробки додатків (ІDE) для менеджерів. Безперервність вдосконалення ІС і засобів інструментальної розробки забезпечує виживання організації в ринкових умовах.

    реферат [2,0 M], добавлен 13.03.2009

  • Ігрові програми та BORLAND C++ BUILDER, застосованна для їх створення. Основні прийоми, застосовувані при проектуванні користувальницького інтерфейсу. Середовище розробки. Приклад використання видимих і невидимих компонентів. Прототип оброблювача подій.

    курсовая работа [611,9 K], добавлен 24.03.2009

  • Сучасні API для програмування тривимірної графіки, математичні основи. Віртуальна камера, конвеєр візуалізації. Вершинні та піксельні шейдери. Розробка та реалізація ігрового додатку. Система постобробки зображення. Реалізація механіки ігрового процесу.

    дипломная работа [4,7 M], добавлен 27.06.2013

  • Проблеми розробки сучасних баз даних. Моделювання предметної області "Адміністратор готелю". Застосування СУБД Microsoft ACCESS для реалізації системної архітектури бази даних. Результати тестування та рекомендації щодо удосконалення розробленої системи.

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

  • Android, iOS та Windows як основні платформи для розробки додатків для мобільних пристроїв. Перелік вимог до програмної системи. Основні вимоги, які є критичними для працездатності мобільного додатку. Аналіз основних напрямків розвитку системи.

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

  • Розробка моделі системи "Автомобільного магазину". Вивчення основи мови моделювання UML. Створення її для визначення, візуалізації, проектування й документування програмних систем. Використання діаграм кооперацій, послідовності, станів та класів.

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

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