Die Praxis
- VORARBEITEN
- DAS INTERFACE
- DIE KI
Der Beispielcode dieses Abschnittes unterliegt der GNU Public License und ist daher Open Source Software. Bitte lesen Sie diesbezüglich die Bedingungen der GPL Lizens.
Vorarbeiten
Bevor wir mit der Programmierung des Anwenderinterfaces beginnen, müssen wir ein paar Vorarbeiten erledigen. Da Java eine Objektorientierte Programmiersprache ist, müssen wir unser Schachprogramm in Klassen aufteilen. Wir verwenden folgende zwei Klassen:
ChessPartner- Diese Klasse wird von
java.applet.Appletabgeleitet. Es ist die Rahmenapplikation. Hier bauen wir das GUI auf, das aus dem Schachbrett und dem Button Neues Spiel besteht.Board- Diese Klasse wird von
java.awt.Canvasabgeleitet. Es beinhaltet das Interface und die KI unseres Schachprogrammes. Sie implementiert das InterfaceRunnable, da die Berrechnungen der KI in einem eigenen Thread laufen.- Schauen wir uns zuerst das eigentliche Applet, ChessPartner, an:
import java.applet.*;
import java.awt.*;
/* ChessPartner Sample Class v 1.0
Copyright (C) 2000 Leander Eyer
date: 10.07.2000
This program is free software; you can redistribute
it under the terms of the GNU Public License as published
by the Free Software Foundation */
public class ChessPartner extends Applet {
//Die Referenz auf die KI
Board brain;
//Die Elemente des GUI
Button newgame = new Button ("Neues Spiel starten");
//Die Ereignisbehandlungsroutine für das GUI
public boolean action (Event evt, Object arg) {
if ( ((String) arg).equals ("Neues Spiel starten"))
brain.newgame ();
return true;
}
//Initialisierung des Applets
public void init() {
super.init();
//KI initialisieren
brain = new Board (this);
//GUI aufbauen
setBackground (Color.lightGray);
setLayout (new BorderLayout (10,10));
add ("Center", brain);
add ("South", newgame);
}
//Diese Methode erzeugt einen 10 Pixel breiten Rand
public Insets insets () {
return new Insets (10,10,10,10);
}
}Da wir nur standart Programmiertechniken wir das Aufbauen eines GUI oder die implementierung einer Ereignisbehandlungsroutine geschrieben haben, sollten keine weiteren erklärungen nötig sein. Die Klasse ChessPartner ist damit fertig programmiert, im Laufe dieses Kapitels werden wir nur noch die Klasse Board ändern.
Nachfollgend finden Sie die Grundversion der Klasse Board:
import java.applet.Applet;
import java.awt.*;
/* Board Sample Class v 0.1
Copyright (C) 2000 Leander Eyer
date: 10.07.2000
This program is free software; you can redistribute
it under the terms of the GNU Public License as published
by the Free Software Foundation */
public class Board extends java.awt.Canvas implements java.awt.event.MouseListener, java.awt.event.MouseMotionListener, java.lang.Runnable {
//Die interne Representation des Schachbrettes
int [] board = new int [120];
public Board (java.applet.Applet ref) {
super();
}
//Die Ereignisbehandlungsroutinen für die Maus
public void mouseClicked(java.awt.event.MouseEvent e) { }
public void mouseDragged(java.awt.event.MouseEvent e) { }
public void mouseEntered(java.awt.event.MouseEvent e) { }
public void mouseExited(java.awt.event.MouseEvent e) { }
public void mouseMoved(java.awt.event.MouseEvent e) { }
public void mousePressed(java.awt.event.MouseEvent e) { }
public void mouseReleased(java.awt.event.MouseEvent e) { }
//In dieser Methode wird die KI auf ein neues Spiel vorbereitet
public void newgame () {
return;
}
//In dieser Methode wird später das Schachbrett gezeichnet.
//Jetzt zeichnen wir nur ein Platzhalterrechteck
public void paint (Graphics g) {
g.setColor (Color.black);
g.fillRect (0,0, 320,320);
}
//Der Thread, in dem die KI nach dem besten Zug sucht
public void run() { }
}Bei dieser Klasse dürfte es eine Unklarheit geben: Wieso verwenden wir für die interne Darstellung des Schachbrettes ein Array mit 120 Einträgen, wo doch das Schachbrett nur 64 Felder hat?
Die genaue Antwort erfahren Sie im Abschnitt "Die Schachregeln implementieren", hier geben wir nur einen kleinen Hinweis: Wir umranden das Schachbrett. Wir fügen oben und unten zwei Reihen hinzu sowie eine Reihe auf jeder Seite. Das macht die generierung der Schachzüge wesentlich einfacher.
Applet Stufe 1 anzeigen
Quelltexte der Stufe 1