Главная » Статьи » Игры на java

Первая игра на Java (часть-5)
package jgames1;


import javax.swing.*;

/**
 * Created by nikelen on 2017-01-29.
 */

public class Main
{
 public static void main(String[] args)
 {
 JFrame f = new JFrame("JGames");// создаем окно с названием
 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// закрытие окна при клике крестика
 f.setSize(1100,600); // размер окна
 f.add(new Road());// добвляем в фрейм дорогу(класс)

 f.setVisible(true); // окно видемо

 }
}

---------------------------------------------------- ------------------------------- -----------------------------

package jgames1;

import javax.swing.*;
import javax.swing.Timer;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.*;
import java.util.List;

/**
 * Created by nikelen on 2017-01-29.
 */
public class Road extends JPanel implements ActionListener,Runnable { // класс дорога помещаем на панель

 Timer mainTimer = new Timer(20,this);// Таймер(класс) будет каждые 20мс запускать какую то функцию actionPerformed(this)
 Image img = new ImageIcon("res/dor.jpg").getImage();//загрузка картинки дороги
 Player p = new Player();// инициализ класс плеер

 Thread enemiesFactory= new Thread(this); // создаём параллельный поток(порождает соперников)
 List<Enemy> enemies = new ArrayList<Enemy>(); // создём список для хрнения противников

 public Road(){// конструктор
 mainTimer.start(); //запуск Таймера

 enemiesFactory.start();//запуск парал потока

 addKeyListener(new MyKeyAdapter()); // добавляем обработчик соб. клавиатуры
 setFocusable(true);//делаем дорогу в фокусе (для нажатия клавиш)
 }

 private class MyKeyAdapter extends KeyAdapter {// наследуем класс обработчик, в котором все методы пустые(реализуем нужные)
 public void keyPressed(KeyEvent e){ // перегружаем метод нажатия клавиши
 p.keyPressed(e); // вызов метода keyPressed для рlayer
 }
 public void keyReleased(KeyEvent e){ // перегружаем метод отпускания клавиши
 p.keyReleased(e); // вызов метода для рlayer
 }
 }
 public void paint(Graphics g) { // метод перерисовывает панель
 g = (Graphics2D) g;// приведение типов(рисует Graphics2D)
 g.drawImage(img, p.layer1, 0, null); //рисуем(что,x-слой1 и у не изменяем,...)
 g.drawImage(img, p.layer2, 0, null);
 g.drawImage(p.img, p.x, p.y, null);//рисуем(для плеер метод имж,х-плеер и у-плеер,...)

 g.setColor(Color.WHITE);//задаем цвет объекту Соlor
 Font font = new Font("Arial",Font.ITALIC,20);//Создём объект класса фонт (передаем в конструктор параметры)
 g.setFont(font);//устанвливаем наш шрифт font
 double v = (200/Player.MAX_V) * p.v;// расчет скорости
 ((Graphics2D) g).drawString("Скорость:" + v +" km/h",100,30 );//отрисовываем строку скорости

 Iterator<Enemy> i = enemies.iterator();// итератор(цикл) по списку соперников
 while (i.hasNext()){ //пока сущ элемент
 Enemy e = i.next();//создаем новый объект из текущего элемента
 if(e.x >= 2400 || e.x <= -2400){// если координаты элемента списка соперников >или<
 i.remove();// удаляем элемент из списка соперников
 } else {
 e.move();// к элементу применяем метод перемещения
 g.drawImage(e.img,e.x,e.y,null);//отрисовываем элемент в координатах
 }
 }
 }


 public void actionPerformed(ActionEvent e) {//// обновление событий каждые 20мс
 p.move(); //плеер перемещается
 repaint(); //перересовывет всё
 testCollisionWithEnemies();// проверка столкновений
 testWin();// проверка выиграша в игре
}
private void testWin() { // метод проверки на выиграш
 if (p.s > 40000){
 JOptionPane.showMessageDialog(null,"ПОБЕДА!!!!!");
 System.exit(0);
 }

}

 private void testCollisionWithEnemies(){ // метод проверки столкновений
 Iterator<Enemy> i = enemies.iterator();// итератор по списку соперников
 while (i.hasNext()){ //
 Enemy e = i.next(); //
 if (p.getRect().intersects(e.getRect())){ // если плеер столкнулся с элементом списка соперников
 JOptionPane.showMessageDialog(null,"BOOM!!!! BOOM!!!");
 System.exit(1); //выход в систему
 }
 }
 }


