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 Jede(r) BioINFORMATIKER/-IN muss programmieren können! Programmieren (in diesem Fall: Java) lernen Selbstständig ein größeres System (=Spiel) implementieren Zugangsvoraussetzung für den Blockteil des Praktikums Spaß ;-) Ziel der zwei Vorlesungen: Grundlagen der Spieleprogrammierung + Eclipse (VL 1) Entwicklung eines kleinen Spiels ( Pong ) (VL 2a) Vorstellung der Projekte (VL 2b) Ausführliche Unterlagen / das Tutorial zu den Vorlesungen findet ihr unter http://javacooperation.gmxhome.de Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 2
Die heutige Vorlesung Eclipse Applet Bewegung Doppelpufferung Mausereignisse Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 3
Eclipse Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 4
Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 5
Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 6
Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 7
Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 8
Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 9
Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 10
Applets Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 11
Die Applet - Grundstruktur public class Pong1 extends Applet { public void init() { public void start() { public void stop() { public void destroy() { public void paint (Graphics g) { Keine main Methode, stattdessen init() Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 12
Strg+Umsch+O Import packages Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 13
Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 14
Einbinden in HTML - Seite <html> <body> <applet code = Main width= 700 height= 400 ></applet> </body> </html> Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 15
Laufen lassen in Eclipse Strg+Space Autoergänzung / Vorschläge Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 16
Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 17
Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 18
Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 19
Bewegung Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 20
Threads import java.applet.*; import java.awt.*; public class Pong2 extends Applet implements Runnable { public void init() { public void start() { public void stop() { public void destroy() { public void run () { public void paint (Graphics g) { Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 21
Threads import java.applet.*; import java.awt.*; public class Pong2 extends Applet implements Runnable { public void init() { public void start() { Thread th = new Thread(this); th.start(); public void stop() { public void destroy() { public void run () { public void paint (Graphics g) { Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 22
Threads import java.applet.*; import java.awt.*; public class Pong2 extends Applet implements Runnable {... public void run () { while (true) { repaint();... try{ Thread.sleep (20); catch (InterruptedException ex){ Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 23
Ball import java.applet.*; import java.awt.*; public class Pong3 extends Applet implements Runnable { private int xposition; private int yposition; private int radius; public void init() { xposition = 0; yposition = 100; radius = 20;... Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 24
Ball import java.applet.*; import java.awt.*; public class Pong3 extends Applet implements Runnable {... public void run () { while (true){ xposition++; repaint();... try{ Thread.sleep (20); catch (InterruptedException ex){ Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 25
Ball import java.applet.*; import java.awt.*; public class Pong3 extends Applet implements Runnable {... public void paint (Graphics g) { g.setcolor(color.red); g.filloval (xposition - radius, yposition - radius, 2 * radius, 2 * radius); Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 26
Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 27
Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 28
Doppelpufferung Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 29
Doppelpufferung import java.applet.*; import java.awt.*; public class Pong4 extends Applet implements Runnable {... private Image dbimage; private Graphics dbg; public void init() { dbimage = createimage(this.getsize().width, this.getsize().height); dbg = dbimage.getgraphics();... Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 30
Doppelpufferung import java.applet.*; import java.awt.*; public class Pong4 extends Applet implements Runnable {... public void update(graphics g) { dbg.setcolor(getbackground()); dbg.fillrect(0, 0, this.getsize().width, this.getsize().height); dbg.setcolor(getforeground()); paint(dbg); g.drawimage(dbimage, 0, 0, this); Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 31
Flackert nicht ;-) Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 32
Mausereignisse Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 33
Mausereignisse public class Pong4 extends Applet implements Runnable {... private int xspeed; public void init() { xposition = 0; yposition = 100; radius = 20; xspeed = 1; public void run () {... xposition+=xspeed;...... Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 34
Mausereignisse public class Pong4 extends Applet implements Runnable, MouseListener {... Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 35
Strg+1 add unimplemented methods Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 36
Mausereignisse public class Pong4 extends Applet implements Runnable, MouseListener {... public void mouseclicked(mouseevent e) { public void mouseentered(mouseevent e) { public void mouseexited(mouseevent e) { public void mousepressed(mouseevent e) { public void mousereleased(mouseevent e) { Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 37
Mausereignisse public class Pong4 extends Applet implements Runnable, MouseListener {... public void mouseclicked(mouseevent e) { xspeed = -xspeed;... Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 38
Mausereignisse public class Pong4 extends Applet implements Runnable {... public void init() {... addmouselistener(this); Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 39
Ball ändert Richtung bei Maus - Klick Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 40
Bis zum nächsten Mal Verstehen was wir heute gemacht haben! Nachlesen: Was ist Vererbung, was ist eine abstrakte Klasse Zur Übung: Ball in X- und Y-Richtung bewegen Ball von der Wand abprallen lassen Sound einfügen, wenn der Ball von der Wand abprallt (siehe Tutorial) Hintergrundbild einfügen (siehe Tutorial) Keyboardevents abfangen (also Ball z.b. mit den Pfeiltasten steuern) Fabian Birzele, LMU Institut für Informatik, Lehrstuhl für Praktische Informatik und Bioinformatik, 2008: Programmierpraktikum 41