public void paintComponent(Graphics g) - малювання панелі
Клас class Snake - змійка
Змінні:
int colElements - кількість елементів
final int maxLen - максимально можлива довжина
SnakeElement elem[] - масив частин змійки
int xNextSpeed, yNextSpeed - напрям руху на наступному кроці
final int startLives - початкова кількість життів
private static int lives - зберігає кількість життів змійки
Методи
public Snake(int c, int xPos, int yPos) - створення змійки довжини с з заданими координатами
public void increment(SnakeElement lastElem) додавання до змійки нового елемента
public boolean isMaxLong() - перевірка досягнення змійкою максимальної довжини
public boolean isKilled() - перевірка, чи «жива» змійка
public void decrementLive() - забирає життя в змійки
Клас class SnakeElement - елемент змійки
int xSpeed - швидкість елемента змійки по горизонталі
int ySpeed - швидкість елемента змійки по вертикалі
int xPos - позиція елемента змійки по горизонталі
int yPos - позиція елемента змійки по вертикалі
public SnakeElement(int xPos, int yPos) - конструктор задає координати елемента
public void move() - рухає елемент
public void setSpeed(int x, int y) - встановлення швидкості елемента
Клас class GameSquare - клітка ігрового поля
int w, h - розміри
boolean used - використання
boolean isBorder - перепона
public void setSize(int w, int h) - встановлює розміри
public void setBorder(boolean b) - робить клітинку перепоною
public void setUsed(boolean b) - робить клітинкою зайнятою/незайнятою
public void paintComponent(Graphics g) - малювання клітинки
Клас public class MenuString - строка меню
Змінні: - пункти меню і підменю
JMenu Game; JMenuItem mi_NewGame, mi_PauseGame,
mi_StopGame, mi_ExitGame;
JMenu Options, Speed; JMenuItem mi_S1, mi_S2, mi_S3;
JMenu Help; JMenuItem mi_About;
public class GameSnake {
public static void main(String[] args) {
GameFrame window = new GameFrame();
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class GameFrame extends JFrame{
GameField field;
MenuString menu;
boolean running = false;
public GameFrame() {
setDefaultLookAndFeelDecorated(true);
setSize(400, 300);
setTitle("Гра Змійка");
menu = new MenuString(this);
field = new GameField(this);
getContentPane().add(field);
setJMenuBar(menu);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
});
addKeyListener(field);
setVisible(true);
public void newGame(){
field.newGame();
public void pauseGame(){
field.pauseGame();
public void stopGame(){
field.stopGame();
import java.util.*;
public class GameField extends JPanel
implements Runnable, KeyListener{
Snake snake;
GameFrame frame;
SnakeElement targetElem;
InformPanel informPanel;
protected boolean isGameRun;
protected boolean isGamePause = false;
int gameSpeed = 2;
protected int colObstacles = 12;//Кількість перепон
protected int delay;//Затримка при русі змійки
final int w = 35, h = 25;
protected Thread th;
protected GameSquare square[][];
boolean keyBlocked = false;
boolean crash = false;
boolean target = false;
public GameField(GameFrame owner) {
super();
frame = owner;
this.setLayout(null);
Random rnd = new Random();
square = new GameSquare[w][h];
for(int x = 0; x<w; x++){
for(int y = 0; y<h; y++){
square[x][y] = new GameSquare();
add(square[x][y]);
informPanel = new InformPanel(this);
frame.getContentPane().add(informPanel, BorderLayout.EAST);
clearSquares();
createSnake();
createBorders();
start();
public void setDefault(){
createObstacles(colObstacles);
createTarget();
informPanel.updateInfo(snake.getLives(), snake.colElements,
gameSpeed, colObstacles);
public void clearSquares(){
square[x][y].setBorder(false);
square[x][y].setUsed(false);
protected void createSnake(){
snake = new Snake(5, w/2, h-2);
for (int i = 0; i<snake.colElements; i++){
square[snake.elem[i].xPos][snake.elem[i].yPos].setUsed(true);
square[snake.elem[i].xPos][snake.elem[i].yPos].setBorder(true);
square[snake.elem[i].xPos][snake.elem[i].yPos].n = i;
protected void createBorders(){
for (int i = 0; i<w; i++){
square[i][0].setBorder(true);
square[i][h-1].setBorder(true);
for (int i = 0; i<h; i++){
square[0] [i].setBorder(true);
square[w-1][i].setBorder(true);
protected void createObstacles(int col){//створює n ререпон на ігровому полі
int x, y;
for (int i = 0; i<col; i++){
do{
x = Math.abs(rnd.nextInt(w));
y = Math.abs(rnd.nextInt(h));
} while (square[x][y].isBorder);
square[x][y].setBorder(true);
protected void createTarget(){//Мішень для змійки
Страницы: 1, 2, 3, 4