import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Serializable;
import java.util.Properties;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
// Hier stehen die zu den im Feldarry auftauchenden Nummern zugehörigen Objekte:
// 0...Leer
// 1...Mauer
// 2...Pacman
// 3...Monster
public class GameFrame extends JFrame implements KeyListener{
public static final String VERSION = "0.01 alpha";
public static final String NAME = "Pacman";
public static String FILE_SEPERATOR;
public static int feld[][] = new int[40][30];
private Graphics g;
public GameFrame() {
super(NAME+" "+VERSION);
openLevelFile(loadLevelFile());
setSize(1300,1000);
JPanel JP = new JPanel() {
@Override
protected void paintComponent(Graphics gC) {
super.paintComponent(gC);
g = gC;
newpaint(0);
}
};
add(JP);
addKeyListener(this);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
FILE_SEPERATOR = System.getProperty("file.separator","\\");
GameFrame GF = new GameFrame();
}
private String loadLevelFile(){
// muss noch überschrieben werden (mit Load-Frame)
return "."+FILE_SEPERATOR+"Level"+FILE_SEPERATOR+"Example.properties";
}
private void openLevelFile(String file){
Properties p = new Properties();
try {
p.load(new FileReader(new File(file)));
for(int i=0;i<40;i++){
for(int a=0;a<30;a++){
feld[i][a] = new Integer(p.getProperty(i+"|"+a, "0"));
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
public void newpaint(int commando){
//commando:
// 0... alles neuzeichnen
// 1... nur Pacman neuzeichnen
for(int i=0;i<40;i++){
for(int a=0;a<30;a++){
if(commando == 0){
if(feld[i][a] == 0){
g.setColor(Color.WHITE);
g.fillRect(i*30+20, a*30+50, 30, 30);
}
if(feld[i][a] == 1){
g.setColor(Color.BLACK);
g.fillRect(i*30+20, a*30+50, 30, 30);
}
if(feld[i][a] == 2){
g.setColor(Color.WHITE);
g.fillRect(i*30+20, a*30+50, 30, 30);
g.setColor(Color.YELLOW);
g.fillOval(i*30+20, a*30+50, 30, 30);
}
if(feld[i][a] == 3){
g.setColor(Color.WHITE);
g.fillRect(i*30+20, a*30+50, 30, 30);
g.setColor(Color.RED);
g.fillOval(i*30+20, a*30+50, 30, 30);
}
}
if(commando == 1){
if(feld[i][a] == 0){
g.setColor(Color.WHITE);
g.fillRect(i*30+20, a*30+50, 30, 30);
}
if(feld[i][a] == 2){
g.setColor(Color.WHITE);
g.fillRect(i*30+20, a*30+50, 30, 30);
g.setColor(Color.YELLOW);
g.fillOval(i*30+20, a*30+50, 30, 30);
}
}
}
}
}
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
System.out.println("Hi");
int key = e.getKeyCode();
int x=0;
int y=0;
for(int i=0;i<40;i++){
for(int a=0;a<30;a++){
if(feld[i][a] == 2){
x=i;
y=a;
}
}
}
int oldx=x;
int oldy=y;
// bewege Pac-man nach oben,unten,links oder rechts
if(key == e.VK_UP){
y--;
if(y<0){
y++;
}
System.out.println("Hi2");
}
if(key == e.VK_DOWN){
y++;
if(y>29){
y--;
}
}
if(key == e.VK_LEFT){
x--;
if(x<0){
x++;
}
}
if(key == e.VK_RIGHT){
x++;
if(y>39){
x--;
}
}
feld[oldx][oldy] = 0;
feld[x][y]=2;
newpaint(1);
}
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Serializable;
import java.util.Properties;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
// Hier stehen die zu den im Feldarry auftauchenden Nummern zugehörigen Objekte:
// 0...Leer
// 1...Mauer
// 2...Pacman
// 3...Monster
public class GameFrame extends JFrame implements KeyListener{
public static final String VERSION = "0.01 alpha";
public static final String NAME = "Pacman";
public static String FILE_SEPERATOR;
public static int feld[][] = new int[40][30];
private JPanel jp;
private Graphics g;
public GameFrame() {
super(NAME+" "+VERSION);
openLevelFile(loadLevelFile());
setSize(1300,1000);
jp = new JPanel() {
@Override
protected void paintComponent(Graphics gC) {
super.paintComponent(gC);
g = gC;
newpaint(0);
}
};
add(jp);
addKeyListener(this);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
FILE_SEPERATOR = System.getProperty("file.separator","\\");
GameFrame GF = new GameFrame();
}
private String loadLevelFile(){
// muss noch überschrieben werden (mit Load-Frame)
return "."+FILE_SEPERATOR+"Level"+FILE_SEPERATOR+"Example.properties";
}
private void openLevelFile(String file){
Properties p = new Properties();
try {
p.load(new FileReader(new File(file)));
for(int i=0;i<40;i++){
for(int a=0;a<30;a++){
feld[i][a] = new Integer(p.getProperty(i+"|"+a, "0"));
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
public void newpaint(int commando){
//commando:
// 0... alles neuzeichnen
// 1... nur Pacman neuzeichnen
for(int i=0;i<40;i++){
for(int a=0;a<30;a++){
if(commando == 0){
if(feld[i][a] == 0){
g.setColor(Color.WHITE);
g.fillRect(i*30+20, a*30+30, 30, 30);
}
if(feld[i][a] == 1){
g.setColor(Color.BLACK);
g.fillRect(i*30+20, a*30+30, 30, 30);
}
if(feld[i][a] == 2){
g.setColor(Color.WHITE);
g.fillRect(i*30+20, a*30+30, 30, 30);
g.setColor(Color.YELLOW);
g.fillOval(i*30+20, a*30+30, 30, 30);
}
if(feld[i][a] == 3){
g.setColor(Color.WHITE);
g.fillRect(i*30+20, a*30+30, 30, 30);
g.setColor(Color.RED);
g.fillOval(i*30+20, a*30+30, 30, 30);
}
}
if(commando == 1){
if(feld[i][a] == 0){
g.setColor(Color.WHITE);
g.fillRect(i*30+20, a*30+30, 30, 30);
}
if(feld[i][a] == 2){
g.setColor(Color.WHITE);
g.fillRect(i*30+20, a*30+30, 30, 30);
g.setColor(Color.YELLOW);
g.fillOval(i*30+20, a*30+30, 30, 30);
}
}
}
}
jp.repaint();
}
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
System.out.println("Hi");
int key = e.getKeyCode();
int x=0;
int y=0;
for(int i=0;i<40;i++){
for(int a=0;a<30;a++){
if(feld[i][a] == 2){
x=i;
y=a;
}
}
}
int oldx=x;
int oldy=y;
// bewege Pac-man nach oben,unten,links oder rechts
if(key == e.VK_UP){
y--;
if(y<0 | feld[x][y] == 1){
y++;
}
System.out.println("Hi2");
}
if(key == e.VK_DOWN){
y++;
if(y>29 | feld[x][y] == 1){
y--;
}
}
if(key == e.VK_LEFT){
x--;
if(x<0 | feld[x][y] == 1){
x++;
}
}
if(key == e.VK_RIGHT){
x++;
if(y>39 | feld[x][y] == 1){
x--;
}
}
feld[oldx][oldy] = 0;
feld[x][y]=2;
newpaint(1);
}
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}
(da steht, ich solle nur über paint() zeichnen, aber ich zeichne doch auch in newpaint() ???:L)
ich bin grade dabei das Problem zu beheben.Genau das ist das große Problem...
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Serializable;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Properties;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
// Hier stehen die zu den im Feldarry auftauchenden Nummern zugehörigen Objekte:
// 0...Leer
// 1...Mauer
// 2...Pacman
// 3...Monster
public class GameFrame extends JFrame implements KeyListener{
public static final String VERSION = "0.01 alpha";
public static final String NAME = "Pacman";
public static String FILE_SEPERATOR;
public static int xfelds = 40;
public static int yfelds = 30;
public static int aktuellx = 0;
public static int aktuelly = 0;
public static String feld[][] = new String[xfelds][yfelds];
private JPanel jp;
public static Graphics g;
public GameFrame() {
super(NAME+" "+VERSION);
openLevelFile(loadLevelFile());
setSize(1300,1000);
jp = new JPanel() {
@Override
protected void paintComponent(Graphics gC) {
super.paintComponent(gC);
g = gC;
g.setColor(Color.BLACK);
g.fillRect(0, 0, 1300, 1000);
for(int i=0;i<xfelds;i++){
for(int a =0;a<yfelds;a++){
aktuellx = i;
aktuelly = a;
try {
Class c = Class.forName(feld[i][a]);
try {
Object o = c.newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
};
add(jp);
addKeyListener(this);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
FILE_SEPERATOR = System.getProperty("file.separator","\\");
GameFrame GF = new GameFrame();
}
private String loadLevelFile(){
// muss noch überschrieben werden (mit Load-Frame)
return "."+FILE_SEPERATOR+"Level"+FILE_SEPERATOR+"Example.properties";
}
private void openLevelFile(String file){
Properties p = new Properties();
try {
p.load(new FileReader(new File(file)));
for(int i=0;i<xfelds;i++){
for(int a=0;a<yfelds;a++){
feld[i][a] = p.getProperty(i+"|"+a, "Leer");
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
}
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}
try {
Class c = Class.forName(feld[i][a]);
try {
Object o = c.newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Object o = c.newInstance();
Sorry für das OT, aber meinst du nicht, dass es jetzt langsam mal Zeit wäre ein Tutorial zum Thema "Zeichnen in Swing" zu lesen?
Kanns gar nicht, da ich zuvor in openLevelFile das Array feld vollständig mit Strings befülle:Dir ist klar dass Class.forName(null) eine NPE wirft ?
for(int i=0;i<xfelds;i++){
for(int a=0;a<yfelds;a++){
feld[i][a] = p.getProperty(i+"|"+a, "Leer");
}
}
Hast du dir mal die anderen Klassen in Sourceforge mal angeschaut? Mit o.newInstance() ruft er eine Klasse auf, die dann das jeweilige Spielelement zeichnet oder sonstwas damit tut.Was soll das überhaupt generell werden? Selbst wenn es an der Stelle Object o = c.newInstance(); wirklich zu einer Instanz kommen würde, was bringe dir dieses leere String-Objekt? Und mit o machst du ja dann sowieso nichts...
0|0=Wall
0|1=Wall
0|2=Pacman
Kanns gar nicht, da ich zuvor in openLevelFile das Array feld vollständig mit Strings befülle:
Hast du dir mal die anderen Klassen in Sourceforge mal angeschaut? Mit o.newInstance() ruft er eine Klasse auf, die dann das jeweilige Spielelement zeichnet oder sonstwas damit tut.
Nun, meiner Meinung nach wirds übersichtlicher. Zudem war das mit diesen If-schleifen doch etwas "unobjektorientiert", oder?Den Sinn dahinter verstehe ich allerdings dennoch nicht...
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
int key = e.getKeyCode();
int x=0;
int y=0;
for(int i=0;i<40;i++){
for(int a=0;a<30;a++){
if(feld[i][a].equals("Pacman")){
x=i;
y=a;
}
}
}
int oldx=x;
int oldy=y;
// bewege Pac-man nach oben,unten,links oder rechts
if(key == e.VK_UP){
y--;
if(y<0 | feld[x][y].equals("Wall")){
y++;
}
}
if(key == e.VK_DOWN){
y++;
if(y>yfelds-1 | feld[x][y].equals("Wall")){
y--;
}
}
if(key == e.VK_LEFT){
x--;
if(x<0 | feld[x][y].equals("Wall")){
x++;
}
}
if(key == e.VK_RIGHT){
x++;
if(y>xfelds-1 | feld[x][y].equals("Wall")){
x--;
}
}
feld[oldx][oldy] = "Leer";
feld[x][y]="Pacman";
jp.repaint();
}
Ok, dann halt if-Abfragen ... HahahahaEs gibt keine if-Schleifen, sondern nur if-Abfragen!
gibts sowas auch in Deutsch? Mein Englisch ist nämlich nicht sonderlich gut ;(
z.B. 1. in Richtung Pacman bei ner Abzweigung und später dann immer in Richtung Pacman. (glaube mich entsinnen zu können, dass sie sich auch Umdrehen, wenn sie mitten auf der Gerade sind)Das kannst du dann wenn das spiel steht stück für stück verbessern.