Fönsterhantering, grafik

Relevanta dokument
Händelsestyrda program

Programstyrd / händelsestyrd

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 7 Erik Nilsson, Institutionen för Datavetenskap, LiU

Laboration 15 Grafiskt användargränssnitt

Lektion Händelsehanterare

ITK:P1 Lektion 4. Lektion 4. Lektion 4. Att implementera en spelidé i Java. DSV Peter Mozelius

Mer om grafiska komponenter. Händelsestyrda program

Föreläsning 15 (16) Historik (java.awt) Historik (javax.swing) Introduktion till Swing

Föreläsnings 11 - GUI, Händelsestyrda program, MVC

2I1049 Föreläsning 8. Grafiska gränssnitt i Java. AWT-komponenter. Grafiska gränssnitt, Java interface och händelsehantering

Fortsättningskurs i programmering F 5. GUI händelsehantering - undantagshantering Hugo Quisbert AWT. Paket för hantering av grafik

Kursutvärdering. Spel och grafik i Java. Föreläsningarna. Labbar. Föreläsningar-labbar. Översikt. Bra föreläsningar

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

Malmö högskola 2007/2008 Teknik och samhälle

Grafiska program i Java. AWT och Swing? AWT. Swing. JButton. Button

Laboration 4: Game of Life

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen FYTA11 Javaprogrammering

Föreläsning 10. Mer om grafiska komponenter Händelsestyrda program. Layout Managers

Lösningsförslag till tentamen

Projekt 2 XL. Observer-mönstret

Swing. MER Java Foundation Classes (JFC) Hur lära sig? Vad är farorna. LayoutManagers. Exempel på några av komponenterna

Föreläsning 14: Grafik & mera händelsehantering

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Föreläsning 3: Händelsestyrda program och användargränssnitt

Swing. MER Java Foundation Classes (JFC) Vad är farorna. Hur lära sig? LayoutManagers. Exempel på några av komponenterna

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

Föreläsning 10. Mer om grafiska komponenter Händelsestyrda program. Layout Managers. Exempel: FlowLayout. Klassen FlowLayout

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Arv och polymorfi. Lite terminologi; Basklass eller superklass: En klass som fungerar som bas för vårt arv. Vi skapar nya klasser utifrån den.

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Grafiska komponenter.

Lab5 för prgmedcl04 Grafik

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Rita Egna Bilder, Timer

Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015

Föreläsning 13: Swing (GUI), händelser, timer

Malmö högskola 2007/2008 Teknik och samhälle

Objektorienterad programmering med Java Swing: Händelser, lyssnare och applets

Labbinstruktioner för Java/Swing

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 18

LiTHehack? Här? lithehack se koma Tisdagar och torsdagar

Lösningsförslag till tentamen

Grafiska användargränsnitt i Java. Föreläsning 7 Innehåll. Använda klasspaketet Swing. Klasspaket i Java. Grafiska användargränsnitt i Java

Frames, menyer och GUI-program

Tentamen i Objektorienterad programmering

Lösningsförslag till tentamen

Lösningsförslag tentamen FYTA11 Java

För att hitta filen gå till mappen NetBeansProjects. Välj undermappen med rätt projekt, och sedan undermapp dist. Där ligger.jar-filen.

Lösningsförslag till tentamen

Lösningsförslag till tentamen

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 00 - juni - 17 Tentamen i Objektorientering och Java Skrivtid 5 h

lgammal2.txt // Lösningar till gammal tentamen // Uppgift 1 a

Arv och Grafiska Användargränssnitt

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

Laboration 3 GUI-programmering

Repetitionsföreläsning 2: Quiz & problemlösning med swing Inget nytt material.

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 7 Erik Nilsson, Institutionen för Datavetenskap, LiU

5 Användargränssnitt. 5.1 AWT och Swing

Tentamen i Objektorienterad programmering

Java-concept och Swing. Swing low, sweet chariot

Tentamen i Objektorienterad programmering E

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Laboration 24 Databasen MySQL och java

Properties. Användbara metoder som kan anropas i propertychanged:

