-
Notifications
You must be signed in to change notification settings - Fork 1
/
Dice.java
89 lines (79 loc) · 2.21 KB
/
Dice.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/**
Stellt einen Würfel (von 1-6) dar, welcher in der Welt sichtbar dargestellt werden soll.
@author Felix Stupp
@version 13.06.2016
*/
public class Dice extends GUI_Interface {
private int number = 0;
/**
Erstellt einen Würfel mit dem Startwert 0 (für noch nicht verwendet).
*/
public Dice() {
redraw();
}
/**
Erstellt einen Würfel mit einem bestimmten Startwert, welcher sofort sichtbar ist.
*/
public Dice(int startNumber) {
number = startNumber;
redraw();
}
/**
Gibt die aktuelle Zahl, die der Würfel anzeigt, aus. Gibt die Methode 0 zurück, heißt dies, dass der Würfel noch nicht gewürfelt wurde.
@return Die aktuelle Augenzahl oder 0
*/
public int getNumber() {
return number;
}
/**
Legt die Größe des Würfels als Quadrat fest.
*/
public void setSizeAsSquare(int l) {
setSize(l,l);
}
/**
Würfelt den Würfel, erneuert die Darstellung und gibt die neue Augenzahl zurück.
*/
public int roll() {
number = (int) (Math.floor(Math.random()*6)+1);
redraw();
return number;
}
/**
Zeichnet auf dem gegebenen GreenfootImage ein Oval an der gegebenen Stelle multipliziert mit der einheitlichen Größe.
*/
private void fO(GreenfootImage i, int eX, int eY, int x, int y) {
i.fillOval(eX*x,eY*y,eX*2,eY*2);
}
/**
Erneuert die Darstellung des Würfels.
*/
public void redraw() {
// einheitliche Größe X und Y (ein Vierzehntel der gesamten Breite und Höhe)
int eX = (int) Math.round(sx/8);
int eY = (int) Math.round(sy/8);
// Vereinfachung für die Augenzahl
int a = number;
GreenfootImage i = new GreenfootImage(sx,sy);
i.setColor(new java.awt.Color(0,0,0,0));
i.clear();
i.setColor(backC);
i.fillShape(new java.awt.geom.RoundRectangle2D.Double(0,0,sx,sy,eX,eY));
i.setColor(foreC);
// das "else" fehlt absichtlich
if(a==1||a==3||a==5) { //Mittlerer Punkt
fO(i,eX,eY,3,3);
} if(a>1) { //Punkte links-oben und rechts-unten
fO(i,eX,eY,1,1);
fO(i,eX,eY,5,5);
} if(a>3) { //Punkte links-unten und rechts-oben
fO(i,eX,eY,1,5);
fO(i,eX,eY,5,1);
} if(a>5) { //Punkte links-mitte und rechts-mitte
fO(i,eX,eY,1,3);
fO(i,eX,eY,5,3);
}
setImage(i);
}
}