Hallo,
ist mein erster Eintrag in diesem Forum und ich bin mit deshalb nicht so sicher ob die Frage hier so richtig ist.
Also folgendes Problem hab ich:
Zunächst habe ich ein kleines Spiel programmiert, das auch wunderbar klappt. Nun möchte ich auch noch ein Menü erstellen, indem es ein Button gibt, womit man diverse Einstellungen vornehmen kann. Das Problem ist allerdings, dass ich das Menü als JFrame programmiert habe. Beim zusammenfügen ist mit dann aufgefallen, dass dies ja in zwei unterschiedlichen "Fenstern" programmiert habe.
Im Internet steht dass das Applet eine Unterklasse von Panel ist. Nun meine Frage:
Kann ich, das was ich als Spiel in einem Applet programmiert habe, dies in einem Panel speichern, sodass, wenn man auf dem Menü auf den Button Play drückt ein weiteres JFrame geöffnet wird mit diesem Panel drauf?
(Habe nämlich vor das als .jar Datei unabhängig von Eclipse laufen zu lassen)
Ps.: Die beiden Programmteile funktionieren unabhängig ganz gut.
Das erste Programmabschnitt zeigt die Hauptklasse wovon später alles gestartet wird:
Die zweite Klasse, die Aufgerufen wird, sobald man btPlay gedrückt hat lautet:
Zu diesen beiden Klassen gibt es auch noch andere Klassen die im zusammenhang funktionieren. Mir geht es nur darum, wie ich die Klasse Startingpoint aufrufen kann, ohne dass es eine NullPointerException auftritt.
Vielen Dank
ist mein erster Eintrag in diesem Forum und ich bin mit deshalb nicht so sicher ob die Frage hier so richtig ist.
Also folgendes Problem hab ich:
Zunächst habe ich ein kleines Spiel programmiert, das auch wunderbar klappt. Nun möchte ich auch noch ein Menü erstellen, indem es ein Button gibt, womit man diverse Einstellungen vornehmen kann. Das Problem ist allerdings, dass ich das Menü als JFrame programmiert habe. Beim zusammenfügen ist mit dann aufgefallen, dass dies ja in zwei unterschiedlichen "Fenstern" programmiert habe.
Im Internet steht dass das Applet eine Unterklasse von Panel ist. Nun meine Frage:
Kann ich, das was ich als Spiel in einem Applet programmiert habe, dies in einem Panel speichern, sodass, wenn man auf dem Menü auf den Button Play drückt ein weiteres JFrame geöffnet wird mit diesem Panel drauf?
(Habe nämlich vor das als .jar Datei unabhängig von Eclipse laufen zu lassen)
Ps.: Die beiden Programmteile funktionieren unabhängig ganz gut.
Das erste Programmabschnitt zeigt die Hauptklasse wovon später alles gestartet wird:
Code:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Menue extends JFrame implements ActionListener{
private Game theGame = new Game(this);
private Settings theSettings = new Settings(this);
private Highscore theHighscore = new Highscore(this, theSettings);
private int anfangX = 500;
private int anfangY = 220;
private int breiteX = 640;
private int hoeheY = 360;
private JPanel MPanel = new JPanel();
private JButton btPlay = new JButton("Play");
private JButton btSettings = new JButton("Einstellungen");
private JButton btHighscore = new JButton("Highscore");
private JButton btBeenden = new JButton("Beenden");
private JFrame FrameMenue = new JFrame("Menü");
public Menue() {
JFrameMenue();
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == btPlay)
theGame.MGame();
if(e.getSource() == btSettings)
theSettings.JFrameSettings();
if(e.getSource() == btHighscore)
theHighscore.JFrameHighscore();
if(e.getSource()==btBeenden)
FrameMenue.setVisible(false);
}
public void JFrameGame(){
JFrame GameFrame = new JFrame();
GameFrame.setBounds(anfangX-anfangX, anfangY-anfangY, 1600, 900);
GameFrame.setVisible(true);
GameFrame.setTitle("Game: Teddy Bounce");
}
private void JFrameMenue(){
FrameMenue.setVisible(true);
FrameMenue.setBounds(anfangX, anfangY, breiteX, hoeheY);
FrameMenue.setTitle("Teddy Bounce");
FrameMenue.add(MPanel);
MPanel.setVisible(true);
MPanel.add(btPlay);
MPanel.add(btSettings);
MPanel.add(btHighscore);
MPanel.add(btBeenden);
btPlay.addActionListener(this);
btHighscore.addActionListener(this);
btSettings.addActionListener(this);
btBeenden.addActionListener(this);
}
public static void main(String[] args) {
new Menue(); //Klassenaufruf
}
}
Die zweite Klasse, die Aufgerufen wird, sobald man btPlay gedrückt hat lautet:
Code:
import java.applet.Applet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.net.URL;
import java.util.Random;
public class Startingpoint extends Applet implements Runnable,
KeyListener, MouseMotionListener, MouseListener {
private Image i;
private Graphics doubleG;
Ball b, b2;
Platform p[] = new Platform[7];
Item item[] = new Item[3];
private int score;
double cityX = 0;
double cityDx = 3;
URL url;
Image city;
int levelcheck = 0;
boolean gameOver = false;
boolean mouseIn = false;
boolean musicplay = false;
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
int test = (int) Math.random()*1000;
@Override
public void init() {
setSize(800, 600);
addKeyListener(this);
addMouseListener(this);
addMouseMotionListener(this);
try {
url = getDocumentBase();
}catch(Exception e) {
}
city = getImage(url, "http://www.java-forum.org/images/buildings.png");
//Pictures p = new Pictures(this);
new Pictures(this);
Pictures.music.loop();
}
@Override
public void start() {
b = new Ball();
score = 0;
for (int i = 0; i <p.length; i++) {
p[i] = new Platform(i*120, 300);
}
for (int i = 0; i <item.length; i++) {
Random r = new Random();
switch(r.nextInt(5)){
case 0:
item [i] = new GravUp(getWidth() + 2000 * i);
break;
case 1:
item [i] = new GravDown(getWidth() + 2000 * i );
break;
case 2:
item [i] = new AgilUp(getWidth() + 2000 * i);
break;
case 3:
item [i] = new AgilDown(getWidth() + 2000 * i);
break;
case 4:
item [i] = new Scoreplus(getWidth() + 2000 * i, this);
break;
}
}
Thread thread = new Thread(this);
thread.start();
}
public void run() {
while(true){
//if (x < 0 - width)
for(int i = 0;i < p.length; i++){
int testx = p[i].getX();
if (testx < 0 - p[i].getWidth()){
Random r = new Random();
int fakei = i;
if (i == 0){
fakei = p.length;
}
p[i].setX(p[fakei-1].getX() + p[i].getWidth() +Pictures.level* r.nextInt(5) );
//Abstand der Bricks vorher p[i].setX(p[fakei-1].getX() + p[i].getWidth() +Pictures.level* r.nextInt(25) );
}
}
gameOver= b.getGameOver();
if(levelcheck > 350){ //Schwierigkeitsgrad-----------------------------------------
Pictures.level++;
levelcheck = 0;
}
levelcheck++;
if (cityX > getWidth()* -1) {
cityX-= cityDx;
}else{
cityX = 0;
}
if(!gameOver){
score++;
}
Random r = new Random();
for (int i = 0; i< item.length; i++){
if( item [i].isCreateNew()){
item [i] = null;
switch(r.nextInt(5)){
case 0:
item [i] = new GravUp(getWidth() + 10*r.nextInt(500));
break;
case 1:
item [i] = new GravDown(getWidth() + 10*r.nextInt(500) );
break;
case 2:
item [i] = new AgilUp(getWidth()+10*r.nextInt(500));
break;
case 3:
item [i] = new AgilDown(getWidth()+10*r.nextInt(500));
break;
case 4:
item [i] = new Scoreplus(getWidth()+10*r.nextInt(500), this);
break;
}
item[i].setCreateNew(false);
}
}
b.update(this);
for (int i = 0; i<p.length; i++) {
p[i].update(this, b);
}
for (int i = 0; i<item.length; i++) {
item[i].update(this, b);
}
repaint();
try {
Thread.sleep(17);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Override
public void stop() {
}
@Override
public void destroy() {
}
@Override
public void update(Graphics g) {
if(i == null){
i = createImage(this.getSize().width, this.getSize().height);
doubleG = i.getGraphics();
}
doubleG.setColor(getBackground());
doubleG.fillRect(0, 0, this.getSize().width, this.getSize().height);
doubleG.setColor(getForeground());
paint(doubleG);
g.drawImage(i, 0, 0, this);
}
public void paint(Graphics g) {
g.setColor(new Color(15,77,147));
g.fillRect(0, 0, getWidth(), getHeight());
g.drawImage(city, (int) cityX, 0, this);
g.drawImage(city, (int) cityX +getWidth(), 0, this);
//b.paint(g);
for (int i =0; i<p.length; i++) {
p[i].paint(g);
}
for (int i =0; i<item.length; i++) {
item[i].paint(g);
}
b.paint(g);
String s = Integer.toString(score);
Font font = new Font("Serif", Font.BOLD, 32);
g.setFont(font);
g.setColor(Color.RED);
g.drawString(s, getWidth()-150+2, 50+2);
g.setColor(Color.BLUE);
g.drawString(s, getWidth()-150, 50);
if(gameOver){
new Pictures(this);
g.setColor(Color.BLUE);
if(score<500){
g.drawString("Du bist schlecht :( , nur "+getScore()+" Punkte!", 300, 300);
}if(score > 500 && score<2500){
g.drawString("Du hast " + getScore() + " Punkte GAME OVER!", 300, 300);
}if (score > 2500){
g.drawString("KILLA! du hast " + getScore() + " Punkte!", 300, 300);
}if(score == 257||score == 999){
Pictures.music.stop();
}
//g.drawRect(280, 300, 170, 40);
//mouse check
if( mouseIn){
g.setColor(Color.RED);
g.drawString("nochmal ?", 280, 340);
}else{
g.setColor(Color.GREEN);
g.drawString("nochmal ?", 280, 340);
}
}
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
switch(e.getKeyCode()){
case KeyEvent.VK_LEFT:
b.moveLeft();
break;
case KeyEvent.VK_RIGHT:
b.moveRight();
break;
}
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
if(gameOver){
if(e.getX() > 280 && e.getX()<460){
if(e.getY() > 320 && e.getY() < 360){
mouseIn = true;
}
}
if (e.getX() < 280 || e.getX() >460){
mouseIn = false;
}
if (e.getY() < 320 || e.getY() >360){
mouseIn = false;
}
}
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
//start new Game
if(mouseIn){
b = null;
b = new Ball();
score = 0;
Pictures.level = 1;
for (int i = 0; i <p.length; i++) {
p[i] = new Platform(i*120, 300);
if(musicplay == true){
Pictures.music.play();
Pictures.absturz.stop();
}
}
for (int i = 0; i <item.length; i++) {
Random r = new Random();
switch(r.nextInt(5)){
case 0:
item [i] = new GravUp(getWidth() + 2000 * i);
break;
case 1:
item [i] = new GravDown(getWidth() + 2000 * i );
break;
case 2:
item [i] = new AgilUp(getWidth() + 2000 * i);
break;
case 3:
item [i] = new AgilDown(getWidth() + 2000 * i);
break;
case 4:
item [i] = new Scoreplus(getWidth() + 2000 * i, this);
break;
}
}
mouseIn = false;
musicplay = false;
}
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
}
Zu diesen beiden Klassen gibt es auch noch andere Klassen die im zusammenhang funktionieren. Mir geht es nur darum, wie ich die Klasse Startingpoint aufrufen kann, ohne dass es eine NullPointerException auftritt.
Vielen Dank
Zuletzt bearbeitet: