Главная » Статьи » Игры на java |
Первая игра на Java (часть-3)
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); // окно видемо } } ----------------------------------------- ----------------------------------- ------------------------------------------------ kage 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);//рисуем(для плеер метод имж,х-плеер и у-плеер,...) 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){ p.move(); //плеер перемещается repaint(); //перерисовывет всё } @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 = 50; //мах ускорение public static final int MAX_TOP = 10;// мах верх положение public static final int MAX_BOTTOM = 480;// мах нижнее положение Image img = new ImageIcon("res/f_l1.png").getImage();//загрузка картинки 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 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; //поворот + } if (key == KeyEvent.VK_DOWN) {// если курс вниз dy = -10; //поворот - } } 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 } } } ---------------------------------------------- --------------------------------------------------------------- package jgames1; import javax.swing.*; import java.awt.*; /** * Created by nikelen on 2017-01-31. */ public class Enemy { Image img = new ImageIcon("res/f_l1.png").getImage();//загрузка картинки int v = 0; // скорость //int dv = 0; // ускорение //int s = 0; //путь int x = 30; // нач координаты int y = 100; //int dy = 0; Road road; // создаём поле дорога 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; // изменение положения врага } } #####################################################################
| |
Просмотров: 397 | |
Всего комментариев: 0 | |