SzgLab 3. Java. I. labor Alapok, OOP váz, megjelenítés konzolon.

Slides:



Advertisements
Hasonló előadás
C# nyelvi áttekintő A „Programozás C# nyelven (Illés Zoltán)”
Advertisements

Osztály leszármaztatás
1. foreach( fejlesztő in Lurdyház ) { fejlesztő.Agy. Delete If( delegate ( Content c ) { return c.ContainsAny( „Win32 / User32.dll”, „GDI”,„GDI+”,„WindowsForms”,
AZ OOP ALAPJAI.
Tömbök C#-ban.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt fejlesztőrendszerek Felhasználói felületek Balogh András.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek Plugin fejlesztés.
FelültöltésVHDL Felültöltés (Overloading) n Áttekintés n Példák.
Adatbányászati technikák (VISZM185)
 Gauss szűrő uniform sampler2D colorMap; const float kernel[9] = float[9]( 1.0, 2.0, 1.0, 2.0, 4.0, 2.0, 1.0, 2.0, 1.0); out vec4 outColor; void main(){
Socket programozás Példák
Öröklődés 2..
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
TRANZIENS ADATTÁROLÁS State objektum Egy alkalmazásszintű gyűjtemény (Dictionary), mely Tombstone esetén megőrzi tartalmát a memóriában kulcs/érték párokként.
Fájlkezelés, IO Kivételkezelés Belső osztályok
Abstract osztályok és interface-ek Beolvasás és kiíratás 7. gyakorlat.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 9. Gyakorlat Alap file műveletek.
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Tömbök ismétlés Osztályok Java-ban Garbage collection
Az objektum-orientált tervezési alapelvek kritikai vizsgálata
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 3. rész – Osztályok I.
Delegátumok C#-ban Krizsán Zoltán iit 1.0.
A JAVA TECHNOLÓGIA LÉNYEGE Többlépcsős fordítás A JAVA TECHNOLÓGIA LÉNYEGE Platformfüggetlenség.
Kivételkezelés.
PHP V Osztályok, Objektumok. Osztály class Person { var $name; // tulajdonság, változó function getName() { // metódus, tagfüggvény return $this->name;
P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet.
Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - III. / 1 13.Állományok, bejegyzések 14.Folyamok 15.Közvetlen hozzáférésű állomány.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek JFace.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek JFace.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
1. Gyakorlat - Alapok 1. Írjon konzolprogramot, amely kiírja a “Hello ELTE” üzenetet! Használja a System.out.println() -t! 2. Írjon konzolprogramot, amely.
Objektum orientált programozás a gyakorlatban
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
Motor IIII. Vezérlés Szécsi László. Letöltés diák: //l09-engine4.ppt.
Motor II. Env map Spotlight Szécsi László. Letöltés /code/E/code/EggCoreSecondBase.zip Kibontani (vagy előző labor folyt.):
DirectX9 empty project Szécsi László. Project létrehozása Microsoft DirectX SDK (August 2008) telepítése Start Menu \ Microsoft DirectX SDK (August 2008)\
V. labor Thread, animáció. Animáció A figurák a lépés kijelölése után nem rögtön az új helyen teremnek, hanem egyenes vonal mentén mozognak a cél felé.
OIS. Kezdeti teendők Letöltés: OgreLabControllersBase.zip Kicsomagol, betölt:.sln Additional include és library path beállítása Working directory beállítása.
II. labor Lépések kezelése. Új metódus a Square osztályba public static int letterToFileIndex(char letter) throws NumberFormatException { int i = 0; for.
IIII. labor Képfileok kezelése (media resources) Canvas Egérkezelés.
III. labor AWT, eseménykezelés Applet. Új class: ButtonView import java.awt.*; import java.awt.event.*; import java.util.LinkedList; public class ButtonView.
User interface Szécsi László. Egg projectben DXUTgui.cpp – CDXUTDialogResourceManager::CDXUTDialogReso urceManager() m_SpriteBufferBytes11 = 0; ezt kihagyták,
GPGPU Labor 15.. Párhuzamos primitívek Map Reduce Scan Histogram Compact.
GPGPU labor II. GPU mint vektor processzor. Kezdeti teendők Tantárgy honlapja, Bevezetés – Alap könyvtárak letöltése Tantárgy honlapja, GPU mint vektor.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 7. gyakorlat.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Eclipse alapú technológiák JFace Balogh András.
HTTP kommunikáció Androidon HttpClient-en keresztűl HttpPost/HttpGet objektum használatával HttpClient execute metódusának meghívása.
Java programozási nyelv Filekezelés
Java programozási nyelv Adatbekérés konzolról
Programozás III KOLLEKCIÓK.
Programozás III KOLLEKCIÓK.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 7. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 6. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 7. gyakorlat.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
B M Java Programozás 4. Gy: Java GUI IT A N Tipper, MVC kalkulátor
B M Java Programozás 9. Gy: Java alapok IT A N Adatkezelő 5.rész
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Előadás másolata:

SzgLab 3. Java

I. labor Alapok, OOP váz, megjelenítés konzolon

NetBeans Új project

Project és az első class neve

Fordítás és futtatás

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

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

Angol elnevezések rank file square king queen knightrook pawn bishop board pieces

Model-View-Controller Controller ModelView

A sakkprogram evolúciója

Vázlatos osztálydiagram Controller Model View Chessboard Piece KingQueenPawnRookBishopKnight ConsoleView ButtonView ImageView View ConsoleControllerButtonControllerImageController ActionListener ResetAdapter

Új class létrehozása

Ú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(); }

Ú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

Ú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ő!

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 – ezt tartsuk nyitva böngészőben fejlesztés közben

Ú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); }

Ú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"; }

Ö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

Ú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]; }

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);

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); }

A View interface létrehozása

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); }

Ú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); }

Ú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 */ } }

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; }

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

Futtatás, próba

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

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"); }

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); }

Futtatás, próba

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()