Objektorienterad programutveckling, fk

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Arv, Grafiska användaregränssnitt och Inre klasser! Förelasning 12!! TDA540 Objektorienterad Programmering!

Tentamen. DD2385 Programutvecklingsteknik vt Fredagen den 5 juni 2009 kl Inga hjälpmedel utom penna, sudd och linjal

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Tentamen Objekt-orienterad programmering med Java, 1DL100 Sommarkurs och distanskurs

Tentamen FYTA11 Javaprogrammering

Lösningsförslag till tentamen

Tentamen FYTA11 Javaprogrammering

Lösningsförslag till tentamen

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Modellsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 6 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Grafiskt användargränssnitt (GUI-Graphical User Interface) intro Komponenter

Trådar. Motivering. Många program måste kunna hålla på med flera saker samtidigt, till exempel. fleranvändarsystem.

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Monday, November 16, Senaste Labben

DI-institutionen Sid 1 av 5 Hans-Edy Mårtensson Sten Sundin Micael Karlsson

Fönsterhantering, grafik

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag aug - 23 Tentamen i Objektorientering och Java Skrivtid 5 h

TENTAMEN OOP

Objektorienterad Programmering DAT043. Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Lösningsförslag till tentamen

ITK:P1 Föreläsning 8. Verktyget Javadoc. Kommentarer för Javadoc. Multimedia för spelkonstruktion

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP och DSV1:P2

Transkript:

Spel: exempel Ex. skattjakt Fönsterhantering, grafik (del 2) Plan (16x16 rutor) Valt array som datastruktur En spelare En fiende Vet spelarens position Bör egentligen inte veta! Programmering tillämpningar och datastrukturer 2 Skattjakt Poäng Väggar Skatter Utslumpade (50 st) Plockas upp av spelaren Blir alltså färre och färre Farliga objekt Utplacerade (5 st) Startar med 0 poäng +1 för varje skatt -2 för varje fara spelaren stöter på -5 om fienden hinner ikapp Nollställs vid omstart av spelet Programmering tillämpningar och datastrukturer 3 Programmering tillämpningar och datastrukturer 4 Spelplan vs. världen Spelplan Det som syns på skärmen Grafiskt fönster: JFrame Innehåller en grid av JPanel Intern värld Array av positioner (egen klass) Varje position kan innehålla flera objekt och aktörer samtidigt Bara den översta får synas Position (ruta) i världen Saker som inte syns just nu måste ändå få finnas kvar på en viss plats Lagras i olika skikt i interna världen När ovanförliggande sak rör sig till annan ruta, kommer underliggande skikt att synas igen Programmering tillämpningar och datastrukturer 5 Programmering tillämpningar och datastrukturer 6 1

