Как написать свою змейку на Java за 15 минут


Оглавление (нажмите, чтобы открыть):

Пишем змейку на C++

Давным-давно, когда мониторы были зелёными, а 64Кб оперативы на борту считалось нормой, существовала игрушка под названием Snake. Она также была известна под названиями Змейка, Удав, Питон и даже Червяк. По прошествии времени появилось множество клонов этой игры под различные платформы: от Flash до мобильных телефонов и смартфонов. Но вот та реализация, работающая в текстовом режиме, видимо умерла вместе с теми компьютерами, для которых она была написана.

И вот, за пару свободных вечеров был написан очередной клон легендарного Snake, который я и представляю вашему вниманию: Oldschool Snake.

Как играть

Управление змейкой клавишами управления курсором. Esc — завершение игры. Для выхода из игры надо нажать Esc или клавишу N на вопрос «Once more?». Змейка не должна натыкаться на стенки и на собственный хвост. Это — смерть. Змейка не умеет ползать хвостом вперёд. Попытаться заставить её это сделать — верная смерть. Кормить змейку надо, естественно, долларами. Когда змейка ест, она растёт.

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

Лицензия

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

Замечания по реализации

Игрушка очень простая. Основа игрушки была написана за пару вечеров. Правда потом, наверное, неделя ушла на отладку и, главным образом, на тестирование и допиливание. Вполне возможно, что где-то затаились недобитые баги. Отстрел разрешён.

В этот вариант программы уже заложены некоторые возможности по усовершенствованию игры. Но при этом теряется аутентичность.

Программа написана для Windows 2000 Professional (и выше). Для переноса под другие операционки необходимо переписать реализацию класса CScreen и иметь порт библиотеки conio.h .

Компилировал TDM-GCC 4.8.1 С другими компиляторами не проверял.

Вопросы, замечание, предложения, ошибки — пожалуйста в комментарии. Но, скажу сразу, не судите строго за стиль — написано было быстро и, что называется, «для себя».

Как написать свою змейку на Java за 15 минут

Профиль
Группа: Участник
Сообщений: 38
Регистрация: 1.11.2007
Где: город Королёв

Репутация: нет
Всего: нет

Всем привет.
Не так давно начал изучать яву, и из-за необходимости практики решил написать своё приложение, так как нормальных идей нету остановился на змейке.
Итак змейку я представил как ArrayList содержащий в себе экземпляры класса отдельных кусочков её хвоста (квадратиков).
Шаг представляется добавлением нового экземпляра квадратика и стиранием предыдущего, но вот как раз в этом месте у меня косяк 🙁

Простой класс, нет ничего особенного и описывать не буду

Код
/**
* Направления.
*/
public class Direction <
protected static final byte UP=0, DOWN=1, LEFT=3, RIGHT=2;
/**
* текущее направление
*/
private byte NOW;
/**
* Конструктор, первоначально змея смотрит вверх.
*/
public Direction() <
NOW=UP;
>
/**
* Поворачивает змею.
* @param WHERE куда повернуть
*/
public void turn(byte WHERE) <
if((NOW==UP && WHERE!=DOWN) ||
(NOW==LEFT && WHERE!=RIGHT) ||
(NOW==DOWN && WHERE!=UP) ||
(NOW==RIGHT && WHERE!=LEFT))
NOW=WHERE;
>

public byte getNOW() <
return NOW;
>
>

Класс апплета, вроде тоже ничего сложного, надо сказать что пробел имитирует съедание змейкой одного объекта и фон чёрный для того чтобы было понятно как происходит движение змеи:

Код
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.*;

public class Game extends JApplet implements Runnable <
private Direction direction = new Direction();
Snake our_snake = new Snake();

public Game() <
setBackground(Color.BLACK);
addKeyListener(new KeyAdapter() <
@Override
public void keyPressed(KeyEvent e) <
switch(e.getKeyCode()) <
case KeyEvent.VK_DOWN:
direction.turn(Direction.DOWN);break;
case KeyEvent.VK_UP:
direction.turn(Direction.UP);break;
case KeyEvent.VK_LEFT:
direction.turn(Direction.LEFT);break;
case KeyEvent.VK_RIGHT:
direction.turn(Direction.RIGHT);break;
case KeyEvent.VK_SPACE:
our_snake.add();
>
>
>);
>

