Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2011, 12:41   #1
Darh
Пользователь
 
Регистрация: 13.09.2009
Сообщений: 75
Восклицание Змейка на Java

Помогите дописать игру, в Java практическм ноль(((( Нужно, чтобы:

1) при окончании игры выскакивало окошко с количеством собранных квадратиков
2) при нажатии НОВАЯ ИГРА начиналась заново, при нажатии ВЫХОД выходила из игры
Darh вне форума Ответить с цитированием
Старый 26.12.2011, 12:42   #2
Darh
Пользователь
 
Регистрация: 13.09.2009
Сообщений: 75
По умолчанию

class SnakeBody

Код:
package snake;

	import java.util.LinkedList;
	import java.util.ListIterator;
	import java.awt.*;

	public class SnakeBody extends Object {
	    //List witch contains snake body;
	     LinkedList<Point> body  = new LinkedList<Point>();
	        //part of snake
	        final int size = 10;
	        //co-ordinate X of one body part
	        public int x;
	        //co-ordinate Y of one body part
	        public int y;
	 
	        food fod ;
	 
	 
	 
	//  constructor that initialize snake boby
	    SnakeBody(){
	        Point point;
	 
	        point = new Point(3,6);  body.add(0,point);
	        point = new Point(4,6);  body.add(1,point);
	        point = new Point(5,6);  body.add(2,point);
	        point = new Point(6,6);  body.add(3,point);
	        point = new Point(7,6);  body.add(4,point);
	    }
	 
	     public void paint(Graphics g){
            for(int i =0; i<body.size();i++){
	             Point p = body.get(i);
	             int bodyx =(int) p.getX();
	             int bodyy =(int) p.getY();
	             //g.drawString("zzzzzzzz",100,100);
	             g.setColor(new Color(22,26,218));
	             g.fillRect(bodyx*size,bodyy*size,size,size);
	            }
	     }
	 
	     public void move(SnakeFrame.SnakeDirection d){
	        LinkedList<Point> bodyCopy  = new LinkedList<Point>();
	         copyList(bodyCopy,body);
	         ListIterator it = body.listIterator();
	         int iter = body.size();
	 
	         for(int i = iter-1; i >=0;i--) {
	             Point p = body.get(i);
	 
	             if(body.get(i) == body.getLast()){
	                 if(d.state == d.right )
	                    p.x = p.x +1;
	                 else if(d.state == d.down)
	                    p.y = p.y +1;
	                 else if(d.state == d.up)
	                    p.y = p.y -1;
	                 else if(d.state == d.left)
	                    p.x = p.x -1;                 
	             }
	             else  {
	 
	                 Point p1 = bodyCopy.get(i+1);
	 
	                 p.x = p1.x;
	                 p.y = p1.y;
	             }
	         }
	 
	     }
	 
	     //Копируем элементы главного списка в временный
	     public void copyList(LinkedList a, LinkedList b){
	        for(int i =0;i< b.size();i++)
	        {
	            Point p =(Point) b.get(i) ;
	            // Надо добавлять клон объекта иначе сохранится только ссылка
	            a.add(p.clone());
	        }
	     }
 
	 
	 
	}


class food

Код:
package snake;

import java.awt.*;
import java.util.Random;

public class food {
    	     int foodx ;
	     int foody ;
	     int size =10;
	     Random generator = new Random();
	 
	    public food(){
	          foodx = 10;
	          foody = 10;
	    }
	 
	    public void paintFood(Graphics g){
	        //System.out.println("food is prepared");
	        g.setColor(new Color(179,5,118));
	        g.fillRect(foodx*size,foody*size,size,size);        
	    }
	 
	    public void changePosition(){
	       int Nextx = generator.nextInt(46);
	       int Nexty = generator.nextInt(25);
	       foodx = Nextx;
	       foody = Nexty;
	       boolean at = SnakeFrame.getEaten();
	       System.out.println(at);
	       at = false;
	       SnakeFrame.setEaten(at);
	    }	     
	}
Darh вне форума Ответить с цитированием
Старый 26.12.2011, 12:46   #3
Darh
Пользователь
 
Регистрация: 13.09.2009
Сообщений: 75
По умолчанию

class MainFrame
Код:
package snake;
	import javax.swing.*;
	import java.awt.*;
	import java.awt.event.*;
public class MainFrame{
    	public static void main(String args[]){
	        SnakeFrame frame = new SnakeFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	        frame.setVisible(true);            
	    }
	}
	 class SnakeFrame extends JFrame {
    private static class NewMenuListener implements ActionListener {
        public NewMenuListener() {
        }
        @Override
        public void actionPerformed(ActionEvent e) {
            throw new UnsupportedOperationException("Not supported yet.");
        }
    }	        int i = 0;
	        SnakePanel panel;
	        boolean live = true;
	        SnakeBody snake = new SnakeBody();
	        SnakeDirection direction = new SnakeDirection(0);
	        public food f = new food();
	        public static  boolean eaten = false;
	        public boolean alive = true;
	        public boolean done = true;
private JMenuBar menu = null;
private final String fileItems[] = new String []{"Новая игра", "Выход"};
	    public  SnakeFrame(){
	        setSize(500,300);
	        setTitle("Змейка");
createMenu();
setJMenuBar(menu);
	        panel = new SnakePanel();
	        panel.setBackground(new Color(10, 10, 10));
	        add(panel);
	 	    }
	    public static boolean getEaten(){
	        return eaten;
	    }
	    public static void setEaten(boolean eat){
	        eaten = eat;
	    }
Darh вне форума Ответить с цитированием
Старый 26.12.2011, 12:47   #4
Darh
Пользователь
 
Регистрация: 13.09.2009
Сообщений: 75
По умолчанию

продолжение

Код:
 class SnakeThread implements Runnable{
	        Graphics g=null;
	 
	        public SnakeThread(){
	            Thread t;
	            t = new Thread(this);
	            System.out.println("Second thread");
	            t.start();
	        }
	         public void run(){
	            System.out.println("Внутри run");
	        while(alive == true){
	 	            try {
	 	                Thread.sleep(200);
	           	            }
	            catch (InterruptedException e) {
	            	            }
	               snake.move(direction);
	              eat();
	              die();
	              panel.repaint();
	             done = true;	        }	        }	    }
	 	    class SnakePanel extends JPanel  {
	 	        public SnakePanel(){
	          new SnakeThread();
	          KeyHendler listener =  new KeyHendler();
	          addKeyListener(listener);
	          setFocusable(true);
	 	        }
	        public void paintComponent(Graphics g){
	            //super.paintComponent(g);
	            g.clearRect(0,0,500,300);
	            snake.paint(g);
	             if(eaten == true)
	               f.changePosition();
	            f.paintFood(g);	        }	    }
	 	    public void die(){
        if(snake.body.getLast().x >47 || snake.body.getLast().x <0 ||
	                snake.body.getLast().y >25 ||snake.body.getLast().y <0 )
	        alive = false;
	        for(int i =1;i<snake.body.size()-1;i++){
	 	            if(snake.body.getLast().x 
==snake.body.get(i).x && snake.body.getLast().y ==snake.body.get(i).y){
	               System.out.println(i);
	                alive = false;	            }	 	        }	    }
	     public void eat(){
	         //f = SnakeFrame.;
	         if(f.foodx == snake.body.getLast().x && f.foody
 == snake.body.getLast().y){
	             Point p = new Point (f.foodx,f.foody);
	             System.out.println("Coordinats equals");
	             snake.body.add(0,p);
	             eaten = true;
	           
	         }
	     }
	 	    private class KeyHendler implements KeyListener{
	        public void keyPressed(KeyEvent event){
	 	            int keyCode = event.getKeyCode();
	 	            if(keyCode == KeyEvent.VK_RIGHT&&done == true)
{ direction.changeToRight();done = false;}
	            if(keyCode == KeyEvent.VK_LEFT&&done == true)
{ direction.changeToLeft();done = false;}
	            if(keyCode == KeyEvent.VK_UP&&done == true)
{ direction.changeToUp();done = false;}
	            if(keyCode == KeyEvent.VK_DOWN&&done == true) 
{direction.changeToDown();done = false;}
	 
	        }
	        public void keyReleased(KeyEvent event){
	 	        }
	        public void keyTyped(KeyEvent event){
	 
	        }        
	    }
	     public class SnakeDirection{	  
                public final  int right = 0;
	        public final  int down = 1;
	        public final  int left = 2;
	        public final  int up = 3;
	 	        public int state = 0;
	 	        public SnakeDirection(int s ){
	            state =s;
	        }
	 
	        public void changeToRight(){
                    if(state != left)
	            state = right;
	        }
	        public void changeToLeft(){
	            if(state != right)
	            state = left;
	        }
	        public void changeToUp(){
	            if(state != down)
	            state = up;
	        }
	        public void changeToDown(){
	            if(state != up)
	            state = down;	        }	    }
private void createMenu() {
menu = new JMenuBar();
JMenu fileMenu = new JMenu("Игра");
for (int i = 0; i < fileItems.length; i++) {
JMenuItem item = new JMenuItem(fileItems[i]);
item.setActionCommand(fileItems[i].toLowerCase());
item.addActionListener(new NewMenuListener());
fileMenu.add(item);
}
fileMenu.insertSeparator(1);
menu.add(fileMenu);}      }

Последний раз редактировалось Darh; 26.12.2011 в 12:49.
Darh вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Змейка на Java Darh Помощь студентам 0 14.12.2011 16:03
Змейка в C++ Neo151 Помощь студентам 1 12.08.2011 12:59
змейка spydark91 Общие вопросы Delphi 4 16.07.2011 15:12
Змейка zamaevac Gamedev - cоздание игр: Unity, OpenGL, DirectX 20 01.07.2010 19:19
Змейка SAMY93 Общие вопросы Delphi 1 27.06.2010 19:58