на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Гра "Змійка" - опис програми
ому для даної роботи було обрано мову Java, як найбільш ефективну та багато платформну.

2.6. Висновок

Враховуючи аналіз предметної області і проект програми, можливо зробити висновок, що розроблена гра „Змійка” розрахована на широке коло користувачів завдяки своїй простоті. Модель програми дозволяє легко та зручно її модернізувати: додати нові команди; зробити сприйнятливий для користувача інтерфейс.

3. Додаток

3.1. Тексти файлів проекту

3.1.1. Файл GameSnake.java

public class GameSnake {

public static void main(String[] args) {

GameFrame window = new GameFrame();

}

}

3.1.2. Файл GameFrame.java

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();

}

}

3.1.3. Файл GameField.java

import java.awt.*;

import javax.swing.*;

import java.util.*;

import java.awt.event.*;

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(){

clearSquares();

createSnake();

createBorders();

createObstacles(colObstacles);

createTarget();

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

gameSpeed, colObstacles);

}

public void clearSquares(){

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

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

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 ререпон на ігровому полі

Random rnd = new Random();

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(){//Мішень для змійки

Random rnd = new Random();

int x, y;

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(){}

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



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.