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.

Slides:



Advertisements
Hasonló előadás
4. alkalom – Hálózat Kezelés
Advertisements

Osztály leszármaztatás
Krizsán Zoltán iit 1.1.  Aszinkron történésről értesítés egy vagy több objektum számára.  Delegátumok segítségével valósítja meg a C#.  event típus,
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1. foreach( fejlesztő in Lurdyház ) { fejlesztő.Agy. Delete If( delegate ( Content c ) { return c.ContainsAny( „Win32 / User32.dll”, „GDI”,„GDI+”,„WindowsForms”,
3D képszintézis fizikai alapmodellje
Térfogatvizualizáció Szirmay-Kalos László. Térfogati modellek v(x,y,z) hőmérséklet sűrűség légnyomás potenciál anyagfeszültség... v(x,y,z) tárolás: 3D.
 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..
Packaging: Az osztályok legyenek logikailag rendezett csomagokban, azaz különüljenek el funkció szerint. Pl: hu.elpaso.example hu.elpaso.example.view hu.elpaso.example.logic.
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
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.
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
Fájlkezelés, IO Kivételkezelés Belső osztályok
Abstract osztályok és interface-ek Beolvasás és kiíratás 7. gyakorlat.
Az objektum-orientált tervezési alapelvek kritikai vizsgálata
Java programozási nyelv 3. rész – Osztályok I.
Delegátumok C#-ban Krizsán Zoltán iit 1.0.
Krizsán Zoltán iit 1.2.  Nem kell vizuális felületnek lennie.  Delegátumok segítségével valósíthatja meg a.NET. Krizsán Zoltán iit Delegátumok C#-ban2.
Oracle multimédia Kiss Attila Információs Rendszerek Tanszék
A Java jellemzői Hordozható, platformfüggetlen forráskód és bájtkód szinten forráskód és bájtkód szinten Tisztán objektumorientált csak osztályok, illetve.
Kivételkezelés.
VFP xBase adatkezelés - munkaterületek - DML - DDL - navigáció - eljárások, függvények - vezérlési szerkezetek - változók - képernyő IO - mintaprogram.
Kivételkezelés a C++ nyelvben Bevezetés
PHP VI Adatbázisok, MySQL
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;
Összetett adattípusok
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.
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:
Hasznos ismeretek Hogyan bővítsük ismereteinket AVRDUDEflags -E noreset.
1. Gyakorlat - Alapok 1. Írjon konzolprogramot, amely kiírja a “Hello ELTE” üzenetet! Használja a System.out.println() -t! 2. Írjon konzolprogramot, amely.
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.
Térfogatvizualizáció Szirmay-Kalos László. Térfogati modellek v(x,y,z) hőmérséklet sűrűség légnyomás potenciál anyagfeszültség... v(x,y,z) tárolás: 3D.
Transzformációk, textúrák, árnyalás Szécsi László.
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.
SzgLab 3. Java. I. labor Alapok, OOP váz, megjelenítés konzolon.
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,
 Map  Reduce  Scan  Histogram  Compact const size_t dataSize = 1024; cl_kernel mapKernel = cl.createKernel(clProgram, "map"); float* hData = new.
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.
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
Komoróczy Tamás 1 Java programozási nyelv Stringek.
Java programozási nyelv Metódusok
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.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
Hernyák Zoltán Programozási Nyelvek II.
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
Fejlett Webes Technológiák II.
B M Java Programozás 9. Gy: Java alapok IT A N Adatkezelő 5.rész
B M Java Programozás 1. Gy: Java alapok IT A N Ismétlés ++
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Szálszinkronizáció.
Függvénysablonok használata
Extended Static Checking for Java
Előadás másolata:

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 (; i < fileLetters.length; i++) { if (fileLetters[i] == letter) { break; } if (i == fileLetters.length) { throw new NumberFormatException(); } return i; }

ConsoleController.mainLoop if (s.equals("exit")) { break; } int fromRank, fromFile, toRank, toFile; try { fromFile = Square.letterToFileIndex(s.charAt(0)); fromRank = Character.getNumericValue(s.charAt(1)) - 1; toFile = Square.letterToFileIndex(s.charAt(2)); toRank = Character.getNumericValue(s.charAt(3)) - 1; } catch (Exception e) { view.printMessage("Bad command!!"); continue; } System.out.println( "move from: " + new Square(fromFile, fromRank) + " to: " + new Square(toFile, toRank)); } // alt+shift+f, hogy a tabulálás a helyére kerüljön

Futtatás, próba

Játékállapot figura megfogva alap grabPiece true false dropPiece true false isPieceGrabbed() == true isPieceGrabbed() == false cancelMove finishMove

Új mezők a Chessboard -ba public class Chessboard { protected Piece[][] pieceArray = new Piece[8][8]; protected boolean whiteOnTurn = true; protected Square moveStartSquare = null; protected Piece grabbedPiece = null; // milyen játékállapotban vagyunk public boolean isPieceGrabbed() {return grabbedPiece != null; } boolean getWhiteOnTurn() { return whiteOnTurn; } public void reset() { whiteOnTurn = true; moveStartSquare = null; grabbedPiece = null; // reset korábban megírt részei itt }

új: Chessboard.grabPiece public boolean grabPiece(Square fromSquare) { if (isPieceGrabbed()) return false; if (fromSquare.file 7) return false; if (fromSquare.rank 7) return false; grabbedPiece = getPiece(fromSquare); if (grabbedPiece == null || grabbedPiece.white != whiteOnTurn) { grabbedPiece = null; return false; } moveStartSquare = fromSquare; return true; }

új: Chessboard.cancelMove private void cancelMove() { grabbedPiece = null; moveStartSquare = null; }

új: Chessboard.finishMove protected boolean finishMove(Square toSquare) { // felrakjuk a figurát a célhelyre pieceArray[toSquare.file][toSquare.rank] = grabbedPiece; grabbedPiece = null;// alapállapotba vissza moveStartSquare = null; return true; }

új: Chessboard.dropPiece import java.util.LinkedList; // ez a file elejére public class Chessboard { // többi metódus public boolean dropPiece(Square toSquare) { if (!isPieceGrabbed()) return false; if (toSquare.file 7) { cancelMove(); return false; } if (toSquare.rank 7) { cancelMove(); return false; }// folyt.

Chessboard.dropPiece folyt. LinkedList passedSquares = new LinkedList (); MoveResult result = grabbedPiece.canMove( moveStartSquare, toSquare, passedSquares); Piece takenPiece = getPiece(toSquare);// ütött figura if (result == MoveResult.IFATTACKING && takenPiece != null) result = MoveResult.OK;// ütés gyaloggal if (result == MoveResult.IFNOTATTACKING && takenPiece == null) result = MoveResult.OK;// nem ütés gyaloggal if (takenPiece != null && whiteOnTurn == takenPiece.white) result = MoveResult.BAD;// saját figura ütése lenne if (result != MoveResult.OK) {// szabálytalan lépés cancelMove();// vissza alapállapotba return false; } // ez még nem a dropPiece metódus vége

Chessboard.dropPiece vége for (Square s : passedSquares) { if (getPiece(s) != null) { cancelMove(); return false; } whiteOnTurn = !whiteOnTurn;// másik játékos jön grabbedPiece.moved = true;// ez a figura már lépett pieceArray[moveStartSquare.file][moveStartSquare.rank] = null;// levesszük a régiről finishMove(toSquare);// felrakjuk az új helyre return true; }

új metódus: Chessboard.move public boolean move(Square fromSquare, Square toSquare) { if (grabPiece(fromSquare)) { if (dropPiece(toSquare)) { return true; } return false; }

ConsoleController.mainLoop System.out.println("move from: " + new Square(fromFile, fromRank) + " to: " + new Square(toFile, toRank)); boolean valid = board.move( new Square(fromFile, fromRank), new Square(toFile, toRank)); if(!valid) { view.printMessage("Invalid move!"); }

Próbafuttatás tudunk lépni csak a világos, illetve sötét figurákkal, felváltva ellenséges figurát le tudunk ütni, saját figurát nem de egyébként bárhonnan bárhova

King.canMove MoveResult canMove(Square fromSquare, Square toSquare, LinkedList passedSquares) { if (fromSquare.file == toSquare.file && fromSquare.rank == toSquare.rank) { return MoveResult.BAD; } if (Math.abs(fromSquare.file - toSquare.file) <= 1 && Math.abs(fromSquare.rank - toSquare.rank) <= 1) { return MoveResult.OK; } return MoveResult.BAD; }

Pawn.canMove MoveResult canMove(Square fromSquare, Square toSquare, LinkedList passedSquares){ if (fromSquare.file == toSquare.file && fromSquare.rank == toSquare.rank) { return MoveResult.BAD; } int di = Math.abs(fromSquare.file - toSquare.file); int dj = toSquare.rank - fromSquare.rank; int dir = white ? 1 : -1; if (!moved && dj == 2 * dir && di == 0) // kettőt előre { passedSquares.add(new Square(fromSquare.file, fromSquare.rank + dir)); return MoveResult.IFNOTATTACKING; }

Pawn.canMove folyt. if (dj == dir)// egyet előre { if (di == 1)// egyet oldalt (csak ha ütés) { return MoveResult.IFATTACKING; } if (di == 0)// így nem tud ütni, csak lépni { return MoveResult.IFNOTATTACKING; } return MoveResult.BAD; }

Knight.canMove MoveResult canMove(Square fromSquare, Square toSquare, LinkedList passedSquares) { if (fromSquare.file == toSquare.file && fromSquare.rank == toSquare.rank) { return MoveResult.BAD; } int di = Math.abs(fromSquare.file - toSquare.file); int dj = Math.abs(fromSquare.rank - toSquare.rank); if (di + dj == 3 && di * dj != 0) { return MoveResult.OK; } return MoveResult.BAD; }

Queen.canMove MoveResult canMove(Square fromSquare, Square toSquare, LinkedList passedSquares) { if (fromSquare.file == toSquare.file && fromSquare.rank == toSquare.rank) return MoveResult.BAD; int di = Math.abs(toSquare.file - fromSquare.file); int dj = Math.abs(toSquare.rank - fromSquare.rank); if (di == 0 || dj == 0 || di == dj) { int steps = Math.max(di, dj); di = (int) Math.signum( toSquare.file - fromSquare.file); dj = (int) Math.signum( toSquare.rank - fromSquare.rank); for (int i = 1; i < steps; i++) passedSquares.add( new Square(fromSquare.file + i * di, fromSquare.rank + i * dj)); return MoveResult.OK; } return MoveResult.BAD; }

Önálló feladat A Queen.canMove alapján megírni a bástya és a futó lépéseit – teljesen ugyanaz, csak a if (di == 0 || dj == 0 || di == dj) sorból kell kivenni a szükségtelen eseteket 2 perc

Próbafuttatás szabályos lépéseket lehet tenni alaphelyzetből a gyalog kettőt léphet nem vizsgáljuk a sakkot, mattot a király is üthető nincs sánc és en passant nincs gyalogátváltozás

Önálló feladat legyen gyalogátváltozás (csak vezérré) – a Chessboard.finishMove -ban, amikor a figurát letesszük az új helyre, vizsgáljuk ha gyalog és világos a 8. soron vagy sötét az 1. soron – figyeljünk a 0 bázisú indexelésre akkor az új helyre egy vezért teszünk – pieceArray[toSquare.file][toSquare.rank] = new Queen( ) – a régi figurát majd kidobja a szemétgyűjtő 8 perc

Önálló feladat ne négykarakteres parancsot olvassunk be, hanem csak egy kétkaraktereset – ha nincs figura megfogva (!isPieceGrabbed), próbáljunk egyet megfogni (grabPiece) írjuk ki, hogy sikerült/nem sikerült – ha van megfogott figura, lépjünk vele a begépelt mezőre írjuk ki, hogy sikerült/nem sikerült 8 perc

II. labor vége – szorgalmi feladat extra szabályok megvalósítása – sánc e1g1 vagy e1c1 (világossal) ha sem a király sem a bástya nem mozdult még (Piece.moved) ha nincs köztük semmi mindkettőt át kell rakni (Chessboard.dropPiece-ben érdemes kezelni az egészet) – en passant fantomgyalog nyilvántartása a Chessboardban ezt ütő gyaloglépés OK, az igazi gyalogot kell levenni