Hallo Leute,
ich habe mich gerade eben hier angemeldet, weil ich einfach überfragt bin. Ich programmiere momentan das Spiel Gomoku (5 in einer Reihe) und bin nun auf die folgende Errormeldung gestoßen:
"java.lang.NullPointerException
at Player.setButton(Player.java:41)
at KiPlayer.begin(KiPlayer.java:21)"
Ich hänge jz noch die Klassen an, welche damit zusammmenhängen...
Die Klasse KiPlayer, die von einem MinMax Algorythmus gesteuert wird.
Die Klasse BoardManipulationAndGameChecks, die überprüft allemöglichen Sachen für den MinMax Algorythmus. Habe die ein bisschen für hier drinnen gekürzt.
und die Klasse Frame, die ist meine "Fenster"-Klasse, in der nur die Oberfläche generiert wird.
Zu guter letzt noch die Klasse Button, in dieser habe ich nur festgelegt wie die Buttons aussehen sollen.
Hier noch ein Bild von der Übersicht der Klassen.
Wenn ihr noch mehr braucht, wie Screenshots oder kompletten Code von den Klassen (hab nur die Board...Klasse für hier gekürzt) einfach schreiben.
Freue mich auf euere Hilfe,
LG Marco
ich habe mich gerade eben hier angemeldet, weil ich einfach überfragt bin. Ich programmiere momentan das Spiel Gomoku (5 in einer Reihe) und bin nun auf die folgende Errormeldung gestoßen:
"java.lang.NullPointerException
at Player.setButton(Player.java:41)
at KiPlayer.begin(KiPlayer.java:21)"
Ich hänge jz noch die Klassen an, welche damit zusammmenhängen...
Die Klasse KiPlayer, die von einem MinMax Algorythmus gesteuert wird.
Java:
public class KiPlayer extends Player
{
Brain brain;
public KiPlayer(int f, int k, boolean turn) {
super(f, k, turn);
brain = new Brain();
}
String begin() {
String l = "7 : 7";
char b = '2';
int c1;
if (b=='1')
c1 = 1;
else if (b=='2')
c1 = 2;
else
c1 = 0;
int x = StringToX(l);
int y = StringToY(l);
setButton(x, y, c1);
System.out.println(x + " " + y + " " + c1);
return l;
}
String doTurn() {
String l = calcTurn();
char b = '2';
int c1;
if (b=='1')
c1 = 1;
else if (b=='2')
c1 = 2;
else
c1 = 0;
b1.makeMove(b, l, true);
int x = StringToX(l);
int y = StringToY(l);
setButton(x, y, c1);
System.out.println(x + " " + y + " " + c1);
return l;
}
int StringToX (String s) {
String[] ss = s.split(" : ");
int x = Integer.parseInt(ss[0]);
return x;
}
int StringToY (String s) {
String[] ss = s.split(" : ");
int y = Integer.parseInt(ss[1]);
return y;
}
String calcTurn() {
Object[] move = brain.ki(b1, 1, Double.NEGATIVE_INFINITY,
Double.POSITIVE_INFINITY);
return (String) move[1];
}
}
Die Klasse BoardManipulationAndGameChecks, die überprüft allemöglichen Sachen für den MinMax Algorythmus. Habe die ein bisschen für hier drinnen gekürzt.
Java:
import java.util.*;
import java.lang.*;
public class BoardManipulationAndGameChecks
{
public Frame frame;
char[][] game;
int k;
int f;
int nextPl;
int prevPl;
int gewinner;
String update;
public BoardManipulationAndGameChecks(int f, int k)
{
this.f = f;
this.k = k;
this.game = new char[f][f];
for(int x = 0; x < f; ++x) {
for(int y = 0; y < f; ++y){
this.game[x][y] = 0;
}
}
this.gewinner = 0;
}
public void setButtons(int tempX, int tempY, int tempPl) {
int x = tempX;
int y = tempY;
int pl = tempPl;
frame.setButtonIcon(tempX,tempY,tempPl);
//if(x = 1)
//{
// System.out.println("false");
//}
//else{frame.setButtonIcon(x, y, pl);}
}
}
und die Klasse Frame, die ist meine "Fenster"-Klasse, in der nur die Oberfläche generiert wird.
Java:
import java.awt.*;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Frame extends JFrame
{
Button[][] buttons = new Button[15][15];
public Frame ()
{
super("ImageButton");
setLayout(new BorderLayout(5,5));
setJMenuBar(createmenu());
getContentPane().add(createPanel(), "Center");
for (int i = 0; i < 15; i++)
{
for (int j = 0; j < 15; j++)
{
buttons[i][j].setIcon((int)0);
}
}
setVisible(true);
pack();
}
JMenuBar createmenu()
{
JMenuBar MenuBar = new JMenuBar();
JMenu MenuItem1 = new JMenu("Exit");
JMenu MenuItem2 = new JMenu("Test");
MenuItem2.addActionListener(new ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent e)
{
System.exit(0);
}
});
MenuBar.add(MenuItem1);
MenuBar.add(MenuItem2);
return MenuBar;
}
Component createPanel()
{
JPanel panel = new JPanel(new GridLayout(15, 15, 0, 0));
// buttons[] = new Button[];
int l = 0;
for(int i = 0; i < 15; i++)
{
for(int j = 0; j < 15; j++)
{
buttons[i][j] = new Button();
buttons[i][j].addActionListener(new Listener(buttons[i][j], l));
panel.add(buttons[i][j]);
}
}
return panel;
}
public void setButtonIcon(int tempX, int tempY, int tempPl)
{
int x = tempX;
int y = tempY;
int pl = tempPl;
buttons[tempX][tempY].setIcon(tempPl);
buttons[x][y].setEnabled(false);
}
}
Zu guter letzt noch die Klasse Button, in dieser habe ich nur festgelegt wie die Buttons aussehen sollen.
Java:
import java.awt.*;
import javax.swing.*;
public class Button extends JButton
{
private static ImageIcon pcIcon = new ImageIcon("images/Ki.png");
private static ImageIcon plIcon = new ImageIcon("images/Player.png");
private static ImageIcon noIcon = new ImageIcon("images/nichts.png");
private static Insets noMargin = new Insets(0, 0, 0, 0);
public int spalte;
public int zeile;
public Button()
{
setIcon(noIcon);
setIconTextGap(0);
setAlignmentX(0.5F);
setAlignmentY(0.5F);
setMargin(noMargin);
}
public void setIcon(int fall)
{
switch (fall)
{
case 2:
setIcon(pcIcon);
setDisabledIcon(pcIcon);
break;
case 1:
setIcon(plIcon);
setDisabledIcon(plIcon);
break;
default:
setIcon(noIcon);
}
}
public int getZeile()
{
return zeile;
}
public int getSpalte()
{
return spalte;
}
}
Hier noch ein Bild von der Übersicht der Klassen.
Wenn ihr noch mehr braucht, wie Screenshots oder kompletten Code von den Klassen (hab nur die Board...Klasse für hier gekürzt) einfach schreiben.
Freue mich auf euere Hilfe,
LG Marco
Zuletzt bearbeitet von einem Moderator: