2012-01-27 21 views
1

私は、ゲームデザインクラスの課題に取り組んで、パックマンクローンを構築しています。Java IO、ファイルからの読み取りと2文字目の配列への印刷

WWWWWWWWWWWWWWWWWWWWWWWWWWWW 
W............WW............W 
W.WWWW.WWWWW.WW.WWWWW.WWWW.W 
W*WWWW.WWWWW.WW.WWWWW.WWWW*W 
W.WWWW.WWWWW.WW.WWWWW.WWWW.W 
W..........................W 
W.WWWW.WW.WWWWWWWW.WW.WWWW.W 
W.WWWW.WW.WWWWWWWW.WW.WWWW.W 
W......WW....WW....WW......W 
WWWWWW.WWWWW.WW.WWWWW.WWWWWW 
WWWWWW.WWWWW.WW.WWWWW.WWWWWW 
WWWWWW.WW..........WW.WWWWWW 
WWWWWW.WW.WWWWWWWW.WW.WWWWWW 
WWWWWW.WW.WWWWWWWW.WW.WWWWWW 
..........WWWWWWWW.......... 
WWWWWW.WW.WWWWWWWW.WW.WWWWWW 
WWWWWW.WW.WWWWWWWW.WW.WWWWWW 
WWWWWW.WW..........WW.WWWWWW 
WWWWWW.WW.WWWWWWWW.WW.WWWWWW 
WWWWWW.WW.WWWWWWWW.WW.WWWWWW 
W............WW............W 
W.WWWW.WWWWW.WW.WWWWW.WWWW.W 
W*WWWW.WWWWW.WW.WWWWW.WWWW*W 
W...WW................WW...W 
WWW.WW.WW.WWWWWWWW.WW.WW.WWW 
WWW.WW.WW.WWWWWWWW.WW.WW.WWW 
W......WW....WW....WW......W 
W.WWWWWWWWWW.WW.WWWWWWWWWW.W 
W.WWWWWWWWWW.WW.WWWWWWWWWW.W 
W..........................W 
WWWWWWWWWWWWWWWWWWWWWWWWWWWW 

アイデアは、Java IOからの読者によって行ずつ、これが読み込まれていることである。

は現在、私はパックマン迷路

は下記を参照されたテキストファイルを持っていますパッケージを作成し、次に2次元配列を生成するために使用すると、配列内のデータを使ってペイントクラスを使用してイメージをどこに印刷するかをループで指定できます。

現在のところ、私の問題はペイント方法ですが、それは全く問題なく動作しているようですが、現時点で何が問題なのかはわかりません。誰かが私を正しい方向に向けることができますか?

(私のコードは、書式設定、私はまた、Java IOパッケージに新たなんだ、ここで必要なインデントによって、私は例外処理を見てきた最初の時間を少しを台無しにされています!)任意の助けを事前に

感謝!

//imports 
import java.awt.*; 
import java.io.*; 
import javax.swing.*; 


public class Maze extends JFrame 
{ 

//V.Decleration 
private static final Dimension WindowSize = new Dimension (600,600); 
static char[][] Amaze = new char[28][31]; 


//default constructor 
public Maze() 
{ 
this.setTitle("Pacman"); 
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
Dimension screensize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); 
int x = screensize.width/2 - WindowSize.width/2; 
int y = screensize.height/2 - WindowSize.height/2; 
setBounds(x, y, WindowSize.width, WindowSize.height); 
setVisible(true); 
} 

public void paint (Graphics g) 
{ 

String line = null; 

try 
    { 
    BufferedReader reader = new BufferedReader(new FileReader("G:\\Game  Design\\Pacman\\src\\Maze.txt")); 


    for (int i=0; i<=31; i++) 
{ 
do 
{ 
    try 
    { 

    line=reader.readLine(); 
    for (int y=0; y<=28; y++) 
    { 

     Amaze[y][i]=line.charAt(y); 
    } 

    }catch (IOException e) { } 
} 

while (line!= null); 
    try 
     { 
     reader.close(); 
     } catch (IOException e) { } 
    } 
} catch (FileNotFoundException e) {} 

} 

