-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSurface.java
More file actions
120 lines (111 loc) · 4.37 KB
/
Surface.java
File metadata and controls
120 lines (111 loc) · 4.37 KB
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import java.awt.Color;
import java.awt.BasicStroke;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class Surface extends JPanel {
public SolitaireData solitaireData = new SolitaireData();
public Surface(SolitaireMouseAdapter mouseAdapter) {
addMouseListener(mouseAdapter);
addMouseMotionListener(mouseAdapter);
repaint();
}
private void doDrawing(Graphics g) {
Graphics2D g2d = (Graphics2D) g.create();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g2d.setPaint(new Color(0, 100, 0));
g2d.fillRect(0, 0, 1000, 700);
g2d.setPaint(new Color(0, 200, 0));
for (int i = 0; i < 7; i++) {
if (i != 2) {
g2d.fillRoundRect(i*140+20, 10, 120, 180, 10, 10);
}
g2d.fillRoundRect(i*140+20, 200, 120, 180, 10, 10);
}
g2d.setStroke(new BasicStroke(2));
drawStockWasteMenuFoundation(g2d);
drawTableauCursorWin(g2d);
g2d.dispose();
}
private void drawStockWasteMenuFoundation(Graphics2D g2d) {
if (solitaireData.stock.size() > 0) {
drawCard(g2d, 20, 10, false);
}
if (solitaireData.waste.size() > 0) {
drawFullCard(g2d, solitaireData.waste.getLast(), 160, 10);
}
drawRectangle(g2d, 300, 12, 120, 40);
g2d.setFont(new Font("Dialog", Font.PLAIN, 20));
g2d.drawString("New Game", (720-g2d.getFontMetrics().stringWidth("New Game")) / 2, 39);
drawRectangle(g2d, 300, 57, 120, 40);
g2d.drawString("Restart", (720-g2d.getFontMetrics().stringWidth("Restart")) / 2, 84);
drawRectangle(g2d, 300, 102, 120, 40);
g2d.drawString("Undo", (720-g2d.getFontMetrics().stringWidth("Undo")) / 2, 129);
drawRectangle(g2d, 300, 147, 120, 40);
g2d.drawString("Redo", (720-g2d.getFontMetrics().stringWidth("Redo")) / 2, 174);
for (int i = 0; i < 4; i++) {
if (solitaireData.foundations[i].size() > 0) {
drawFullCard(g2d, solitaireData.foundations[i].getLast(), 440+140*i, 10);
}
}
}
private void drawTableauCursorWin(Graphics2D g2d) {
for (int i = 0; i < 7; i++) {
for (int j = 0; j < solitaireData.tableaus[i].size(); j++) {
Card tableauCard = solitaireData.tableaus[i].get(j);
if (tableauCard.isVisible) {
drawFullCard(g2d, tableauCard, 20+140*i, 200+j*solitaireData.tableauSpacing[i]);
} else {
drawCard(g2d, 20+140*i, 200+j*solitaireData.tableauSpacing[i], false);
}
}
}
for (int i = 0; i < solitaireData.cursor.size(); i++) {
drawFullCard(g2d, solitaireData.cursor.get(i), solitaireData.cursorX, solitaireData.cursorY+i*30);
}
if (solitaireData.state.equals("win")) {
drawRectangle(g2d, 400, 300, 200, 100);
g2d.setFont(new Font("Dialog", Font.PLAIN, 30));
g2d.drawString("You Win!", (1000-g2d.getFontMetrics().stringWidth("You Win!")) / 2, 335);
g2d.drawRect(425, 347, 150, 40);
g2d.setFont(new Font("Dialog", Font.PLAIN, 25));
g2d.drawString("New Game", (1000-g2d.getFontMetrics().stringWidth("New Game")) / 2, 376);
}
}
private void drawCard(Graphics2D g2d, int startX, int startY, boolean isVisible) {
if (isVisible) {
g2d.setPaint(new Color(255, 255, 255));
} else {
g2d.setPaint(new Color(50, 175, 255));
}
g2d.fillRoundRect(startX, startY, 120, 180, 10, 10);
g2d.setPaint(new Color(0, 0, 0));
g2d.drawRoundRect(startX, startY, 120, 180, 10, 10);
}
private void drawFullCard(Graphics2D g2d, Card card, int startX, int startY) {
drawCard(g2d, startX, startY, true);
String[][] draw = card.cardDraw.draw;
for (int i = 0; i < draw.length; i++) {
Image image = new ImageIcon("Images/" + draw[i][0]).getImage();
int imageWidth = (int) (image.getWidth(null) * Double.parseDouble(draw[i][3]));
int imageHeight = (int) (image.getHeight(null) * Double.parseDouble(draw[i][3]));
g2d.drawImage(image, startX + Integer.parseInt(draw[i][1]) - imageWidth/2, startY + Integer.parseInt(draw[i][2]) - imageHeight/2, imageWidth, imageHeight, null);
}
}
private void drawRectangle(Graphics2D g2d, int startX, int startY, int width, int height) {
g2d.setPaint(new Color(0, 0, 0));
g2d.fillRect(startX, startY, width, height);
g2d.setPaint(new Color(255, 255, 255));
g2d.drawRect(startX, startY, width, height);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
doDrawing(g);
}
}