import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.AffineTransform;
import java.util.ArrayList;
/**
главный герой игры
*/
public class Player {
// нач координаты и размер объекта
private double x;//координа х героя
private double y;//координа y героя
private double w ; //ширина обьекта
private double h ; // высота объекта
private int speed;// скорость
private Color color1;// цвет
private double angl; // угол поворота
private double distX;// разница по х от мышки
private double distY;//
private double dist;// расстояние от мышки
// стаич прем - кавиши перемещения
public static boolean up;
public static boolean down;
public static boolean left;
public static boolean right;
private int i_anim;// счетчик кадров
//private Image img;
ArrayList <String> r_list =new ArrayList<String>();// кол. картинок для анимации движ. вправо
ArrayList <String> l_list =new ArrayList<String>();// кол. картинок для анимации движ. влево
private String s; // строка адреса для анимированной картинки
private double dx;// смещение
private double dy;
public static boolean isFiring;//стрельба
public double health;// здоровье
private int rech;// длин перезаряд
private long timer_s = 0;// начальное время для таймера
private long timer_f = 0;// конечное время
private long timer_d = 1000;// (количество миллисекунд) длительность таймера
//Image img = new ImageIcon("res/pl.png").getImage();//загрузка
Image img1 = new ImageIcon("res/low_bat.png").getImage();//загрузка
Image img3 = new ImageIcon("res/fon1.png").getImage();//загрузка картинки
public Rectangle getRect() { // получение прямоугоьников
return new Rectangle((int) x, (int) y, 58, 74); //возвращаем конструктор с размером объекта
}
// Constructor
public Player(){
x = GamePanel.WIDTH / 2;// нач координаты героя
y = 400;
w = 58;
h = 74;
speed = 5;
color1 = Color.WHITE;
health = 13;
// расстояние от мышки до пули
angl= 0;
// смещение
dx = 0;
dy = 0;
// нач знач клавиш
up = false;
down = false;
left = false;
right = false;
isFiring = false;
rech=0;
r_list.add("anim/sp1.png");
r_list.add("anim/sp2.png");
r_list.add("anim/sp3.png");
r_list.add("anim/sp4.png");
r_list.add("anim/sp5.png");
r_list.add("anim/sp6.png");
r_list.add("anim/sp7.png");
r_list.add("anim/sp8.png");
r_list.add("anim/sp9.png");
r_list.add("anim/sp10.png");
// картинки влево
l_list.add("anim/lsp1.png");
l_list.add("anim/lsp2.png");
l_list.add("anim/lsp3.png");
l_list.add("anim/lsp4.png");
l_list.add("anim/lsp5.png");
l_list.add("anim/lsp6.png");
l_list.add("anim/lsp7.png");
l_list.add("anim/lsp8.png");
l_list.add("anim/lsp9.png");
l_list.add("anim/lsp10.png");
i_anim = 0;// счетчик картинок
}
// гетеры
public double getX(){
return x;
}
public double getY(){
return y;
}
public double getW(){
return w;
}
public double getH(){
return h;
}
// - здоровья
public void hit() {
health--;
}
public boolean timer_rech (){
if (timer_s == 0) { //если таймер не запущен
timer_s = System.currentTimeMillis();// получаем текущее время милсек
timer_f = timer_s + timer_d; // конечное время трека
timer1.start();// запуск таймера индикации перезарядки
//GamePanel.a_norech.play();
//GamePanel.a_norech.setVolume();
}
if(timer_f<=System.currentTimeMillis()) { //если время звучания меньше текущювремени
timer_s=0;// обнуляем счетчик
return true;
}
else return false;
}
Timer timer1 = new Timer(2, new ActionListener() {
public void actionPerformed(ActionEvent e) {
rech=rech+2;//код который нужно выполнить каждую ед времени
//rech=rech+40;//код который нужно выполнить каждую ед времени
if(rech>=160){
timer1.stop();
GamePanel.a_norech.stop();
//GamePanel.a_rech.sound();
//GamePanel.a_rech.setVolume();
}
}
});
private void anim ( ArrayList <String> list){
i_anim++; // увеличиваем счетчик анимации
if (i_anim >=list.size()) i_anim = 0;// если список закончен - заново
s = list.get(i_anim);// получаем строку адреса картинки
}
// обновления
public void update(){
if(!left && !right){
i_anim = 0;// счетчик кадров = 0
s ="res/pl.png";
}
distX =GamePanel.mouseX -x ;// разница по х от мышки
distY =y - GamePanel.mouseY ;
dist = (Math.sqrt(distX*distX + distY*distY));
if (distX>0) angl = Math.acos(distY/(Math.sqrt(distX*distX + distY*distY)));
if (distX<0) angl =- Math.acos(distY/(Math.sqrt(distX*distX + distY*distY)));
if (health <=0){
//killed = true;
health = 0;}
// смещение героя по игровому полю
if (up && y >20){
//GamePanel.a_fly.play(); GamePanel.a_fly.setVolume();
// GamePanel.a_fly.timer_play ();
y -= speed*10;
}
if (y<=400) y+= 10;
if (y>400) y=400;
if (down && y <GamePanel.HEIGHT -h){
//GamePanel.a_fly.play(); GamePanel.a_fly.setVolume();
//GamePanel.a_fly.timer_play ();
// y += speed;
s= "res/pl_d.png";// картинка присевшего человечека
}
if (left && x >0){
x -= speed;
anim(l_list);
GamePanel.a_fly.play(); GamePanel.a_fly.setVolume();
GamePanel.a_fly.timer_play ();
}
if (right && x <GamePanel.WIDTH -w){
x += speed;
anim(r_list);
GamePanel.a_fly.play(); GamePanel.a_fly.setVolume();
GamePanel.a_fly.timer_play ();
}
//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 += dx;
dy = 0;
dx = 0;
if (isFiring == true && GamePanel.wave.magazine >0) { // если стрельба true
if(timer_rech ()) {
GamePanel.bullets.add(new Bullet());//звук выстрела
GamePanel.a_bul.sound();// играть звук
GamePanel.a_bul.setVolume();//громкость
isFiring = false;//запрет для стрельбы
GamePanel.wave.magazine--; // опустошаем магазин при выстреле
rech = 0;
timer_rech ();
}
}
}
// отрисовка героя
public void draw(Graphics2D g){
Color bacColor = new Color(255, 0,0 );//созд обьект клсса цвет
g.setColor(bacColor);// передаём цвет граф объекту
g.fillRect(45, 5, 110, 20);//рисуем прямоугольную область
g.fillRect(245, 5, 190, 20);//рисуем прямоугольную область
g.fillRect(495, 5, 100, 20);//рисуем прямоугольную область
g.drawImage(img1,750,3,null);//отрисовываем элемент в координатах
Color batColor = new Color(5, 255,0 );//созд обьект клсса цвет
g.setColor(batColor);// передаём цвет граф объекту
g.fillRect(760, 7, (0 + rech), 23);//рисуем прямоугольную область
g.setColor(Color.WHITE);//задаем цвет объекту Соlor
Font font = new Font("Arial",Font.ITALIC,20);//Создём объект класса фонт (передаем в конструктор параметры)
g.setFont(font);//устанвливаем наш шрифт
((Graphics2D) g).drawString("жизнь "+(int)health ,50,22 );//отрисовываем строку
((Graphics2D) g).drawString(" патроны "+ GamePanel.wave.magazine,250,22 );//отрисовываем строку
((Graphics2D) g).drawString(" враги "+ GamePanel.enemies.size(),500,22 );//отрисовываем строку
g.drawImage( new ImageIcon(s).getImage(), (int)x,(int) y, null);// рисуем
g.drawImage(img3, (int) 0, (int) 0, null);//отрисовываем элемент в координатах
}
}
|