Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2013, 19:53   #1
spinogryz_ua
Форумчанин
 
Аватар для spinogryz_ua
 
Регистрация: 14.01.2012
Сообщений: 150
По умолчанию Движение фмигуры (Java(Eclipse))

Вот уже 2-й день мучаюсь и никак не могу что бы моя фигура(вагон) двигался туда куда мне нужно. Когда нажимаю кнопку "вниз" а потом "вверх" мне нужно что бы вагон стал слева вверху, поднялся вверх, развернулся и поехал влево. А он у меня постоянно то вниз то вправо то еще куда то.

Помогите пожалуйста.
spinogryz_ua вне форума Ответить с цитированием
Старый 17.03.2013, 19:54   #2
spinogryz_ua
Форумчанин
 
Аватар для spinogryz_ua
 
Регистрация: 14.01.2012
Сообщений: 150
По умолчанию

вот мой код:
Код:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

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

public class Start {
	static int VAGON_HEIGHT=24,VAGON_WIDTH=45, VAGON_DISTANCE=5;
	static JFrame a = new JFrame();
	static Vagon one;
	static List<Vagon> vagonsRight = new ArrayList<Vagon>();
	static List<Vagon> vagonsLeft = new ArrayList<Vagon>();
	static List<Vagon> vagonsDown = new ArrayList<Vagon>();
	static int VELOCITY=2;

	public static void main(String[] args) {
		final JFrame vikno = new JFrame("Kursova robota");
		vikno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		vikno.setSize(720, 500);

		final JPanel panelCenter = new JPanel();
		panelCenter.setLayout(null);
		vikno.getContentPane().add(panelCenter, BorderLayout.CENTER);

		JButton buttonDirect = new JButton("Прямо");
		panelCenter.add(buttonDirect);
		buttonDirect.setBounds(500, 50, 80, 15);

		JButton buttonDown = new JButton("Вниз");
		panelCenter.add(buttonDown);
		buttonDown.setBounds(500, 65, 80, 15);
		
		JButton buttonUp = new JButton("Вгору");
		panelCenter.add(buttonUp);
		buttonUp.setBounds(220, 270, 80, 15);

		vikno.setLocationRelativeTo(null);
		vikno.setVisible(true);

		Random rand = new Random();

		int black =0, white=0;
		for (int i = 0; i < 4; i++) {
			int thisRand=rand.nextInt(2);
			if ( thisRand == 0 && black<2){
				one = new Vagon(Color.BLACK);
				black++;
			}
			else
				if (thisRand == 1 && white<2){
					one = new Vagon(Color.WHITE);
					white++;
				}
				else
					if (black<2){
						one = new Vagon(Color.BLACK);
						black++;
					}
					else {
						one = new Vagon(Color.WHITE);
						white++;
					}
			vagonsRight.add(one);
			panelCenter.add(one);
			one.setBounds(i * 50 + 500, 10, VAGON_WIDTH, VAGON_HEIGHT);
		}

		buttonDirect.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (vagonsRight.size() > 0) {
					final Vagon vagon = vagonsRight.get(0);
					class Move implements Runnable {
						public void run() {
							for (int i = 0; i<495/VELOCITY; i++) {
								vagon.setBounds(vagon.getX() - VELOCITY, vagon.getY(),	VAGON_WIDTH, VAGON_HEIGHT);
								try {
									Thread.sleep(10);
								} catch (InterruptedException e1) {
									e1.printStackTrace();
								}
							}
						}
					}
					new Thread(new Move()).start();
					vagonsLeft.add(vagonsRight.remove(0));
				}
			}
		});

		buttonDown.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (vagonsRight.size() > 0) {
					final Vagon vagon = vagonsRight.get(0);
					class Move implements Runnable {
						public void run() {
							System.out.println("vagon.getX()="+vagon.getX());
							int vagonWidth=VAGON_WIDTH, vagonHeight=VAGON_HEIGHT, dx=VELOCITY, dy=0;
							int turnI=180/VELOCITY+(VAGON_WIDTH+VAGON_DISTANCE)/VELOCITY*(4-vagonsRight.size()-1);
							System.out.println(""+turnI);
							for (int i = 0; i < 220; i++) {
								if (i==turnI){
									System.out.println("vagon.getX() rotated="+vagon.getX());
									int temp=vagonWidth;
									vagonWidth=vagonHeight;
									vagonHeight=temp;
									dx=0; dy=VELOCITY;
								}
								vagon.setBounds(vagon.getX() - dx, vagon.getY() + dy, vagonWidth, vagonHeight);
								try {
									Thread.sleep(10);
								} catch (InterruptedException e1) {
									e1.printStackTrace();
								}
							}
						}
					}
					new Thread(new Move()).start();
					vagonsDown.add(vagonsRight.remove(0));
				}
			}
		});
		
		buttonUp.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (vagonsDown.size() > 0) {
					final Vagon vagon = vagonsDown.get(0);
					class Move implements Runnable {
						public void run() {
							System.out.println("vagon.getX()="+vagon.getX());
							int vagonWidth=VAGON_WIDTH, vagonHeight=VAGON_HEIGHT, dx=VELOCITY, dy=0;
							int turnI=180/VELOCITY+(VAGON_WIDTH+VAGON_DISTANCE)/VELOCITY*(4-vagonsDown.size()-1);
							System.out.println(""+turnI);
							for (int i = 0; i < 220; i++) {
								if (i==160){
									System.out.println("vagon.getX() rotated="+vagon.getX());
									int temp=vagonHeight;
									vagonHeight=vagonWidth;
									vagonWidth=temp;
									dx=0; dy=VELOCITY;
								}
								vagon.setBounds(vagon.getX()+1, vagon.getY() - dy, vagonWidth, vagonHeight);
								try {
									Thread.sleep(10);
								} catch (InterruptedException e1) {
									e1.printStackTrace();
								}
							}
						}
					}
					new Thread(new Move()).start();
					vagonsLeft.add(vagonsDown.remove(0));
				}
			}
		});

	}

}

