2016-11-12 124 views
-2

這個想法是,置換拼圖在一個圓環面。我設置它,以便通過按Q,W,E,D移動棋子。我遇到的問題是,當組合水平和垂直移動時,數字(代表顏色)重疊。後來,我想要有1色和2色的顏色,並將其做得更大,但現在我需要更改代碼以使其更加簡單,並使其正確工作。任何建議或評論都會有所幫助。謝謝。我需要幫助讓我的簡單二維拼圖工作

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分,但我會說它仍然需要改進,因爲代碼很長。 –