Skip to content

Commit

Permalink
new solved tasks
Browse files Browse the repository at this point in the history
  • Loading branch information
proshchenkodv committed Sep 5, 2019
1 parent 746f63b commit c76b17f
Show file tree
Hide file tree
Showing 22 changed files with 347 additions and 128 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.javarush.task.task23.task2301;

/*
Запрети наследование
*/
public class Solution {

public final static class Listener {
public void onMouseDown(int x, int y) {
// Do something when the mouse down event occurs
}

public void onMouseUp(int x, int y) {
// Do something when the mouse up event occurs
}
}

public static void main(String[] args) {

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
taskKey="com.javarush.task.task23.task2301"\n\nЗапрети наследование

Запрети наследование от класса Listener.


Требования:
1. Класс Listener должен быть создан внутри класса Solution.
2. Класс Listener должен быть публичным.
3. Класс Listener должен быть статическим.
4. Должна быть запрещена возможность стать потомком класса Listener.


Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.javarush.task.task23.task2302;

/*
Запрети переопределение
*/
public class Solution {

public static class Listener {
public final void onMouseDown(int x, int y) {
// Do something when the mouse down event occurs
}

public void onMouseUp(int x, int y) {
// Do something when the mouse up event occurs
}
}

public static void main(String[] args) {

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
taskKey="com.javarush.task.task23.task2302"\n\nЗапрети переопределение

Запрети переопределение метода onMouseDown.


Требования:
1. Класс Listener должен быть создан внутри класса Solution.
2. Класс Listener должен быть публичным.
3. Метод onMouseDown должен быть публичным.
4. Должна быть запрещена возможность переопределить метод onMouseDown.


Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.javarush.task.task23.task2303;

/*
Запрети создание экземпляров класса
*/
public class Solution {

public abstract static class Listener {
public void onMouseDown(int x, int y) {
// Do something when the mouse down event occurs
}

public void onMouseUp(int x, int y) {
// Do something when the mouse up event occurs
}
}

public static void main(String[] args) {

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
taskKey="com.javarush.task.task23.task2303"\n\nЗапрети создание экземпляров класса

Запрети создание экземпляров класса Listener.


Требования:
1. Класс Listener должен быть создан внутри класса Solution.
2. Класс Listener должен быть публичным.
3. Класс Listener должен быть статическим.
4. Должна быть запрещена возможность создавать экземпляры класса Listener.


Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,20 @@

import javax.swing.*;
import java.awt.*;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;

import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

public class KeyboardObserver extends Thread
{
public class KeyboardObserver extends Thread {
private Queue<KeyEvent> keyEvents = new ArrayBlockingQueue<KeyEvent>(100);

private JFrame frame;

@Override
public void run()
{
public void run() {
frame = new JFrame("KeyPress Tester");
frame.setTitle("Transparent JFrame Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Expand All @@ -31,50 +28,41 @@ public void run()
frame.setOpacity(0.0f);
frame.setVisible(true);

frame.addFocusListener(new FocusListener()
{
frame.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e)
{
public void focusGained(FocusEvent e) {
//do nothing
}

@Override
public void focusLost(FocusEvent e)
{
public void focusLost(FocusEvent e) {
System.exit(0);
}
});


frame.addKeyListener(new KeyListener()
{
frame.addKeyListener(new KeyListener() {

public void keyTyped(KeyEvent e)
{
public void keyTyped(KeyEvent e) {
//do nothing
}

public void keyReleased(KeyEvent e)
{
public void keyReleased(KeyEvent e) {
//do nothing
}

public void keyPressed(KeyEvent e)
{
public void keyPressed(KeyEvent e) {
keyEvents.add(e);
}
});
}


public boolean hasKeyEvents()
{
public boolean hasKeyEvents() {
return !keyEvents.isEmpty();
}

public KeyEvent getEventFromTop()
{
public KeyEvent getEventFromTop() {
return keyEvents.poll();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,8 +142,6 @@ public void createMouse() {
}




public static Room game;

public static void main(String[] args) {
Expand All @@ -153,7 +151,6 @@ public static void main(String[] args) {
game.run();
}


private int initialDelay = 520;
private int delayStep = 20;

Expand Down
120 changes: 75 additions & 45 deletions 3.JavaMultithreading/src/com/javarush/task/task23/task2312/Snake.java
Original file line number Diff line number Diff line change
@@ -1,21 +1,36 @@
package com.javarush.task.task23.task2312;

import java.util.ArrayList;
import java.util.List;

/**
* Класс змея
*/
public class Snake {
private List<SnakeSection> sections;
private boolean isAlive;
// Направление движения змеи
private SnakeDirection direction;
// Состояние - жива змея или нет.
private boolean isAlive;
// Список кусочков змеи.
private ArrayList<SnakeSection> sections;

public List<SnakeSection> getSections() {
return sections;
public Snake(int x, int y) {
sections = new ArrayList<SnakeSection>();
sections.add(new SnakeSection(x, y));
isAlive = true;
}

public boolean isAlive() {
return isAlive;
}

public int getX() {
return sections.get(0).getX();
}

public int getY() {
return sections.get(0).getY();
}

public SnakeDirection getDirection() {
return direction;
}
Expand All @@ -24,57 +39,72 @@ public void setDirection(SnakeDirection direction) {
this.direction = direction;
}

public void move(int dx, int dy) {
SnakeSection head = new SnakeSection(sections.get(0).getX()+dx, sections.get(0).getY()+dy);
checkBorders(head);
checkBody(head);
if (isAlive) {
sections.add(0, head);
if(sections.get(0).getX() != Room.game.getMouse().getX() || sections.get(0).getY() != Room.game.getMouse().getY()) sections.remove(sections.size()-1);
else Room.game.eatMouse();
}

public ArrayList<SnakeSection> getSections() {
return sections;
}

public Snake(int x, int y) {
sections = new ArrayList<SnakeSection>();
sections.add(new SnakeSection(x, y));
isAlive = true;
}
/**
* Метод перемещает змею на один ход.
* Направление перемещения задано переменной direction.
*/
public void move() {
if (!isAlive) return;

public int getX() {
return sections.get(0).getX();
if (direction == SnakeDirection.UP)
move(0, -1);
else if (direction == SnakeDirection.RIGHT)
move(1, 0);
else if (direction == SnakeDirection.DOWN)
move(0, 1);
else if (direction == SnakeDirection.LEFT)
move(-1, 0);
}

public int getY() {
return sections.get(0).getY();
}
/**
* Метод перемещает змею в соседнюю клетку.
* Координаты клетки заданы относительно текущей головы с помощью переменных (dx, dy).
*/
private void move(int dx, int dy) {
// Создаем новую голову - новый "кусочек змеи".
SnakeSection head = sections.get(0);
head = new SnakeSection(head.getX() + dx, head.getY() + dy);

public void move() {
if (isAlive()) {
switch (direction) {
case UP:
move(0, -1);
break;
case DOWN:
move(0, 1);
break;
case LEFT:
move(-1, 0);
break;
case RIGHT:
move(1, 0);
}
// Проверяем - не вылезла ли голова за границу комнаты
checkBorders(head);
if (!isAlive) return;

// Проверяем - не пересекает ли змея саму себя
checkBody(head);
if (!isAlive) return;

// Проверяем - не съела ли змея мышь.
Mouse mouse = Room.game.getMouse();
if (head.getX() == mouse.getX() && head.getY() == mouse.getY()) // съела
{
sections.add(0, head); // Добавили новую голову
Room.game.eatMouse(); // Хвост не удаляем, но создаем новую мышь.
} else // просто движется
{
sections.add(0, head); // добавили новую голову
sections.remove(sections.size() - 1); // удалили последний элемент с хвоста
}
}

public void checkBorders(SnakeSection head) {
if (head.getY() < 0 || head.getY() >= Room.game.getHeight() || head.getX() < 0 || head.getX() >= Room.game.getWidth())
/**
* Метод проверяет - находится ли новая голова в пределах комнаты
*/
private void checkBorders(SnakeSection head) {
if ((head.getX() < 0 || head.getX() >= Room.game.getWidth()) || head.getY() < 0 || head.getY() >= Room.game.getHeight()) {
isAlive = false;
}
}

public void checkBody(SnakeSection head) {
if (sections.contains(head)) isAlive = false;
/**
* Метод проверяет - не совпадает ли голова с каким-нибудь участком тела змеи.
*/
private void checkBody(SnakeSection head) {
if (sections.contains(head)) {
isAlive = false;
}
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.javarush.task.task23.task2312;


public enum SnakeDirection {
UP,
RIGHT,
Expand Down
Loading

0 comments on commit c76b17f

Please sign in to comment.