@Override
public void paint(Graphics g) <
// g.clearRect(0, 0, getWidth(), getHeight());
showStatus(Integer.toString(our_snake.ckolko()));
our_snake.step(direction);
our_snake.paint(g);
>

public void run() <
for(;;) <
try <
Thread.sleep(250);
> catch (InterruptedException ex) <>
repaint();
>
>

@Override
public void start() <
Thread thread = new Thread(this);
thread.setPriority(Thread.MIN_PRIORITY);
thread.start();
>
>

И основной класс, который описывает змею, по идее тоже всё просто, но у меня косяк в методе paint, я не понимаю почему если добавить один квадратик, то предыдущие перестанут закрашиваться белым 🙁 в этом основной косяк.

Код
import java.awt.*;
import java.util.ArrayList;

public class Snake <
/**
* Класс описывает поведение каждого отдельного квадрата
* хвоста змеи.
*/
private class Square <
int NOW_X , NOW_Y;

private void paint(int x, int y, int part, Graphics g) <
g.setColor(Color.green); // хвост зелёный
g.fillRect(x, y, part, part); //квадратный
NOW_X = x;
NOW_Y = y;
>

private void erase(int part, Graphics g) <
g.setColor(Color.white);
g.fillRect(NOW_X, NOW_Y, part, part);
>

private int getNOW_X() <
return NOW_X;
>

private int getNOW_Y() <
return NOW_Y;
>
>
/**
* Динамический массив содержит все отдельные части хвоста змеи.
*/
ArrayList al = new ArrayList(4);
/**
* Ширина и высота одной части змеи
*/
private final int part = 6;
/**
* Текущие координаты.
*/
private int x=200,y=225;
/**
* С помощью этого флага удлиняем змейку.
*/
private boolean delete = true;
/**
* Конструктор
*/
Snake()

protected void paint(Graphics g) <
if(delete) <
al.get(al.size()-1).erase(part, g); // мне кажется элементы не стираются когда их больше одного из-за отсутствия имени у экземпляра
// класса, хотя может я не прав, это просто догадака
al.remove(al.size()-1);
>
delete = true;
al.add(new Square()); // попробуйте перенести эти строки в начало метода
al.get(0).paint(x, y, part, g); // опять же почему будет такой результат я не понимаю, стираться всё-равно же должно
>

protected void add() <
delete = false;
>

public int ckolko() <
return al.size();
>


protected void step(Direction direction) <
switch(direction.getNOW()) <
case Direction.UP:
y -= 6;break;
case Direction.DOWN:
y += 6;break;
case Direction.LEFT:
x -= 6;break;
case Direction.RIGHT:
x += 6;break;
>
>
>

Это сообщение отредактировал(а) invis87 — 4.4.2009, 12:49

AA — Aussie Animal

Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: нет
Всего: 104

Kangaroo
Дата 5.4.2009, 00:53 (ссылка) | (нет голосов) Загрузка .
Код
if(delete) <
al.get(0).erase(part, g); // тут использовать 0
al.remove(0);
>
delete = true;
al.add(new Square());
al.get(al.size()-1).paint(x, y, part, g); // а тут — последний элемент

Профиль
Группа: Участник
Сообщений: 38
Регистрация: 1.11.2007
Где: город Королёв

Репутация: нет
Всего: нет

invis87
Дата 5.4.2009, 16:19 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 38
Регистрация: 1.11.2007
Где: город Королёв

Репутация: нет
Всего: нет

Довёл до разума. Всё ещё сырая, но играть можно
Буду рад услышать критику.
Вот она + исходники.

invis87
Дата 13.4.2009, 23:59 (ссылка) | (нет голосов) Загрузка .
Код
import java.awt.*;
import java.util.Random;
import java.util.ArrayList;
/**
*
* @author invis
*/
public class Snake <
/**
* Класс описывает поведение каждого отдельного квадрата
* хвоста змеи.
*/
private class Square <
private int NOW_X , NOW_Y;

private void paint(int x, int y, int part, Graphics g) <
g.setColor(Color.green); // хвост зелёный
g.fillRect(x, y, part, part); //квадратный
NOW_X = x;
NOW_Y = y;
>

