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

Виктор Курышев -Java разработка игры с нуля - логическое завершение кода

                                         Смотри видео:

                          

 

Для стрельбы одиночными выстрелами

 в методе обновления игрока - после добавления
 новой пули в список пуль
 установим запрет стрельбы - isFiring = false

Классы в которых нужно произвести изменения:
package kuzma_bubleshooter2D;

import java.awt.*;

/**
 главный герой игры
 */
public class Player {

 private double x;//координа х героя
 private double y;
 private int r; // радиус героя
 private int speed;// скорость
 private Color color1;// цвет
 private Color color2;// цвет2

 // стаич прем - кавиши перемещения

 public static boolean up;
 public static boolean down;
 public static boolean left;
 public static boolean right;
 private double dx;// смещение
 private double dy;
 public static boolean isFiring;//стрельба
 private double health;
 // Constructor
 public Player(){
 x = GamePanel.WIDTH / 2;// нач координаты героя
 y = GamePanel.HEIGHT / 2;
 r = 5;
 speed = 5;
 color1 = Color.WHITE;
 health = 3;
 // смещение
 dx = 0;
 dy = 0;
 // нач знач клавиш
 up = false;
 down = false;
 left = false;
 right = false;
 isFiring = false;
 }
 // гетеры
 public double getX(){
 return x;
 }
 public double getY(){
 return y;
 }
 public double getR(){
 return r;
 }

 // - здоровья
 public void hit() {
 health--;
 System.out.println(health);
 }



 // обновления
 public void update(){
 // смещение героя по игровому полю
 if (up && y >r){
 y -= speed;
 }
 if (down && y <GamePanel.HEIGHT -r){
 y += speed;
 }
 if (left && x >r){
 x -= speed;
 }
 if (right && x <GamePanel.WIDTH -r){
 x += speed;
 }
 if(up && left || up && right || down && left || down && right){
 dy = dy * Math.sin(Math.toRadians(45));
 dx = dx * Math.cos(Math.toRadians(45));
 }
 y += dy;
 x += dy;

 dy = 0;
 dx = 0;

  if (isFiring){ // если стрельба true
 GamePanel.bullets.add(new Bullet());
 isFiring = false;
 }
 }

 // отрисовка героя
 public void draw(Graphics2D g){
 g.setColor(color1);
 g.fillOval((int) (x-r),(int) (y-r), 2*r,2*r);
 g.setStroke(new BasicStroke(3));
 g.setColor(color1.darker());
 g.drawOval((int) (x-r),(int) (y-r), 2*r,2*r);
 g.setStroke(new BasicStroke(1));
 }

}

_________________________________________________________

Для привязки полета пули 
по прицелу(курсор мышки) - добавим
 переменные: distX и distY.
 distX = GamePanel.mouseX - x (разница по х от мышки до пули)
  distY = y - GamePanel.mouseY 
Закон изменения положения пули на поле :
y = y - speed*distY/(Math.sqrt(distX*distX + distY*distY)) 
 x = x + speed*distX/(Math.sqrt(distX*distX + distY*distY))


package kuzma_bubleshooter2D;

import java.awt.*;

/**
 * пуля
 */
public class Bullet {

 private double x;
 private double y;
 private int r;
 private Color color;
 private int speed;

 //private double bulletDX;//смещение по х
 //private double bulletDY;//
 private double distX;// разница по х от мышки до пули
 private double distY;//
 //private double dist;// расстояние от мышки до пули

 // Constructor

 public Bullet(){

// присвиваем нач положение пули = коодинатам героя
 x = GamePanel.player.getX();
 y = GamePanel.player.getY();
 r = 2;// радиус пули
 speed = 20; // скорость

 distX = GamePanel.mouseX - x ;// разница по х от мышки до пули
 distY = y - GamePanel.mouseY ;

 color = Color.WHITE;// цвет */
 }
 // геттеры
 public double getX() {
 return x;
 }
 public double getY() {
 return y;
 }
 public int getR() {//для получения радиуса
 return r;}