Последний раз редактировалось spinogryz_ua; 17.03.2013 в 20:15.
spinogryz_ua вне форума Ответить с цитированием
Старый 17.03.2013, 19:54   #3
spinogryz_ua
Форумчанин
 
Аватар для spinogryz_ua
 
Регистрация: 14.01.2012
Сообщений: 150
По умолчанию

Код:
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;

public class Vagon extends JPanel {
	Color color;
	
	Vagon(Color color){
		this.color=color;	
	}
	public void paint(Graphics g){
		g.setColor(color);
		g.fillRect(0, 0, getWidth(), getHeight());
	}
	public Color getColor() {
		return color;
	}
	public void setColor(Color color) {
		this.color = color;
	}

}
Заранее благодарю за помощь, буду очень признателен.
spinogryz_ua вне форума Ответить с цитированием
Старый 17.03.2013, 20:04   #4
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

На свинге что ли?
А где каменты?

Последний раз редактировалось Carbon; 17.03.2013 в 20:06.
Carbon вне форума Ответить с цитированием
Старый 17.03.2013, 20:07   #5
spinogryz_ua
Форумчанин
 
Аватар для spinogryz_ua
 
Регистрация: 14.01.2012
Сообщений: 150
По умолчанию

С комментариями превішает максимально допустимое число символов.

Последний раз редактировалось spinogryz_ua; 17.03.2013 в 20:15.
spinogryz_ua вне форума Ответить с цитированием
Старый 17.03.2013, 20:22   #6
spinogryz_ua
Форумчанин
 
Аватар для spinogryz_ua
 
Регистрация: 14.01.2012
Сообщений: 150
По умолчанию

Код:
buttonUp.addActionListener(new ActionListener() { // обработчик кнопки "вверх"
			public void actionPerformed(ActionEvent e) {
				if (vagonsDown.size() > 0) {
					final Vagon vagon = vagonsDown.get(0);
					class Move implements Runnable {
						public void run() {
							System.out.println("vagon.getX()="+vagon.getX());
							int vagonWidth=VAGON_WIDTH, vagonHeight=VAGON_HEIGHT, dx=VELOCITY, dy=0;
							int turnI=180/VELOCITY+(VAGON_WIDTH+VAGON_DISTANCE)/VELOCITY*(4-vagonsDown.size()-1);
							System.out.println(""+turnI);
							for (int i = 0; i < 220; i++) { //вагон сделает 220 прохождений по turnI пикселей
								if (i==160){// на 160-ом прохождении вагон повернется на 90 градусов
									System.out.println("vagon.getX() rotated="+vagon.getX());
									int temp=vagonHeight;
									vagonHeight=vagonWidth;
									vagonWidth=temp;
									dx=0; dy=VELOCITY;
								}
								vagon.setBounds(vagon.getX()+1, vagon.getY() - dy, vagonWidth, vagonHeight);
								try {
									Thread.sleep(10);
								} catch (InterruptedException e1) {
									e1.printStackTrace();
								}
							}
						}
					}
					new Thread(new Move()).start();
					vagonsLeft.add(vagonsDown.remove(0));
				}
			}
		});

Последний раз редактировалось spinogryz_ua; 17.03.2013 в 20:33.
spinogryz_ua вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Eclipse juno + Java ME alex171069 Java Мобильная разработка (Android) 0 18.10.2012 06:31
Java eclipse опубликовать проект kaljan775 Помощь студентам 0 25.01.2012 12:16
Java в eclipse raIto Помощь студентам 0 27.05.2011 17:00
Java - сервлеты, Eclipse FreshBreeze Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC) 7 19.10.2009 12:49