2013-02-08 41 views
1

在過去的幾天裏,我用Java編寫了一個(可怕的修補)文本RPG遊戲。世界上的定位幾乎由一個簡單的100x100二維絃樂陣列控制。然後,當玩家真正進入電網時,我會將字符串轉換爲實際的對象。如何在Java中創建一個簡單的數組圖形顯示?

我在想的是有一個圖形顯示器顯示這個100x100網格與網格的每個部分中的圖像相對應的數組中。

例如,如果塊[10] [15]處的字符串是「搖滾」,則第10行第15列中的網格的圖形顯示部分將顯示岩石的圖片。

理想情況下,每次我在我的do-while循環中循環時,此圖形都會刷新。奇怪的是,我想到的是和早期的口袋妖怪遊戲非常相似的東西。

我很抱歉,如果我的描述措辭不當或我的問題太模棱兩可。在我的計算機科學課程中,我只學了半個學期的Java,所以我的知識僅限於我們在一個學期學到的基礎知識。我喜歡在課外進行各種項目,比如我(驕傲地)編碼的文本國際象棋遊戲。我更喜歡從頭開始創建所有東西,以便在使用各種庫之前學習基礎知識。

難道有人請指點我正確的方向爲我尋找什麼或提供一個更好的方式去這個顯示?

非常感謝您提前。請讓我知道如果對我的代碼的引用會更好地幫助回答我的問題。

回答

0

首先,您可以使用枚舉而不是字符串,如上面傑克提到的。例如

私人枚舉對象{ 巖(1),硬幣(8),醫學(45)......等等 }

在你的陣列,你可以存儲這些對象作爲數字而不是字符串。

如:

 boolean stopFlag=false;  
do{ 
    //check each element of your world array with the enum and draw it 
    for(int i=0;i<yourObjectsArray.length;i++) 
    { 
     for(int j=0;j<yourObjectsArray[i].length;j++){ 
     switch(yourObjectsArray[i][j]) 
     { 
      case Objects.Rock: drawRock(i,j); 
          break; 
      case Objects.Coin: drawCoin(i,j); 
          break; 
      //and so on.... 
     } 
    } 
    } 
    //you can also put this into a separate function as drawWorld() and pass the objects. 

//Key press checking logic here. If user presses exit key [esc] then you set the stopFlag as true 
    if(keypress==KEY_ESC){ stopFlag=true;} 
}while(!stopFlag); 

抽獎搖滾的一個例子:

private void drawRock(int i,int j){ 
     //i and j are the cols and row values so you need to resolve them to coordinates. 
     //I am assuming u have a 800*600 screen and you mentioned that your world is 100x100 array. Then each of your object is 8*6 units in size so 
    xCoord=i*8; 
    yCoord=j*6; 
     //So if you have to draw a rock on [10][15] it will resolve as 
     //xCoord=10*8-> 80 
     //yCoord=15*6-> 90 so it will draw your rock in (80,90) on the screen 

//Now you can either open the rock image from your disk now or u maintain one instance of rock at the beginning of the program so that you can use the same image later rather than opening it everytime you encounter a new Rock object in your array.For now I will open it here. 

    String path = "C:\\YourGameDirectory\\rock.jpg"; 
    URL url = new File(path).toURI().toURL(); 
    BufferedImage rockImg = ImageIO.read(url); 

    //draw it to the screen now if you have the graphics instance. 
    yourUIPanel.getGraphics().drawImage(rockImg,xCoord,yCoord,yourUIPanel); 

    // You may find many resources that teach you how to draw an image on the screen in   Java. You may repeat the same for all the objects. 

} 

我希望上面的代碼幫你一個位。如果不是,那我的不好。

您可以嘗試this教程系列開始。雖然它在C語言中,但它的概念可以幫助你達到上面提到的目標。

+0

非常感謝您的幫助。我花了幾個小時試圖理解你寫的東西,最後我想出了一個好方法,儘管它與你的不同。座標定位技巧對我有很大的幫助。 –

+0

我可以使用透明的圖像並在另一個上面繪製圖像,使其具有像草地上的頭像嗎?對不起,麻煩了。 –

+0

我很抱歉在我的答案我蹩腳的英語..我沒有重新檢查我寫了什麼..:D U可以使用另一個數組這樣的重疊對象。首先繪製背景對象,然後繪製透明的重疊對象。我真的不是這方面的專家,所以我建議你在這方面做更多的研究。看看Processing java庫,它會讓你更容易。 –

0

在我個人的經驗中,用於這樣的任務的最簡單的東西是Processing,它是一個輕量級的框架,能夠提供一個簡單的API來繪製事物。

有一個reference,還有很多tutorials所以即使你不是專家,也不應該很難開始。

作爲一個側面節點:爲什麼使用字符串來存儲各種塊?你可以使用更好的東西,如enum

0

你可能想看看我的老roguelike遊戲暴君的源代碼:

主要思路:

  • 有一個Map類,該類負責用於存儲代表地圖的數據。在暴君中,Map封裝了地形和地圖上物體位置的存儲。
  • 有一個MapPanel類,它在GUI中顯示Map。這與Map本身保持分離 - 將GUI與核心引擎數據分開通常是一個好主意。
  • 有一個Thing類表示地圖上的對象。這包括從怪物,物品,樹木和煙霧雲到玩家角色本身的所有內容。基本上任何不是地形的東西。

至於刷新,這種工作方式是MapPanel根據需要重新繪製自己,看看地圖的內容。檢出MapPanel.paint(Graphics g)及其調用的各種方法。

相關問題