2016-10-14 6 views
1

В настоящее время я работаю над созданием игры Snake. У меня возникла идея создать базовый 2-мерный arraylist, чтобы я мог создавать ячейки, но я не могу найти никакой помощи при создании этого 2-го arraylist для хранения значений x и y каждой из ячеек. Мне нужна помощь в том, как создать этого 2-го arraylist и как его использовать.Создание сетки с 2d-массивом

Snake.java

package snake; 

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.GridLayout; 
import java.awt.List; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
import java.util.ArrayList; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 


public class Snake extends JPanel implements KeyListener { 

private static final long serialVersionUID = 1L; 
static final int BOX_WIDTH = 600; 
static final int BOX_HEIGHT = BOX_WIDTH; 
int UPDATE_RATE = 300; 
ArrayList<Cell> CellList = new ArrayList<Cell>(); 



//ode below???? 
//2d arrayList 

ArrayList[][] Cell = new ArrayList[10][10]; 


public Snake() { 

    setPreferredSize(new Dimension(BOX_WIDTH, BOX_HEIGHT)); 

    /*for (int i = 0; i < 5; i++) { 

     for (int j = 0; j < 5; j++) { 
      CellList.add(new Cell(i,j)); 
     } 
    } */ 



    Thread gameThread = new Thread() { 

     public void run() { 
      while(true){ 
       repaint(); 
       try {Thread.sleep(1000/UPDATE_RATE);} 
       catch (InterruptedException ex) {} 
      } 
     } 
    }; 
    gameThread.start(); 
} 
public static void main(String[] args) { 
    javax.swing.SwingUtilities.invokeLater(new Runnable() { 

     public void run() { 
      JFrame frame = new JFrame("SNEK"); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      Snake snake = new Snake(); 
      frame.setContentPane(snake); 
      frame.setSize(BOX_WIDTH, BOX_HEIGHT); 
      frame.pack(); 
      frame.addKeyListener(snake); 
      frame.setVisible(true); 
     } 
    }); 
} 

public void paintComponent(Graphics g) { 
    g.setColor(Color.pink); 
    g.fillRect(0, 0, BOX_WIDTH, BOX_HEIGHT); 

    /*for (int i = 0; i < 5; i++) { 
     for (int j = 0; j < 5; j++) { 
       CellList.get(i,j).draw(g); 

     } 
    } */ 
} 

@Override 
public void keyPressed(KeyEvent arg0) { 

} 
@Override 
public void keyReleased(KeyEvent arg0) { 

} 
@Override 
public void keyTyped(KeyEvent arg0) {} 



} 

Cell.java

package snake; 

import java.awt.Color; 
import java.awt.Graphics; 

public class Cell extends Snake{ 

private static final long serialVersionUID = 1L; 
final int CELL_HEIGHT = 10; 
final int CELL_WIDTH = 10; 

int status = 0; 
int xPos; 
int yPos; 

public Cell(int x, int y) { 

    xPos = x * 120; 
    yPos = y * 120; 
} 

public void draw(Graphics g) { 
    g.setColor(Color.magenta); 
    g.fillRect(xPos, yPos, CELL_WIDTH, CELL_HEIGHT); 
} 

} 
+0

Удалось ли вам получить это право? – ItamarG3

+0

Взгляните на мою статью, [Retro Snake Game] (http://java-articles.info/articles/?p=768), для некоторых идей о том, как структурировать игру с использованием Java Swing. –

ответ

0

Вы, безусловно, не нужен 2d список массива. Вместо этого вам нужен 2d массив ячеек:

Вместо этого:

ArrayList[][] Cell = new ArrayList[10][10]; 

Используйте это:

Cell[][] cells = new Cell[10][10]; 

Тогда в конструкторе:

public Snake() { 

    setPreferredSize(new Dimension(BOX_WIDTH, BOX_HEIGHT)); 

    for (int i = 0; i < cells.length; i++) { 
     for (int j = 0; j < cells[i].length; j++) { 
      cells[i][j] = new Cell(/*do what ever you ned here*/); 
     } 
    } 
    ... 
1

Если вы хотите сделать игры с помощью java, я предлагаю вам использовать приложение для разработки игр-libGDX

Скачать: https://libgdx.badlogicgames.com/download.html

Это простое в использовании, а также вы строите игры для настольного, Android, IOS и HTML в том же time.There много учебника на YouTube о libGDX.

Вот некоторые из них:

https://www.youtube.com/watch?v=QKK4kDogg-8&list=PLaNw_AbDFccHbzuObI4xHHp6WtiN2cRQv

https://www.youtube.com/watch?v=EJwXzmUQChg&list=PLXY8okVWvwZ0JOwHiH1TntAdq-UDPnC2L

https://www.youtube.com/watch?v=a8MPxzkwBwo&list=PLZm85UZQLd2SXQzsF-a0-pPF6IWDDdrXt