private void erase(int part, Graphics g) <
g.setColor(Color.white);
g.fillRect(NOW_X, NOW_Y, part, part);
>
>
/**
* Динамический массив содержит все отдельные части хвоста змеи.
*/
ArrayList al = new ArrayList(4);
/**
* Ширина и высота одной части змеи
*/
private final int part = 6;
/**
* Объект для рисования «еды» в случайном месте.
*/
Random random = new Random();
/**
* Текущие координаты.
*/
private int x=216,y=216;
/**
* Координата Х «еды».
*/
private int eatX;
/**
* Координата Y «еды».
*/
private int eatY;
/**
* С помощью этого флага удлиняем змейку.
*/
private boolean delete = true;
/**
* Создана ли уже «еда» для змейки.
*/
private boolean alreadyCreate = false;
/**
* Жива ли змея.
*/
protected boolean alive = true;
/**
* Конструктор создаёт один экземпляр квадратика.
*/
Snake()

protected void paint(Graphics g) <
if(delete) <
al.get(0).erase(part, g);
al.remove(0);
>else
al.add(new Square());
al.get(al.size()-1).paint(x, y, part, g);
>

public int gdeY() <
return al.get(al.size()-1).NOW_Y;
>

public int gdeX() <
return al.get(al.size()-1).NOW_X;
>

