View difference between Paste ID: rpvzhcin and WS1MvR9Q
SHOW: | | - or go back to the newest paste.
1
import java.awt.Color;
2
import java.awt.Dimension;
3
import java.awt.Font;
4
import java.awt.FontMetrics;
5
import java.awt.Graphics;
6
import java.awt.Toolkit;
7
import java.awt.event.ActionEvent;
8
import java.awt.event.ActionListener;
9
import java.awt.event.KeyAdapter;
10
import java.awt.event.KeyEvent;
11
import javax.swing.JPanel;
12
import javax.swing.Timer;
13
14
@SuppressWarnings("serial")
15
public class Board extends JPanel implements ActionListener {
16
17
18
19
// größe board
20
private final static int BOARDWIDTH = 1000;
21
private final static int BOARDHEIGHT = 980;
22
23
//joint / food größe
24
private final static int PIXELSIZE = 25;
25
26
27
private final static int TOTALPIXELS = (BOARDWIDTH * BOARDHEIGHT)
28
        / (PIXELSIZE * PIXELSIZE);
29
30
// Check if running
31
private boolean inGame = true;
32
33
// Timer für ticks
34
private Timer timer;
35
36
//schwierigkeitsgrad, höher, gleich leichter
37
private static int speed = 100;
38
39
// Instances of our snake & food so we can use their methods
40
private Snake snake = new Snake();
41
private Food food = new Food();
42
43
44
public Board() {
45
46
    addKeyListener(new Keys());
47
    setBackground(Color.BLACK);
48
    setFocusable(true);
49
50
    setPreferredSize(new Dimension(BOARDWIDTH, BOARDHEIGHT));
51
52
    initializeGame();
53
    //sound
54
    Sound.BACK.play();
55
}
56
57
58
// Zeichnen
59
@Override
60
protected void paintComponent(Graphics g) {
61
    super.paintComponent(g);
62
63
    draw(g);
64
}
65
66
67
68
69
// Draw our Snake & Food (Called on repaint()).
70
void draw(Graphics g) {
71
    // Only draw if the game is running / the snake is alive
72
    if (inGame == true) {
73
74
		g.setColor(Color.white);
75-
		g.drawString("Length: " + snake.getJoints, 500, 500);
75+
		g.drawString("Length: " + snake.getJoints(), 500, 500);
76
77
        g.setColor(Color.green);
78
        g.fillRect(food.getFoodX(), food.getFoodY(), PIXELSIZE, PIXELSIZE); // food
79
80
        // Draw our snake.
81
        for (int i = 0; i < snake.getJoints(); i++) {
82
            // Snake's head
83
            if (i == 0) {
84
                g.setColor(Color.RED);
85
                g.fillRect(snake.getSnakeX(i), snake.getSnakeY(i),
86
                        PIXELSIZE, PIXELSIZE);
87
                // Body of snake
88
            
89
            } else {
90
                g.fillRect(snake.getSnakeX(i), snake.getSnakeY(i),
91
                        PIXELSIZE, PIXELSIZE);
92
            }
93
        }
94
95
        // Sync our graphics together
96
        Toolkit.getDefaultToolkit().sync();
97
    } else {
98
        // If we're not alive, then we end our game
99
        endGame(g);
100
    }
101
}
102
103
	
104
void initializeGame() {
105
    snake.setJoints(3); // anfang
106
107
    
108
    for (int i = 0; i < snake.getJoints(); i++) {
109
        snake.setSnakeX(BOARDWIDTH / 2);
110
        snake.setSnakeY(BOARDHEIGHT / 2);
111
    }
112
   
113
    snake.setMovingRight(true);
114
115
 
116
    food.createFood();
117
118
    // set the timer to record our game's speed / make the game move
119
    timer = new Timer(speed, this);
120
    timer.start();
121
}
122
123
124
// nähe food
125
void checkFoodCollisions() {
126
127
    if ((proximity(snake.getSnakeX(0), food.getFoodX(), 20))
128
            && (proximity(snake.getSnakeY(0), food.getFoodY(), 20))) {
129
    	//sound
130
    	
131
    	Sound.FC.play();
132
        System.out.println("intersection");
133
        
134
        snake.setJoints(snake.getJoints() + 1);
135
        
136
        food.createFood();
137
    }
138
}
139
140
//collision mit snake
141
void checkCollisions() {
142
	
143
   
144
    for (int i = snake.getJoints(); i > 0; i--) {
145
146
        
147
        if ((i > 5)
148
                && (snake.getSnakeX(0) == snake.getSnakeX(i) && (snake
149
                        .getSnakeY(0) == snake.getSnakeY(i)))) {
150
            inGame = false; 
151
        }
152
    }
153
154
    // Intersect board
155
    if (snake.getSnakeY(0) >= BOARDHEIGHT) {
156
        inGame = false;
157
    }
158
159
    if (snake.getSnakeY(0) < 0) {
160
        inGame = false;
161
    }
162
163
    if (snake.getSnakeX(0) >= BOARDWIDTH) {
164
        inGame = false;
165
    }
166
167
    if (snake.getSnakeX(0) < 0) {
168
        inGame = false;
169
    }
170
171
    // If the game has ended, then we can stop our timer
172
    if (!inGame) {
173
        timer.stop();
174
    }
175
}
176
177
void endGame(Graphics g) {
178
	//sound
179
	Sound.BACK.stop();
180
	Sound.END.play();
181
	
182
    
183
    String message = "Game over";
184
185
    // Create a new font instance
186
    Font font = new Font("Times New Roman", Font.BOLD, 80);
187
    FontMetrics metrics = getFontMetrics(font);
188
189
    // Set the color of the text to red, and set the font
190
    g.setColor(Color.red);
191
    g.setFont(font);
192
193
    // Draw the message to the board
194
    g.drawString(message, (BOARDWIDTH - metrics.stringWidth(message)) / 2,
195
            BOARDHEIGHT / 2);
196
197
    System.out.println("Game Ended");
198
    
199
    String message1 = "Press Enter for restart";
200
    Font font1 = new Font("Times New Roman", Font.BOLD, 80);
201
    FontMetrics metrics1 = getFontMetrics(font1);
202
    g.setColor(Color.red);
203
    g.setFont(font1);
204
    g.drawString(message1, (BOARDWIDTH - metrics1.stringWidth(message1)) / 2,
205
            BOARDHEIGHT -100);
206
}
207
208
// Run constantly as long as we're in game.
209
@Override
210
public void actionPerformed(ActionEvent e) {
211
    if (inGame == true) {
212
213
        checkFoodCollisions();
214
        checkCollisions();
215
        snake.move();
216
217
        System.out.println(snake.getSnakeX(0) + " " + snake.getSnakeY(0)
218
                + " " + food.getFoodX() + ", " + food.getFoodY());
219
    }
220
    // Repaint or 'render' our screen
221
    repaint();
222
}
223
224
private class Keys extends KeyAdapter {
225
226
    @Override
227
    public void keyPressed(KeyEvent e) {
228
229
        int key = e.getKeyCode();
230
231
        if ((key == KeyEvent.VK_LEFT) && (!snake.isMovingRight())) {
232
            snake.setMovingLeft(true);
233
            snake.setMovingUp(false);
234
            snake.setMovingDown(false);
235
        }
236
237
        if ((key == KeyEvent.VK_RIGHT) && (!snake.isMovingLeft())) {
238
            snake.setMovingRight(true);
239
            snake.setMovingUp(false);
240
            snake.setMovingDown(false);
241
        }
242
243
        if ((key == KeyEvent.VK_UP) && (!snake.isMovingDown())) {
244
            snake.setMovingUp(true);
245
            snake.setMovingRight(false);
246
            snake.setMovingLeft(false);
247
        }
248
249
        if ((key == KeyEvent.VK_DOWN) && (!snake.isMovingUp())) {
250
            snake.setMovingDown(true);
251
            snake.setMovingRight(false);
252
            snake.setMovingLeft(false);
253
        }
254
        if ((key == KeyEvent.VK_NUMPAD1)){
255
        	tM = 100;
256
            timer.stop();
257
            timer.setDelay( tM );
258
            timer.start();
259
        }
260
        if ((key == KeyEvent.VK_NUMPAD2)){
261
        	tM = 1000;
262
            timer.stop();
263
            timer.setDelay( tM );
264
            timer.start();
265
        }
266
        
267
        if (key == KeyEvent.VK_SPACE) {
268
            try {
269
				Thread.sleep(1500);
270
			} catch (InterruptedException e1) {
271
				// TODO Auto-generated catch block
272
				e1.printStackTrace();
273
			}
274
            //pause text
275
           
276
            
277
        }
278
279
        if ((key == KeyEvent.VK_ENTER) && (inGame == false)) {
280
281
            inGame = true;
282
            snake.setMovingDown(false);
283
            snake.setMovingRight(false);
284
            snake.setMovingLeft(false);
285
            snake.setMovingUp(false);
286
287
            initializeGame();
288
            
289
            Sound.BACK.play();
290
        }
291
    }
292
}
293
294
private boolean proximity(int a, int b, int closeness) {
295
    return Math.abs((long) a - b) <= closeness;
296
}
297
298
public static int getAllDots() {
299
    return TOTALPIXELS;
300
}
301
302
public static int getDotSize() {
303
    return PIXELSIZE;
304
}
305
}