Spelplan Spelplan plan värld skikt 0 skikt 1 skikt 2 skikt 3 Programmering tillämpningar och datastrukturer 7 Programmering tillämpningar och datastrukturer 8 Skikt i interna världen Dynamiska händelser (explosion, etc.) i översta skiktet (BANG_LAYER = 0) Kommer att kunna skymma spelarens ikon i samma position Spelare och fiende rör sig i var sitt skikt i interna världen (PLAYER_LAYER=1 ENEMY_LAYER= 2) Fasta föremål läggs i understa skikt (WALL_LAYER = TREASURE_LAYER = HAZARD_LAYER = 3) Skatt och fara Väggar och annat fysiskt hinder Har lagt alla skikt i egen klass public class Layers { public static final int BANG_LAYER = 0; public static final int PLAYER_LAYER = 1; public static final int ENEMY_LAYER = 2; public static final int WALL_LAYER = 3; public static final int HAZARD_LAYER = 3; public static final int TREASURE_LAYER = 3; public Layers() { Programmering tillämpningar och datastrukturer 9 Programmering tillämpningar och datastrukturer 10 Intern position Koppling till skärmen panel explosion spelare fiende vägg, skatt, fara Programmering tillämpningar och datastrukturer 11 Programmering tillämpningar och datastrukturer 12 2

Spelplanet Spelplanet JFrame Hierarkiskt uppbyggt Två typer av byggstenar Containers Kan innehålla andra komponenter (inkl. andra containers) Utläggning av komponenter styrs av LayoutManager Andra komponenter Innehåller text och bild Programmering tillämpningar och datastrukturer 13 Programmering tillämpningar och datastrukturer 14 Spelplanet BorderLayout JPanel JFrame BorderLayout.EAST BorderLayout.CENTER Programmering tillämpningar och datastrukturer 15 Programmering tillämpningar och datastrukturer 16 GridLayout JPanel JPanel JPanel panel Programmering tillämpningar och datastrukturer 17 Programmering tillämpningar och datastrukturer 18 3

Intern position Håller reda på vilken panel (ruta) som just den här positionen ska rita på Kan lägga upp nytt visuellt innehåll på spelplanet i rätt panel (ruta) Skapa varje ruta public class Game extends JFrame { setlayout(new BorderLayout()); board = new JPanel(new GridLayout(boardSize, boardsize)); add(board, BorderLayout.CENTER); for (i = 0; i < boardsize; i++) { for (j = 0; j < boardsize; j++) { panel = new JPanel(); board.add(panel); pos = new (i, j, world, panel); world.area()[i][j] = pos; Lägg till board i mitten av JFrame Ny panel för varje ruta Ny pos för varje intern ruta Programmering tillämpningar och datastrukturer 19 Programmering tillämpningar och datastrukturer 20 Skapa varje ruta Komponenterna som visualiseras måste vara unika objekt Dvs. måsta skapa ny instans för innehållet i varje spelruta Internt innehåll extern vy Internt Subklass till JLabel Innehåller ikon för spelaren, etc. Sträng: typ av innehåll (wall, player, enemy, ) 0-4 st i varje Externt JPanel Med den översta visualiserat Programmering tillämpningar och datastrukturer 21 Programmering tillämpningar och datastrukturer 22 Styrs via piltangenterna Styrs av intern timer Programmering tillämpningar och datastrukturer 23 Programmering tillämpningar och datastrukturer 24 4

public class extends JLabel { protected String type; // wall, treasure, enemy public (String type, ImageIcon image) { super(image); // lägg in bilden i JLabel this.type = type; Lägg till nytt internt innehåll public void addcontents( cont) { contents[cont.layer()] = cont; if (debugmode) { System.out.println("Flyttar " + cont.type() + " till position " + row + ", " + col); update(); if (debugmode) { showcontents(); Actor och subklasser vet vilket skikt de är på Se till att panelen ritas om Programmering tillämpningar och datastrukturer 25 Programmering tillämpningar och datastrukturer 26 Update(): lägg ut på extern vy Tar bort den komponent som är synlig nu med panel.remove och lägger upp ny komponent med panel.add Ex.vis. när spelare flyttar från en ruta till en annan Spelaren Håller koll på Sin egen position Sin egen poängtavla JLabel score: där poängen skrivs ut int points: intern poängräkning Styrs via de fyra piltangenterna Programmering tillämpningar och datastrukturer 27 Programmering tillämpningar och datastrukturer 28 EventListener ActionEvent KeyEvent MouseEvent FocusEvent WindowEvent JLabel -image EventListener #type : String ActionListener +ActionPerformed() KeyAdapter MouseListener +MouseClicked() +MousePressed() +MouseReleased() +MouseEntered() +MouseExited() FocusListener +FocusGained() +FocusLost() WindowListener +WindowOpened() +WindowClosing() +WindowClosed() +WindowIconified() +WindowDeiconified() +WindowActivated() +WindowDeactivated() KeyAdapter Actor #row : int #col : int #world MouseMotionListener +MouseDragged() +MouseMoved() WindowAdapter Player -score -points : int Sprite #state : String #player : Player MouseAdapter MouseMotionAdapter Enemy Programmering tillämpningar och datastrukturer 29 Programmering tillämpningar och datastrukturer 30 5

Events Events När man trycker på tangenterna skickar operativsystemet meddelande till toppnivå containern, ex.vis. JFrame Denna skapar ett internt meddelande Ex.vis. KeyEvent Skickar ut till de objekt som kan tänkas vara intresserade av den här typen av meddelande I detta fall alla komponenter Dessa komponenter skickar i sin tur vidare till de objekt som har bett att få bli uppsatta på komponentens mailing-lista (eg. call-back lista) för denna typ av event Programmering tillämpningar och datastrukturer 31 Programmering tillämpningar och datastrukturer 32 Events För tangenttryckningar skapas och skickas ett objekt av typen KeyEvent public static final int VK_ENTER public static final int VK_TAB Klassen KeyEvent = '\n'; = '\t'; /** * Constant for the non-numpad left arrow key. * @see #VK_KP_LEFT */ public static final int VK_LEFT = 0x25; /** * Constant for the non-numpad up arrow key. * @see #VK_KP_UP */ public static final int VK_UP = 0x26; Programmering tillämpningar och datastrukturer 33 Programmering tillämpningar och datastrukturer 34 Klassen KeyEvent KeyEvent(Component source, int id, long when, int modifiers, int keycode, char keychar, int keylocation) Skapar ny event (används av JVM) int getkeycode() Returnerar tangentkod som motsvarar de konstanter som deklarerades i början av klassen char getkeychar() Returnerar bokstäver (ex. A för shift+a) Game (subklass till JFrame) player = world.area()[8][8].initaddplayer(score); add(player); // sätt upp på call-back-lista i JFrame enemy = world.area()[15][15].initaddenemy(player); javax.swing.timer t = new javax.swing.timer(timestep, enemy); t.start(); pack(); setvisible(true); requestfocus(); Programmering tillämpningar och datastrukturer 35 Programmering tillämpningar och datastrukturer 36 6

public class Player extends Actor implements { public void keytyped(keyevent ev) { // för vanliga bokstäver Player public void keypressed(keyevent ev) { // för specialtecken, piltangenter int vkey = ev.getkeycode(); if (vkey == ev.vk_left) { moveleft(); updatescore(); else if (vkey == ev.vk_right) { Håller koll på var spelaren är Styrs av timer som genererar en intern ActionEvent var xxx:te millisekund Enemy public void keyreleased(keyevent ev) { Programmering tillämpningar och datastrukturer 37 Programmering tillämpningar och datastrukturer 38 Game (subklass till JFrame) EventListener private int timestep = 500; player = world.area()[8][8].initaddplayer(score); add(player); // sätt upp på call-back-lista i JFrame enemy = world.area()[15][15].initaddenemy(player); javax.swing.timer t = new javax.swing.timer(timestep, enemy); t.start(); pack(); setvisible(true); requestfocus(); Call-back: motsvarar addactionlistener(enemy) ActionEvent ActionListener +ActionPerformed() KeyEvent MouseEvent FocusEvent EventListener MouseListener FocusListener +MouseClicked() +FocusGained() +MousePressed() +FocusLost() +MouseReleased() +MouseEntered() +MouseExited() KeyAdapter MouseMotionListener +MouseDragged() +MouseMoved() MouseAdapter MouseMotionAdapter WindowEvent WindowListener +WindowOpened() +WindowClosing() +WindowClosed() +WindowIconified() +WindowDeiconified() +WindowActivated() +WindowDeactivated() WindowAdapter Programmering tillämpningar och datastrukturer 39 Programmering tillämpningar och datastrukturer 40 Sprite JLabel -image #type : String public class Sprite extends Actor { protected Player player; protected String state; KeyAdapter Player -score -points : int Actor #row : int #col : int #world Sprite #state : String #player : Player Enemy ActionListener +ActionPerformed() public Sprite(int row, int col, String type, ImageIcon image, int layer, World world, Player player) { super(row, col, type, image, layer, world); this.player = player; state = "normal"; Programmering tillämpningar och datastrukturer 41 Programmering tillämpningar och datastrukturer 42 7

Enemy public class Enemy extends Sprite implements ActionListener { public void actionperformed(actionevent ev) { movetowards(player); Programmering tillämpningar och datastrukturer 43 8