Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaBéla Dudás Megváltozta több, mint 10 éve
1
SzgLab 3. Java
2
I. labor Alapok, OOP váz, megjelenítés konzolon
3
NetBeans Új project
4
Project és az első class neve
5
Fordítás és futtatás
6
Csináljon valamit a program public static void main(String[] args) { // TODO code application logic here System.out.println("!!!! Starting chess game !!!!"); } létező kód új kód
7
Futtatás a NetBeans IDE-n kívül ide teszi a.class fileokat: ide meg a.jar-t szükséges lehet egy rebuild ezeknek a legyártásához
8
Angol elnevezések rank file square king queen knightrook pawn bishop board pieces
9
Model-View-Controller Controller ModelView
10
A sakkprogram evolúciója
11
Vázlatos osztálydiagram Controller Model View Chessboard Piece KingQueenPawnRookBishopKnight ConsoleView ButtonView ImageView View ConsoleControllerButtonControllerImageController ActionListener ResetAdapter
12
Új class létrehozása
13
Új class: MoveResult // NetBeans menüben: File / New file: Java class public class MoveResult { // private constructor: nem lehet több példányt létrehozni private MoveResult(){} // csak ez a 4 példány van public static MoveResult OK = new MoveResult(); public static MoveResult BAD = new MoveResult(); public static MoveResult IFATTACKING = new MoveResult(); public static MoveResult IFNOTATTACKING = new MoveResult(); }
14
Új class: Square public class Square { private static char fileLetters[] = {'a','b','c','d','e','f','g','h'}; public static char fileIndexToLetter(int file) { return fileLetters[file]; } // folyt köv
15
Új class: Square, folytatás final int file;// vonal ('oszlop') final int rank;// sor public Square(int file, int rank){ this.file = file; this.rank = rank; } public String toString(){ return "" + fileIndexToLetter(file) + (rank + 1); } package-en belül hozzáférhető!
16
Hasznos NetBeans IDE trükkök crtl+space: kódkiegészítés (listából kiválasztjuk és enter). begépelésekor listát ad függvénynév( után paraméterlistát ad kód formázása: alt+shift+f – beállítások: tool/options/editor, Language: Java http://java.sun.com/javase/6/docs/api/ – ezt tartsuk nyitva böngészőben fejlesztés közben
17
Új class: Piece alaposztály import java.util.LinkedList; public abstract class Piece { final boolean white;// világos boolean moved;// lépett már public Piece(boolean white) { this.white = white; moved = false; } // léphet-e innen oda, és ha igen, mely mezőkön keresztül abstract MoveResult canMove( Square fromSquare, Square toSquare, LinkedList passedSquares); }
18
Új class: King import java.util.LinkedList; public class King extends Piece{ King(boolean white){super(white);} MoveResult canMove(Square fromSquare, Square toSquare, LinkedList passedSquares) { return MoveResult.OK; } public String toString() { if(white) return "K"; return "k"; }
19
Önálló feladat Az előző, King osztály mintájára létrehozni a Queen, Pawn, Knight, Bishop, Rook class-okat – külön fileba mindegyik – ha világos figura, nagybetűt ad vissza a toString metódus, különben kicsit – a jelölő karakterek rendre: Q, P, N, B, R – a canMove metódus egyelőre mindig MoveResult.OK -t adjon vissza 8 perc
20
Új class: Chessboard public class Chessboard { protected Piece[][] pieceArray = new Piece[8][8]; public Chessboard(){reset();} public void reset() { // következő dia } public Piece getPiece(Square square) { return pieceArray[square.file][square.rank]; } public Piece getPiece(int file, int rank) { return pieceArray[file][rank]; }
21
Chessboard.reset() public void reset() { for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { pieceArray[i][j] = null; } pieceArray[0][0] = new Rook(true); pieceArray[7][0] = new Rook(true); pieceArray[0][7] = new Rook(false); pieceArray[7][7] = new Rook(false); pieceArray[1][0] = new Knight(true); pieceArray[6][0] = new Knight(true); pieceArray[1][7] = new Knight(false); pieceArray[6][7] = new Knight(false);
22
Chessboard.reset() folyt. pieceArray[2][0] = new Bishop(true); pieceArray[5][0] = new Bishop(true); pieceArray[2][7] = new Bishop(false); pieceArray[5][7] = new Bishop(false); pieceArray[3][0] = new Queen(true); pieceArray[4][0] = new King(true); pieceArray[4][7] = new King(false); pieceArray[3][7] = new Queen(false); for (int i = 0; i < 8; i++) { pieceArray[i][1] = new Pawn(true); pieceArray[i][6] = new Pawn(false); }
23
A View interface létrehozása
24
A View interface metódusai public interface View { // bár a public az alapértelmezett egy interface-ben, // azért mi most szépen kiírjuk // megjeleníti a játékállást public void display(); // kiír egy üzenetet public void printMessage(String message); }
25
Új class: ConsoleView import java.io.OutputStreamWriter; import java.io.PrintWriter; public class ConsoleView implements View { private Chessboard board;// View -> Model kapcsolat public ConsoleView(Chessboard board) { this.board = board; } public void display() {// ide jön majd a megjelenítés System.out.println("Drawing chessboard..."); } public void printMessage(String message) { System.out.println(message); }
26
Új class: ConsoleController import java.io.*; public class ConsoleController { private Chessboard board;// Controller -> Model private View view;// Controller -> View private BufferedReader keyboard; public ConsoleController() { board = new Chessboard(); view = new ConsoleView(board);// View -> Model keyboard = new BufferedReader( new InputStreamReader(System.in)); // dekorátor mainLoop(); } public void mainLoop(){ /* következő dia */ } }
27
ConsoleController.mainLoop public void mainLoop() { while (true){ view.display(); String s = ""; try { s = keyboard.readLine(); } catch (IOException e) { view.printMessage("Console read error!"); continue; } if (s.equals("exit")) { break; }
28
Chess.main public class Chess { public static void main(String[] args) { // TODO code application logic here System.out.println("!!!! Starting chess game !!!!"); new ConsoleController(); }
29
Futtatás, próba
30
ConsoleView.display public void display() { try { PrintWriter out; out = new PrintWriter( new OutputStreamWriter( System.out, "CP852"), true); out.print('\n'); out.println(" a b c d e f g h"); out.println("\u250c\u2500\u252c\u2500\u252c\u2500\u252c\u2500\u252c\u2500\u252c\u2500\u252c\u2500\u252c\u2500\u2510"); // a narancsszínű sorok törlésével az IDE konzolon is megjeleníthető, de elválasztó keret nélkül
31
ConsoleView.display folyt. for (int i = 0; i < 8; i++) { out.print(8 - i); for (int j = 0; j < 8; j++) { out.print('\u2502'); /* //* out.print(' '); //*/ Piece piece = board.getPiece(j, 7-i); if (piece == null) out.print(' '); else out.print(piece); } out.print('\u2502'); /* //* out.print(' '); //*/ out.print(8 - i); out.print('\n'); if (i == 7) out.println(" \u2514\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2518"); else out.println(" \u251c\u2500\u253c\u2500\u253c\u2500\u253c\u2500\u253c\u2500\u253c\u2500\u253c\u2500\u253c\u2500\u2524"); }
32
ConsoleView.display folyt. out.println(" a b c d e f g h"); out.print('\n'); }// try blokk vége catch (Exception e) { System.out.println("outstream error! Exiting!"); System.exit(-1); }
33
Futtatás, próba
34
I. labor vége – szorgalmi feladat Legyen a sakktábla csak 6x6-os – Chessboard -ba sorok és vonalak száma mezők új, ezekkel paraméterezhető konstruktor ekkora méretű piecesArray tömb létrehozása – reset -ben ettől függően más kezdőállás felrakása ügyeljünk rá, hogy ne legyen tömbtúlcímzés ne rontsuk el a működést a 8x8-as esetre – ConsoleView ciklusok ne 8-ig menjenek, hanem kérdezzék le a board -tól a táblaméretet kell a board-ba getNumberOfRanks(), getNumberOfFiles()
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.