/** * Muehlegame * Copyright (c) 2015, Thomas Ammann, Johannes Finckh * * @author Thomas Amann, Johannes Finckh * @version 1.0 */ package view.gui; import controller.IController; import javax.imageio.ImageIO; import javax.swing.*; import java.awt.*; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class Imagepanel extends JPanel { private static final long serialVersionUID = 1L; private static final int ARRAYSIZE = 25; private static final int ANZVERTEXES = 24; private static final int RESIZEOVAL = 16; private static final int SIZEEMPTYTOKEN = 8; InputStream stream = getClass().getResourceAsStream("/spielbrett.jpg"); private EmptyToken et[]; private Image pic; //private Image pic = Toolkit.getDefaultToolkit().getImage("spielbrett.jpg"); private IController controller; private double xydiffs[][]; private Graphics g; private int select1; public Imagepanel(IController controller) { try { pic = ImageIO.read(stream); } catch (IOException e) { } this.controller = controller; this.et = new EmptyToken[ARRAYSIZE]; xydiffs = new double[ANZVERTEXES][2]; select1 = 0; this.fillXydiffs(); } private void fillXydiffs() { try { InputStream stream = getClass().getResourceAsStream("/pixeltab.txt"); BufferedReader in = new BufferedReader(new InputStreamReader(stream)); String zeile = null; int i = 0; while ((zeile = in.readLine()) != null) { String splitresult[] = zeile.split(" "); double temp1 = Double.parseDouble(splitresult[0]); double temp2 = Double.parseDouble(splitresult[1]); xydiffs[i][0] = temp1; xydiffs[i][1] = temp2; i++; } in.close(); } catch (IOException e) { System.exit(1); } } public void paintComponent(Graphics g) { this.g = g; g.drawImage(pic, 0, 0, this.getWidth(), this.getHeight(), this); this.paintTokens(); this.fillWithEmptyTokens(); } public void setSelected(int vertex) { if (controller.getVertexColor(vertex) != 'n') { if (select1 == 0) { select1 = vertex; this.paintTokens(); this.paintToken(vertex); } else { controller.moveStone(select1, vertex); select1 = 0; } } } public void paintToken(int vertex) { int xdiff = (int) Math.round(this.getSize().width / xydiffs[vertex - 1][0]); int ydiff = (int) Math.round(this.getSize().height / xydiffs[vertex - 1][1]); g.setColor(Color.RED); g.fillOval(this.getSize().width - xdiff, this.getSize().height - ydiff, this.getSize().width / RESIZEOVAL, this.getSize().height / RESIZEOVAL); } public void paintTokens() { for (int i = 1; i < ARRAYSIZE; i++) { if (controller.getVertexColor(i) == 's') { int xdiff = (int) Math.round(this.getSize().width / xydiffs[i - 1][0]); int ydiff = (int) Math.round(this.getSize().height / xydiffs[i - 1][1]); g.setColor(Color.black); g.fillOval(this.getSize().width - xdiff, this.getSize().height - ydiff, this.getSize().width / RESIZEOVAL, this.getSize().height / RESIZEOVAL); } if (controller.getVertexColor(i) == 'w') { int xdiff = (int) Math.round(this.getSize().width / xydiffs[i - 1][0]); int ydiff = (int) Math.round(this.getSize().height / xydiffs[i - 1][1]); g.setColor(Color.white); g.fillOval(this.getSize().width - xdiff, this.getSize().height - ydiff, this.getSize().width / RESIZEOVAL, this.getSize().height / RESIZEOVAL); } } } public void fillWithEmptyTokens() { int sizeX = this.getSize().width / SIZEEMPTYTOKEN; int sizeY = this.getSize().height / SIZEEMPTYTOKEN; int xdiff = 0; int ydiff = 0; for (int i = 1; i < ARRAYSIZE; i++) { xdiff = (int) Math.round(this.getSize().width / xydiffs[i - 1][0]); ydiff = (int) Math.round(this.getSize().height / xydiffs[i - 1][1]); et[i] = new EmptyToken(controller, i, this.getSize().width - xdiff, this.getSize().height - ydiff, sizeX, sizeY); this.add(et[i]); i++; xdiff = (int) Math.round(this.getSize().width / xydiffs[i - 1][0]); ydiff = (int) Math.round(this.getSize().height / xydiffs[i - 1][1]); et[i] = new EmptyToken(controller, i, this.getSize().width - xdiff, this.getSize().height - ydiff, sizeX, sizeY); this.add(et[i]); } } }