 // смещение пули
  public void update(){
 //y = y - speed;
 y = y - speed*distY/(Math.sqrt(distX*distX + distY*distY)) ;
 x = x + speed*distX/(Math.sqrt(distX*distX + distY*distY));
 }
 // отрисовка
 public void draw(Graphics2D g){
 g.setColor(color);//передаём цвет
 g.fillOval((int)x,(int)y,r, 2*r);//рисуем пулю

 }
 // проверка где пуля
 public boolean remove_f(){
 if(y < 0) { //если вылетела
 return true;
 }
 return false;

 }
}

___________________________________________________________

Для одиночной стрельбы
 вводим переменную 
перезарядки private boolean isFiring_on
И вносим изменения в обработчики 
событий клавиши - пробел и кнопки мышки.

package kuzma_bubleshooter2D;

import java.awt.event.*;

/**
 обработчик событий
 */
public class Listeners implements MouseListener, KeyListener, MouseMotionListener {
 // проверка нажатой клавиши
  private boolean isFiring_on; // дослать патрон

 public void keyPressed(KeyEvent e) {
 int key = e.getKeyCode();// получить код нажатой клавиши
 // проверка клавиши
 if (key == KeyEvent.VK_W) {
 Player.up = true;
 }
 if (key == KeyEvent.VK_S) {
 Player.down = true;
 }
 if (key == KeyEvent.VK_A) {
 Player.left = true;
 }
 if (key == KeyEvent.VK_D) {
 Player.right = true;
 }
  if (key == KeyEvent.VK_SPACE) {
 if (isFiring_on)// если патрон в патроннике
 Player.isFiring = true; //стрельба разрешена
 isFiring_on = false; // нет патрона
 }
 if (key == KeyEvent.VK_ESCAPE) {
 GamePanel.state = GamePanel.STATES.MENUE;
 }

 }
 // проверка отжатой клавиши
 public void keyReleased(KeyEvent e){
 int key = e.getKeyCode();
 if (key == KeyEvent.VK_W) {
 Player.up = false;
 }
 if (key == KeyEvent.VK_S) {
 Player.down = false;
 }
 if (key == KeyEvent.VK_A) {
 Player.left = false;
 }
 if (key == KeyEvent.VK_D) {
 Player.right = false;
 }
 if (key == KeyEvent.VK_SPACE) {
 Player.isFiring = false;
  isFiring_on = true; // патрон в патроннике
 }
 }
 public void keyTyped(KeyEvent e){

 }


 @Override
 public void mouseClicked(MouseEvent e) {
 //GamePanel.player.isFiring = true;
 }

 @Override
 public void mousePressed(MouseEvent e) {
 if (e.getButton() == MouseEvent.BUTTON1) {

 GamePanel.leftMouse = true;

 // if (isFiring_on)
 Player.isFiring = true;
 //isFiring_on = false;
 }
 }



 public void mouseReleased(MouseEvent e){
 if (e.getButton() == MouseEvent.BUTTON1) {
 GamePanel.player.isFiring = false;
 //isFiring_on = true;
 GamePanel.leftMouse = false;
 }
 }

 @Override
 public void mouseEntered(MouseEvent e) {

 }

 @Override
 public void mouseExited(MouseEvent e) {

 }

 @Override
 public void mouseDragged(MouseEvent e) {// метод переноса мышкой
 GamePanel.mouseX = e.getX();// получаем коорд. мыши
 GamePanel.mouseY = e.getY();//
 }

 @Override
 public void mouseMoved(MouseEvent e) {
 GamePanel.mouseX = e.getX();//
 GamePanel.mouseY = e.getY();//
 }
}
Категория: Игры на java | Добавил: kuzma (27.02.2017)
Просмотров: 1950 | Рейтинг: 2.5/2
Всего комментариев: 0
avatar

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

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

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