/*********************************************************************** * Projekt: Javakurs-Scheinaufgabe "Kartenspiel" * Filename: Kartenspiel.java * Autor: Hartmut Keller * Datum: Freitag, 17. Oktober 1997, 18:17:01 **********************************************************************/ import java.awt.*; import java.awt.event.*; import java.applet.*; /** * @author Hartmut Keller * Scheinaufgabe fuer Java-Kompaktkurs (22.-26.10.97). * Der Benutzer und der Computer spielen gemeinsam ein Kartenspiel. Jeder * bekommt 9 Karten ausgeteilt. In jedem Spielzug sucht sich jeder der * beiden Spieler eine der Karten aus und legt sie verdeckt auf den Tisch. * Dann werden die Karten umgedreht und der Spieler, der die hoehere Karte * gelegt hat, gewinnt den Stich. Wenn alle Karten ausgespielt sind, hat der * Spieler mit den meisten Stichen gewonnen. * * Es gilt folgende Rangordnung bei den Karten: * 10Pik>Herz>Karo.

* * Das Kartenspiel kann sowohl als Applikation als auch als Applet laufen. */ public class Kartenspiel extends Applet implements ActionListener { static final String kartenname[] = { "Karo10.gif", "KaroBube.gif", "HerzBube.gif", "PikBube.gif", "KreuzBube.gif", "KaroDame.gif", "HerzDame.gif", "PikDame.gif", "KreuzDame.gif", "KaroKoenig.gif", "HerzKoenig.gif", "PikKoenig.gif", "KreuzKoenig.gif", "KaroAs.gif", "HerzAs.gif", "PikAs.gif", "KreuzAs.gif", "Joker.gif" }; /** * Alle 18 Spielkarten (nur Vorderseiten). */ static Spielkarte karten[]; /** * Spielkarten-Rueckseite */ static Spielkarte rueck; /** * leeres Feld */ static Spielkarte leer; /** * Flag, ob Applikation. Dann braucht man den Quit-Button, im Applet * (default) hingegen nicht. */ static boolean application = false; /** * Spieler, verwaltet Spielerkarten und Handkartenbereich */ MenschSpieler spieler; /** * Computer, verwaltet Computerkarten */ ComputerSpieler computer; /** * Tisch, verwaltet Spielstand und ausgespielte Karten */ Tisch tisch; /** * Hauptprogramm, wenn das Kartenspiel als Applikation gestartet wird. Es * wird ein Frame geoeffnet und darin das Applet mit init() gestartet und * mit start() ausgefuehrt. */ public static void main(String args[]) { Frame f = new Frame("Javakurs Scheinaufgabe Kartenspiel"); application = true; // mit Quit-Button, wenn Applikation Kartenspiel ks = new Kartenspiel(); // Applet erzeugen ks.init(); // und initialisieren f.addWindowListener(new WindowAdapter() // Auf das Schliessen des // Fensters reagieren { public void windowClosing(WindowEvent e) { Runtime.getRuntime().exit(0); // Programm beenden } }); f.add("Center", ks); // Applet in den Frame setzen f.pack(); // Komponenten layouten f.show(); // Fenster anzeigen ks.start(); // Applet starten } /** * Applet initialisieren, also Spielfeld aufbauen. */ public void init() { // Spielkarten einlesen Spielkarte.setBoss(this); karten = new Spielkarte[kartenname.length]; for (int i=0; i9); do // 9 Karten an Computer austeilen { i = (int)(Math.random()*anz); computer.nehmeAuf(karten[stapel[i]]); stapel[i] = stapel[--anz]; } while (anz>0); } /** * Auf "Neues Spiel"-Knopf reagieren */ public void actionPerformed(ActionEvent e) { spieler.abbrechen(); // Spielersachen aufraeumen computer.abbrechen(); // Computersachen aufraeumen tisch.abbrechen(); // Tisch aufraeumen mischenUndAusteilen(); // neu mischen und austeilen } public void start() { // nichts zu tun, da alles ueber Events gesteuert } /** * Bild laden. Bei Applikationen geschieht dies lokal ueber das Toolkit. * Das ist als Applet evtl. nicht erlaubt, darum werden dann die Bilder * als URLs geladen. */ public Image holeImage(String name) { if (application) return Toolkit.getDefaultToolkit().getImage(name); else return getImage(getCodeBase(), name); } }