 @Override
 public void run(){// метод Runnable(точка входа во второй поток)
 while (true){ // бесконечный цикл создания соерников
 Random rand = new Random();// ссылка на Рандом
 try {
 Thread.sleep(rand.nextInt(2000));//засыпаем рандомно от0 о 2000мс
 enemies.add(new Enemy(1200,rand.nextInt(600),
 rand.nextInt(60),this));// добвляем соперника в рандом координатах

 }catch (InterruptedException e){ //
 e.printStackTrace();
 }
 }
 }

}

----------------------------------- ------------------------------------------------- -------------------------------------

package jgames1;

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;

/**
 * Created by nikelen on 2017-01-29.
 */
public class Player {

 public static final int MAX_V = 100; //мах ускорение
 public static final int MAX_TOP = 10;// мах верх положение
 public static final int MAX_BOTTOM = 480;// мах нижнее положение

 Image img_c = new ImageIcon("res/f1.png").getImage();//загрузка картинки машина прямо
 Image img_l = new ImageIcon("res/f_l1.png").getImage();//загрузка картинки машина влево
 Image img_r = new ImageIcon("res/f_r1.png").getImage();//загрузка картинки машина вправо
 Image img = img_c;//загрузка картинки по умолчанию

 int v = 0; // скорость
 int dv = 0; // ускорение
 int s = 0; //путь
 int x = 30; // нач координаты
 int y = 100;
 int dy = 0;
 int layer1 = 0; // первый слой(дорога)
 int layer2 = 1200;

 public Rectangle getRect(){ // получение прямоугоьников из машинки
 return new Rectangle(x,y,110,40); //возвращаем конструктор с размером машинки
 }

 public void move() { // метод движения
 s+= v; // путь увеличивается
 v +=dv;// скорость увеличивается
 if (v <= 0) v = 0;//если скорость =0
 if (v>= MAX_V) v = MAX_V;// если скорость болье мах
 y-=dy;// изменение координаты у(зависит от поворота)
 if (y<= MAX_TOP) y = MAX_TOP;// верхняя граница
 if (y>= MAX_BOTTOM) y = MAX_BOTTOM;// нижняя граница
 if (layer2 -v <= 0){// цикл показа слоёв дороги
 layer1 = 0;
 layer2 = 1200;
 }
 else{
 layer1 -= v;//слой уменьется
 layer2 -= v;
 }
 }
 public void keyPressed(KeyEvent e){ //метод обработки события нажатие клавиши
 int key = e.getKeyCode();//получаем код нажатой клавиши
 if (key == KeyEvent.VK_RIGHT) {// если курс влево
 dv = 5; //ускорение +
 }
 if (key == KeyEvent.VK_LEFT) {// если курс влево
 dv = -5; //ускорение -

 }
 if (key == KeyEvent.VK_UP) {// если курс вверх
 dy = 10; //поворот +
 img = img_l;//меняем каринку (поворот машины)
 }
 if (key == KeyEvent.VK_DOWN) {// если курс вниз
 dy = -10; //поворот -
  img = img_r;//меняем каринку (поворот машины)
 }
 }
 public void keyReleased(KeyEvent e) { //метод обработки события отуск клавиши
 int key = e.getKeyCode();//получаем код нажатой клавиши
 if (key == KeyEvent.VK_RIGHT || key == KeyEvent.VK_LEFT) {// если курс влево
 dv = 0; //ускорение 0
 }
 if (key == KeyEvent.VK_UP || key == KeyEvent.VK_DOWN) {// если курс влево
 dy = 0; //поворот 0
  img = img_c; // меняем картинку(машина прямо)
 }
 }
}

------------------------------------------------ -------------- --------------------------------------------------

package jgames1;

import javax.swing.*;
import java.awt.*;

/**
 * Created by nikelen on 2017-01-31.
 */
public class Enemy {

 Image img = new ImageIcon("res/f1.png").getImage();//загрузка картинки

 int v = 0; // скорость
 //int dv = 0; // ускорение
 //int s = 0; //путь
 int x = 30; // нач координаты
 int y = 100;
 //int dy = 0;
 Road road; // создаём поле дорога

 public Rectangle getRect(){ // получение прямоугоьников из машинки
 return new Rectangle(x,y,110,40); //возвращаем конструктор с размером машинки
 }

 public Enemy (int x,int y, int v, Road road ){ // конструктор
 this.x = x;
 this.y = y;
 this.v = v;
 this.road = road;
 }

 public void move(){ // метод движения

 x = x - road.p.v + v; // изменение положения врага

 }
}

########################################################################

 

Категория: Игры на java | Добавил: kuzma (01.02.2017)
Просмотров: 416 | Рейтинг: 5.0/1
Всего комментариев: 0
avatar

Программирование игр на Python

Django - создание сайтов с нуля

Javascript - просто используем готовые решения