Labb2
- Inlämningsdatum 9 nov 2022 av 23.59
- Poäng 0
- Lämnar in en filuppladdning
- Filtyper java
- Tillgänglig 8 nov 2022 kl 0:00–9 nov 2022 kl 23.59
Laboration 2
Mål
- Att förstå hur man med hjälp av
interface
kan specificera gränssnittet (beroendet) mellan två programdelar och hålla det litet. - Att förstå mönstret Model-View-Control och att tillämpa mönstret i en uppgift med Model för sig och View+Control tillsammans i en klass.
- Att kunna hantera många knappar med lyssnare på ett smidigt sätt samt att bygga upp ett litet grafiskt gränssnitt.
- Att programmera logiken i ett enkelt spel på ett snyggt och tydligt sätt.
- Att förstå begreppet Mock object och göra ett sådant.
Uppgifter
Model
Interfacet har metoder som används för att spela ett enkelt spel på en nxn-spelplan. Detta framgår av UML-diagrammet nedan. I labben ska minst ett av spelen Femtonspelet och TicTacToe implementeras enligt interfacet. (3x3-luffarschack med två faser https://www.youtube.com/watch?v=IDchqc56aQY
Links to an external site. )
Varje drag i spelet utförs genom att man väljer en ruta genom att välja koordinaterna för varje ruta av rutnätet. Metoden Spelklassen ska vara helt fri från grafik och utgör modelldelen i Model-ViewControl. Spelklassen kan användas tillsammans med en textbaserad ViewControl-del eller en grafisk. Spelmodellens uppgift är att tillhandahålla metoder som behövs för att man ska kunna spela spelet. Spelet spelas genom många anrop av metoderna. I grunduppgiften ska ett av spelen Femtonspelet och TicTacToe implementeras, du får välja själv.
TicTacToe ska implementeras med en utplaceringsfas och en "flyttfas". Spelet ska alltså inte ta slut när 3 + 3 pjäser är utplacerade utan fortsätta genom att en användare i taget flyttar en pjäs. Programmet kan detektera vinnare, men det är inget krav.
I TicTacToe så måste modellen hålla reda på vems tur det är och meddela detta genom
getMessage() . Vartannat lyckat drag tolkas som spelare1 och vartannat är spelare2. Men turen byts inte för misslyckade drag.
Uppgift 1 – Implementera ett FemtonspelLäs åtminstone t.o.m. uppgift 2 noga (testen av modellen) innan ni börjar!Känner du inte till Femtonspelet? Läs då på wikipedia: Skapa en klass, public och vilka variabler och metoder ska deklareras private . Spelaren väljer en ruta som ligger intill den tomma. Då flyttas den valda rutan till den tomma platsen.
Uppgift 2 – Testa FifteenModelProvkör ert spel med följande testprogram som inte ska ändras alls. Testprogrammet finns också att hämta här:Text15.java.import java.util.*; class Text15 { public static void main(String[] u) { Scanner scan = new Scanner(System.in); Boardgame thegame = new FifteenModel(); // Model object is created System.out.println("\nWelcome to fifteen puzzle\n"); while (true) { // Print the current board for (int i=0; i<4; i++) { for (int j=0; j<4; j++) System.out.print(" " + thegame.getStatus(i,j)); // getStatus System.out.println(); } System.out.println(); System.out.print("Your move: "); int i = scan.nextInt(); // get an int number from terminal window int j = scan.nextInt(); thegame.move(i,j); // move System.out.println(thegame.getMessage()); // getMessage } } }Studera testprogrammet noga och lägg märke till att kommunikationen med modellklassen sker endast genom metoderna i interfacet. Klicka här för att få se en körning av Test15: Text15-demo. Det är rätt jobbigt att spela Femtonspelet i ett terminalfönster. Det blir mycket trevligare i den grafiska varianten. Uppgift 3 – View-ControlSkriv en grafisk klass, Själva spelet går till så att användaren klickar på en ruta och i och j avläses. Därefter anropas metoderna i modellen: Först // lämpliga import-satser här class ViewControl extends JFrame implements ActionListener { private Boardgame game; private int size; private Square[][] board; // Square är subklass till JButton private JTextField mess = new JTextField(); // JLabel funkar också ViewControl (Boardgame gm, int n){ // OK med fler parametrar om ni vill! ... } Tips
Uppgift 4 – Sätt ihopSätt ihop en FifteenModel och en View-Control till ett spelbart spel.
Uppgift 5 – Ett Mock Object för ytterligare ett spelImplementeraBoardgame för ytterligare ett spel men utan spelets funktionalitet, som ett Mock Object. Ingen logik alls behövs och metoderna kan göra nästan ingenting. De kan returnera samma svar hela tiden, bara svaren är av rätt typ. Spelet ska ha en annan storlek än det spel ni redan gjort. Sätt ihop med ViewControl!
Att redovisa för grunduppgift
Extrauppgift för högre betygVälj ett annat rutspel än det i grunduppgiften, dvs välj i första hand TicTacToe om ni har gjort Femtonspelet i grunduppgiften och tvärtom. Det är tillåtet att välja andra spel här, men de flesta är svårare att implementera och det behövs inte här. Svårare spel kan sparas till projektuppgiften. Implementera det nya spelets spelmodell som ett fullständigt Samma ViewControl som i grunduppgiften används alltså även till detta spel. TicTacToe ska implementeras med en utplaceringsfas och en "flyttfas". Spelet ska inte ta slut när 3 + 3 pjäser är utplacerade utan fortsätta genom att en användare i taget flyttar en pjäs. Ni behöver inte detektera att någon vunnit. |