jockijo Geschrieben 16. Mai 2010 Geschrieben 16. Mai 2010 (bearbeitet) Hallo zusammen, wir sollen ein Java Projekt zum Thema Black Jack machen. Bisher lief auch alles gut, aber wenn ich das Programm starte, werden die Bilder nicht angezeigt (Karten) und das Fenster wird zu klein geöffnet. Ebenso ist auch die farbliche Hintergrundsfläche zu klein. Die Berechnungen und die Buttons gehen jedoch alle einwandfrei. Hier mal die Quellcodes meiner Klassen (hab Kommentare immer hinzugefügt). Im Anhang hab ich noch ein Bild eingefügt, wie das Spiel derzeit aussieht und wie es breiter aussehen sollte. Hoffe jemand kann mir weiterhelfen ???:L Klasse CKarte package paketBJ; import java.awt.*; import java.util.*; public class CKarte{ Image bild; int wert; public CKarte(Image bild, int wert) { this.bild = bild; this.wert = wert; } public Image getBild() { return bild; } public int getWert() { return wert; } public void setWert(int wert) { this.wert = wert; } } Klasse CDeck package paketBJ; import java.util.*; import java.awt.Image; import java.applet.*; import java.net.*; import java.io.*; public class CDeck { int anzahlDecks = 6; int anzahlKarten = 52 * anzahlDecks; Vector meinDeck = new Vector(); public CDeck(CBlackJack myApplet,Image[] kartenBilder) { int i, j, k; //Neues Deck anlegen for (i=0; i<anzahlDecks; i++) { for (j=0; j<52; j++) { for (k=2; k<11; k++) { meinDeck.add(new CKarte(kartenBilder[j],k)); j++; } meinDeck.add(new CKarte(kartenBilder[j],10)); meinDeck.add(new CKarte(kartenBilder[j+1],10)); meinDeck.add(new CKarte(kartenBilder[j+2],10)); meinDeck.add(new CKarte(kartenBilder[j+3],11)); j=j+3; } } //Kartendeck mischen mischen(); } public void mischen(){ Collections.shuffle(meinDeck); } public CKarte geben() { return (CKarte) meinDeck.remove(0); } public CKarte getKarte(int i) { return (CKarte) meinDeck.elementAt(i); } public int getRestAnzahl() { return meinDeck.size(); } } Klasse CHand package paketBJ; import java.util.*; public class CHand { private Vector meineKarten = new Vector(); private int summe; int ass = 0; //Konstruktor für eine Kartenhand public void Hand(){ summe=0; ass=0; } public CKarte getKarten(int i){ return (CKarte) meineKarten.elementAt(i); } //Karte zu Hand hinzufügen public void addKarte(CKarte k) { meineKarten.add(k); summe=summe+k.getWert(); if(k.getWert() == 11) //Wenn die Karte ein Ass ist, anzahl der Asse merken ass++; if(summe > 21){ //Wenn Summe > 21, Assen als 1 zählen for(int i=0; i<ass && summe>21; i++) { summe=summe-10; ass--; } } } public boolean blackJack() { if (summe == 21 && meineKarten.size() == 2) { return true; } else { return false; } } public int getKartenAnzahl(){ return meineKarten.size(); } public int getSumme() { return summe; } } Klasse CBlackJack package paketBJ; import java.awt.*; import java.awt.event.*; import java.applet.*; import java.util.*; /** * This code was edited or generated using CloudGarden's Jigloo * SWT/Swing GUI Builder, which is free for non-commercial * use. If Jigloo is being used commercially (ie, by a corporation, * company or business for any purpose whatever) then you * should purchase a license for each developer using Jigloo. * Please visit [url=http://www.cloudgarden.com]Cloud Garden (Java Resources)[/url] for details. * Use of Jigloo implies acceptance of these licensing terms. * A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR * THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED * LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE. */ public class CBlackJack extends Applet implements ActionListener,Runnable{ private CDeck deck; private CHand spielerHand; private CHand geberHand; public Button btnZiehen=new Button("Ziehen"); public Button btnHalten=new Button("Halten"); public Button btnNächsteRunde=new Button("Nächste Runde"); public Button btnNeuesSpiel=new Button("Spiel Neustart"); public Button btnEinzahlen=new Button("€ 50 einzahlen"); Image offIm=null; Graphics offGraphics=null; Image[] kartenBilder = new Image[52]; private int aktKarteLaden = 0; int breite, höhe; int kartenBreite = -1; int anpassen = -1; private int spiel = 0; //Anzahl der Spiele private int runde = 1; //Anzahl der Runden private String message1; //String für Meldungen private String message2; //String für Meldungen private double geldbetrag = 50.00; //Geldbetrag der dem Spieler zur Verfügung steht private double gesamtbetrag = 50.00; //Gesamter eingesetzter Betrag des Spielers private double gewinnverlust = 0; //Aktueller Gewinn/Verlust des Spielers private double geldeinsatz = 5.00; //Einsatz pro Runde private double gewinnBlackJack = 1.5; //Gewinnverhältnis bei einem Black Jack public void init() { Thread kartenLaden = new Thread(this); kartenLaden.start(); } public void run(){ MediaTracker mt=new MediaTracker(this); for(aktKarteLaden=0; aktKarteLaden < 52; aktKarteLaden++){ kartenBilder[aktKarteLaden] = getImage(getCodeBase(), "Karten/" + (aktKarteLaden+1) + ".gif"); mt.addImage(kartenBilder[aktKarteLaden],0); repaint(); } //Neues Deck anlegen deck = new CDeck(this,kartenBilder); //Breite der Kartenbilder feststellen kartenBreite = deck.getKarte(0).getBild().getWidth(this); btnZiehen.addActionListener(this); btnHalten.addActionListener(this); btnNächsteRunde.addActionListener(this); btnNeuesSpiel.addActionListener(this); btnEinzahlen.addActionListener(this); btnZiehen.setEnabled(false); btnHalten.setEnabled(false); btnNächsteRunde.setEnabled(false); btnEinzahlen.setEnabled(false); //Breite und Höhe des Applets sichern breite = getSize().width; höhe = getSize().height; message1 = ""; message2 = ""; this.add(btnZiehen); this.add(btnHalten); this.add(btnNächsteRunde); this.add(btnEinzahlen); this.add(btnNeuesSpiel); //Neue Kartenhände anlegen spielerHand = new CHand(); geberHand = new CHand(); this.validate(); repaint(); } public void actionPerformed(ActionEvent ae) { if(ae.getSource() == btnNeuesSpiel) { neuesSpiel(); } else if (ae.getSource() == btnZiehen) { ziehen(); } else if (ae.getSource() == btnHalten) { halten(); } else if (ae.getSource() == btnNächsteRunde) { nächsteRunde(); } else if (ae.getSource() == btnEinzahlen) { einzahlen(); } repaint(); } public void paint(Graphics g) { if(offGraphics==null){ offIm=createImage(getSize().width,getSize().height); offGraphics=offIm.getGraphics(); } Image aktKarte; if(kartenBreite == -1) kartenBreite = deck.getKarte(0).getBild().getWidth(this); if(anpassen == -1) anpassen = (breite - (kartenBreite * 2) - 4) / 4; //Hintergrundfarbe setzen offGraphics.setColor(new Color(20,100,20)); offGraphics.fillRect(0,0,breite,höhe); offGraphics.setColor(Color.white); offGraphics.drawString("Spieler: "+spielerHand.getSumme(),anpassen,40); offGraphics.drawString("Geber: "+geberHand.getSumme(),(breite/2) + anpassen,40); offGraphics.drawString(message1,5,höhe - 94); if(spiel > 0) { offGraphics.drawString("Restliche Karten: "+deck.getRestAnzahl(),5,höhe - 66); offGraphics.drawString("Spiel "+spiel+" Runde "+runde,5,höhe - 38); } offGraphics.drawString(message2,5,höhe-10); //Anzeigen der Kartenhand des Spielers for(int i=0;i<spielerHand.getKartenAnzahl();i++){ offGraphics.drawImage(spielerHand.getKarten(i).getBild(), anpassen, 70+(20*(i-1)), this);//neu } //Anzeigen der Kartenhand des Gebers for(int i=0;i<geberHand.getKartenAnzahl();i++){ offGraphics.drawImage(geberHand.getKarten(i).getBild(), (breite/2 ) + anpassen, 70+(20*(i-1)), this); } g.drawImage(offIm,0,0,this); } public void neuesSpiel(){ //Button für Ziehen enablen btnZiehen.setEnabled(true); //Buttons für nächste Rundek, Neues Spiel und Halten disablen btnHalten.setEnabled(false); btnNeuesSpiel.setEnabled(false); btnNächsteRunde.setEnabled(false); //Vor jedem neuen Spiel werden die Karten gemischt deck = new CDeck(this,kartenBilder); //Neue Kartenhände anlegen spielerHand = new CHand(); geberHand = new CHand(); //Geber und Spieler bekommen je eine Karte spielerHand.addKarte(deck.geben()); geberHand.addKarte(deck.geben()); //Spieler macht Einsatz geldbetrag = 50 - geldeinsatz; gesamtbetrag = 50; message1 = "Ihr Geldbetrag ist € "+geldbetrag; message2 = ""; runde = 1; spiel++; if (geldbetrag == 0) { btnEinzahlen.setEnabled(true); btnNeuesSpiel.setEnabled(false); } } public void nächsteRunde(){ //Button für Ziehenenablen btnZiehen.setEnabled(true); //Buttons für nächste Runde, Neues Spiel und Halten disablen btnHalten.setEnabled(false); btnNeuesSpiel.setEnabled(false); btnNächsteRunde.setEnabled(false); //Neue Kartenhände anlegen spielerHand = new CHand(); geberHand = new CHand(); //Geber und Spieler bekommen je eine Karte spielerHand.addKarte(deck.geben()); geberHand.addKarte(deck.geben()); runde++; //Spieler macht Einsatz geldbetrag = geldbetrag - geldeinsatz; message1 = "Ihr Geldbetrag ist € "+geldbetrag; } public void ziehen(){ btnHalten.setEnabled(true); spielerHand.addKarte(deck.geben()); //Wenn der Spieler über 21 hat, dann hat er verloren if(spielerHand.getSumme() > 21){ message1 = "Sie haben verloren! Sie haben noch € "+geldbetrag; //Buttons für Ziehen und Halten disablen btnZiehen.setEnabled(false); btnHalten.setEnabled(false); //Button für nächste Runde enablen, wenn Geldbetrag > 0 if (geldbetrag > 0) { btnNächsteRunde.setEnabled(true); btnNeuesSpiel.setEnabled(true); }else { btnEinzahlen.setEnabled(true); btnNeuesSpiel.setEnabled(false); } //Wenn im Deck 10 Karten oder weniger sind, werden alle Karten neu gemischt if (deck.getRestAnzahl() < 11) { deck = new CDeck(this,kartenBilder); } //Gesamter Gewinn/Verlust berechnen message2 = gewinnVerlust(); } } public void halten(){ //Geber muss nehmen, solange seine Summer unter 17 ist while(geberHand.getSumme() < 17){ geberHand.addKarte(deck.geben()); } //Wenn der geber mehr Punkte hat, hat der Spieler verloren if(geberHand.getSumme() <= 21 && spielerHand.getSumme() < geberHand.getSumme()) { message1 = "Sie haben verloren! Sie haben noch € "+geldbetrag; } //wenn der Spieler einen Black Jack hat und der Geber nicht, dann hat der Spieler gewonnen else if (spielerHand.blackJack() && geberHand.blackJack() == false) { geldbetrag = geldbetrag + geldeinsatz + gewinnBlackJack*geldeinsatz; message1 = "Black Jack! Sie haben € "+geldeinsatz*gewinnBlackJack+" gewonnen! Sie haben jetzt € "+geldbetrag; } //Bei Gleichstand bekommt der Spieler seinen Einsatz zurück else if (spielerHand.getSumme() == geberHand.getSumme()) { //Hat bei Gleichstand der Geber einen Black Jack, hat der Spieler verloren if (geberHand.blackJack() && spielerHand.blackJack() == false) { message1 = "Sie haben verloren! Der Geber hat Black Jack! Sie haben noch € "+geldbetrag; } else { geldbetrag = geldbetrag + geldeinsatz; message1 = "Unentschieden! Sie haben noch € "+geldbetrag; } } //Wenn der Spieler mehr Punkte hat, dann hat er gewonnen else { geldbetrag = geldbetrag + 2*geldeinsatz; message1 = "Sie haben € "+geldeinsatz+" gewonnen! Sie haben jetzt € "+geldbetrag; } btnZiehen.setEnabled(false); btnHalten.setEnabled(false); if (geldbetrag > 0) { btnNeuesSpiel.setEnabled(true); btnNächsteRunde.setEnabled(true); } else { btnEinzahlen.setEnabled(true); btnNeuesSpiel.setEnabled(false); } //Wenn im Deck 10 Karten oder weniger sind, werden alle Karten neu gemischt if (deck.getRestAnzahl() < 11) { deck = new CDeck(this,kartenBilder); } //Gesamter Gewinn/Verlust berechnen message2 = gewinnVerlust(); } public void einzahlen() { geldbetrag = geldbetrag + 50; gesamtbetrag = gesamtbetrag + 50; message1 = "Sie haben noch € "+geldbetrag; btnNächsteRunde.setEnabled(true); btnNeuesSpiel.setEnabled(true); btnEinzahlen.setEnabled(false); } public String gewinnVerlust() { //Gesamter Gewinn/Verlust berechnen gewinnverlust = geldbetrag - gesamtbetrag; if (gewinnverlust < 0) { return "Sie haben bist jetzt € "+(-1)*gewinnverlust+" verloren!"; } else { return "Sie haben bist jetzt € "+gewinnverlust+" gewonnen!"; } } private void initGUI() { try { { this.setPreferredSize(new java.awt.Dimension(491, 335)); } } catch(Exception e) { e.printStackTrace(); } } } Bearbeitet 16. Mai 2010 von jockijo Zitieren
flashpixx Geschrieben 16. Mai 2010 Geschrieben 16. Mai 2010 Also ein Bild ist nicht angefügt und es ist auch üblich nur relevante Codeauszüge zu posten, anstatt den gesamten Code. Ich möchte nicht den gesamten Code debuggen, damit ich Dienen Fehler finde, aber ich würde einfach einmal vermuten, dass Du Deine Methode "initGUI" nirgends aufrufst. Zu den fehlenden Bilder würde ich mir getCodeBase() und dessen return Wert anschauen Weiterhin solltest Du evtl die Action Klassen und GUI Klassen sauber trennen, damit die Struktur lesbarer wird Zitieren
jockijo Geschrieben 16. Mai 2010 Autor Geschrieben 16. Mai 2010 hi, danke für die antwort. bin leider noch anfänger und kenn mich noch nicht so gut aus - könntest du mir vielleicht genauer sagen, was du damit meinst? wäre echt super Zitieren
flashpixx Geschrieben 16. Mai 2010 Geschrieben 16. Mai 2010 Es steht doch genau drin: Du rufst deine Methode "initGUI" nicht auf, in der Du die Größe des Frame setzt. Zusätzlich sollst Du überprüfen, ob der Pfad zu Deinen Graphikdateien korrekt ist und funktioniert Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.