import java.awt.BorderLayout; import java.awt.Button; import java.awt.Canvas; import java.awt.Color; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.Font; import java.awt.Toolkit; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.image.ImageObserver; import java.util.HashMap; import java.util.Map; import java.util.Vector; import java.util.Random; import javax.swing.JFrame; public class Maler extends Canvas { protected GameManager gameManager; protected int GAME_WIDTH; protected int GAME_HEIGHT; protected Graphics gTemp; protected Image offScreenImage; protected Menu menu; protected JFrame frame; protected InfoPanel infoPanel; protected int infoWidth; public int status; protected long time; public int tankType = 1; protected Toolkit tk = Toolkit.getDefaultToolkit(); private Random random = new Random(); public Maler(GameManager gameManager) { this.gameManager = gameManager; } public void init() { gamesize(); infoPanel = new InfoPanel(this); infoWidth = InfoPanel.INFO_WIDTH; this.setSize(GAME_WIDTH + infoWidth, GAME_HEIGHT); frame = new JFrame(); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.add(this); this.setBackground(Color.black); frame.setVisible(true); frame.setResizable(false); frame.addKeyListener(new KeyMonitor(gameManager)); this.addKeyListener(frame.getKeyListeners()[0]); } protected void gamesize(){ } public void paint(Graphics g) { gTemp = g; Color c = g.getColor(); gameManager.malenkontrolle(); g.setColor(c); } public void mainMenu() { if (menu == null) { mainMenuerstellen(); } menu.erscheinen(gTemp); } public void mainMenuerstellen() { this.setSize(GAME_WIDTH + infoWidth, GAME_HEIGHT); frame.pack(); menu = new Menu(this); menu.add(Sprach.START, 0); menu.add(Sprach.HELP, 10); menu.add(Sprach.EXIT, 11); menu.setStyle(0); menu.setKoordinateImage((GAME_WIDTH + infoWidth) / 2, GAME_HEIGHT * 2 / 3); menu.setZeileAbstand(0); menu.addLogo(loadImage("15.png",(GAME_WIDTH + infoWidth),GAME_HEIGHT)); menu.setLogoKoordinate(0, 0); } public void tankWaehlen() { if (menu == null) { tankErstellen(); } menu.erscheinen(gTemp); } protected void tankErstellen() { menu = new Menu(this); menu.addLogo(loadImage("15.png",(GAME_WIDTH + infoWidth),GAME_HEIGHT)); menu.setStyle(1); menu.setZeileAbstand(0); menu.setKoordinateImage((GAME_WIDTH + infoWidth) / 2, GAME_HEIGHT*2/ 3); } public void help() { if (menu == null) { helpItemErstellen(); } menu.erscheinen(gTemp); } public void helpItemErstellen() { menu = new Menu(this); menu.add(Sprach.HelpItem, loadImage("transparent.png",0,0),loadImage("help.png",0,0), 0); menu.setStyle(3); menu.setKoordinateImage((GAME_WIDTH + infoWidth) / 2, GAME_HEIGHT / 2); } public Image loadImage(String str, int a, int b) { Image tempimage = tk.getImage(Tank.class.getClassLoader().getResource( str)); if (a == 0 && b == 0) { return tempimage; } return tempimage.getScaledInstance(a, b, Image.SCALE_FAST); } protected void gameLevel(int lvl) { if (menu == null) { time = System.currentTimeMillis(); frame.remove(infoPanel); this.setSize(GAME_WIDTH + infoWidth, GAME_HEIGHT); frame.pack(); menu = new Menu(this); menu.setKoordinateImage((GAME_WIDTH + infoWidth) / 2, GAME_HEIGHT / 2); menu.setZeileAbstand(0); menu.add(Sprach.LEVEL, 0); menu.add(lvl + "", 1); menu.setWaehlbar(false); menu.setFontSize(70); menu.setStyle(0); menu.setZeileAbstand(55); } menu.erscheinen(gTemp); if (System.currentTimeMillis() - time > 2000) { gamescreenstart(); menu = null; } } public void gameLose() { if (menu == null) { time = System.currentTimeMillis(); menu = new Menu(this); menu.setKoordinateImage((GAME_WIDTH + infoWidth) / 2, GAME_HEIGHT / 2); menu.setZeileAbstand(0); menu.add(Sprach.LOSE, 0); menu.setFontSize(70); menu.setStyle(0); menu.setZeileAbstand(55); } menu.erscheinen(gTemp); if (System.currentTimeMillis() - time > 3000) { frame.remove(infoPanel); this.setSize(GAME_WIDTH + infoWidth, GAME_HEIGHT); frame.pack(); this.setStatus(GameManager.MAIN_MENU); gameManager.setStatus(gameManager.MAIN_MENU); menu = null; } } protected void gameWin() { if (menu == null) { time = System.currentTimeMillis(); frame.remove(infoPanel); this.setSize(GAME_WIDTH + infoWidth, GAME_HEIGHT); frame.pack(); menu = new Menu(this); menu.setKoordinateImage((GAME_WIDTH + infoWidth) / 2, GAME_HEIGHT / 2); menu.setZeileAbstand(0); menu.add(Sprach.WIN, 0); menu.setFontSize(80); menu.setStyle(0); menu.setZeileAbstand(55); } menu.erscheinen(gTemp); if (System.currentTimeMillis() - time > 3000) { this.setStatus(GameManager.MAIN_MENU); this.gameManager.setStatus(GameManager.MAIN_MENU); menu = null; } } public void gameExit() { if (menu == null) { frame.remove(infoPanel); this.setSize(GAME_WIDTH + infoWidth, GAME_HEIGHT); frame.pack(); menu = new Menu(this); menu.setKoordinateImage((GAME_WIDTH + infoWidth) / 2, GAME_HEIGHT / 2); menu.setZeileAbstand(0); menu.add(Sprach.MAIN_MENU, 1); menu.add(Sprach.RESUME, 0); menu.setStyle(0); menu.setZeileAbstand(55); } menu.erscheinen(gTemp); } private void gamescreenstart() { this.setStatus(GameManager.SPIELEN); this.gameManager.setStatus(GameManager.SPIELEN); this.setSize(GAME_WIDTH, GAME_HEIGHT); frame.add(BorderLayout.EAST, this.infoPanel); frame.pack(); menu = null; } public void pause() { if (menu == null) { menu = new Menu(this); menu.setKoordinateImage((GAME_WIDTH + infoWidth) / 2, GAME_HEIGHT / 2); menu.setZeileAbstand(0); menu.add(Sprach.PAUSE, 0); menu.setStyle(0); menu.setZeileAbstand(55); } menu.erscheinen(gTemp); } public void keyPressedBehandeln(int key) { if (menu != null) { menu.KeyBehandeln(key); //System.out.println(key); } } public void menuBehandeln(String option) { //System.out.println(option); if (option.equals(Sprach.START)) { this.setStatus(GameManager.TANK_WAEHLEN); this.gameManager.setStatus(GameManager.TANK_WAEHLEN); menu = null; } if (option.equals(Sprach.MAIN_MENU)) { this.setStatus(GameManager.MAIN_MENU); this.gameManager.setStatus(GameManager.MAIN_MENU); menu = null; } if (option.equals(Sprach.NOTE)) { this.setStatus(GameManager.NOTE); this.gameManager.setStatus(GameManager.NOTE); menu = null; } if (option.equals(Sprach.HNOTE)) { this.setStatus(GameManager.MAIN_MENU); this.gameManager.setStatus(GameManager.MAIN_MENU); menu = null; } if (option.equals(Sprach.HELP)) { this.setStatus(GameManager.HELP); gameManager.setStatus(GameManager.HELP); menu = null; } if (option.equals(Sprach.HelpItem)) { this.setStatus(GameManager.MAIN_MENU); this.gameManager.setStatus(GameManager.MAIN_MENU); menu = null; } if (option.equals(Sprach.EXIT)) { System.exit(0); } if (option.equals(Sprach.PAUSE)) { this.setStatus(GameManager.SPIELEN); this.gameManager.setStatus(GameManager.SPIELEN); menu = null; } if (option.equals(Sprach.RESUME)) { gamescreenstart(); } if (option.equals(Sprach.TANKA)) { menu = null; tankType = 01; this.setStatus(GameManager.LEVEL); gameManager.setStatus(GameManager.LEVEL); } if (option.equals(Sprach.TANKB)) { menu = null; tankType = 02; this.setStatus(GameManager.LEVEL); gameManager.setStatus(GameManager.LEVEL); } if (option.equals(Sprach.TANKC)) { menu = null; tankType = 03; this.setStatus(GameManager.LEVEL); gameManager.setStatus(GameManager.LEVEL); } } public void keyReleased(int key) { this.repaint(); } public void update(Graphics g) { if (offScreenImage == null) { offScreenImage = this.createImage(GAME_WIDTH + InfoPanel.INFO_WIDTH, GAME_HEIGHT); } Graphics gOffScreen = offScreenImage.getGraphics(); Color c = gOffScreen.getColor(); gOffScreen.setColor(Color.black); gOffScreen.fillRect(0, 0, GAME_WIDTH + InfoPanel.INFO_WIDTH, GAME_HEIGHT); gOffScreen.setColor(c); paint(gOffScreen); g.drawImage(offScreenImage, 0, 0, null); infoPanel.repaint(); } public int getScreenWidth() { return GAME_WIDTH; } public int getScreenHeight() { return GAME_HEIGHT; } public void setColor(int R, int G, int B) { Color c = new Color(R, G, B); gTemp.setColor(c); } public void setStatus(int status) { this.status = status; } public void fillOvall(int x, int y, int width, int height) { gTemp.fillOval(x, y, width, height); } public void fillRect(int x, int y, int width, int height) { gTemp.fillRect(x, y, width, height); } public void drawLine(int x1, int y1, int x2, int y2) { gTemp.drawLine(x1, y1, x2, y2); } public void drawRect(int x, int y, int width, int height) { gTemp.drawRect(x, y, width, height); } public void drawRoundRect(int x, int y, int width, int height, int arcw, int arch) { gTemp.drawRoundRect(x, y, width, height, arcw, arch); } }