Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.