Ergebnis 1 bis 5 von 5

Einfaches Java-Programm in Applet umwandeln?

  1. #1 Zitieren
    Held Avatar von Illuminatum
    Registriert seit
    Mar 2007
    Ort
    In BW
    Beiträge
    5.203
    Hallo!
    Ich habe vor längerer Zeit ein Vier Gewinnt Java-Programm geschrieben und wollte dieses nun als Applet in eine HTML-Seite einbetten.
    Wie kann ich das machen?

    Wenn ihr dafür etwas braucht (z.B. Sourcecode), bitte einfach fragen

    MfG
    Illuminatum ist offline

  2. #2 Zitieren
    Sergej Petrow
    Gast
    Hier gibt es viel hilfreiches dafür:

    Einbinden von Applets in HTML

  3. #3 Zitieren
    Held Avatar von Illuminatum
    Registriert seit
    Mar 2007
    Ort
    In BW
    Beiträge
    5.203
    Hmm..danke erstmal für deine Antwort.
    Muss ich, damit das so funktioniert, den Sourcecode als solchen umändern?
    Wenn ich die html-Datei dann nämlich mit Opera starte, bekomme ich die Meldung "NoClassDefFoundError" in meiner StartenSteuern-Klasse.
    Wie muss ich den denn umändern? Neuprogrammieren?

    Spoiler:(zum lesen bitte Text markieren)

    StartenSteuern:

    HTML-Code:
    package programm;
    import javax.swing.JFrame;
    import java.awt.event.*;
    import javax.swing.JOptionPane;
    /**
     * @author Max
     * @version 1.6
     * @date 16.06.2013
     */
    
    public class StartenSteuern {
    
    	public static void main(String[] args){
    		anfangsnachrichten();
    		fenster();
    	}//end main
    	
    	public static void anfangsnachrichten(){ //Die Willkommens-Popups am Anfang. Die Möglichkeit hab ich im Internet gefunden.
    		JOptionPane.showMessageDialog(null, "Hallo und Herzlichst Willkommen bei unserem kleinen \"Vier Gewinnt\" Projekt\n mit der Programmiersprache Java in ITS Anwendungsentwicklung.", "Willkommen", JOptionPane.INFORMATION_MESSAGE);
    		JOptionPane.showMessageDialog(null, "Die Regeln von \"Vier Gewinnt\" sollten eigenltich klar sein, hier aber nochmal zur Sicherheit:\n- Ziel des Spieles ist es, vier (4) Steine einer Farbe entweder horizontal, vertikal oder diagonal\n  in eine Reihe zu bekommen.\n- Die Spieler setzen abwechselnd jeweils einen Stein an die gewünschte Stelle, indem sie\n  auf die gewünschte Spalte klicken. Anmerkung: Die Steine können natürlich\n  nur von oben nach unten runterrollen :) \n- In diesem Programm beginnt als erstes die Farbe \"gelb\".", "Regeln", JOptionPane.INFORMATION_MESSAGE);
    		JOptionPane.showMessageDialog(null, "Gelb beginnt!", "Viel Spaß", JOptionPane.INFORMATION_MESSAGE);
    		//JOptionPane.showConfirmDialog(null, "U CAN HAS PHFUN WIF DIS =)");
    
    	}//end Anfangsnachrichten
    	
    	public static void fenster(){
    		Ansicht a = new Ansicht(new Spielfeld());
    		JFrame frame = new JFrame();
    		
    		frame.addWindowListener(new WindowAdapter(){ //eigene kleine Klasse extra fürs Beenden des Spiels.
    		    public void windowClosing(WindowEvent e){
    		        System.exit(0);
    		    }//end wClosing
    		}); //end wAdapter
    		
    		frame.setSize(708, 630);
    		frame.setResizable(false);
    		frame.getContentPane().add(a);
    		frame.setVisible(true);
    	}//end fenster
    	
    	
    }//end class
    Spielfeld:
    HTML-Code:
    package programm;
    /**
     * @author Max
     * @version 1.6
     * @date 16.06.2013
     */
    
    public class Spielfeld {
    	
    	public Spielfeld(){
    		ruecksetzen();
    	}//end Spielfeld
    	
    	public enum Stein{ //Enum im Internet gefunden, soll mir werte (0,1) als Name (rot, gelb) erstellen (einfacher zu merken für mich)
    		kein, //Kein Stein
    		rot, //Roter ~
    		gelb //gelber ~
    	}//end enum
    	
    	public void ruecksetzen(){ //erklärt sich unten von selbst
    		for(int x=0;x<7;x++){ //spielfeld auf x-achse durchgehen
    			for(int y=0;y<6;y++){ //spielfeld auf y-achse durchgehen
    				Steine[x][y] = Stein.kein; //evtl. vorhandene Steine werden entfernt
    			}//end forY
    		}//end forX
    	}//end ruecksetzung
    	
    	public int SteinSetzen(int x, Stein s){ //Überprüfung des Setzens eines Steines
    		if(x>6){ //darf nicht rechts der X-Achse sein
    			return -1;
    		}else if(s == Stein.kein){ //darf nicht keinStein gesetzt werden
    			return -1;
    		}else if(Steine[x][0]!= Stein.kein){ //darf nicht setzen wo Spalte voll ist
    			return -1;
    		}//end if
    			
    			int y;
    			for(y=0;y<6;y++){ //Überprüfe solange ob Feld leer....
    				if(Steine[x][y] != Stein.kein){ //...bis Feld nichtmehr leer...
    					break; //...und unterbreche die Schleife...
    				}//end if
    			}//end for
    			y = y-1; //...dann erniedrige den Wert y um 1 => Y-Koordinate von letztem freien Feld von oben
    			Steine[x][y] = s; //Stein wird gesetzt.
    
    			return y; //Stein erfolgreich gesetzt :)
    				
    	}//end SteinSetzen
    	
    	public Stein SteinLesen(int x, int y){ //Hilfsroutine für die Überprüfung ob gesetzer Stein des Spielers das Spiel gewinnt
    		if(x<0){ //Stein links außerhalb des Spielfeldes
    			return Stein.kein;
    		}else if(x>6){ //Stein rechts außerhalb des Spielfeldes
    			return Stein.kein;
    		}else if(y<0){ //Stein oben außerhalb des Spielfeldes
    			return Stein.kein;
    		}else if(y>5){ //Stein unten außerhalb des Spielfeldes
    			return Stein.kein;
    		} //end if
    		
    		return Steine[x][y];
    	}//end SteinLesen
    	
    	public boolean gewonnen(int x, int y, Stein s){ //Überprüfung ob gewonnen und Ausgabe einer Benachrichtigung
    		
    		//======horizontale Überprüfung auf Gewinn
    		int zaehler = 1; //Stein ist gesetzt => zaehler=1
    		for(int zx=x+1;zx<x+4;zx++){ //Überprüfung nach rechts
    			if(SteinLesen(zx,y) == s){
    				zaehler = zaehler + 1;
    			}else{
    				break;
    			}//end if
    		}//end for
    		
    		for(int zx=x-1;zx>x-4;zx--){ //Überprüfung nach links
    			if(SteinLesen(zx,y) == s){
    				zaehler = zaehler + 1;
    			}else{
    				break;
    			}//end if
    		}//end for
    		
    		if(zaehler>=4){ //Wenn zaehler >=4 => gewonnen
    			return true;
    		} //end if
    		
    		//=======vertikale Überprüfung
    		zaehler = 1;
    		for(int zy=y+1;zy<y+4;zy++){ //Überprüfung nach unten. "Oben" ist nicht notwendig, da unlogisch in Vier Gewinnt (Steine fallen von oben runter).
    			if(SteinLesen(x,zy) == s){
    				zaehler = zaehler + 1;
    			}else{
    				break;
    			}//end if
    		}//end for
    		
    		if(zaehler>=4){ //Wenn zaehler >=4 => ebenfalls gewonnen
    			return true;
    		} //end if
    		
    		
    		//=======diagonale Überprüfung
    		zaehler = 1;
    		for(int zx=(x+1), zy=(y+1);zx<(x+4);zx++,zy++){ //Diagonal nach unten rechts, ergibt sich dadurch, dass Y und X Wert jeweils um 1 erhöht wird
    			if(SteinLesen(zx,zy) == s){
    				zaehler = zaehler + 1;
    			}else{
    				break;
    			}//end if
    		}//enf for
    		
    		for(int zx=(x-1), zy=(y-1);zx>(x-4);zx--,zy--){ //Diagonal nach oben links
    			if(SteinLesen(zx,zy) == s){
    				zaehler = zaehler + 1;
    			}else{
    				break;
    			}//end if
    		}//enf for
    		
    		if(zaehler>=4){ //Wenn zaehler >=4 => gewonnen
    			return true;
    		}//end if
    		
    		zaehler = 1;
    		for(int zx=(x+1), zy=(y-1);zx<(x+4);zx++,zy--){ //Diagonal nach oben rechts
    			if(SteinLesen(zx,zy) == s){
    				zaehler = zaehler + 1;
    			}else{
    				break;
    			}//end if
    		}//enf for
    		
    		for(int zx=(x-1), zy=(y+1);zx>(x-4);zx--,zy++){ //Diagonal nach unten links
    			if(SteinLesen(zx,zy) == s){
    				zaehler = zaehler + 1;
    			}else{
    				break;
    			}//end if
    		}//enf for
    		
    		if(zaehler>=4){ //Wenn zaehler >=4 => gewonnen
    			return true;
    		}//end if
    		
    		
    		return false;
    		
    		
    	}//end boolean
    	
    	public Stein[][] Steine = new Stein[7][6]; //[X][Y]-"Achsen"
    }
    Ansicht:

    HTML-Code:
    package programm;
    import java.awt.Canvas;
    import java.awt.Graphics;
    import java.awt.Color;
    import java.awt.event.*;
    
    import javax.swing.JOptionPane;
    
    import programm.Spielfeld.Stein;
    
    /**
     * @author Max Gembe und Evan Arnold
     * @version 1.6
     * @date 16.06.2013
     */
    
    class Ansicht extends Canvas implements MouseListener { //MouseListener hab ich im Internet gefunden und erm�glicht es der Klasse, Mausereignisse aufzuzeichnen & zu verarbeiten.
    	//private static Color farbe = new Color(red, green, blue);
    	private static Color schwarz = new Color(0, 0, 5); //Definierung der Farben aus dem RGB Farbraum
    	private static Color rot = new Color(240, 10, 1);
    	private static Color gelb = new Color(230, 180, 0);
    	private static Color blau = new Color(0, 0, 90);
    	
    	public Ansicht(Spielfeld sf){
    		spielfeld = sf;
    		setBackground(blau);
    		this.addMouseListener(this); //'Ansicht' kann hiermit die eigenen MouseEvents empfangen |Quelle: Cousin
    	}//end Ansicht
    
    	public void paint(Graphics g){
    		zeichnen(g);
    	}//end paint
    	
    	public void zeichnen(Graphics g){
    		g.setColor(schwarz);
    		for(int x=100;x<700;x+=100){ //Linienzeichnen mit 100Px Abstand für waagrechte Trennlinien
    			g.drawLine(x, 0, x, 600);
    			g.drawLine((x+1), 0, (x+1), 600); //2Px-Linie, sieht geiler aus ;)
    		}//end waagrechte Linien
    		
    		for(int y=0;y<600;y+=100){ //for-schleife für senkrechte Trennlinien ebenfalls mit 100Px Abstand
    			g.drawLine(0, y, 700, y);
    			g.drawLine(0, (y+1), 700, (y+1)); //erneut 2Px-Linie
    		}//end senkrechte Linien
    		
    		for(int x=0;x<7;x++){
    			for(int y=0;y<6;y++){
    				g.setColor(schwarz);
    				g.fillOval((x*100)+2, (y*100)+2, 96, 96); //Schwarze Kreise = Hintergrund
    
    
    				if(spielfeld.Steine[x][y] == Spielfeld.Stein.rot){ //Wenn Spieler "rot" dran is...
    					g.setColor(rot); //...setze ROT als Farbe
    					g.fillOval((x*100)+2, (y*100)+2, 96, 96);
    				}else if(spielfeld.Steine[x][y] == Spielfeld.Stein.gelb){ //und andersrum
    					g.setColor(gelb);
    					g.fillOval((x*100)+2, (y*100)+2, 96, 96);
    				}//end if
    			
    			}//end forY
    		}//end forX
    		
    	}//end zeichnen
    	
    	public Spielfeld spielfeld;
    	
    	Spielfeld.Stein aktuellerStein = Spielfeld.Stein.gelb;
    	
    	public void mouseClicked(MouseEvent e){ //Durch Klicken weiß das Programm die X-Koordinaten des gesetzten Steines. Y-Koordinate ist egal, da die Steine immer nur von oben eingeworfen werden können
    		int xP = e.getX(); //X-Koordinate der Maus in Pixeln
    		int x = xP/100; //Spielfeldkoordinate des Steines: Stein ist 100Px breit
    		
    	
    		int y = spielfeld.SteinSetzen(x, aktuellerStein);
    		if(y != -1){ //Steinwechsel passiert nur, wenn Stein erfolgreich gesetzt werden konnte
    			zeichnen(this.getGraphics()); //Stein gesetzt => Neuzeichnung des Spielfeldes
    			
    			if(spielfeld.gewonnen(x, y, aktuellerStein)){
    				JOptionPane.showMessageDialog(null, ""+aktuellerStein + " hat gewonnen!", "Gewonnen!", JOptionPane.PLAIN_MESSAGE);
    				spielfeld.ruecksetzen(); //Nach "Gewonnen" wird das Spielfeld zurückgesetzt
    				aktuellerStein = Spielfeld.Stein.gelb; //und Gelb beginnt wieder
    				zeichnen(this.getGraphics()); //Neuzeichnung again
    				return;
    			}//end if gewonnen
    
    			if (aktuellerStein == Spielfeld.Stein.gelb){ //Wenn gelb dran war...
    				aktuellerStein = Spielfeld.Stein.rot; //...ist jetzt Rot dran
    			}else{
    				aktuellerStein = Spielfeld.Stein.gelb; //Wenn nicht (also Rot dran war), dann ist jetzt Gelb dran.
    			} //end if
    			
    			JOptionPane.showMessageDialog(null, "Jetzt ist wieder " +aktuellerStein + " dran.", "" +aktuellerStein, JOptionPane.PLAIN_MESSAGE); //Benachrichtigung, wer dran ist
    		} //end if
    	} //end mouseClicked
    	
    	//===================
    	//Das nachfolgende hat Java von mir regelrecht verlangt und spielt sonst keine große Rolle:
    	public void mouseEntered(MouseEvent e){
    	} //end mouseEntered
    	public void mouseExited(MouseEvent e){
    	} //end mouseExited
    	public void mousePressed(MouseEvent e){
    	} //end mousePressed
    	public void mouseReleased(MouseEvent e){
    	} //end mouseReleased
    }//end class Ansicht
    Illuminatum ist offline Geändert von Illuminatum (16.06.2013 um 16:48 Uhr)

  4. #4 Zitieren
    Ritter Avatar von Delta 38
    Registriert seit
    Nov 2008
    Ort
    Bremen
    Beiträge
    1.251
    Deine Hauptklasse muss von der Klasse 'Applet' erben, dann sollte das funktionieren.

    Gruß Delta
    Delta 38 ist offline

  5. #5 Zitieren
    Sergej Petrow
    Gast
    Ich dachte, Du hast eine Applet-Klasse benutzt?

    Davon ist in deinem Code nichts zu sehen. Du hast ein normales Javaprogramm mit JFrames erstellt.

    Schau mal hier, was mit Applets gemeint ist. Ist auch ein gutes Tutorial. Ein bisschen was musst Du da schon noch bei dir ändern.

    Da musst Du dich mal ein bisserl durcharbeiten.

    http://docs.oracle.com/javase/tutori...etStarted.html
    oder hier ein paar Beispiele auf Deutsch
    http://www.jgiesen.de/javascript/Bei...Beispiele.html

    Hab hier mal ein wenig was reingepackt.
    Anstelle der main (also nur die löschen und den unteren Code dafür reinkopieren), die Du komplett löschen kannst, weil applets keine main haben,
    versuch das hier mal. Das Programm ist lauffähig, allerdings ist das nicht wirklich applet-style.
    Aber vielleicht funktioniert das ja schon. Ansonsten musst Du deine Ausgaben komplett dem applet anpassen.



    Code:
    public void init() {
            //Execute a job on the event-dispatching thread; creating this applet's GUI.
            try {
                SwingUtilities.invokeAndWait(new Runnable() {
                    public void run() {
                        anfangsnachrichten();
                        fenster();
                    }
                });
            } catch (Exception e) {
                System.err.println("createGUI didn't complete successfully");
            }
        }
    importieren musst Du hierfür:
    import javax.swing.JApplet;
    import javax.swing.SwingUtilities;
    Geändert von Sergej Petrow (16.06.2013 um 18:52 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •