2016-11-12 2 views
-2

Идея состоит в том, что головоломка перестановки находится на поверхности тора. Я установил его так, чтобы вы перемещали фигуры, нажимая Q, W, E, D. Проблема заключается в том, что при объединении горизонтальных и вертикальных перемещений числа (представляющие цвета) перекрываются. Позже я хочу иметь 1 и 2 цвета частей и сделать его больше, но прямо сейчас мне нужно изменить код, чтобы сделать его более простым и для него работать правильно. Любое предложение или комментарий помогут. Благодарю.Мне нужна помощь, чтобы моя простая 2D-головоломка работала

package project; 

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.Timer; 

//KeyListener is use with keyboard 
public class main extends JPanel implements ActionListener, KeyListener 
{ 
    Timer tm = new Timer(1, this); //for animation 
    int a1 = 100, b1 = 100; //(a,b) 
    int a2 = 200, b2 = 100; 
    int a3 = 300, b3 = 100; 
    int a4 = 400, b4 = 100; 

    int a5 = 100, b5 = 200; 
    int a6 = 200, b6 = 200; 
    int a7 = 300, b7 = 200; 
    int a8 = 400, b8 = 200; 

    int a9 = 100, b9 = 300; 
    int a10 = 200, b10 = 300; 
    int a11 = 300, b11 = 300; 
    int a12 = 400, b12 = 300; 

    int a13 = 100, b13 = 400; 
    int a14 = 200, b14 = 400; 
    int a15 = 300, b15 = 400; 
    int a16 = 400, b16 = 400; 

    public main() 
    { 
     tm.start(); //starts timer 
     addKeyListener(this); //this refearing to KeyListener 
     setFocusable(true); //enable KeyListener 
     setFocusTraversalKeysEnabled(false); //shift or tab is not use so F 
    } 

    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     this.setBackground(Color.black); 

     g.setColor(Color.blue); 
     g.drawString("1", a1, b1); 
     g.drawString("1", a2, b2); 
     g.drawString("2", a3, b3); 
     g.drawString("2", a4, b4); 
     g.drawString("1", a5, b5); 
     g.drawString("1", a6, b6); 
     g.drawString("2", a7, b7); 
     g.drawString("2", a8, b8); 
     g.drawString("3", a9, b9); 
     g.drawString("3", a10, b10); 
     g.drawString("4", a11, b11);  
     g.drawString("4", a12, b12); 
     g.drawString("3", a13, b13); 
     g.drawString("3", a14, b14); 
     g.drawString("4", a15, b15);  
     g.drawString("4", a16, b16); 
    }  

    public void actionPerformed(ActionEvent e) //stops at edges 
    { 
     if (a1 > 400) {a1 = 100;} 
     if (a2 > 400) {a2 = 200;} 
     if (a3 > 400) {a3 = 100;} 
     if (a4 > 400) {a4 = 200;} 
     if (a5 > 400) {a5 = 100;} 
     if (a6 > 400) {a6 = 200;} 
     if (a7 > 400) {a7 = 100;} 
     if (a8 > 400) {a8 = 200;} 
     if (a9 > 400) {a9 = 100;} 
     if (a10 > 400) {a10 = 200;} 
     if (a11 > 400) {a11 = 100;} 
     if (a12 > 400) {a12 = 200;} 
     if (a13 > 400) {a13 = 100;} 
     if (a14 > 400) {a14 = 200;} 
     if (a15 > 400) {a15 = 100;} 
     if (a16 > 400) {a16 = 200;} 

     if (b1 > 400) {b1 = 100;} 
     if (b2 > 400) {b2 = 100;} 
     if (b3 > 400) {b3 = 100;} 
     if (b4 > 400) {b4 = 100;} 
     if (b5 > 400) {b5 = 200;} 
     if (b6 > 400) {b6 = 200;} 
     if (b7 > 400) {b7 = 200;} 
     if (b8 > 400) {b8 = 200;} 
     if (b9 > 400) {b9 = 100;} 
     if (b10 > 400) {b10 = 100;} 
     if (b11 > 400) {b11 = 100;} 
     if (b12 > 400) {b12 = 100;} 
     if (b13 > 400) {b13 = 200;} 
     if (b14 > 400) {b14 = 200;} 
     if (b15 > 400) {b15 = 200;} 
     if (b16 > 400) {b16 = 200;} 

     repaint(); // repaint rectangle 
    } 

    public void keyPressed(KeyEvent e) 
    { 
     int c = e.getKeyCode(); 

     if (c == KeyEvent.VK_Q) 
     { 
      b2 = b2 + 200; //2nd column 
      b6 = b6 + 200; 
      b10 = b10 + 200; 
      b14 = b14 + 200; 

      b3 = b3 + 200; //3rd column 
      b7 = b7 + 200; 
      b11 = b11 + 200; 
      b15 = b15 + 200; 
     } 
     if (c == KeyEvent.VK_W) 
     { 
      b1 = b1 + 200; //1st column 
      b5 = b5 + 200; 
      b9 = b9 + 200; 
      b13 = b13 + 200; 

      b4 = b4 + 200; //4th column 
      b8 = b8 + 200; 
      b12 = b12 + 200; 
      b16 = b16 + 200; 
     }  

     if (c == KeyEvent.VK_E) 
     { 
      a1 = a1 + 200; //1st row 
      a2 = a2 + 200; 
      a3 = a3 + 200; 
      a4 = a4 + 200; 

      a13 = a13 + 200; //4th row 
      a14 = a14 + 200; 
      a15 = a15 + 200; 
      a16 = a16 + 200; 
     }  
     if (c == KeyEvent.VK_D) 
     { 
      a5 = a5 + 200; //2nd row 
      a6 = a6 + 200; 
      a7 = a7 + 200; 
      a8 = a8 + 200; 

      a9 = a9 + 200; //3rd row 
      a10 = a10 + 200; 
      a11 = a11 + 200; 
      a12 = a12 + 200; 
     } 
    } 

    public void keyTyped(KeyEvent e){} 
    public void keyReleased(KeyEvent e){} //when you stop pressing, vel 

    public static void main(String[] args) 
    { 
     main m = new main(); 
     JFrame jf = new JFrame(); 
     jf.setTitle("Torus"); 
     jf.setSize(800,800); 
     jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     jf.add(m); 
     jf.setVisible(true); // after adding all components to the JFrame 
    } 
} 
+0

Добро пожаловать в StackOverflow! Вы уверены, что можете сделать анимацию с помощью таймера? А как насчет всех этих жестко закодированных пиксельных координат для рисования? А где (объект) модель для вашей головоломки? Как вы управляете государством? Один совет от меня: начните с нуля, после того как вы прочитали несколько уроков об играх. Наконец, я думаю, что «Java Swing» - не лучший выбор для написания игры в наши дни. – ventiseis

ответ

0

Реальная очевидная вещь здесь плохое использование переменных, вместо того, чтобы все эти a1 a2 a3 ..... b1 b2 .... возможно просто рассмотреть вопрос об использовании массивов, может быть двумерный массив, а? Оттуда вы можете немного улучшить свой код.

+0

Благодарим вас за отзыв. –

+0

Я получил его для работы с использованием import java.awt.Point; и 16 баллов, но я бы сказал, что это все еще нуждается в улучшении, потому что код длинный. –

Смежные вопросы