2012-10-23 32 views
0

作爲一名首席Java程序員,您好!我正忙於在Java中創建一個簡單的Pacman遊戲,只是爲了鍛鍊,並且我創建了一個讓幽靈隨機移動垂直水平的方法,但我遇到了一些問題我不知道如何強制它去左右或上下(所以不是在同一時間),我對鬼代碼現在如下:固定計時器和隨機方向

public void moveUp() { 

} 

public void moveLeft() { 

    if (g1x >= 500) { g1x = 500; g1r = false; } 
    else if (g1x <= 0) { g1x = 0; g1r = true; } 

} 

public void moveRight() { 

    if (g1x >= 500) { g1x = 500; g1r = false; } 
    else if (g1x <= 0) { g1x = 0; g1r = true; } 

} 

public void moveDown() { 

} 

public void paintComponent(Graphics g) { 

    super.paintComponent(g); 
    // pacman movement 
    diameter = 25; 
    pacman.drawPacMan(g, getHorPlaats(), getVerPlaats(), diameter, getView(), Color.yellow); 

    // ghosts movement 
    g1x += ghostSpeed * (Math.random() > 0.5? 1 : -1); // random direction 

    Random randomGen = new Random(); 
    // generate a random number, between 0 - 3 
    int randomize = randomGen.nextInt(4); 

    switch(randomize) { 
    case 0: 
     moveUp(); 
     System.out.println("up"); 
     break; 
    case 1: 
     moveLeft(); 
     System.out.println("Left"); 
     break; 
    case 2: 
     moveRight(); 
     System.out.println("Right"); 
     break; 
    case 3: 
     moveDown(); 
     System.out.println("down"); 
     break; 
    } 

    ghost.drawGhost(g, randomize, 40, diameter, Color.red); 

} 

我已經使用了隨機化變量對於你可以看到的方向,水平位置是硬編碼的,但水平位置也是隨機說明的,但是如果我用它做出一些奇怪的對角線運動

下一個問題是,我使用計時器在我的建築像這樣

public PacMan() { 

    // create timer and start timer 
      javax.swing.Timer autoKlik = new javax.swing.Timer(WACHTTIJD, this); 

      autoKlik.start(); 
} 

所以方向上的隨機值是變化快(500毫秒),但速度還配置了遊戲的速度,所以我認爲我做了一個邏輯錯誤,但林不知道如何解決這個問題..我必須分開行動嗎?或者是否有更簡單的方法來實現這一點,請與我分享你的技能我很願意學習:)如果你可能需要更多的代碼,我可以在這裏發佈或給我的github帳戶的鏈接,所以你可以檢查它:)

在此先感謝!

鏈接到全部的源:pacman game source

回答

1

我建議的方法分離關注:

  • 了一組類的仿真模型只包含實體和邏輯
  • 一組圖形這些類將繪製pacman
  • 控制器來處理動作並將它們委託給模型,由揮杆類發射

在paint()方法中,出於性能原因,只做繪畫,不要'new',也不要調用複雜的方法。油漆經常被框架調用。

+0

我已經分離了pacman和幽靈的繪圖,還有一些其他的東西。但是你對第一個和最後一個的意思是我現在想要做的。對於paint()中的新Random,我這樣做是爲了隨機值每次都會自動更改,您如何在不將它放入paint()中的情況下提出這個問題?附:我已經添加了完整的源代碼鏈接,以便更好地瞭解我現在擁有的內容。 – Reshad

+1

圖形操作應該是自動的,不需要複雜的計算。定期移動應該在別處處理,如用戶交互。該模型通過建立必須繪製的片段或移動實體列表來驅動繪圖。模型會生成一些表單並繪製表單。 – Aubin