View difference between Paste ID: 3Ec704ZH and GWTiirb9
SHOW: | | - or go back to the newest paste.
1
Go on peli, jossa pelaajat asettavat nappuloitaan (eli kiviä) pelilaudalla oleviin ruutuihin. Voittaja on se pelaaja, jolla on pelin loputtua enemmän nappuloita pelilaudalla.
2
3
Oheisessa ohjelmassa on toteutettu luokat Pelaaja, GoPelaaja, enum Nappula sekä abstrakti luokka Peli. Lisäksi Pelin toteuttavasta luokasta GoPeli on annettu osa toteutuksesta.
4
5
Tehtäväsi on tutustua toteutettuihin luokkiin ja toteuttaa luokkaan GoPeli abstraktissa yliluokassa määritelty metodi annaVoittaja(). Metodi selvittää kumman pelaajan nappuloita on laudalla enemmän, ja palauttaa tämän pelaajan. Jos pelaajan nappulamäärät ovat tasoissa, metodi palauttaa null.
6
7
8
9
import java.util.Random;
10
11
public class Test{
12
    public static void main(String[] args){
13
        final Random rnd = new Random();
14
        
15
        String[] n1 = "Arto Anne Esko Elina Kimmo Kaisa".split(" ");
16
        String[] n2 = "Lasse Leena Mikko Maija Aku Iines".split(" ");
17
        String nimi1 = n1[rnd.nextInt(n1.length)];
18
        String nimi2 = n2[rnd.nextInt(n2.length)];
19
        
20
        GoPelaaja gp1 = new GoPelaaja(nimi1, Nappula.MUSTA);
21
        GoPelaaja gp2 = new GoPelaaja(nimi2, Nappula.VALKOINEN);
22
        System.out.println("Pelaaja1:" + gp1.annaNimi());
23
        System.out.println("Pelaaja2:" + gp2.annaNimi());
24
        
25
        GoPeli gpeli = new GoPeli(gp1, gp2);
26
        System.out.println("Peli luotu!");
27
        
28
        System.out.println("Lisataan nappuloita...");
29
        int p1 = 0, p2 = 0;
30
        for (int i=0; i<10; i++){
31
            for (int j=0; j<10; j++){
32
                Nappula nap = Nappula.values()[rnd.nextInt(3)];
33
                gpeli.asetaNappula(i, j, nap);
34
                if (nap == Nappula.MUSTA){
35
                    p1++;
36
                } else if (nap == Nappula.VALKOINEN){
37
                    p2++;
38
                }
39
            }
40
        }
41
    
42
        
43
        System.out.println("" + gp1.annaNimi() + " - nappuloita: " + p1);
44
        System.out.println("" + gp2.annaNimi() + " - nappuloita: " + p2);
45
        System.out.println("Voittaja:" + (gpeli.annaVoittaja() == null ? "Tasapeli" : gpeli.annaVoittaja().annaNimi()));
46
    }
47
}
48
class Pelaaja{
49
    private String nimi;
50
    
51
    public Pelaaja(String nimi){
52
        this.nimi = nimi;
53
    }
54
    
55
    public String annaNimi(){
56
        return nimi;
57
    }
58
}
59
enum Nappula{
60
    // Nappula on tietty musta tai valkoinen, mutta tyhja ruutu == TYHJA
61
    MUSTA, VALKOINEN, TYHJA;
62
}
63
class GoPelaaja extends Pelaaja{
64
    private Nappula nappula;
65
    
66
    public GoPelaaja(String nimi, Nappula nappula){
67
        super(nimi);
68
        this.nappula = nappula;
69
    }
70
    
71
    public Nappula annaNappula(){
72
        return nappula;
73
    }
74
}
75
abstract class Peli{
76
    private Pelaaja pelaaja1;
77
    private Pelaaja pelaaja2;
78
    
79
    public Peli(Pelaaja pelaaja1, Pelaaja pelaaja2){
80
        this.pelaaja1 = pelaaja1;
81
        this.pelaaja2 = pelaaja2;
82
    }
83
    
84
    public Pelaaja annaPelaaja1(){
85
        return pelaaja1;
86
    }
87
    
88
    public Pelaaja annaPelaaja2(){
89
        return pelaaja2;
90
    }
91
    
92
    /**
93
     * Metodi palauttaa pelin voittaneen pelaajan tai null, jos pelaajat
94
     * ovat tasoissa.
95
     */ 
96
    public abstract Pelaaja annaVoittaja();
97
}
98
class GoPeli extends Peli{
99
    private Nappula[][] nappulat;
100
    
101
    public GoPeli(GoPelaaja p1, GoPelaaja p2){
102
        super(p1,p2);
103
        nappulat = new Nappula[10][10];
104
    }
105
    
106
    public void asetaNappula(int x, int y, Nappula nappula){
107
        nappulat[x][y] = nappula;
108
    }
109
110
public Pelaaja annaVoittaja(){
111
112
113
114
115
}
116
117
}