protected void step(Direction direction) <
switch(direction.getNOW()) <
case Direction.UP:
y -= 6;break;
case Direction.DOWN:
y += 6;break;
case Direction.LEFT:
x -= 6;break;
case Direction.RIGHT:
x += 6;break;
>
//не врезалась ли змейка в стену
if(x > 471 || x 471|| y

Код
/**
* Направления.
* @author invis
*/
public class Direction <
protected static final byte UP=0, DOWN=1, LEFT=3, RIGHT=2;
/**
* текущее направление
*/
private byte NOW;
/**
* Конструктор, первоначально змея смотрит вверх.
*/
public Direction() <
NOW=UP;
>
/**
* Поворачивает змею.
* @param WHERE куда повернуть
*/
public void turn(byte WHERE) <
if((NOW==UP && WHERE!=DOWN) ||
(NOW==LEFT && WHERE!=RIGHT) ||
(NOW==DOWN && WHERE!=UP) ||
(NOW==RIGHT && WHERE!=LEFT))
NOW=WHERE;
>

public byte getNOW() <
return NOW;
>
>

Код
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.*;
/**
*
* @author invis
*/
public class Game extends JApplet implements Runnable <
private Direction direction = new Direction();
Snake our_snake = new Snake();
/**
* Флаг нужнг для передачи фокуса во время первого рисования.
*/
boolean mFirstPaint = true;

public Game() <
setSize(480, 480);
setBackground(Color.white);
addKeyListener(new KeyAdapter() <
@Override
public void keyPressed(KeyEvent e) <
switch(e.getKeyCode()) <
case KeyEvent.VK_DOWN:
direction.turn(Direction.DOWN);break;
case KeyEvent.VK_UP:
direction.turn(Direction.UP);break;
case KeyEvent.VK_LEFT:
direction.turn(Direction.LEFT);break;
case KeyEvent.VK_RIGHT:
direction.turn(Direction.RIGHT);break;
>
>
>);
>
/**
* Выводит сообщение о поражении.
*/
public void loose() <
getGraphics().drawString(«LOOSER», 220, 230);
>

@Override
public void paint(Graphics g) <
// передаём фокус апплету
if (mFirstPaint) <
mFirstPaint = false;
requestFocus();
>
showStatus(«X — » + Integer.toString(our_snake.gdeX()) + «; Y — » + Integer.toString(our_snake.gdeY()));
g.setColor(Color.black);
g.drawRect(4, 4, 471, 471);
our_snake.step(direction);
our_snake.paint(g);
our_snake.food(g);
>

public void run() <
while(our_snake.alive) <
try <
Thread.sleep(100);
> catch (InterruptedException ex) <>
repaint();
>
if(!our_snake.alive)
>

@Override
public void start() <
Thread thread = new Thread(this);
thread.setPriority(Thread.MIN_PRIORITY);
thread.start();
>
>

P.S. лучше открывать в appletviewer. У меня googlechrome и если апплет открыть 5-й страницей, то он немного подлагивает.
P.S.S Такая большая скорость только из-за того, что поле большое.

Это сообщение отредактировал(а) invis87 — 14.4.2009, 00:08

Профиль
Группа: Участник
Сообщений: 24
Регистрация: 18.7.2006

Репутация: нет
Всего: 0

zoidberg
Дата 12.5.2009, 09:23 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 9
Регистрация: 14.6.2009

Репутация: нет
Всего: нет

чёт не могу сделать проект. ето ведь в NetBeans пишется. ява апликейшн или десктоп ява апликешн. после того как создаю проект и классы пишет что не найден мейн класс.

Добавлено через 6 минут и 32 секунды
после запуска выдаёт такое:
а ещё плюётся на import java.awt.*;


Присоединённый файл ( Кол-во скачиваний: 15 )
error.JPG 16,73 Kb

KapsuL
Дата 14.6.2009, 23:28 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Комодератор
Сообщений: 2860
Регистрация: 29.12.2002

Создаем игру — змейка на языке javascript и наслаждаемся игрой в браузере

Приветствую всех, кто читает данную статью и загорелся желанием написать свою собственную игру. Сегодня я расскажу вам, как создается игра змейка на JavaScript. Я приведу код для html-разметки, после мы проработаем с вами стили оформления элементов и в конце пропишем логику работы приложения при помощи JavaScript. Давайте приступим!

Создаем свою игру «Змейка»

Займемся разметкой игрового поля

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

Я хочу, чтобы в моем приложении было несколько уровней сложности: легкий, средний и сложный. Также я хочу обеспечить пользователя возможностью сбросить игру и выбранный уровень сложности для того, чтобы он смог начать игру заново. Поэтому я создаю четыре кнопки, которые помещаю в отдельный блок buttons.

Как вы уже заметили, на каждую кнопку я навешиваю событие. Поэтому при нажатии на какую-либо из них будет запускаться определенная функция обработки.

Ну и в конце я хочу, чтобы у меня выводился счет.

Зададим правильное отображение элементов

Пока что ничего симпатичного в редакторах кода не отображается. Для этого стоит задать стилевые правила. Если вы пишете программу полотном, то внутри тега пропишите парный элемент и далее в него вносите css.

Или же создайте файл style.css и без указания style вставляйте описание стилей.

Итак, для начала сбросим стандартные параметры браузера, т.е. обнулим внутренние и внешние отступы:

Теперь создадим подложку под игровое поле:

Перейдем к кнопкам. Я хочу сделать их объемными и разместить сверху по центру поля. Поэтому для соответствующего класса я описываю внешние отступы. А после для самого элемента определяю стилевые характеристики.

Что-то уже прорисовывается, но описание счета «убежало» непонятно куда. Поэтому переместим его в нужную нам позицию и облагородим.

Вот мы и описали классы и теги, которые были перечислены в гипертекстовой разметке. Однако у вас наверняка возникли вопросы: «А где же само игровое поле? Где змея и что она должна собирать?»

Остальная разметка будет добавляться в скрипте. А пока подготовим для этого стили.

Само игровое поле мы опишем при помощи класса .field, а внешний вид клеток – с помощью класса .cell.

Далее нам нужна змея. Поэтому задаем ее классом .snake и указываем:

Ну и наконец змея должна что-то собирать. Поэтому описываем еду. В моей программе это будет квадрат красного цвета.

Дизайн игры готов. Теперь переходим к самому главному!

Заставим игру работать!

Вот теперь пришло время прописать логику работы «Змейки». Для этого после разметки html вставьте ниже прикрепленный код. Внимательно просмотрите его, если хотите разобраться во всех деталях реализации игры. По мере прочтения коды вы будете находить мои комментарии.

Ну вот игра готова!

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

Пишем змейку для Andro > Опубликовано 24.02.2012 автором davidmd

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

После достаточно долгого перерыва решил написать еще парочку статей. Дело в том, что владелец одного из сайтов смежной тематики предложил мне написать пару статей для его ресурса. Статьи должны были быть на тему создания какойнить простой игры. Я подумал и решил сделать змейку. Игра простая, но достаточно любопытная! Правда потом адрес владельца этого ресурса у меня куда-то потерялся, а вот сама игрушка осталась. Решил собственно осветить процесс. Игра написана без применения моего движка, так что эту серию статеек можно читать в отрыве от всего остального!

Ну, приступим! Для начала давайте разберемся что такое змейка, в чем смысл этой игры и пр. Значит по экрану устройства бегает изгибающаяся колбаса (собственно змейка!) кушает некие объекты на экране, съев объект начинает расти не по дням а по часам, столкнувшись сама с собой или с каким-то препятствием змея благополучно умирает :(. Возможны различные уровни сложности (ускоряется сама змея или появляется больше препятствий на ее пути). Управлять этой штукой я думаю лучше всего посредством акселерометра.

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

Начнем пожалуй с реализации логики самого приложения. Для этого опишем вот такой класс SnakeGame- который есть ни что иное, как реализация логики самой игры.

Что мы тут имеем? Начнем с вложенного класса pos. Это просто позиция — два целых числа x и y. Затем имеются константы направлений — ну и собственно сама переменная, в которой хранится направление — mDirection. А самое главное здесь у нас имеется два основных компонента змейки. Перовое (сама змейка) — массив mSnake двумерные координаты каждого сегмента змейки. Второе — само игровое поле mField — двумерный массив, каждый элемент массива кодирует одну клетку игрового поля: -1 это клетка в которой находится змея; 0 — это клетка в которой ничего нет, а 2 — это клетка в которой есть фрукт. Есть так же возможность использовать код 1 — в качестве стенки, но это так, задел на будущее :-).

Конструктор этого класса ничем не примечателен, в конструкторе очищается игровое поле, задается начальное положение змейки. А так же с помощью метода addFruite() добавляется один фрукт на игровое поле. Сам метод тоже ничем не примечателен.

По сути в том классе есть только один достаточно большой метод, разобраться с которым надо поподробнее. Это nextMove() — возвращающий true — если змея может двигаться дальше в направлении указанном в переменной mDirection. Прежде всего определяется в каком именно направлении должна двигаться змейка, затем для каждого направления проверяются такие параметры как «не упрется ли змея в стену», «не съест ли она фрукт», и если съест, то как именно будет расти дальше. В случае, если все проверки прошли удачно, то возвращается истина, если нет, то ложь. В коде достаточно подробно откомментировано каждое действие. Думаю не составит особого труда разобраться что к чему.

Ну вот, с логикой игры вроде разобрались. Теперь приступим к реализации логики самого приложения. Для пущей забавы я решил построить приложение на двух Activity: первая — это активити с меню игры, она же отображает результаты, а вторая — активити с самой игрой. Начнем с первой активити, тем более, что она достаточно простая.


Итак, для этой activity я сделал два разных файла разметки. Первый файл содержит всего одну кнопку, а второй — надписи и кнопку. Вот скриншоты:

А вот сам код класса:

Как видно из кода, мы загружаем файл разметки при показе Actvity и в зависимости от того, что находится в переменной GAME_MODE — файлы разметки разные.

Ну пожалуй хватит на сегодня. В следующий раз будем разбираться с отрисовкой.

Если у Вас есть вопросы или комментарии пишите на мыло или оставляйте в комментах.

Как написать свою змейку на Java?

Ещё одна простенькая игра, которая может написаться за 15 минут с помощью Java. Мне всегда казалось, что она выглядит простенько и ничего сложного в ее создании нет, хотя все игры делаются не так просто, но хотелось бы узнать, как можно такую игру сделать?

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

Да сделать не так уж и сложно. Просто нужно взять Java конструктор, и задать в нем нужные параметры. Но, безусловно, кое-какие начальные знания иметь необходимо а просто с наскоку и м нуля, вряд ли что-то получится. Впрочем, это касается практически всего.

Змейка на JavaScript и CSS

Всегда восхищался мастерством разработчиков, способных сотворить из CSS и JavaScript настоящие чудеса. Мне довелось посмотреть красивые демки, попробовать порты старых добрых игрушек с NES и много других интересных вещей. Не знаю, где авторы этих творений учатся тайным приемам мастерства, но вещи они творят просто шикарные. Вот сегодня мне попалась на глаза демонстрация простой игрушки — старой доброй змейки (поиграться можно под катом). Несмотря на банальность идеи, реализация выглядит суперски. Красивое оформление и под капотом лишь JavaScript и немного CSS.

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

Как создать Java-игру за час и сделать это работой

Любите ли вы играть? А создавать игры? Даже если раньше не пробовали, никогда не поздно начать! Тем более, написать свою собственную игру теперь можно всего за час. А если понравится быть не игроком, а творцом, новое умение можно превратить в полноценную профессию. Как? Сейчас расскажем!

Змейка или Тетрис — какая вам ближе?

IT-портал GeekBrains запустил новый проект — серию вебинаров по созданию несложных игр на языке Java.

Что нужно для участия? Ничего, кроме собственно компьютера. Даже если вы никогда в жизни не видели исходный код программы и при слове Java вспоминаете чашку с дымком, которая иногда просит обновлений — ничто не помешает написать игру.

На вебинарах подробно рассказывается о создании таких игр, как Conway’sGameofLife, Snake, Тетрис, SpaceInvaders, и полностью раскрывается процесс написания кода. Если же что-то не получилось или вам интересно увидеть “официальный” вариант кода, — все файлы для игры можно скачать со страницы с описанием вебинара.

Сейчас для просмотра доступны четыре вебинара, посвященных теплым ламповым играм 80-х годов. То, во что вы самозабвенно рубились когда-то на приставке или Nokia 3310, теперь можете создать сами!

А дальше что?

Люди, которые занимаются созданием игр, называются разработчиками игр или гейм-девелоперами. Этой профессии пока не учат в российских вузах, но ей за совсем небольшую плату учит GeekBrains!

Обучение длится полгода, из которых 4 месяца посвящено интенсивному освоению языка C# и среды Unity (а также Visual, а остальное время — стажировке в одной из дружественных IT-компаний. Два вебинара в неделю, домашние задания, поддержка преподавателя и однокурсников, сертификаты после прохождения каждой ступени обучения — скучно точно не будет! После успешной стажировки можно получить работу по новой профессии буквально не отходя от компьютера.

Гейм-девелоперы сейчас востребованы как никогда: люди любят играть, и аудитория онлайн- и оффлайн-игр постоянно увеличивается. Соответственно, всегда нужны новые разработчики, свежие идеи и предложения. В перспективе разработчик может возглавить, например, отдел, занимающийся конкретной игрой, или войти в руководство компании-девелопера игр. Нижний зарплатный порог в индустрии выше, чем у обычного менеджера среднего звена, а потолок ограничен только вашей фантазией — в прямом и переносном смысле. Так что подумайте, вдруг именно это и есть ваша будущая любимая работа?!

Как написать свою змейку на Java за 15 минут

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

Активисты «Народного контроля» выявили нарушения в ярославском магазине — Городской телеканал Ярославль | Ярославль.On—

Активисты, конечно, молодцы, да только это не их обязанность копаться в куче просроченных продукто..

Медитация Дыхание чакр. Мастер-учитель Рейки Владимир Мышкин — Владимир Мышкин | Ярославль.Online

Благодарю Вас Владимир!! Замечательная практика.

Как написать свою змейку на Java за 15 минут

HTML5 Canvas позволяет создавать 2D приложения любой сложности. Удобство этой технологии заключается в её кроссплатформенности, ибо любое устройство, где есть современный браузер, может запустить подобное приложение.

В этой статье я покажу как создать игру-змейку, на примере своей реализации этой игры (демо, GitHub).

Подготовка

Для начала создадим файловую структуру проекта, в моём случае она выглядит таким образом:

Информация о файлах:
  • В README.md находится небольшое описание проекта, в LICENSE — текст MIT лицензии.
  • В index.html находится HTML код, который подключает все файлы с JavaScript кодом.

  • В каталоге client/ находится клиентская часть исполняемого кода, в моей игре нет серверной части, но я всё же решил назвать каталог соответствующим образом.
  • client/app.js — файл приложения, в этом файле находится цикл игры и здесь же она запускается.
  • client/input.js — небольшая библиотека для более удобного определения нажатой клавиши.
  • client/game.js — файл игры, в этом файле объединяются все части игры, создаётся Canvas, обновляются и перерисовываются данные.
  • client/apple.js — файл яблока, здесь находятся функции для создания, удаления и рендеринга яблока.
  • client/snake.js — файл змейки, отвечает за передвижение и увеличение змейки.

index.html

Здесь всё просто, обычный HTML код с подключением всех JavaScript файлов.

client/app.js — приложение

Файл приложения — это файл, в котором инициализируется приложение и запускается бесконечный таймер.

Инициализация

Код инициализации приложения выглядит следующим образом:

Здесь мы инициализируем объект Game и создаём функцию init(), в которой запускается метод game.init() и запускается бесконечный таймер.

Бесконечный таймер

Функция main() — это функция которая будет вызываться постоянно, выглядит она следующим образом:

Здесь мы вызываем методы игры — метод обновления, а потом метод для рендеринга.

Обработка клавиш

Добавляем обработчик события keydown, который будет вызывать метод game.handleInput(e);

Запуск

Здесь всё просто — в самом конце мы вызываем функцию init(), что повлечёт за собой запуск всего приложения.

Полный код client/app.js выглядит так:

client/input.js — определение нажатой клавиши

Эта маленькая библиотека была создана для удобного определения нажатых клавиш.

Функция isKey(key) проверяет наличие key в объекте keys, чтобы заменить слово на код клавиши и если его там нет, то считается, что была введена какая-то буква. Потом полученный код сравнивается с введённым.

Для удобства здесь создаётся метод объекта windowinput, который позволяет использовать библиотеку следующим образом: input.isKey(‘SPACE’).

client/game.js — тело игры

В этом файле объединяются все части игры, создаётся Canvas, обновляются и перерисовываются данные.

Объект Game создаётся следующим образом:

В блоке // default settings определяются параметры игры по умолчанию, создаются константы, которые будут использовать остальные файлы.

Далее мы создаём объект Canvas стандартными методами Javascript и располагаем его по центру страницы. Настраиваем его ширину и высоту, задаём стиль рамке.

Потом, на основе параметров высоты, ширины и размера ячейки мы высчитываем количество ячеек на поле в ширину и высоту.

И в самом конце мы подключаем объекты Snake и Apple, чтобы использовать их в методах объекта Game.

Сброс игры

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

Функция reset выглядит таким образом:

Здесь мы заново инициализируем объекты Snake и Apple для сброса их значений в Game и обнуляем переменную this.score.

Инициализация игры

Приложение должно запускать функцию инициализации, поэтому объявим её:

Как написать свою змейку на Java за 15 минут

Админов: 1 из 7
Исполнителей: 9 из 131
Клиентов: 24 из 4868

korob2001
Дата 21.6.2009, 11:16 (ссылка) | (нет голосов) Загрузка .
О сайте
Наши цены
Соглашение
Наши гарантии
Способы оплаты
Вопросы и ответы
Отзывы клиентов
Бонусы и скидки
Регистрация
Вакансии
Мы работаем
ЕЖЕДНЕВНО
с 9:30 до 23:30 msk

Программа
2D игра Змейка(питон) на Java
в среде программирования Java NetBeans

Среда программирования: Java NetBeans

Название работы: 2D игра Змейка(питон) на Java

Вид работы: Программа

Описание: Написать на языке Java обычную 2D игру «змейка».
Использовать IDEA или Eclipse.
Условия:
— Змейка умирает, когда выходит за границы поля или сталкивается с препятствиями, сама с собой.
— Когда она съедает фрукт «a», она растет, получает очки. Счетчик очков внизу экрана
— Когда она съедает фрукт «b» она начинает быстрее двигаться, растет, получает очки на время — 4 сек.
— Фрукты «a» и «b» рандомно чередуются.
— Если змейка движется в определенном направлении, то кнопка противоположного направления не активна.
— Сделать счетчик очков.
— Сделать препятствия в виде стен на поле.
— Сделать сохранение игры. При выходе из игры и входе в нее заново, игра продолжится от там, где мы остановились.
— Сделать меню: Продолжить, Новая игра, таблица счета, выход.

Мастер Йода рекомендует:  Как задеплоить веб-приложение на связке React и Redux за 10 минут
Добавить комментарий