import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GUI extends JFrame{
LabV02 spiel;
int feldgroesse=getbildgr();
int rahmengroesse=25;
Image[] img=getbilder();
JButton bt,bt2,bt3,bt4;
static JPanel cv,cv2,cv3;
static JPanel frame;
static Graphics g;
static Toolkit tk=Toolkit.getDefaultToolkit();
public GUI(LabV02 sl){
spiel=sl;
setTitle("Verrücktes Labyrinth von Benedikt und Thomas");
bt=new JButton("neues Spiel");
bt2=new JButton("Runde beenden");
bt3=new JButton("Tester");
bt4=new JButton("Test");
frame=new JPanel();
cv=new JPanel();
cv2=new JPanel();
cv3=new JPanel();
bt.setBounds(20,30,150,30);
bt2.setBounds(190,30,150,30);
bt3.setBounds(360,30,150,30);
bt4.setBounds(20,600,150,30);
// die canvasgröße wird der auflösung angepasst
cv.setBounds(20,65,feldgroesse*7+rahmengroesse*2,feldgroesse*7+rahmengroesse*2);
cv2.setBounds(cv.getWidth()+40,65,90,90);
cv3.setBounds(cv.getWidth()+40,200,90,90);
cv2.setBackground(Color.gray);
cv.setBackground(Color.orange);
cv3.setBackground(Color.red);
setSize(cv.getWidth()+cv2.getWidth()+50,cv.getHeight()+100);
setLocation(tk.getScreenSize().width/2-getWidth()/2,tk.getScreenSize().height/2-getHeight()/2);
// das spiel erscheint immer in der mitte vom bildschirm
frame.setLayout(null);
add(frame);
frame.add(bt);
frame.add(bt2);
frame.add(bt3);
frame.add(cv);
frame.add(cv2);
frame.add(cv3);
frame.add(bt4);
// menü
/*JMenuBar mbar= new JMenuBar();
setJMenuBar(mbar);
JMenu Home=new JMenu("zur Spielerauswahl");
mbar.add(Home);
JMenuItem Home2= new JMenuItem("Beenden");
Home.add(Home2);
ActionListener Home2ac = new ActionListener()
{
public void actionPerformed( ActionEvent a )
{
System.exit(0);
}
};
Home2.addActionListener(Home2ac);*/
cv.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e) {
super.mouseEntered(e);
int x=e.getX();
int y=e.getY();
int xa=(x-rahmengroesse)/feldgroesse;
int ya=(y-rahmengroesse)/feldgroesse;
spiel.actionCanvas1(xa,ya,x,y);
}
});
cv2.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent arg0) {
super.mouseEntered(arg0);
spiel.actionCanvas2();
}
});
bt.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
game.auswaehlen();
}
});
bt2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
spiel.rundeBeenden();
}
});
bt3.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
spiel.test();
}
});
bt4.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
}
});
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
repaint();
}
public void paint(Graphics g){
zeichnePlan(spiel.getSpielplan());
zeichneFeld(spiel.getFreieKarte());
zeichneGesuchteKarte(spiel.getGesuchteKarte(),spiel.getRunde());
zeichneSpieler(spiel.getPosition());
}
public void imageLoader(Image[] img){
// die bilder werden geladen
MediaTracker mt = new MediaTracker(cv);
for (int i = 0; i < img.length; i++) {
mt.addImage(img[i], 0);
try {
mt.waitForAll();
} catch (InterruptedException e) {}
}
}
public void zeichneSpieler(Point[] pos){
g=cv.getGraphics();
for (int i = 0; i < 4; i++) {
switch(i){
case 0:g.setColor(Color.RED);break;
case 1:g.setColor(Color.blue);break;
case 2:g.setColor(Color.YELLOW);break;
case 3:g.setColor(Color.green);break;
}
//zeichne spieler mit anpassung an die fenstergroesse
int spielergr=getbildgr()/3;
int x=pos[i].x;
int y=pos[i].y;
g.drawOval(x*feldgroesse+rahmengroesse+(feldgroesse+rahmengroesse)/2-spielergr,
y*feldgroesse+rahmengroesse+(feldgroesse+rahmengroesse)/2-spielergr,spielergr,spielergr);
g.drawOval(x*feldgroesse+rahmengroesse+(feldgroesse+rahmengroesse)/2-spielergr-1,
y*feldgroesse+rahmengroesse+(feldgroesse+rahmengroesse)/2-spielergr-1,spielergr+2,spielergr+2);
g.drawOval(x*feldgroesse+rahmengroesse+(feldgroesse+rahmengroesse)/2-spielergr-2,
y*feldgroesse+rahmengroesse+(feldgroesse+rahmengroesse)/2-spielergr-2,spielergr+4,spielergr+4);
}
}
public void zeichnePlan(int[][][] plan){
g=cv.getGraphics();
for (int y = 0; y < 7; y++) {
for (int x = 0; x < 7; x++) {
try {
g.drawImage(img[plan[x][y][0]],x*feldgroesse+rahmengroesse,
y*feldgroesse+rahmengroesse,feldgroesse,feldgroesse,cv);
g.drawImage(img[plan[x][y][1]], x * feldgroesse + rahmengroesse,
y*feldgroesse+rahmengroesse,feldgroesse,feldgroesse,cv);
} catch (Exception e) {}
}
}
//zeichnen der verschiebepfeile
int spielergr=getbildgr()/5;
for(int y=0;y<3;y++){
for(int x=0;x<3;x++){
g.drawImage(img[38],x+1,y*feldgroesse*2+rahmengroesse+feldgroesse+(feldgroesse/2)-spielergr/2,spielergr,spielergr,cv);
g.drawImage(img[36],x+1+feldgroesse*7+rahmengroesse,y*feldgroesse*2+rahmengroesse+feldgroesse+(feldgroesse/2)-spielergr/2,spielergr,spielergr,cv);
g.drawImage(img[35],x*feldgroesse*2+rahmengroesse+feldgroesse+(feldgroesse/2)-spielergr/2 ,y+1,spielergr,spielergr,cv);
g.drawImage(img[37],x*feldgroesse*2+rahmengroesse+feldgroesse+(feldgroesse/2)-spielergr/2,y+1+feldgroesse*7+rahmengroesse,spielergr,spielergr,cv);
}
}
}
public void zeichneFeld(int[] freieKarte){
g=cv2.getGraphics();
try {
g.drawImage(img[freieKarte[0]],10,10,70,70, cv2);
g.drawImage(img[freieKarte[1]], 10, 10, 70, 70, cv2);
} catch (Exception e) {}
}
public void zeichneGesuchteKarte(int karte,int runde){
g=cv3.getGraphics();
g.clearRect(0,0,100,100);
g.setColor(Color.black);
switch(runde){
case 0:
g.setColor(Color.red);
g.fillRect(0,0,100,100);
g.setColor(Color.black);
g.drawString("Rot ist dran!",10,10);
break;
case 1:
g.setColor(Color.blue);
g.fillRect(0,0,100,100);
g.setColor(Color.black);
g.drawString("Blau ist dran!",10,10);
break;
case 2:
g.setColor(Color.yellow);
g.fillRect(0,0,100,100);
g.setColor(Color.black);
g.drawString("Blau ist dran!",10,10);
break;
case 3:
g.setColor(Color.green);
g.fillRect(0,0,100,100);
g.setColor(Color.black);
g.drawString("Blau ist dran!",10,10);
break;
default:
}
try {
// g.drawImage(img[karte],10,10,70,70, cv3);
g.drawImage(img[karte], 10, 10, 70, 70, cv3);
} catch (Exception e) {}
}
public Image[] getbilder(){
//alle benötigten bilder werden in ein bilderfeld geladen
Image[] img=new Image[39];
for (int i = 0; i < 10; i++) {
img[i] = tk.getImage("images/wegkarte" + i + ".png");
}
for (int i = 0; i < 24; i++) {
img[i+10] = tk.getImage("images/schatz" + i + ".png");
}
for (int i = 0; i < 4; i++) {
img[i+35] = tk.getImage("images/pfeil" + i + ".png");
}
return img;
}
public static int getbildgr(){
int width=(int) Toolkit.getDefaultToolkit().getScreenSize().getWidth();
int rueckgabe=50;
//je nach auflösung wird das spielfeld angepasst
if(width>=800)rueckgabe=60;
if(width>=1000)rueckgabe=80;
if(width>=1150)rueckgabe=90;
if(width>=1280)rueckgabe=100;
if(width>=1600)rueckgabe=130;
return rueckgabe;
}
}