Я работал над проектом Java для Uni, классической c аркадной игры Breakout, и до сих пор сумел создать объекты летучих мышей и мячей, и они работают, как задумано. Я хотел бы реализовать кирпичную стену с использованием массива, поскольку создание каждого кирпича своим собственным объектом приведет к неэффективному коду, но мой опыт работы с Java не распространяется на массивы, и я понимаю, что в отличие от Python, они сложны чтобы начать работать.
Я бы хотел, чтобы кирпичи получили разные позиции на основе уже установленных параметров x и y.
Вот класс Model, в который я хотел бы добавить массив ;
public class Model
{
// First, a collection of useful values for calculating sizes and layouts etc.
public int B = 6; // Border round the edge of the panel
public int M = 40; // Height of menu bar space at the top
public int BALL_SIZE = 30; // Ball side
public int BRICK_WIDTH = 50; // Brick size
public int BRICK_HEIGHT = 30;
public int BAT_MOVE = 5; // Distance to move bat on each keypress
public int BALL_MOVE = 3; // Units to move the ball on each step
public int HIT_BRICK = 50; // Score for hitting a brick
public int HIT_BOTTOM = -200; // Score (penalty) for hitting the bottom of the screen
View view;
Controller controller;
public GameObj ball; // The ball
public ArrayList<GameObj> bricks; // The bricks
public GameObj bat; // The bat
public int score = 0; // The score
// variables that control the game
public boolean gameRunning = true; // Set false to stop the game
public boolean fast = false; // Set true to make the ball go faster
// initialisation parameters for the model
public int width; // Width of game
public int height; // Height of game
// CONSTRUCTOR - needs to know how big the window will be
public Model( int w, int h )
{
Debug.trace("Model::<constructor>");
width = w;
height = h;
}
// Initialise the game - reset the score and create the game objects
public void initialiseGame()
{
score = 0;
ball = new GameObj(width/2, height/2, BALL_SIZE, BALL_SIZE, Color.RED );
bat = new GameObj(width/2, height - BRICK_HEIGHT*3/2, BRICK_WIDTH*3,
BRICK_HEIGHT/4, Color.GRAY);
bricks = new ArrayList<>();
// ***HERE***
}
А вот соответствующий код, который я хотел бы добавить в класс View для рисования кубиков в графическом интерфейсе;
public void drawPicture()
{
// the ball movement is runnng 'i the background' so we have
// add the following line to make sure
synchronized( Model.class ) // Make thread safe (because the bal
{
GraphicsContext gc = canvas.getGraphicsContext2D();
// clear the canvas to redraw
gc.setFill( Color.WHITE );
gc.fillRect( 0, 0, width, height );
// update score
infoText.setText("BreakOut: Score = " + score);
// draw the bat and ball
displayGameObj( gc, ball ); // Display the Ball
displayGameObj( gc, bat ); // Display the Bat
// ***HERE***
}
}
Файл проекта .jar в его текущем состоянии можно посмотреть здесь .
На примечании стороны есть небольшая ошибка с летучей мышью, она не останавливается, когда ударяет в любую сторону, не уверенный, каков лучший путь к go о том, чтобы оно оставалось в пределах параметров окна.
Заранее спасибо !!