всё отрисовывает, но валидатор не принимает. Несколько часов бьюсь, не вижу проблемы. Вроде все просто, выполняю условия. Пробовал всякую дичь использовать, ни чего не помогает.
package com.javarush.task.task23.task2312;
import java.awt.event.KeyEvent;
public class Room {
private int width;
private int height;
private Snake snake;
private Mouse mouse;
public static Room game;
public Room(int width, int height, Snake snake) {
this.width = width;
this.height = height;
this.snake = snake;
game = this;
}
public Snake getSnake() {
return snake;
}
public Mouse getMouse() {
return mouse;
}
public int getWidth() {
return width;
}
public int getHeight() {
return height;
}
public void setWidth(int width) {
this.width = width;
}
public void setHeight(int height) {
this.height = height;
}
public void setSnake(Snake snake) {
this.snake = snake;
}
public void setMouse(Mouse mouse) {
this.mouse = mouse;
}
/**
* Основной цикл программы.
* Тут происходят все важные действия
*/
public void run() {
//Создаем объект "наблюдатель за клавиатурой" и стартуем его.
KeyboardObserver keyboardObserver = new KeyboardObserver();
keyboardObserver.start();
//пока змея жива
while (snake.isAlive()) {
//"наблюдатель" содержит события о нажатии клавиш?
if (keyboardObserver.hasKeyEvents()) {
KeyEvent event = keyboardObserver.getEventFromTop();
//Если равно символу 'q' - выйти из игры.
if (event.getKeyChar() == 'q') return;
//Если "стрелка влево" - сдвинуть фигурку влево
if (event.getKeyCode() == KeyEvent.VK_LEFT)
snake.setDirection(SnakeDirection.LEFT);
//Если "стрелка вправо" - сдвинуть фигурку вправо
else if (event.getKeyCode() == KeyEvent.VK_RIGHT)
snake.setDirection(SnakeDirection.RIGHT);
//Если "стрелка вверх" - сдвинуть фигурку вверх
else if (event.getKeyCode() == KeyEvent.VK_UP)
snake.setDirection(SnakeDirection.UP);
//Если "стрелка вниз" - сдвинуть фигурку вниз
else if (event.getKeyCode() == KeyEvent.VK_DOWN)
snake.setDirection(SnakeDirection.DOWN);
}
snake.move(); //двигаем змею
print(); //отображаем текущее состояние игры
sleep(); //пауза между ходами
}
System.out.println("Game Over!");
}
public void print() {
//Создаем массив, куда будем "рисовать" текущее состояние игры
//Рисуем все кусочки змеи
//Рисуем мышь
//Выводим все это на экран
//а) вывести на экран прямоугольник из точек размером width x height.
//б) тело змеи отметить символом "x"-английское
//в) голову змеи нарисовать символом "X"-английское.
//
//Подсказка:
//а) удобно сначала создать матрицу типа int[][] с размером (height x width)
//б) затем пройтись по всем объектам и отрисовать их в матрицу.
//Например, тело змеи - 1, голова змеи - 2, мышь - 3.
int[][] ints = new int [game.getHeight()][game.getWidth()];
// for (int i=0;i<game.getHeight();i++){
// for (int j=0;j<game.getWidth();j++) {
// ints[i][j]=0;
// }
// }
ints[game.snake.getSections().get(0).getX()][game.snake.getSections().get(0).getY()]=2;
for (int k=1;k<game.snake.getSections().size();k++) {
ints[game.snake.getSections().get(k).getX()][game.snake.getSections().get(k).getY()]=1;
}
ints[game.mouse.getX()][game.mouse.getY()]=3;
for (int i=0;i<game.getHeight();i++){
for (int j=0;j<game.getWidth();j++){
switch (ints[i][j]) {
case 0: {
System.out.print(".");
break;
}
case 1: {
System.out.print("x");
break;
}
case 2: {
System.out.print("X");
break;
}
case 3: {
System.out.print("^");
break;
}
}
}
System.out.println();
}
}
public void eatMouse() {
createMouse();
}
public void createMouse() {
int x = (int) (Math.random() * width);
int y = (int) (Math.random() * height);
mouse = new Mouse(x, y);
}
public static void main(String[] args) {
game = new Room(20, 20, new Snake(10, 10));
game.snake.setDirection(SnakeDirection.DOWN);
game.createMouse();
game.run();
}
public void sleep() {
int countSection = game.snake.getSections().size();
int speed = 0;
if (countSection==1) {
speed = 500;
}
// 500/8
else if ((countSection>1)&&(countSection < 11)) {
speed = 500-(countSection-1)*20;
} else if ((countSection > 10)&&(countSection < 15)) {
speed = 500-(countSection-1)*20;
} else speed = 200;
try {
Thread.sleep(speed);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
// делаем паузу, длинна которой зависит от длинны змеи
//Предлагаю тебе в этот раз написать специальный метод sleep(), который будет делать паузу
// в зависимости от длины змеи (количества элементов в sections).
//Придумай какой-нибудь хитрый алгоритм. Чтобы на первом уровне пауза была 500 миллисекунд,
//к 11 уровню постепенно уменьшилась до 300. А к 15 до 200. И дальше оставалась постоянной.
inst[j][i]
). Обратите внимание: первым индексом счетчик внутреннего цикла, вторым - внешнего. Лучше счетчики циклов назвать именами координат - код станет понятнее.