Zum Inhalt springen

Empfohlene Beiträge

Geschrieben (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 von jockijo
Geschrieben

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

Geschrieben

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 :)

Geschrieben

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...