// // // // // erstellt von W. Stickler import java.applet.*; import java.awt.*; import java.awt.image.*;
|
|
|
- Kasimir Siegel
- vor 7 Jahren
- Abrufe
Transkript
1 erstellt von W. Stickler 1997 import java.applet.*; import java.awt.*; import java.awt.image.*; public class Othello extends Applet implements Runnable private Thread m_othello = null; KONSTANTEN mit Präfix "k" final int kich=1; Repräsentiert den Computer final int ksie=2; Repräsentiert den Spieler final int kstart=0; Spielstatus nach Programmstart final int kcomputer=1; Spielstatus "Computer ist am Zug" final int kspieler=2; Spielstatus "Spieler ist am Zug" final int kspielende=3; Spielstatus "Spielende" final boolean ktest=false; Wenn true, dann Anzeige der Analyse-Matrix im Spielfeld und keine Initialisierung des Zufallsgenerators. final int koffsetx=96; final int koffsety=9; Offsets der Spielfläche GLOBALE Variablen mit Präfix "g" Image gksie; Kugel des Spielers
2 Image gkich; Kugel des Computers Image gkleer; Leere Stelle Image gsie; Button "Neues Spiel - Sie beginnen" Image gich; Button "Neues Spiel - Ich gebinne" Image gothello; Gesamte Spielfläche int [][] gist=new int[9][9]; Ist-Situation auf dem Spielfeld (0=leer 1=Ich 2=Sie) int [][] gsoll=new int[9][9]; Soll-Situation (nachdem ein Zug vorgenommen wurde) int [][] ganalyse=new int[8][8]; Nimmt das Analyseergebnis auf int gw[][]=new int[8][8]; Wertet das korrespondierende Feld als günstig/ungünstig int gpunkteich, gpunktesie; Punktestand für Ich und Sie String gmeldung; Text, der im Hinweis-Fenster angezeigt wird int gstatus; Spielstatus: 0 = kein Spiel aktiv 1 = Ich am Zuge 2 = Sie am Zuge 3 = Spielende Font gfont1 = new Font("Arial",Font.BOLD,18); Font für Punktestand Font gfont2 = new Font("TimesRoman",Font.BOLD,24); Font für Meldung public String getappletinfo() return "Name: Othello\r\n" + "Autor: Wolfgang Stickler\r\n" + "Erstellt mit Microsoft Visual J++ Version 1.1";
3 *** * * *** * public void init() int X,Y; ImageFilter Filter; MediaTracker MT = new MediaTracker(this); resize(560, 514); if (!ktest) Math.random(); Zufallsgeneratir initialisieren gothello=getimage(getcodebase(),"othello.gif"); Gesamte Spielfläche MT.addImage(gOthello,0); MT.checkID(0,true); while (MT.checkAll()==false) Warte(500); Herausfiltern der graphischen Objekte aus dem Spielfeld Filter = new CropImageFilter(0,514,44,44); Leeres Feld gkleer=createimage(new FilteredImageSource(gOthello.getSource(),Filter)); Filter = new CropImageFilter(45,514,44,44); Kugel des Spielers gksie=createimage(new FilteredImageSource(gOthello.getSource(),Filter)); Filter = new CropImageFilter(90,514,44,44); Kugel des Computers gkich=createimage(new FilteredImageSource(gOthello.getSource(),Filter)); Filter = new CropImageFilter(383,164,156,41); Button "ICH beginne!" gich=createimage(new FilteredImageSource(gOthello.getSource(),Filter)); Filter = new CropImageFilter(382,97,156,41); Button "SIE beginne!" gsie=createimage(new FilteredImageSource(gOthello.getSource(),Filter)); Reset(); Spielfeld löschen und Grundstellung gmeldung="willkommen zu Othello!"; gpunktesie=0; Punktestand löschen gpunkteich=0; gstatus=kstart; Spielstatus ist NEUTRAL Jede Position im Spielfeld hat eine Wertung. Je höher dieser Wert ist, desto
4 wichtiger ist es, diese Position zu besetzen. Diese Wertung wird in 100er- Werten angegeben und später zu der Anzahl der auf dieser Position möglichen Umwandlungen aufaddiert. Diese Matrix hat folgendes Aussehen (die Ziffern repräsentieren 100er-Werte): xx xx Die Eckpunkte (0,0) (7,7) (0,7) und (7,0) sind mit 700 (höchste mögliche Zahl) bewertet. Der Computer wird also versuchen, möglichst diese Positionen zu besetzen. Die Positionen (1,1), (6,1), (1,6) und (6,6) sind mit 100 am schlechtesten bewertet. Der Computer wird diese Positionen meiden wie die Pest (es sei den, er hat die jeweilige Eckposition bereits belegt, dann wird in "Erstelle_Analyse" die Bewertungsmatrix angepasst). for (X=1;X<7;X++) for (Y=1;Y<7;Y++) gw[x][y]=300; for (X=2;X<6;X++) for (Y=2;Y<6;Y++) gw[x][y]=400; gw[0][0]=700; gw[0][7]=700; gw[7][0]=700; gw[7][7]=700; gw[0][2]=600; gw[2][0]=600; gw[0][5]=600; gw[5][0]=600; gw[7][2]=600; gw[2][7]=600; gw[7][5]=600; gw[5][7]=600; gw[0][3]=500; gw[3][0]=500; gw[0][4]=500; gw[4][0]=500; gw[7][3]=500; gw[3][7]=500; gw[7][4]=500; gw[4][7]=500;
5 gw[0][1]=200; gw[1][0]=200; gw[0][6]=200; gw[6][0]=200; gw[7][1]=200; gw[1][7]=200; gw[7][6]=200; gw[6][7]=200; gw[1][1]=100; gw[1][6]=100; gw[6][1]=100; gw[6][6]=100; public void destroy() Punktestand und Hinweistext anzeigen. Anschließend die Positionen neu zeichnen, bei denen SOLL und IST abweichen. public void paint(graphics g) int X,Y; g.drawimage(gothello,1,1,this); for (X=0;X<8;X++) for (Y=0;Y<8;Y++) gist[y][x]=gsoll[y][x]; switch (gsoll[y][x]) case 0: g.drawimage(gkleer,koffsety+y*44,koffsetx+x*44,this); break; case 1: g.drawimage(gkich,koffsety+y*44,koffsetx+x*44,this); break; case 2: g.drawimage(gksie,koffsety+y*44,koffsetx+x*44,this); break;
6 public void update(graphics g) paint(g); public void start() if (m_othello == null) m_othello = new Thread(this); m_othello.start(); public void stop() if (m_othello!= null) m_othello.stop();
7 m_othello = null; public void run() while (true) try Thread.sleep(50); catch (InterruptedException e) stop(); public boolean mouseup(event evt, int x, int y) int X,Y; if (x>=381 && x<=538 && y>=96 && y<=135) Button Neues Spiel "SIE" Animiere_Button(kSie); gmeldung="neues Spiel - SIE beginnen!"; Reset(); for (X=0;X<8;X++) Initialisierung der Spieltabellen for (Y=0;Y<8;Y++) Durch setzen auf "9" wird erzwungen, daß das gist[x][y]=9; gesamte Spielfeld neu gezeichnet wird!
8 gpunktesie=2; gpunkteich=2; Punktestand der Ausgangssituation. gstatus=kspieler; Spieler ist am Zug. Aktualisieren(); Bildschirm anzeigen/aktualisieren if (x>=381 && x<=538 && y>=163 && y<=204) Button Neues Spiel "SIE" Animiere_Button(kIch); gmeldung="neues Spiel - ICH beginne. Moment bitte..."; Reset(); for (X=0;X<8;X++) Initialisierung der Spieltabellen for (Y=0;Y<8;Y++) Durch setzen auf "9" wird erzwungen, daß das gist[x][y]=9; gesamte Spielfeld neu gezeichnet wird. gpunktesie=2; Punktestand der Ausgangssituation gpunkteich=2; gstatus=kcomputer; Computer ist am Zug Aktualisieren(); Zug(0,0,kIch); Zug des Computers durchführen if (gstatus!=kspielende ) Wenn nicht Spielende ist (==3), dann Zug des Spieler annehmen X=(y-kOffsetX)/44; Die Kugel-Images haben eine Höhe/Breite von 44 Pixel Y=(x-kOffsetY)/44; if (X>-1 && X<8 && Y>-1 && Y<8) Wenn es Koordinaten im Spielfeld sind: Erstelle_Analyse(kSie); Prüfen, was der Spieler machen kann gstatus=kspieler; Spieler ist am Zug! if (ganalyse[y][x]!=0) Wenn an dieser Position ein Zug möglich ist, gsoll[y][x]=ksie; dann Kugel setzen... Animiere_Kugel(Y,X,kSie);... auch am Bildschirm... Zug(Y,X,kSie); und eigentlichen Zug durchführen Aktualisieren(); Nun den Bildschirm aktualisieren
9 Fall, daß ein ungültiges Feld angewählt wurde. gmeldung=" Sorry - Zug nicht möglich!"; return true; Vergleich von IST- und SOLL-Situation und alle Positionen, die am Bildschirm noch nicht aktualisiert sind, entsprechend zeichnen. Zudem den Punktestand und den Mitteilungstext ausgeben. int X,Y; Graphics g=getgraphics(); for (X=0;X<8;X++) for (Y=0;Y<8;Y++) if (gist[y][x]!=gsoll[y][x]) gist[y][x]=gsoll[y][x]; switch (gsoll[y][x]) case 0: g.drawimage(gkleer,koffsety+y*44,koffsetx+x*44,this); break; case 1: g.drawimage(gkich,koffsety+y*44,koffsetx+x*44,this); break; case 2: g.drawimage(gksie,koffsety+y*44,koffsetx+x*44,this); break;
10 Zählen der in die Richtung dx/dy möglichen Umwandlungen, ausgehend von YY/XX private int Analyse(int YY, int XX, int dx, int dy, int SieIch) int Anzahl,X,Y; Anzahl=0; X=XX; Y=YY; if ((gist[y][x]!=0) && (gist[y][x]!=9)) return(0); Ausgangsfeld ist nicht leer! while (((X+=dx)>=0) && ((Y+=dy)>=0)) RAnd erreicht? if ((gist[y][x]==0) (gist[y][x]==9)) return(0); Rand erreicht! if (gist[y][x]!=sieich) Anzahl+=1; Umwandlung mitzählen if (gist[y][x]==sieich) return(anzahl); Anzahl retournieren return(0); Wenn einer der Buttons "Neues Spiel..." betätigt wurde, dann blinkt dieser kurz. private void Animiere_Button(int SieIch) int X,Y; Graphics g=getgraphics(); if (SieIch==kIch) g.setcolor(color.lightgray); g.fillrect(383,164,156,41); Warte(10); g.drawimage(gich,383,164,this);
11 if (SieIch==kSie) g.setcolor(color.lightgray); g.fillrect(382,97,156,41); Warte(10); g.drawimage(gsie,382,97,this); Wenn eine Kugel gesetzt wird, dann blinkt diese lange auf. private void Animiere_Kugel(int Y,int X,int SieIch) int q; Graphics g=getgraphics(); g.setcolor(color.lightgray); for (q=1 ; q<6 ; q++) g.fillrect(y*44+koffsety,x*44+koffsetx,44,44); Warte(50); if (SieIch==kIch) g.drawimage(gkich,y*44+koffsety,x*44+koffsetx,this); g.drawimage(gksie,y*44+koffsety,x*44+koffsetx,this); Warte(50);
12 Wenn eine Kugel umgewandelt wird, dann blinkt diese kurz auf private void Animiere_Kugel_kurz(int Y,int X,int SieIch) int q; Graphics g=getgraphics(); g.setcolor(color.lightgray); for (q=1 ; q<4; q++) g.fillrect(y*44+koffsety,x*44+koffsetx,44,44); Warte(50); if (SieIch==kIch) g.drawimage(gkich,y*44+koffsety,x*44+koffsetx,this); g.drawimage(gksie,y*44+koffsety,x*44+koffsetx,this); Warte(50); Anzeigen des Punktestandes (gpunkteich und gpunktesie) sowie des in gmeldung hinterlegten Hinweistextes private void Anzeige_Punkte_Meldung() Graphics g=getgraphics(); FontMetrics fm; g.setcolor(color.white); Löschen der Punktestand-Felder und des Meldungsfelds g.fillrect(448,297,35,34); g.fillrect(448,389,35,34); g.fillrect(20,459,517,35); g.setcolor(color.black);
13 Anzeige des Punktestands g.setfont(gfont1); if (gpunkteich<10) g.drawstring(integer.tostring(gpunkteich),467,323); g.drawstring(integer.tostring(gpunkteich),455,323); if (gpunktesie<10) g.drawstring(integer.tostring(gpunktesie),467,413); g.drawstring(integer.tostring(gpunktesie),455,413); Anzeige der Meldung g.setfont(gfont2); fm=getfontmetrics(gfont2); g.drawstring(gmeldung,10+((500-fm.stringwidth(gmeldung))/2),486); zentriert! Durchgehen aller Felder und in ganalyse[][] die Anzahl der umgewandelten Kugeln sowie die Wertung der Position vermerken private void Erstelle_Analyse(int SieIch) int X,Y; int W[][]=new int[8][8]; Graphics g=getgraphics(); W=gW; Kopieren der Wertungstabelle (mehr hierzu bei der Definition der Tabelle) Wenn die Eckpunkte durch die jeweils eigenen Kugeln besetzt sind, dann sind die in die drei möglichen Richtungen benachbarten Positionen GUTE Positionen. In W[][] sind diese Positionen standardmäßig als gefährlich bewertet! if (ganalyse[0][0]==sieich) W[0][1]=600; W[1][0]=600; W[1][1]=600;
14 if (ganalyse[7][7]==sieich) W[7][6]=600; W[6][7]=600; W[6][6]=600; if (ganalyse[0][7]==sieich) W[0][6]=600; W[1][7]=600; W[1][6]=600; if (ganalyse[7][0]==sieich) W[7][1]=600; W[6][0]=600; W[6][1]=600; Zählen der durch diesen Zug umgewandelten Kugeln for (X=0 ; X<8 ; X++) for (Y=0 ; Y<8 ; Y++) ganalyse[y][x]=analyse(y,x,1,-1,sieich)+ alle acht Richtungen testen Analyse(Y,X,-1,1,SieIch)+ Analyse(Y,X,00,1,SieIch)+ Analyse(Y,X,1,00,SieIch)+ Analyse(Y,X,-1,0,SieIch)+ Analyse(Y,X,0,-1,SieIch)+ Analyse(Y,X,1, 1,SieIch)+ Analyse(Y,X,-1,-1,SieIch); Wenn der Zug möglich ist, dann noch die Wertung des Feldes aufaddieren if (ganalyse[y][x]>0) ganalyse[y][x]+=w[y][x]; if (ktest) Wenn TEST, dann Anzeigen der Gesamtwertung im Spielfeld g.drawstring(integer.tostring(ganalyse[y][x]),y*44+koffsety+22,x*44+koffsetx+22);
15 Initialisieren des Spielfeldes und setzen der vier Kugeln der Ausgangssituation. private void Reset() int X,Y; for (X=0;X<9;X++) Initialisierung der Spieltabellen for (Y=0;Y<9;Y++) Durch unterschiedliche Werte in beiden Tabellen gsoll[x][y]=0; wird sichergestellt, daß in paint() alle Felder gist[x][y]=9; neu dargestellt werden, auch die leeren Felder! gsoll[3][3]=kich; Setzen der 4 mittleren Kugeln als Ausgangssituation gsoll[4][4]=kich; gsoll[3][4]=ksie; gsoll[4][3]=ksie; Von der Position YY/XX ausgehend, in die Richtung dx/dy die gegnerischen Kugeln zu den eigenen Kugeln umwandeln. SieIch gibt an, für wen der Zug durchgeführt wird. private void Setze(int YY, int XX, int dx,int dy, int SieIch) int Y,X,Anzahl, Moeglich; X=XX; Y=YY; Anzahl=0; Moeglich=0; Merken, wieviele Kugeln bereits umgewandelt wurden Zum Abbrechen der while-schleife, wenn Umwandlungen stattgefunden haben In Richtung dx/dy laufen bis eigene Kugel erscheint, oder Rand erreicht while (((X+=dx)>=0) && ((Y+=dy)>=0) && (Moeglich==0)) if ((gist[y][x]==0) (gist[y][x]==9)) return; if (gist[y][x]!=sieich) Anzahl+=1; if (gist[y][x]==sieich) Moeglich=Anzahl;
16 Wenn in diese Richtung ein Zug möglich ist, so ist Moeglich!=0 if (Moeglich==0) return; Jetzt das Ganze nochmal, aber dabei die gegnerischen Kugeln umwandeln X=XX; Y=YY; Moeglich=0; while (((X+=dx)>=0) && ((Y+=dy)>=0) && (Moeglich==0)) if (gist[y][x]==sieich) Moeglich=1; gsoll[y][x]=sieich; gist[y][x]=sieich; Animiere_Kugel_kurz(Y,X,SieIch); Läßt die Kugel blinken return; Warteschleife über die in Dauer angegebenen Millisekunden private void Warte(int Dauer) try Thread.sleep(Dauer); catch (InterruptedException e) ; In Abhängigkeit von SieIch den Zug durchführen (Spieler) bzw. Computer-Zug bestimmen private void Zug(int YY,int XX, int SieIch) int X,Y, Bester,BesterX,BesterY, BesterS, BesterSX, BesterSY;
17 X=XX; Y=YY; BesterX=0; BesterY=0; if (SieIch==kSie) Spieler-Zug gmeldung=""; gsoll[y][x]=sieich; Setzen de r vom Spieler gesetzten Kugel gist[y][x]=sieich; Setze(Y,X,1,-1,SieIch); In die acht Richtungen gehen und Kugeln umwandeln Setze(Y,X,-1,1,SieIch); Setze(Y,X,0,1,SieIch); Setze(Y,X,1,0,SieIch); Setze(Y,X,-1,0,SieIch); Setze(Y,X,0,-1,SieIch); Setze(Y,X,1, 1,SieIch); Setze(Y,X,-1,-1,SieIch); Zaehle_Kugeln(); Kugeln zählen und gpunkteich/gpunktesie bestimmen gstatus=kcomputer; Computer ist dran if (gpunkteich+gpunktesie==64) Alle Felder sind voll gstatus=kspielende; dann Spielende und Ausgabe einer if (gpunkteich>gpunktesie) Meldung, wer gewonnen hat. gmeldung="ich habe gewonnen!"; if (gpunktesie>gpunkteich) gmeldung="gratuliere, Sie haben gewonnen!"; gmeldung="u n e n d s c h i e d e n!"; return; Erstelle_Analyse(kSie); Was ist der beste Zug des Spielers
18 BesterS=0; In BesterS merken BesterSX=0; Koordinaten dieses Zuges merken BesterSY=0; Bester Zug des Spielers ermitteln for (X=0; X<8; X++) for (Y=0;Y<8;Y++) if (ganalyse[y][x]>besters) BesterS=gAnalyse[Y][X]; BesterSX=X; BesterSY=Y; Jetzt besten Zug des Computers bestimmen Erstelle_Analyse(kIch); Bester=0; Bester Zug des Computers suchen und Koordinaten merken for (X=0; X<8; X++) for (Y=0;Y<8;Y++) if (ganalyse[y][x]>bester) Bester=gAnalyse[Y][X]; BesterX=X; BesterY=Y; Wahrscheinlichkeit von 1:2 den vorhergehenden Zug verwerfen. if (ganalyse[y][x]==bester) if (Math.random()>0.5) BesterX=X; BesterY=Y; if (gpunkteich==0) Seltener Fall, daß alle meine Steine weg sind! gmeldung="ich habe keine Kugeln und somit verloren!"; gstatus=kspielende; Spielende return;
19 Seltener Fall: Keiner kann ziehen if ((Bester==0) && (BesterS==0)) gmeldung="keiner kann ziehen"; Warte(3000); gstatus=kspielende; if (gpunkteich>gpunktesie) Meldung, wer gewonnen hat. gmeldung="ich habe gewonnen!"; gmeldung="gratuliere, Sie haben gewonnen!"; gmeldung="u n e n d s c h i e d e n!"; return; Wenn kein Zug möglich ist, dann ist der Spieler dran if (Bester==0) gmeldung="ich muß aussetzen! Sie sind dran..."; gstatus=kspieler; Spieler ist am Zug return; Gibt es einen vergleichbaren Zug des Spielers (also ein Zug mit der gleichen 100er-Wertung und bringt der Zug dem Spieler auch noch mehr Kugeln als der eigene Computer-Zug, dann "versauen" wir dem Spieler den Zug... if ((int)(bester/100)==(int)(besters/100)) if (BesterS>Bester) if (ganalyse[bestersy][bestersx]!=0) BesterX=BesterSX; BesterY=BesterSY; Warte(1500); Damit s nicht zu hektisch wird, wird eine Pause eingelegt gsoll[bestery][besterx]=kich; Computer-Kugel wird gesetzt... gist[bestery][besterx]=kich; Animiere_Kugel(BesterY,BesterX,kIch);... und auch angezeigt.
20 Setze(BesterY,BesterX,1,-1,kIch); Zug wird in alle acht Richtung durchgeführt Setze(BesterY,BesterX,-1,1,kIch); Setze(BesterY,BesterX,0,1,kIch); Setze(BesterY,BesterX,1,0,kIch); Setze(BesterY,BesterX,-1,0,kIch); Setze(BesterY,BesterX,0,-1,kIch); Setze(BesterY,BesterX,1, 1,kIch); Setze(BesterY,BesterX,-1,-1,kIch); Zaehle_Kugeln(); Kugeln zählen und gpunkteich/gpunktesie aktualisieren if (gpunktesie==0) Seltener Fall, daß alle seine Steine weg sind! gmeldung="sie haben keine Kugeln und somit verloren!"; gstatus=kspielende; Spielende return; gmeldung=""; if (gpunkteich+gpunktesie==64) Alle Spielfelder sind voll. Ausgabe einer gstatus=kspielende; Meldung und Spielende setzen. if (gpunkteich>gpunktesie) gmeldung="ich habe gewonnen!"; if (gpunktesie>gpunkteich) gmeldung="gratuliere, Sie haben gewonnen!"; gmeldung="u n e n d s c h i e d e n!"; return; Nachdem der Computer seinen Zug gemacht hat, muß nun überprüft werden, ob der Spieler überhaupt noch ziehen kann. Theoretisch könnte man über die Variablen BesterX und BesterY dem Spieler bei Bedarf einen Tipp geben! Erstelle_Analyse(kSie); Bester=0; for (X=0; X<8; X++)
21 for (Y=0;Y<8;Y++) if (ganalyse[y][x]>bester) Bester=gAnalyse[Y][X]; BesterX=X; BesterY=Y; Der Fall, daß der Spieler nicht kann und der Computer einen weiteren Zug machen darf. Dann wird "Zug" rekursiv aufgerufen. if (Bester==0) gmeldung="sie müßen aussetzen! Ich ziehe nochmal..."; Warte(3000); Zug(0,0,kIch); Wenn der Computer seine weiteren Züge gemacht hat, kann es sein, daß daß Spiel beendet ist. Wenn nicht, dann wird der Status auf "Spieler ist dran" gesetzt. if (gstatus!=kspielende) gstatus=kspieler; return; gstatus=kspieler; Spieler ist dran gmeldung="sie sind dran..."; return; Tabelle durchgehen und die Kugeln des Spieler (gpunktesie) und des Computers (gpunkteich) zählen. private void Zaehle_Kugeln() int X,Y; gpunkteich=0;
22 gpunktesie=0; for (X=0; X<8; X++) for (Y=0;Y<8;Y++) if (gist[y][x]==kich) gpunkteich+=1; if (gist[y][x]==ksie) gpunktesie+=1;
8.6 Visualisierung der Sortieralgorithmen
8.6 Visualisierung der Sortieralgorithmen 8.6.1 Problemstellung Schauen Sie sich den folgenden Quelltext eines Java-Applets an: import java.awt.*; import javax.swing.*; import java.awt.event.*; public
Objektorientierte Programmierung OOP Objektorientierte Programmierung (OOP) mit Java
9 Übungen: Applets Objektorientierte Programmierung OOP Objektorientierte Programmierung (OOP) mit Java 1. Java-Applet mit Text 2. Java-Applet mit Bild und Text 3. Java-Applet mit Grafik 9 Applets 4. Java-Applet
Schritt 1 - Ein Spielfeld
Schritt 1 - Ein Spielfeld Wir beginnen mit zwei einfachen Java-Klassen, dem eigentlichen Spielfeld und dem Applet zum Anzeigen des Spielfeldes (und später der Buttons und der anderen Bedienelemente). Hier
Java Game Development Fabian Birzele Programmierpraktikum 2008 / 2009
Java Game Development Fabian Birzele Programmierpraktikum 2008 / 2009 Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 1 Ziele
Ab jetzt: Java ohne Kara
Java ohne Kara Ab jetzt: Java ohne Kara Ziel: Erfahrungen sammeln mit ersten Java Programmen JavaKara -> Java Ablauf in JavaKara: 1. Programm schreiben 2. Kompilieren 3. Programm starten Ablauf in Java
Einstieg in die Informatik mit Java
Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form
Inhaltsverzeichnis. Rechenmaschinen - EINFÜHRUNG IN DIE OOP MIT JAVA PI - KAPITEL 1: GRAFIK UND GUIS - V SEITE 1 VON 10 -
- EINFÜHRUNG IN DIE OOP MIT JAVA PI - KAPITEL 1: GRAFIK UND GUIS - V. 0.0.06 - SEITE 1 VON - Inhaltsverzeichnis 3Grafiken, Threads und GUIs... 2 3.1Was sind Applets Theoretischer Hintergrund...2 3.1.1Kennzeichen
Arbeitsblätter für die Lehrveranstaltung OOP JAVA 4
Fachhochschule Stralsund Fachbereich Maschinenbau Lehrgebiet Informatik Prof. Dr.-Ing.Ch.Wahmkow Arbeitsblätter für die Lehrveranstaltung OOP JAVA 4 IV. Threads, Audiodateien, Bilder, Datumsfunktion, Aufruf
Zeichnen und animieren
Zeichnen und animieren Grundlage bildet wieder die Klasse Graphics Ein Objekt der Klasse Graphics wird immer der paint Methode übergeben public void paint (Graphics g) Auch außerhalb von paint kann Graphics
Übungen zu Softwareentwicklung 1, WS 2009/10 Übung 6
Übungen zu Softwareentwicklung 1, WS 2009/10 Übung 6 Name: Abzugeben bis: Mi, 2.12.2009 12:00 Matrikelnummer: Bearbeitungsdauer in Stunden: Nummer der Übungsgruppe: Name des Tutors: Name des Übungsleiters:
AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik www.munz-udo.de
Stand FTE2 Anfang 4. Semester plus Projekt Multiuhren_Thread Ich gehe im Hinblick auf Klassenarbeiten und der Abschlussprüfung davon aus, dass Sie das Skript OOP JAVA2 durchgearbeitet haben. Wir haben
Probeklausur Informatik 2 Sommersemester 2013
Probeklausur Informatik 2 Sommersemester 2013 1 Probeklausur Informatik 2 Sommersemester 2013 Name: Matrikelnummer: Hilfsmittel: Es sind alle schriftlichen Unterlagen, aber keine elektronischen Hilfsmittel
Bitmaps und Animationen
Bitmaps und Animationen 1 Themenübersicht 1. Bitmaps 1. Die Klasse Image 2. Laden und Anzeigen von Bildern 3. Skalierungen und Transformationen 2. Animationen 1. Animationen mit Threads 2. Bildschirmflackern
Parallele Prozesse Prozeß Parallele Prozesse verzahnte Prozesse Nebenläufige Prozesse: Threads Vorlesung Software-Entwicklung / Folie 131 Ziele:
Parallele Prozesse SWE-131 Prozeß: Ausführung eines sequentiellen Programmstückes in dem zugeordneten Speicher (Adressraum). Veränderlicher Zustand: Speicherinhalt und Programmposition. Parallele Prozesse:
Applets Belebung von Webseiten. Dipl.-Ing. Wolfgang Beer
Applets Belebung von Webseiten Dipl.-Ing. Wolfgang Beer Was sind Applets? Java Klassen, die spezielle Richtlinien befolgen, um: "in Internet-Browsern lauffähig zu sein" Somit ist, komplexere Funktionalität,
Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung
Beispiele für Ausdrücke Der imperative Kern Deklarationen mit Initialisierung Variablendeklarationen int i = 10; int j = 15; Beispiele für Ausdrücke i+j i++ i & j i j [] [static]
Übung Grundlagen der Programmierung WS 2008/09. Übung 04: Methoden. Abgabetermin: Prosabeschreibung Java-Programm.
Übung 04: Methoden Abgabetermin: 11. 11. 2008 Name: Matrikelnummer: Gruppe: G1 (Prähofer) G2 (Wolfinger) G3 (Wolfinger) Aufgabe Punkte gelöst abzugeben schriftlich abzugeben elektronisch Aufgabe 4.1 12
Universität Paderborn Prof. Dr. Stefan Böttcher. Kapitel 3: Java Applets
Kapitel 3: Java Applets 1 Was sind Applets? kleine in Fenstern ausführbare Programme typisch: Aufruf im Browserfenster als Teil einer HTML-Seite Anfang des umgebenden HTML-Textes
Einführung in die Informatik - Teil 2 -
Eckart Modrow Grafik mit NetBeans/BlueJ S. 1 Einführung in die Informatik - Teil 2 - Grafik mit NetBeans/BlueJ 1 Inhalt: 1. Bälle 2. Aufgaben 3. Arbeiten mit der Maus 4. Aufgaben Literaturhinweise: Küchlin/Weber:
Der Ball kann angezeigt werden: anzeigen( ) {... } Der Ball kann z.b. seine Größe verändern: groesseaendern(int veraenderung) {... } usw.
Objekt-Orientierung Die ersten objektorientierten Sprachen wurden ab 1967 entwickelt (Simula, Smalltalk). Die Grundidee besteht darin, Objekte der realen Welt abzubilden. Java-Programme bestehen aus Klassen.
Java - Programmierung - Prozedurale Programmierung 1
Java - Programmierung - Prozedurale Programmierung 1 // elementare Datentypen public class el_dt public static void main(string args []) byte b = 127; short s = 32767; int i = 2147483647; long l = 9223372036854775807L,
Anweisungen zur Ablaufsteuerung
Anweisungen zur Ablaufsteuerung if-else switch while do-while for Ausdrücke Ein Ausdruck ist eine Folge von Variablen, Operatoren und Methodenaufrufen, der zu einem einzelnen Wert ausgewertet wird. Operanden
Theorie zu Übung 8 Implementierung in Java
Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich Theorie zu Übung 8 Implementierung in Java Klasse in Java Die Klasse wird durch das class-konzept
Versuchsziele Konzepte der parallelen Programmierung am Beispiel von Threads anwenden können. Einbau von Kontrollmechanismen mittels Semaphore.
Hochschule Harz Versuch: fcopy Mit Java FB Automatisierung und Informatik Betriebssysteme Thema: Kopieren einer Datei unter der Kontrolle von Semaphoren Versuchsziele Konzepte der parallelen Programmierung
Parallele Prozesse. Prozeß wartet
Parallele Prozesse B-66 Prozeß: Ausführung eines Programmes in seinem Adressraum (zugeordneter Speicher) Parallele Prozesse: gleichzeitig auf mehreren Prozessoren laufende Prozesse p1 p2 verzahnte Prozesse:
Taxi-Simulation. Objektorientierte Analyse. Verb-Substantiv-Methode
Informatik Taxi-Simulation Seite 1 Taxi-Simulation Ein Taxiunternehmen untersucht gerade, ob es sein Einsatzgebiet in einen bisher nicht abgedeckten Teil der Stadt ausdehnen soll. Basierend auf den geschätzten
Verkettete Datenstrukturen: Listen
Verkettete Datenstrukturen: Listen 2 Listen Formal: Liste = endliche Folge von Elementen [a 1, a 2,..., a n ]. Spezialfall: leere Liste [ ]. Länge einer Liste = Anzahl der Elemente (bei leerer Liste: 0).
Einstieg in die Informatik mit Java
1 / 18 Einstieg in die Informatik mit Java Applets Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 18 1 Einführung 2 Sicherheits-Maßnahmen 3 Ereignisgesteuerte Programmierung
Probeklausur: Programmieren I
Probeklausur: Programmieren I WS09/10 Erlaubte Hilfsmittel: keine Lösung ist auf den Klausurbögen anzufertigen. (eventuell Rückseiten nehmen) Bitte legen Sie einen Lichtbildausweis und den Studentenausweis
SE2-6. Übung Johannes Bürdek
SE2-6. Übung 11.12.2014 Johannes Bürdek [email protected] Fragen und Support: [email protected] oder ins Forum: https://moodle.tu-darmstadt.de/mod/forum/view.php?id=56674 ES Real-Time
JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)
JAVA BASICS 2. Primitive Datentypen 1. Warum Java? weit verbreitet einfach und (relativ) sicher keine Pointer (?) keine gotos kein Präprozessor keine globalen Variablen garbage collection objekt-orientiert
Klausur Software-Entwicklung September 00
Aufgabe 1: Wahrheitstafeln ausgeben (ca. 8 Punkte) Matrikelnr : Ergänzen Sie in folgendem Programm, eine rekursive Funktion, die eine Boole'sche Wahrheitstafel für N Variablen ausgibt. Die Zahl N soll
Einstieg in die Informatik mit Java
Vorlesung vom 6.11.07, Weitere Anweisungen Übersicht 1 Verbundanweisung 2 Bedingte Anweisung 3 Auswahlanweisung 4 for Schleife 5 while Schleife 6 do Schleife 7 break Anweisung 8 continue Anweisung 9 Leere
Prozesszustände (1a)
Prozesszustände (1a) NOT EXISTING DELETED CREATED Meta-Zustand (Theoretische Bedeutung) Prozesszustände Multiuser Umfeld (1c) Hintergrund-Prozess - der Prozess startet im Hintergrund - my-commandbin &
3. Übungsbesprechung Programmkonstruktion
3. Übungsbesprechung Programmkonstruktion Karl Gmeiner [email protected] November 16, 2011 K Gmeiner ([email protected]) 3. Übungsbesprechung PK November 16, 2011 1 / 22 Rückblick und
JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)
JAVA BASICS 2. Primitive Datentypen 1. Warum Java? zunehmend weit verbreitet einfach und (relativ) sicher keine Adressrechnung, aber Pointer keine gotos kein Präprozessor keine globalen Variablen garbage
Programmieren I. Kapitel 5. Kontrollfluss
Programmieren I Kapitel 5. Kontrollfluss Kapitel 5: Kontrollfluss Ziel: Komplexere Berechnungen im Methodenrumpf Ausdrücke und Anweisungen Fallunterscheidungen (if, switch) Wiederholte Ausführung (for,
Ausnahmebehandlung in Java
Ausnahmebehandlung in Java class A { void foo() throws Help, SyntaxError {... class B extends A { void foo() throws Help { if (helpneeded()) throw new Help();... try {... catch (Help e) {... catch (Exception
1 Klassen anlegen und Objekte erzeugen
Werkzeugkiste Java 1 1 Klassen anlegen und Objekte erzeugen Klassengrundgerüst 1 /** 2 * Write a description of class Testklasse here. 3 * 4 * @author ( your name ) 5 * @version (a version number or a
Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme
Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Programmieren I Dr. Werner Struckmann 8. September 2014 Name: Vorname: Matrikelnummer: Kennnummer: Anrede: Frau Herr
1 Klassen anlegen und Objekte erzeugen
Werkzeugkiste Java 1 1 Klassen anlegen und Objekte erzeugen Klassengrundgerüst 1 /** 2 * Write a description of class Testklasse here. 3 * 4 * @author ( your name ) 5 * @version (a version number or a
- EINSTIEG IN JAVA - (1/5) Datum:
- EINSTIEG IN JAVA - (1/5) Datum: 2.2 Wir lernen die Programmiersprache Java und entwickeln ein Computerspiel Schritt #1: Constructor-Methoden: Wir setzen die beiden Spieler in die 'Welt' (das Spielfeld)
Musterlösung Stand: 5. Februar 2009
Fakultät IV Elektrotechnik/Informatik Probeklausur Einführung in die Informatik I Hinweis: Diese Probeklausur ist eine kleine Aufgabensammlung, die etwa dem Schwierigkeitsgrad der Teilleistung TL 2 (Programmiertest)
Thread-Synchronisation in in Java. Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen
Thread-Synchronisation in in Java Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen Die Klasse Thread Die Die Klasse Thread gehört zur zur Standardbibliothek von von
FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Blöcke. Beispiel: Variablen in Blöcken
4 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Blöcke Blöcke erweitern einzelne Anweisungen, etwa bei Kontrollstrukturen später Beispiel: Einzelne Anweisung: anweisung; Erweiterung
JAVA für Nichtinformatiker - Probeklausur -
JAVA für Nichtinformatiker - Probeklausur - Die folgenden Aufgaben sollten in 150 Minuten bearbeitet werden. Aufgabe 1: Erläutere kurz die Bedeutung der folgenden Java-Schlüsselwörter und gib Sie jeweils
In dieser Aufgabe geht es darum, das einfache Meteor-Spiel zu verstehen und anzupassen. Lade als erstes das Spiel sample12 und spiele es.
In dieser Aufgabe geht es darum, das einfache Meteor-Spiel zu verstehen und anzupassen. Lade als erstes das Spiel sample12 und spiele es. Im Spiel fällt ein Meteor vom oben zum unteren Rand. Das Raumschiff
! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -
! 1. Rekursive Algorithmen! 2. Rekursive (dynamische) Datenstrukturen II.3.2 Rekursive Datenstrukturen - 1 - Ausdruck Ausdruck Grundwert ( Typ ) Präfix-Operator Name Methodenaufruf [ Ausdruck ] ( Ausdruck
Java Kurzreferenz Für Fortgeschrittene
Java Kurzreferenz Für Fortgeschrittene 1. Initialisierung von Applets: Die Methode init Wenn ein Applet gestartet wird, werden immer zwei Methoden aufgerufen. Diese heissen init und start. Um gewisse Berechnungen
Java - AWT Basispraktikum SystemArchitektur WS 2008/ Atanas Dimitrov
Java - AWT Basispraktikum SystemArchitektur WS 2008/2209 09.12.2008 Atanas Dimitrov 1 Was besprechen wir heute: AWT Klassen Die Klasse Graphics AWT Methoden Die Klasse ToolKit Ausgabe von Bilder Die Klasse
Dr. Monika Meiler. Inhalt
Inhalt 15 Parallele Programmierung... 15-2 15.1 Die Klasse java.lang.thread... 15-2 15.2 Beispiel 0-1-Printer als Thread... 15-3 15.3 Das Interface java.lang.runnable... 15-4 15.4 Beispiel 0-1-Printer
Martin Unold INFORMATIK. Geoinformatik und Vermessung
Zusammenfassung Was ist eine Programmiersprache? Eine Sprache, die Formal eindeutig in Maschinenbefehle übersetzbar ist Für Menschen einfacher verständlich ist als Bytecode Zur Formulierung von Datenstrukturen
Programmieren in Java
17. Übung 1. Aufgabe Schreibe ein Programm, das eine Textdatei (z.b. *.java ) aus dem aktuellen Verzeichnis über eine TextArea auf ein Fenster des Bildschirms abbildet. Jede Zeile soll dabei durchnummeriert
Grundzüge der Wirtschaftsinformatik WS 2002/03. Wiederholung Java. Programmierzyklus. Heiko Rossnagel Problem
Grundzüge der Wirtschaftsinformatik WS 2002/03 Wiederholung Java Heiko Rossnagel www.m-lehrstuhl.de accelerate.com Grundzüge der Wirtschaftsinformatik WS 2002/03 1 Programmierzyklus Problem Formulierung
Klausur Softwaretechnik / JAVA Fachbereich BW, für WINFO
Klausur Softwaretechnik / JAVA Fachbereich BW, für WINFO Dipl.-Ing. Klaus Knopper 20.01.2010 Hinweis: Bitte schreiben Sie auf das Deckblatt und auf jede Seite Ihren Namen und/oder Ihre Matrikelnummer,
1 Modellierung einer Uhr
PNS Wahlpflichtfach Informatik Projekt: Uhrzeit Seite 1 1 Modellierung einer Uhr Aufgabe: Es soll ein Modell für eine Digitaluhr erstellt werden, die Stunden und Minuten im Format hh:mm repräsentiert.
5. Tutorium zu Programmieren
5. Tutorium zu Programmieren Dennis Ewert Gruppe 6 Universität Karlsruhe Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by IPD Snelting
Grafikausgabe mit dem Abstract- Windowing-Toolkit. Eine Einführung
Grafikausgabe mit dem Abstract- Windowing-Toolkit Eine Einführung Inhalt Einführung Grundlegende Eigenschaften des Abstract-Windowing- Toolkit (AWT) Grundlagen Grafikausgabe Linien zeichnen Rechtecke zeichnen
Dokumentation des Projektes Tic Tac Toe
Praktikum aus Programmierung Dr. Michael Hahsler Dokumentation des Projektes Tic Tac Toe 0050230 1 Java Projekt: Tic Tac Toe 1. Inhaltsverzeichnis 1. Inhaltsverzeichnis... 2 2. Problemdefinition... 2 3.
Vorlesung Objektorientierte Programmierung Klausur
Prof. Dr. Stefan Brass 16. Februar 2007 Dipl.-Inform. Annett Thüring Institut für Informatik MLU Halle-Wittenberg Vorlesung Objektorientierte Programmierung Klausur Name: Matrikelnummer: Studiengang: Aufgabe
Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1
Fachhochschule Stralsund Fachbereich Maschinenbau Lehrgebiet Informatik Prof. Dr.-Ing. Ch.Wahmkow Arbeitsblätter für die Lehrveranstaltung OOP I. Aufbau eines Java-Programmes JAVA 1 Escape-Sequenzen zur
Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen
Kapitel 9 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Attribute von Klassen, Methoden und Variablen Interfaces WS 07/08 1/ 18 2/ 18
4D Progress Die Projektmethoden für diese Komponente erscheinen im Explorer auf der Seite Methoden unter Komponent-Methoden:
4D Progress 4D bietet eine Komponente mit Namen 4D Progress. Damit können Sie im gleichen Fenster eine oder mehrere Ablaufbalken gleichzeitig öffnen (so wie im Finder auf Mac OS). Jedem Ablaufbalken ist
Studentische Lösung zum Übungsblatt Nr. 7
Studentische Lösung zum Übungsblatt Nr. 7 Aufgabe 1) Dynamische Warteschlange public class UltimateOrderQueue private Order[] inhalt; private int hinten; // zeigt auf erstes freies Element private int
FHZ. K13 Rekursion. Lernziele. Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren. Inhalt
Inhalt 1. Einführung 1. Beispiel: Fakultät 2. Beispiel: Zahlenfolge 3. Beispiel: Formale Sprache 4. Unterschied Iteration/Rekursion 2. Rekursive Methoden 1. Beispiel: Fakultät 2. Beispiel: "Türme
PROGRAMMIERUNG IN JAVA
PROGRAMMIERUNG IN JAVA ZUWEISUNGEN (1) Deklaration nennt man die Ankündigung eines Platzhalters (Variablen) und Initialisierung die erste Wertvergabe bzw. die konkrete Erstellung des Platzhalters. In einem
Die for -Schleife HEUTE. Schleifen. Arrays. Schleifen in JAVA. while, do reichen aus, um alle iterativen Algorithmen zu beschreiben
18.11.5 1 HEUTE 18.11.5 3 Schleifen Arrays while, do reichen aus, um alle iterativen Algorithmen zu beschreiben Nachteil: Steuermechanismus ist verteilt Übersicht nicht immer leicht dazu gibt es for (
CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.
CoMa 04 Java II Paul Boeck Humboldt Universität zu Berlin Institut für Mathematik 7. Mai 2013 Paul Boeck CoMa 04 7. Mai 2013 1 / 13 Verzweigungen Wenn-Dann Beziehungen if (BEDINGUNG) { else if (BEDINGUNG2)
Lösungen. 1. Aufgabe. // ActionExample.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.
Lösungen 1. Aufgabe // ActionExample.java import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class ActionExample extends JFrame int counter = 1; JLabel counterlabel; public
Informatik II. Semesterklausur
Universität Augsburg, Institut für Informatik Sommersemester 2003 Prof. Dr. Bernhard Bauer 5. Juli 2003 Stefan Fischer, Dr. Martin Müller Informatik II Semesterklausur Prüfungsmodul Informatik II (SS 2003)
Graphische Programmierung: GUIs: graphical user interfaces
Graphische Programmierung: GUIs: graphical user interfaces Ziel: Java -Programmierung und Handhabung von graphischen Benutzeroberflächen (in Applets) mehrere Fenster Fenster-Eigenschaften: aktiv oder inaktiv
