Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

IIII. labor Képfileok kezelése (media resources) Canvas Egérkezelés.

Hasonló előadás


Az előadások a következő témára: "IIII. labor Képfileok kezelése (media resources) Canvas Egérkezelés."— Előadás másolata:

1 IIII. labor Képfileok kezelése (media resources) Canvas Egérkezelés

2 Új class: ImageView import java.awt.*; import java.awt.event.*; import java.util.LinkedList; public class ImageView extends Canvas implements View { private Chessboard board; // kirajzolandó üzenet-stringek private LinkedList messages = new LinkedList (); public ImageView(Chessboard board) { this.board = board; }

3 Új: ImageView metódusok public void display() { repaint(); } public void paint(Graphics g) { g.setColor(new Color(0, 0, 0)); g.drawRect(5, 5, 430, 430); } public void printMessage(String message) { messages.addFirst(message); if(messages.size() > 6) messages.removeLast(); repaint(); }

4 Új class: ImageController import java.awt.*; import java.awt.event.*; public class ImageController { private ImageView view; private Chessboard board; public ImageController() { board = new Chessboard(); view = new ImageView(board); } public void createFrame(){ Frame frame = new Frame("Chess"); frame.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.add(view); frame.setSize(450, 600); frame.setResizable(false); frame.setVisible(true); }

5 Chess.main public static void main(String[] args) { // TODO code application logic here System.out.println("!!!! Starting chess game !!!!"); //new ConsoleController(); //(new ButtonController()).createFrame(); (new ImageController()).createFrame(); }

6 ImageView.paint public void paint(Graphics g) { g.setColor(new Color(0, 0, 0)); g.drawRect(5, 5, 430, 430); // színes négyzetek rajzolása for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { if ((i + j) % 2 == 1) g.setColor(new Color(0.6f, 0.5f, 0.3f)); else g.setColor(new Color(0.95f, 0.85f, 0.6f)); g.fillRect(20 + i * 50, 20 + j * 50, 50, 50); } // folyt köv.

7 ImageView.paint // rácsvonalak rajzolása, számok, betűk rajzolása g.setColor(new Color(0, 0, 0)); for (int i = 0; i < 9; i++){ g.drawLine(20 + i * 50, 20, 20 + i * 50, 420); g.drawLine(20, 20 + i * 50, 420, 20 + i * 50); if (i != 8){ g.drawString(String.valueOf(Square.fileIndexToLetter(i)), 42 + i * 50, 17); g.drawString(String.valueOf(Square.fileIndexToLetter(i)), 42 + i * 50, 432); g.drawString(String.valueOf(8 - i), 10, 47 + i * 50); g.drawString(String.valueOf(8 - i), 425, 47 + i * 50); }

8 Próba

9 ImageView.paint végére int messageStringPosition = 510; for(String message : messages) { g.drawString(message, 20, 47 + messageStringPosition); messageStringPosition -= 20; }

10 Önálló feladat a kiírt üzenetstringek fölfelé halványodjanak – ImageView.paint-ben – g.setColor – először fekete, aztán egyre világosabb szürke 2 perc

11 Próba public ImageView(Chessboard board) { this.board = board; // ideiglenes tesztszöveg printMessage("proba1"); printMessage("proba2"); printMessage("proba3"); printMessage("proba4"); printMessage("proba5"); printMessage("proba6"); }

12 Ágyazzuk be képfileokat a projektbe így csak a.jar filet elég valakinek odaadni, nem kell a sok.png megfelelő folderbe pakolva folder létrehozása: chesslab/src/chesslab/images képfileok letöltése és bemásolása – www.iit.bme.hu/~szecsi/java/ChessPieces.zip clean & build ezek után kódból egy kép filenevének elérése getClass().getResource("images/wking.png")

13 Images folder létrehozása 1

14 Images folder létrehozása 2

15 Másoljuk be a képeket

16 Clean & build ez beágyazza a képeinket a megfelelő helyekre

17 ImageView: képek tárolása import java.awt.*; import java.awt.event.*; import java.util.LinkedList; import java.util.HashMap; public class ImageView extends Canvas implements View { private Chessboard board; private LinkedList messages = new LinkedList (); protected HashMap pieceImages = new HashMap ();

18 ImageView: képek betöltése public ImageView(Chessboard board) { this.board = board; printMessage("proba1"); printMessage("proba2"); printMessage("proba3"); printMessage("proba4"); printMessage("proba5"); printMessage("proba6"); Toolkit toolkit = Toolkit.getDefaultToolkit(); MediaTracker mediaTracker = new MediaTracker(this); int id = 0; Image wKingImage = toolkit.getImage( getClass().getResource("images/wking.png")); mediaTracker.addImage(wKingImage, id); id++; pieceImages.put("K", wKingImage);// folyt köv.

19 ImageView: képek betöltése folyt. Image wQueenImage = toolkit.getImage(getClass().getResource ("images/wqueen.png")); mediaTracker.addImage(wQueenImage, id); id++; pieceImages.put("Q", wQueenImage); Image wKnightImage = toolkit.getImage(getClass().getResource ("images/wknight.png")); mediaTracker.addImage(wKnightImage, id); id++; pieceImages.put("N", wKnightImage); Image wRookImage = toolkit.getImage(getClass().getResource ("images/wrook.png")); mediaTracker.addImage(wRookImage, id); id++; pieceImages.put("R", wRookImage); Image wBishopImage = toolkit.getImage(getClass().getResource ("images/wbishop.png")); mediaTracker.addImage(wBishopImage, id); id++; pieceImages.put("B", wBishopImage); Image wPawnImage = toolkit.getImage(getClass().getResource ("images/wpawn.png")); mediaTracker.addImage(wPawnImage, id); id++; pieceImages.put("P", wPawnImage); Image bKingImage = toolkit.getImage(getClass().getResource("images/bking.png")); mediaTracker.addImage(bKingImage, id); id++; pieceImages.put("k", bKingImage); Image bQueenImage = toolkit.getImage(getClass().getResource("images/bqueen.png")); mediaTracker.addImage(bQueenImage, id); id++; pieceImages.put("q", bQueenImage); Image bKnightImage = toolkit.getImage(getClass().getResource("images/bknight.png")); mediaTracker.addImage(bKnightImage, id); id++; pieceImages.put("n", bKnightImage); Image bRookImage = toolkit.getImage(getClass().getResource("images/brook.png")); mediaTracker.addImage(bRookImage, id); id++; pieceImages.put("r", bRookImage); Image bBishopImage = toolkit.getImage(getClass().getResource("images/bbishop.png")); mediaTracker.addImage(bBishopImage, id); id++; pieceImages.put("b", bBishopImage); Image bPawnImage = toolkit.getImage(getClass().getResource("images/bpawn.png")); mediaTracker.addImage(bPawnImage, id); id++; pieceImages.put("p", bPawnImage);

20 ImageView: képek betöltése vége try { for (int i = 0; i < id; i++) { mediaTracker.waitForID(i); } } catch (InterruptedException ie) { System.err.println(ie); System.exit(-1); } } // ImageView konstruktor vége

21 ImageView.paint kieg. // a színes négyzeteket rajzoló dupla ciklus végére // de még a ciklustörzsön belülre Piece p = board.getPiece(i, 7 - j); if (p != null) { String key = p.toString(); Image im = pieceImages.get(key); g.drawImage(im, 20 + i * 50, 20 + j * 50, null); }

22 Próba

23 Új metódus: ImageController. squareClicked public void squareClicked(Square square) { if (!board.isPieceGrabbed()) { if (!board.grabPiece(square)) { view.printMessage("Invalid starting square!"); } else { view.printMessage("Click destination square!"); } } else { if (board.dropPiece(square)) { if (board.getWhiteOnTurn()) { view.printMessage("White to move!"); } else { view.printMessage("Black to move!"); } } else { view.printMessage("Invalid destination square, move cancelled!"); } view.display(); }

24 ImageController konstruktor végére view.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (e.getY() 20 && e.getX() 20) { Square s = new Square( (e.getX() - 20) / 50, 7 - (e.getY() - 20) / 50); squareClicked(s); } });

25 Próba

26 Önálló feladat legyen piros keret a megfogott figura körül ImageView.paint –et kell ezzel kiegészíteni Graphics.drawRect hasznos lesz (olvasgassuk az API referenciát hozzá) A modellből olvassuk ki hozzá, hogy van-e megfogott figura, és hogy hol – akár lekérdező függvényt is adhatunk a modellhez, hogy hozzáférjünk az információhoz – keret csúcs koordináták: [20 + file * 50, 20 + (7-rank)*50] 6 perc

27 IIII. labor vége – szorgalmi feladat ha ki van jelölve egy figura, akkor nézzük meg az összes mezőre, hogy oda léphet-e ahova léphet, azokat a mezőket keretezzük be zölddel


Letölteni ppt "IIII. labor Képfileok kezelése (media resources) Canvas Egérkezelés."

Hasonló előadás


Google Hirdetések