Рефераты. Гра "Змійка" - опис програми

targetElem = new SnakeElement(0, 0);

do{

x = Math.abs(rnd.nextInt(w));

y = Math.abs(rnd.nextInt(h));

} while (square[x][y].isBorder);

targetElem.setSpeed(0, 0);

targetElem.xPos = x; targetElem.yPos = y;

square[x][y].setUsed(true);

}

public void paintComponent(Graphics g){

super.paintComponent(g);

int squareW = (getWidth())/w;

int squareH = (getHeight())/h;

for(int x = 0; x<w; x++){

for(int y = 0; y<h; y++){

square[x][y].setSize(squareW, squareH);

square[x][y].setLocation(x*squareW, y*squareH);

}

}

g.setColor(Color.BLUE);

g.setFont( new Font("1", Font.BOLD, 20) );

if ( !isGameRun ){

g.drawString("Розпочніть нову гру", 40, 100);

} else {

if (isGamePause){

g.drawString("ПАУЗА", 100, 100);

}

}

}

public void run (){

while (true){

if (isGameRun && !isGamePause){

keyBlocked = true;

int n = snake.colElements-1;

SnakeElement lastElem = new SnakeElement(snake.elem[n].xPos, snake.elem[n].yPos);

lastElem.setSpeed(snake.elem[n].xSpeed, snake.elem[n].ySpeed);

square[lastElem.xPos][lastElem.yPos].setUsed(false);

square[lastElem.xPos][lastElem.yPos].setBorder(false);

snake.move();

crash = square[snake.elem[0].xPos][snake.elem[0].yPos].isBorder;

target = !crash &&

square[snake.elem[0].xPos][snake.elem[0].yPos].used;

if (target){

snake.increment(lastElem);

createTarget();

cheeckWin();

}

keyBlocked = false;

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;

}

if (crash) { processCrash(); }

repaint();

informPanel.updateInfo(snake.getLives(), snake.colElements,

gameSpeed, colObstacles);

informPanel.repaint();

try { Thread.sleep (delay); }

catch ( InterruptedException ex){ }

}

}

}

public void cheeckWin(){

if (snake.isMaxLong()) {

JOptionPane.showMessageDialog(frame,

"Ви перемогли!\nНа швидкості "+gameSpeed, "Ігрова інформація",

JOptionPane.INFORMATION_MESSAGE);

stopGame();

try { Thread.sleep (delay*2); }

catch ( InterruptedException ex){ }

setDefault();

}

}

public void processCrash(){

snake.decrementLive();

if (snake.isKilled()) {

JOptionPane.showMessageDialog(frame,

"Гру завершено!", "Ігрова інформація",

JOptionPane.INFORMATION_MESSAGE);

stopGame();

}

try { Thread.sleep (delay*2); }

catch ( InterruptedException ex){ }

setDefault();

}

public void newGame(){

if (isGameRun) stopGame();

setDefault();

snake.resetLives();

isGameRun = true;

isGamePause = false;

}

public void pauseGame(){

isGamePause = !isGamePause;

if (isGamePause){

keyBlocked = true;

repaint();

} else{

keyBlocked = false;

}

}

public void stopGame( ){

isGameRun = false;

repaint();

}

public void setGameSpeed(int s){

gameSpeed = s;

switch (gameSpeed){

case 1: delay = 400; break;

case 2: delay = 200; break;

case 3: delay = 100; break;

}

informPanel.updateInfo(snake.getLives(), snake.colElements,

gameSpeed, colObstacles);

}

public void start(){

isGameRun = false;

setGameSpeed(2);

th = new Thread(this);

th.start();

}

public void stop(){}

public void keyPressed (KeyEvent e){

switch (e.getKeyCode()) { // Яку клавішу натиснули.

case KeyEvent.VK_LEFT :

if (!snake.elem[0].isMovingRight() && !keyBlocked){

snake.setMoveLeft();

keyBlocked = true;

}

break;

case KeyEvent.VK_RIGHT :

if (!snake.elem[0].isMovingLeft() && !keyBlocked){

snake.setMoveRight();

keyBlocked = true;

}

break;

case KeyEvent.VK_UP :

if (!snake.elem[0].isMovingDown() && !keyBlocked){

snake.setMoveUp();

keyBlocked = true;

}

break;

case KeyEvent.VK_DOWN :

if (!snake.elem[0].isMovingUp() && !keyBlocked){

snake.setMoveDown();

keyBlocked = true;

}

break;

case KeyEvent.VK_SPACE :

newGame();

break;

case KeyEvent.VK_P :

pauseGame();

break;

}

}

public void keyTyped(KeyEvent e){}

public void keyReleased(KeyEvent e){}

}

3.1.4. Файл InformPanel.java

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

public class InformPanel extends JPanel{

JLabel label;

boolean rn = true;

protected int lives, len, speed, obstacles;

public InformPanel(final GameField field) {

label = new JLabel("Інформація гри");

add(label);

setDefault();

}

public void setDefault(){

updateInfo(0, 0, 0, 0);

}

public void updateInfo(int lives, int len, int speed, int obstacles){

this.lives = lives;

this.len = len;

this.speed = speed;

this.obstacles = obstacles;

repaint();

}

public void paintComponent(Graphics g){

int h = 100;

super.paintComponent(g);

g.drawString(" Життя: " + lives, 1, h += 30);

g.drawString("Елементів: " + len, 1, h += 30);

g.drawString("Швидкість: " + speed, 1, h += 30);

g.drawString(" Перепони: " + obstacles, 1, h += 30);

}

}

3.1.5. Файл Snake.java

class Snake {

int colElements;

final int maxLen = 16;

SnakeElement elem[];

int xNextSpeed, yNextSpeed;

Страницы: 1, 2, 3, 4



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.