//main 
public static void main (String [] args) 
{ 
Maze maze = new Maze(); 

for (int i=0;i<=28;i++) 
System.out.print(Amaze[i][31]); 
} 

} 
+4

印刷 'e.printStackTrace()でキャッチされているすべての' Exception'sを; '。例外は一般に無視されません。何がうまくいかなかったかを説明します。あなたのペイント方法で。 –

+1

私はなぜあなたのペイント方法がペイントすると思いますか分かりません。あなたは実際に塗る方法を呼んでいません。あなたはファイルを読み込んで配列を作成するだけです。あなたはこれ以上を表示する必要があります。 – AHungerArtist

+0

あなたはどちらも私の質問を誤解しているようです。 このコードでは何も印刷されないことはよく知っています。テキストファイルから2次元文字配列にデータを移動しようとしています。私がこれをやり遂げると、残りの作業をすることができます。 – Eogcloud

答えて

1

三件の提案:

  1. 一度に一つだけ仕事をするあなたの機能を分離するためにあまり誤解を招く可能性があります。そのため、ファイルを読み取る機能と、結果をペイントする機能が必要です。
  2. デバッグしようとしているときに、System.out.println()ステートメントをコードに追加してください。それは、それぞれの部品があなたが意図したことをしたかどうかを確認する良い方法です。たとえば、変数を読み取った後にline変数を印刷すると、ファイルを正しく読み取っているかどうかがわかります。
  3. 例外を常に印刷してください。彼らはあなたに何が間違っていたのか、どこにどこに行くのかを伝えますこのコードは、ロードし、あなたの迷路印刷します、と述べ

import java.io.*; 

public class Read2DArray { 
    private final int WIDTH = 28; 
    private final int HEIGHT = 31; 

    private char[][] maze = new char[WIDTH][HEIGHT]; 

    public static void main(String[] args) { 
     Read2DArray array = new Read2DArray(); 
     array.loadFile("maze.txt"); 
     array.printArray(); 
    } 

    public void loadFile(String fname) { 
     try { 
      BufferedReader reader = new BufferedReader(new FileReader(fname)); 

      String line; 
      int col = 0, row = 0; 
      while((line = reader.readLine()) != null && row < HEIGHT) { 
       for(col = 0; col < line.length() && col < WIDTH; col++) { 
        maze[col][row] = line.charAt(col); 
       } 
       row++; 
      } 
      reader.close(); 
     } catch(IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    public void printArray() { 
     for(int row = 0; row < HEIGHT; row++) { 
      for(int col = 0; col < WIDTH; col++) { 
       System.out.print(maze[col][row]); 
      } 
      System.out.println(); 
     } 
    } 
} 
+0

お返事ありがとうございました。私は何も覚えていないと思ったので、これをコピーして貼り付けたいとは思わなかったので、私は上記のやりかたのやりかたを少し変更しました。 Separate Functionsは良いアイデアですが、私はそれを考慮していないのに問題を見つけるのにかなり巻き込まれました! これはうまくいきません。スティーブを助けてくれてありがとう! – Eogcloud

2

ループには小さすぎる配列を作成しています。すなわち:

for (int i=0; i<=31; i++) 
for (int y=0; y<=28; y++) 

使用i<31y<28、または[29][32]であるためにあなたの配列を増やす:new char[28][31];だけforループ27および30あなたの最大のインデックスを可能にするがあります。これらのいずれかがあなたの現在の問題を解決するはずです。

+0

私はコードを貼り付ける必要があります。元々は正しいものでしたが、コードを多用していて、いくつかの違うことを試していました。 [1000] [1000]で2次元配列を試してみましたが、問題は残念です:/ ご回答いただきありがとうございます! – Eogcloud