package HNProduction;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.RescaleOp;
import java.util.Date;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Spiel extends JPanel implements ActionListener {
//Boolean variable für bestimmte Abfragen
boolean gegnerFigurKollision = false;
boolean gegnerWurdeBesiegt = false;
boolean ausserGrenze = false;
boolean scoreKontrolle = false;
boolean lebenKontrolle = false;
//Timer
Timer time;
//Hintergrund
Image background;
int backgroundZeichnenX,backgroundZeichnenX_zwei;
int background_aktuelle_posX;
static int background_posX;
int anzahl = 0;
int anzahl_zwei= 0;
//Taste
int gedrueckteTaste;
//Charakter
Image figur;
int figur_posX = 75;
int figur_posY = 300;
int leben = 3;
//Blöcke
Image coin;
Image usedBlock;
Block block[] = new Block[5];
int blockPosX = 500;
int randomPosX = 1 + (int) Math.floor(Math.random()*3);
int coin_score = 0;
//Gegner
Gegner enemy;
int gegnerPosX = 1000;
int randomGegnerPosX = 1 + (int) Math.floor(Math.random()*3);
Image gegner;
int kills = 0;
/*******************************************************/
/********************* KONSTRUKTOR *********************/
/*******************************************************/
public Spiel(){
/*
* Inizialisieren
*/
backgroundZeichnenX = 0;
backgroundZeichnenX_zwei = 1120;//1120
gedrueckteTaste = 0;
background_posX = 0;
setFocusable(true);
/*
* Bilder von Charakter und Hintergrund
*/
ImageIcon u = new ImageIcon((getClass().getResource("background_game.png")));
background = u.getImage();
ImageIcon s = new ImageIcon((getClass().getResource("char.png")));
figur = s.getImage();
ImageIcon c = new ImageIcon(getClass().getResource("coin.png"));
coin = c.getImage();
ImageIcon b = new ImageIcon(getClass().getResource("blockUsed.png"));
usedBlock = b.getImage();
ImageIcon g = new ImageIcon(getClass().getResource("enemy.png"));
gegner = g.getImage();
/*
* KeyListener
*/
addKeyListener(new AL());
/*
* Blöcke
*/
block[0] = new Block((blockPosX*randomPosX),80,50,50);
//block[1] = new Block((blockPosX*randomPosX),80,50,50);
//block[2] = new Block((blockPosX*randomPosX),80,50,50);
/*
* Gegner
*/
enemy = new Gegner((gegnerPosX*randomGegnerPosX), 300, 74, 74);
/*
* Springen
*/
Springen sprung = new Springen();
/*
* Alternative zu "update - Methode" die sich alle 5 Millisekunden wiederholt
*/
time = new Timer(5,this);
time.start();
}
/*****************************************************************************************************************************************/
/************************************************************************/
/********************* Wiederholende Methodenaufruf *********************/
/************************************************************************/
public void actionPerformed(ActionEvent e){
//(Wird immer wieder neu gezeichnet sowohl die Bewegungen als auch die Bilder)
bewegen();
repaint();
figur_posY = Springen.sprungposition;
}
/*****************************************************************************************************************************************/
/*********************************************************/
/********************* PAINT METHODE *********************/
/*********************************************************/
public void paint(Graphics g){
super.paint(g);
Graphics2D f2 =(Graphics2D)g;
/*
* Hintergrund wiederholt sich
*/
if (getXBild() == 20 + (anzahl * 2380)){
anzahl += 1;
backgroundZeichnenX = 0;
}
if (getXBild() == 1210 + (anzahl_zwei*2380)){
anzahl_zwei += 1;
backgroundZeichnenX_zwei = 0;
}
if (getXBild() >= 20){
f2.drawImage(background,1115-backgroundZeichnenX,0,null);
}
//Hintergrund
f2.drawImage(background,1115-backgroundZeichnenX_zwei,0,null);
/*
* Blöcke
*/
f2.drawImage(coin, block[0].getX_Block()-getXBild(), block[0].getY_Block(), block[0].getWidth(), block[0].getHeight(), null);
/*f2.drawImage(coin, block[1].getX_Block()-getXBild(), block[1].getY_Block(), block[1].getWidth(), block[1].getHeight(), null);
f2.drawImage(coin, block[2].getX_Block()-getXBild(), block[2].getY_Block(), block[2].getWidth(), block[2].getHeight(), null);
*/
//Kollisionsabfrage
//74 -12 (Größe des Charakters also die X Position minus den Abstand zu den Rand)
block[0].kollisionsabfrage(block[0].getX_Block()-getXBild(), block[0].getY_Block() + block[0].getHeight(),figur_posX + (74-12), figur_posY);
/*block[1].kollisionsabfrage(block[1].getX_Block()-getXBild(), block[1].getY_Block() + block[1].getHeight(),figur_posX + (74-12), figur_posY);
block[2].kollisionsabfrage(block[2].getX_Block()-getXBild(), block[2].getY_Block() + block[2].getHeight(),figur_posX + (74-12), figur_posY);
*/
//Wenn Block berührt wird, erhält man Punkte
if(block[0].Coin() == true){
coin_score++;
f2.drawImage(usedBlock, block[0].getX_Block()-getXBild(), block[0].getY_Block(), block[0].getWidth(), block[0].getHeight(), null);
Block.coin = false;
}
/*if(block[1].Coin() == true){
coin_score++;
f2.drawImage(usedBlock, block[1].getX_Block()-getXBild(), block[1].getY_Block(), block[1].getWidth(), block[1].getHeight(), null);
}
if(block[2].Coin() == true){
coin_score++;
f2.drawImage(usedBlock, block[2].getX_Block()-getXBild(), block[2].getY_Block(), block[2].getWidth(), block[2].getHeight(), null);
}
}*/
//Wenn Block außerhalb des Frames gelangt
//if(block[0].getX_Block()-getXBild() < -50 || block[1].getX_Block()-getXBild() < -50 || block[2].getX_Block()-getXBild() < -50){
// ausserGrenze = true;
//}
if(block[0].getX_Block()-getXBild() < -50){
ausserGrenze = true;
}
if(ausserGrenze){
randomPosX = 3000 + (int) Math.floor(Math.random()*2000);
//int randomPosX_One = 1000 + (int) Math.floor(Math.random()*2000);
//int randomPosX_Two = 5000 + (int) Math.floor(Math.random()*2000);
block[0].setX_Block(getXBild()+randomPosX);
//block[1].setX_Block(getXBild()+randomPosX_One);
//block[2].setX_Block(getXBild()+randomPosX_Four);
ausserGrenze = false;
}
/*
* Gegner
*/
f2.drawImage(gegner, (int) enemy.getXGegner(), enemy.getYGegner(), null);
enemy.bewegenVonGegner();
enemy.kollisionsabrageVonGegner((int) (enemy.getXGegner()), enemy.getYGegner(), figur_posX, figur_posY);
//Gegner Kollision
if(enemy.getGegnerTrifftFigur() == true){
gegnerFigurKollision = true;
if(gegnerFigurKollision){
leben--;
gegnerFigurKollision = false;
}
}
if(enemy.getGegnerTrifftFigur() == false){gegnerFigurKollision = false;}
//Gegner killen
if(enemy.getGegnerStirbt() == true){
gegnerWurdeBesiegt = true;
}
if(gegnerWurdeBesiegt){
coin_score += 5;
kills++;
gegnerWurdeBesiegt = false;
}
//Wenn Gegner außerhalb der Framebreite ist
if(enemy.getXGegner() < -50){
randomGegnerPosX = 100 + (int) Math.floor(Math.random()*1000);
enemy.setXGegner((figur_posX+randomGegnerPosX));
}
//Wenn kein Leben mehr vorhanden ist
if(leben == 0){
lebenKontrolle = true;
}
if(lebenKontrolle && enemy.getGegnerTrifftFigur() == true){
lebenKontrolle = false;
leben = 0;
}
//Charakter
f2.drawImage(figur,figur_posX,figur_posY,null);
//Punktestand
f2.setColor(Color.WHITE);
f2.drawString("Score :" + coin_score, 10, 15);
//Leben
f2.setColor(Color.WHITE);
f2.drawString("Leben :" + leben, 70, 15);
//Kills
f2.setColor(Color.WHITE);
f2.drawString("Kills :" + kills, 130, 15);
/*
* Inventar
*/
f2.setColor(Color.decode("#BEF781"));
f2.fillRect(0, 520, 1100, 279);
f2.setColor(Color.BLACK);
f2.setFont(new Font("Tekton Pro Ext", Font.BOLD, 99));
f2.drawString("Inventar", 350, 675);
//Achievements
if(kills == 100){
System.out.println("Achievement unlocked: 100 Gegner getötet!");
}
}
/***************************************************************************************************************************************************/
/***********************************************************************************************/
/********************* akutelle X Position des Hintergrunds zurückliefern *********************/
/***********************************************************************************************/
private int getXBild() {
return background_aktuelle_posX;
}
/*****************************************************************************************************************************************************/
/***********************************************************************************************/
/********************* ANIMATION DES BACKGROUNDS UND CHARAKTERS ********************************/
/***********************************************************************************************/
public void bewegen(){
if (background_posX != -2) {
if (figur_posX + background_posX <= 75) {
figur_posX += background_posX;
} else {
background_aktuelle_posX += background_posX;
backgroundZeichnenX += background_posX;
backgroundZeichnenX_zwei += background_posX;
}
}else {
if (figur_posX + background_posX > 0) {
figur_posX += background_posX;
}
}
}
/*****************************************************************************************************************************************************/
/****************************************************************/
/********************* KEYEVENTS ********************************/
/****************************************************************/
private class AL extends KeyAdapter{
public AL(){}
public void keyPressed(KeyEvent e){
gedrueckteTaste = e.getKeyCode();
if(gedrueckteTaste == KeyEvent.VK_LEFT){
background_posX = -2;
}
if(gedrueckteTaste == KeyEvent.VK_RIGHT){
background_posX = 2;
figur_posX += 4;
}
if(gedrueckteTaste == KeyEvent.VK_ESCAPE){
//Menü öffnen
}
if(gedrueckteTaste == KeyEvent.VK_SPACE){
if(Springen.springenAnimationFertig == true)
Sprung();
}
}
public void keyReleased(KeyEvent e){
gedrueckteTaste = e.getKeyCode();
if(gedrueckteTaste == KeyEvent.VK_LEFT || gedrueckteTaste == KeyEvent.VK_RIGHT){
background_posX = 0;
}
}
//Springen Methode
public void Sprung(){
Springen SprungAnimation = new Springen();
SprungAnimation.start();
}
}
/*****************************************************************************************************************************************************/
}//Klasse Spiel ende