Переделал базовую на Java
This commit is contained in:
parent
c7b13068a1
commit
0a03f8b6d0
@ -1,32 +1,34 @@
|
||||
package MonorailHard;
|
||||
package MonorailHard.DrawningObjects;
|
||||
|
||||
import MonorailHard.DirectionType;
|
||||
import MonorailHard.Entities.EntityMonorail;
|
||||
import MonorailHard.MovementStrategy.IMoveableObject;
|
||||
import com.sun.source.tree.ImportTree;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.text.html.parser.Entity;
|
||||
import java.awt.*;
|
||||
import java.util.Random;
|
||||
|
||||
public class DrawningMonorail {
|
||||
|
||||
JPanel MonorailPanel;
|
||||
private EntityMonorail EntityMonorail;
|
||||
protected JPanel MonorailPanel;
|
||||
protected EntityMonorail EntityMonorail;
|
||||
private int _pictureWidth;
|
||||
private int _pictureHeight;
|
||||
private int _startPosX = 0;
|
||||
private int _startPosY = 0;
|
||||
private int _monorailWidth = 133;
|
||||
private int _monorailHeight = 50;
|
||||
private DrawningWheels DrawningWheels;
|
||||
protected int _startPosX;
|
||||
protected int _startPosY;
|
||||
protected int _monorailWidth = 133;
|
||||
protected int _monorailHeight = 50;
|
||||
public DrawningWheels DrawningWheels;
|
||||
|
||||
protected int wheelSz;
|
||||
|
||||
|
||||
public EntityMonorail EntityMonorail(){
|
||||
return EntityMonorail;
|
||||
}
|
||||
public boolean Init(int speed, double weight, Color bodyColor, Color wheelColor, Color tireColor, int wheelNumb,
|
||||
int width, int height, boolean secondCabine, boolean magniteRail, JPanel monorailPanel){
|
||||
public DrawningMonorail(int speed, double weight, Color bodyColor, Color wheelColor, Color tireColor,
|
||||
int width, int height, JPanel monorailPanel){
|
||||
if(width <= _monorailWidth || height <= _monorailHeight)
|
||||
return false;
|
||||
return;
|
||||
_startPosY=0;
|
||||
_startPosX = 0;
|
||||
monorailPanel.setSize(width, height);
|
||||
@ -35,14 +37,31 @@ public class DrawningMonorail {
|
||||
wheelSz = _monorailHeight - _monorailHeight * 7 / 10;
|
||||
_pictureWidth = width;
|
||||
_pictureHeight = height;
|
||||
EntityMonorail = new EntityMonorail();
|
||||
EntityMonorail.Init(speed, weight, bodyColor, wheelColor, tireColor, wheelNumb, secondCabine, magniteRail);
|
||||
EntityMonorail = new EntityMonorail(speed, weight, bodyColor, wheelColor, tireColor);
|
||||
int dif = _monorailWidth / 10;
|
||||
DrawningWheels = new DrawningWheels();
|
||||
DrawningWheels.Init(_monorailWidth - dif, _monorailHeight,_startPosX,_startPosY,wheelColor,tireColor,monorailPanel);
|
||||
DrawningWheels = new DrawningWheels(_monorailWidth - dif, _monorailHeight,_startPosX,_startPosY,wheelColor,tireColor,monorailPanel);
|
||||
Random rand = new Random();
|
||||
DrawningWheels.ChangeWheelsNumb(rand.nextInt(1, 6));
|
||||
return true;
|
||||
}
|
||||
|
||||
protected DrawningMonorail(int speed, double weight, Color bodyColor, Color wheelColor, Color tireColor,
|
||||
int width, int height, int monorailWidth, int monorailHeight, JPanel monorailPanel){
|
||||
if(width <= _monorailWidth || height <= _monorailHeight)
|
||||
return;
|
||||
_startPosY=0;
|
||||
_startPosX = 0;
|
||||
monorailPanel.setSize(width, height);
|
||||
MonorailPanel = monorailPanel;
|
||||
monorailPanel.paint(MonorailPanel.getGraphics());
|
||||
wheelSz = _monorailHeight - _monorailHeight * 7 / 10;
|
||||
_pictureWidth = width;
|
||||
_pictureHeight = height;
|
||||
_monorailWidth = monorailWidth;
|
||||
_monorailHeight = monorailHeight;
|
||||
EntityMonorail = new EntityMonorail(speed, weight, bodyColor, wheelColor, tireColor);
|
||||
int dif = _monorailWidth / 10;
|
||||
DrawningWheels = new DrawningWheels(_monorailWidth - dif, _monorailHeight,_startPosX,_startPosY,wheelColor,tireColor,monorailPanel);
|
||||
DrawningWheels.ChangeWheelsNumb(2);
|
||||
}
|
||||
|
||||
public void SetPosition(int x, int y){
|
||||
@ -50,14 +69,43 @@ public class DrawningMonorail {
|
||||
return;
|
||||
_startPosX = x;
|
||||
_startPosY = y;
|
||||
if(x + _monorailWidth <= _pictureWidth|| y + _monorailHeight <= _pictureHeight){
|
||||
if(x + _monorailWidth >= _pictureWidth|| y + _monorailHeight >= _pictureHeight || x < 0 || y < 0){
|
||||
_startPosX = 0;
|
||||
_startPosY = 0;
|
||||
}
|
||||
}
|
||||
|
||||
public void MoveTransport(DirectionType direction){
|
||||
public int GetPosX(){return _startPosX;}
|
||||
public int GetPosY(){return _startPosY;}
|
||||
public int GetWidth(){return _monorailWidth;}
|
||||
public int GetHeight(){return _monorailHeight;}
|
||||
public boolean CanMove(DirectionType direction)
|
||||
{
|
||||
if (EntityMonorail == null)
|
||||
return false;
|
||||
boolean can = false;
|
||||
switch (direction)
|
||||
{
|
||||
case Left:
|
||||
can = _startPosX - EntityMonorail.Step() >= 0;
|
||||
break;
|
||||
case Right:
|
||||
can = _startPosX + EntityMonorail.Step() < _pictureWidth;
|
||||
break;
|
||||
case Down:
|
||||
can = _startPosX + EntityMonorail.Step() < _pictureHeight;
|
||||
break;
|
||||
case Up:
|
||||
can = _startPosX - EntityMonorail.Step() >= 0;
|
||||
break;
|
||||
};
|
||||
return can;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void MoveTransport(DirectionType direction){
|
||||
if (!CanMove(direction) || EntityMonorail == null)
|
||||
return;
|
||||
MonorailPanel.paint(MonorailPanel.getGraphics());
|
||||
switch (direction)
|
||||
@ -65,26 +113,18 @@ public class DrawningMonorail {
|
||||
case Left:
|
||||
if (_startPosX - EntityMonorail.Step() >= 0)
|
||||
_startPosX -= (int)EntityMonorail.Step();
|
||||
else
|
||||
_startPosX = 0;
|
||||
break;
|
||||
case Up:
|
||||
if (_startPosY - EntityMonorail.Step() >= 0)
|
||||
_startPosY -= (int)EntityMonorail.Step();
|
||||
else
|
||||
_startPosY = 0;
|
||||
break;
|
||||
case Right:
|
||||
if (_startPosX + EntityMonorail.Step() + _monorailWidth < _pictureWidth)
|
||||
_startPosX += (int)EntityMonorail.Step();
|
||||
else
|
||||
_startPosX = _pictureWidth - _monorailWidth;
|
||||
break;
|
||||
case Down:
|
||||
if (_startPosY + EntityMonorail.Step() + _monorailHeight < _pictureHeight)
|
||||
_startPosY += (int)EntityMonorail.Step();
|
||||
else
|
||||
_startPosY = _pictureHeight - _monorailHeight;
|
||||
break;
|
||||
}
|
||||
DrawningWheels.CurX = _startPosX;
|
||||
@ -193,43 +233,8 @@ public class DrawningMonorail {
|
||||
g2d.fillRect(rightRect.x, rightRect.y, rightRect.width, rightRect.height);
|
||||
g2d.setColor(Color.BLUE);
|
||||
g2d.drawRect(rightRect.x, rightRect.y, rightRect.width, rightRect.height);
|
||||
|
||||
//вторая кабина
|
||||
if (EntityMonorail.SecondCabine())
|
||||
{
|
||||
int[] pointsSecondCabineX = { _startPosX + _monorailWidth / 20 * 19,
|
||||
_startPosX + _monorailWidth + dif,
|
||||
_startPosX + _monorailWidth + dif,
|
||||
_startPosX + _monorailWidth / 20 * 19};
|
||||
int[] pointsSecondCabineY = { _startPosY + _monorailHeight / 10,
|
||||
_startPosY + _monorailHeight / 5 * 2,
|
||||
_startPosY + _monorailHeight / 10 * 7,
|
||||
_startPosY + _monorailHeight / 10 * 7};
|
||||
g2d.setColor(EntityMonorail.BodyColor());
|
||||
g2d.fillPolygon(pointsSecondCabineX, pointsSecondCabineY, pointsSecondCabineX.length);
|
||||
g2d.setColor(Color.BLACK);
|
||||
g2d.drawPolygon(pointsSecondCabineX, pointsSecondCabineY, pointsSecondCabineX.length);
|
||||
Rectangle Rect = new Rectangle();
|
||||
Rect.x = _startPosX + _monorailWidth / 20 * 19;
|
||||
Rect.y = _startPosY + _monorailHeight / 25 * 4 + _monorailHeight / 50 * 3;
|
||||
Rect.width = _monorailWidth / 120 * 6;
|
||||
Rect.height = _monorailHeight / 50 * 7;
|
||||
g2d.setColor(Color.WHITE);
|
||||
g2d.fillRect(Rect.x, Rect.y, Rect.width, Rect.height);
|
||||
g2d.setColor(Color.BLUE);
|
||||
g2d.drawRect(Rect.x, Rect.y, Rect.width, Rect.height);
|
||||
}
|
||||
//колеса
|
||||
DrawningWheels.DrawWheels();
|
||||
|
||||
_monorailWidth+=dif;
|
||||
|
||||
//магнитная линия
|
||||
if (EntityMonorail.MagniteRail())
|
||||
{
|
||||
g2d.setColor(Color.BLACK);
|
||||
g2d.drawLine(_startPosX, _startPosY + _monorailHeight, _startPosX + _monorailWidth, _startPosY + _monorailHeight);
|
||||
_monorailWidth += dif;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,4 +1,6 @@
|
||||
package MonorailHard;
|
||||
package MonorailHard.DrawningObjects;
|
||||
|
||||
import MonorailHard.NumberType;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
@ -14,7 +16,7 @@ public class DrawningWheels {
|
||||
return WheelSz;
|
||||
}
|
||||
|
||||
boolean Init(int width, int height, int curX, int curY, Color wheelColor, Color tireColor, JPanel monorailPanel){
|
||||
public DrawningWheels(int width, int height, int curX, int curY, Color wheelColor, Color tireColor, JPanel monorailPanel){
|
||||
Width = width;
|
||||
Height = height;
|
||||
CurX = curX;
|
||||
@ -23,7 +25,6 @@ public class DrawningWheels {
|
||||
TireColor = tireColor;
|
||||
WheelSz = Height - Height * 7 / 10;
|
||||
MonorailPanel = monorailPanel;
|
||||
return true;
|
||||
}
|
||||
|
||||
public void ChangeWheelsNumb(int x){
|
@ -1,20 +1,15 @@
|
||||
package MonorailHard;
|
||||
package MonorailHard.Entities;
|
||||
import java.awt.*;
|
||||
|
||||
public class EntityMonorail {
|
||||
private int Speed, WheelNumb;
|
||||
private int Speed;
|
||||
private double Weight, Step;
|
||||
private Color BodyColor, WheelColor, TireColor;
|
||||
private boolean MagniteRail;
|
||||
private boolean SecondCabine;
|
||||
|
||||
public int Speed(){
|
||||
return Speed;
|
||||
}
|
||||
|
||||
public int WheelNumb(){
|
||||
return WheelNumb;
|
||||
}
|
||||
public double Weight(){
|
||||
return Weight;
|
||||
}
|
||||
@ -30,18 +25,12 @@ public class EntityMonorail {
|
||||
public Color TireColor(){
|
||||
return TireColor;
|
||||
}
|
||||
public boolean SecondCabine(){return SecondCabine;}
|
||||
public boolean MagniteRail(){return MagniteRail;}
|
||||
public void Init(int speed, double weight, Color bodyColor, Color wheelColor, Color tireColor, int wheelNumb,
|
||||
boolean secondCabine, boolean magniteRail){
|
||||
public EntityMonorail(int speed, double weight, Color bodyColor, Color wheelColor, Color tireColor){
|
||||
Speed = speed;
|
||||
Weight = weight;
|
||||
Step = (double)Speed * 100 / Weight;
|
||||
BodyColor = bodyColor;
|
||||
WheelColor = wheelColor;
|
||||
TireColor = tireColor;
|
||||
WheelNumb = wheelNumb;
|
||||
SecondCabine = secondCabine;
|
||||
MagniteRail = magniteRail;
|
||||
}
|
||||
}
|
@ -1,4 +1,8 @@
|
||||
package MonorailHard;
|
||||
import MonorailHard.DrawningObjects.DrawningLocomotive;
|
||||
import MonorailHard.DrawningObjects.DrawningMonorail;
|
||||
import MonorailHard.MovementStrategy.*;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
@ -10,14 +14,20 @@ import javax.imageio.ImageIO;
|
||||
import javax.swing.*;
|
||||
|
||||
public class Main {
|
||||
static DrawningMonorail DrawningMonorail;
|
||||
static AbstractStrategy _abstractStrategy;
|
||||
public static void main(String[] args) throws IOException {
|
||||
String[] items = {"Довести до центра", "Довести до края"};
|
||||
|
||||
JComboBox comboBoxStrategy = new JComboBox(items);
|
||||
comboBoxStrategy.setBounds(562,12,151,28);
|
||||
JFrame MonorailFrame = new JFrame();
|
||||
MonorailFrame.setResizable(false);
|
||||
JPanel MonorailPanel = new JPanel();
|
||||
MonorailFrame.setLayout(new BorderLayout());
|
||||
MonorailFrame.setSize(900, 500);
|
||||
MonorailFrame.setSize(743, 576);
|
||||
MonorailFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
MonorailFrame.setLayout(new BorderLayout(1,1));
|
||||
DrawningMonorail DrawningMonorail = new DrawningMonorail();
|
||||
MonorailPanel.setLayout(null);
|
||||
BufferedImage RightIcon = ImageIO.read(new File("RightButton.png"));
|
||||
BufferedImage LeftIcon = ImageIO.read(new File("LeftButton.png"));
|
||||
@ -29,36 +39,100 @@ public class Main {
|
||||
JButton UpButton = new JButton(new ImageIcon(UpIcon));
|
||||
JButton DownButton = new JButton(new ImageIcon(DownIcon));
|
||||
JButton CreateButton = new JButton();
|
||||
JButton CreateLocomotiveButton = new JButton();
|
||||
JButton buttonStep = new JButton();
|
||||
|
||||
CreateLocomotiveButton.setBounds(198,477,180, 40);
|
||||
CreateLocomotiveButton.setText("Создать локомотив");
|
||||
CreateButton.setText("Создать");
|
||||
CreateButton.setBounds(12, 401, 90, 40);
|
||||
RightButton.setBounds(840,411,30,30);
|
||||
LeftButton.setBounds(768,411,30,30);
|
||||
UpButton.setBounds(804,375,30,30);
|
||||
DownButton.setBounds(804,411,30,30);
|
||||
buttonStep.setBounds(619, 46, 94, 29);
|
||||
buttonStep.setText("шаг");
|
||||
CreateButton.setBounds(12, 477, 180, 40);
|
||||
RightButton.setBounds(683,487,30,30);
|
||||
LeftButton.setBounds(611,487,30,30);
|
||||
UpButton.setBounds(647,451,30,30);
|
||||
DownButton.setBounds(647,487,30,30);
|
||||
MonorailPanel.add(CreateButton);
|
||||
MonorailPanel.add(CreateLocomotiveButton);
|
||||
MonorailPanel.add(RightButton);
|
||||
MonorailPanel.add(LeftButton);
|
||||
MonorailPanel.add(UpButton);
|
||||
MonorailPanel.add(DownButton);
|
||||
MonorailPanel.add(comboBoxStrategy);
|
||||
MonorailPanel.add(buttonStep);
|
||||
comboBoxStrategy.setSelectedIndex(-1);
|
||||
|
||||
|
||||
MonorailFrame.add(MonorailPanel, BorderLayout.CENTER);
|
||||
Random random = new Random();
|
||||
CreateButton.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
DrawningMonorail.Init(random.nextInt(100, 300), random.nextDouble(1000, 3000),
|
||||
DrawningMonorail = new DrawningMonorail(random.nextInt(100, 300), random.nextDouble(1000, 3000),
|
||||
Color.getHSBColor(random.nextInt(0, 301), random.nextInt(0, 301), random.nextInt(0, 301)),
|
||||
Color.getHSBColor(random.nextInt(0, 301), random.nextInt(0, 301), random.nextInt(0, 301)),
|
||||
Color.getHSBColor(random.nextInt(0, 301), random.nextInt(0, 301), random.nextInt(0, 301)),
|
||||
random.nextInt(2, 5),
|
||||
MonorailPanel.getWidth(), MonorailPanel.getHeight(), random.nextBoolean(), random.nextBoolean(), MonorailPanel);
|
||||
MonorailPanel.getWidth(), MonorailPanel.getHeight(), MonorailPanel);
|
||||
DrawningMonorail.DrawMonorail();
|
||||
comboBoxStrategy.enable(true);
|
||||
}
|
||||
});
|
||||
|
||||
CreateLocomotiveButton.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
DrawningMonorail = new DrawningLocomotive(random.nextInt(100, 300), random.nextDouble(1000, 3000),
|
||||
Color.getHSBColor(random.nextInt(0, 301), random.nextInt(0, 301), random.nextInt(0, 301)),
|
||||
Color.getHSBColor(random.nextInt(0, 301), random.nextInt(0, 301), random.nextInt(0, 301)),
|
||||
Color.getHSBColor(random.nextInt(0, 301), random.nextInt(0, 301), random.nextInt(0, 301)),
|
||||
random.nextInt(1, 6),
|
||||
MonorailPanel.getWidth(), MonorailPanel.getHeight(), random.nextBoolean(), random.nextBoolean(),
|
||||
Color.getHSBColor(random.nextInt(0, 301), random.nextInt(0, 301), random.nextInt(0, 301)),
|
||||
MonorailPanel);
|
||||
DrawningMonorail.DrawMonorail();
|
||||
comboBoxStrategy.enable(true);
|
||||
}
|
||||
});
|
||||
|
||||
buttonStep.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if(DrawningMonorail == null)
|
||||
return;
|
||||
if(comboBoxStrategy.isEnabled()){
|
||||
if(comboBoxStrategy.getSelectedIndex() == 0)
|
||||
_abstractStrategy = new MoveToCenter();
|
||||
else if(comboBoxStrategy.getSelectedIndex() == 1)
|
||||
_abstractStrategy = new MoveToBorder();
|
||||
else
|
||||
_abstractStrategy = null;
|
||||
if(_abstractStrategy == null)
|
||||
return;
|
||||
_abstractStrategy.SetData(new DrawningObjectMonorail(DrawningMonorail), MonorailPanel.getWidth(),
|
||||
MonorailPanel.getHeight());
|
||||
comboBoxStrategy.enable(false);
|
||||
}
|
||||
if (_abstractStrategy == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
_abstractStrategy.MakeStep();
|
||||
DrawningMonorail.DrawMonorail();
|
||||
if (_abstractStrategy.GetStatus() == Status.Finish)
|
||||
{
|
||||
comboBoxStrategy.enable(true);
|
||||
_abstractStrategy = null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
RightButton.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if(DrawningMonorail.EntityMonorail() == null)
|
||||
if(DrawningMonorail.EntityMonorail() == null) {
|
||||
return;
|
||||
}
|
||||
DrawningMonorail.MoveTransport(DirectionType.Right);
|
||||
DrawningMonorail.DrawMonorail();
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ public abstract class AbstractStrategy {
|
||||
private int FieldWidth;
|
||||
protected int FieldWidth(){return FieldWidth;}
|
||||
private int FieldHeight;
|
||||
protected int FieldHeight(){return FieldWidth;}
|
||||
protected int FieldHeight(){return FieldHeight;}
|
||||
public Status GetStatus() { return _state; }
|
||||
public void SetData(IMoveableObject moveableObject, int width, int
|
||||
height)
|
||||
@ -29,7 +29,7 @@ public abstract class AbstractStrategy {
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (IsTargetDestinaion())
|
||||
if (IsTargetDestination())
|
||||
{
|
||||
_state = Status.Finish;
|
||||
return;
|
||||
@ -57,8 +57,19 @@ public abstract class AbstractStrategy {
|
||||
|
||||
protected abstract void MoveToTarget();
|
||||
|
||||
protected abstract boolean IsTargetDestinaion();
|
||||
protected abstract boolean IsTargetDestination();
|
||||
|
||||
private
|
||||
private boolean MoveTo(DirectionType directionType) {
|
||||
if (_state != Status.InProgress)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (_moveableObject.CheckCanMove(directionType))
|
||||
{
|
||||
_moveableObject.MoveObject(directionType);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user