# Pacman



## sherru (12. Feb 2011)

Tag Mädels und Jungs,

hat jemand Vorschläge, wie man an einen Pacman Clone, bei dem die Maps variabel eingelesen werden, rangehen kann? Ich dachte an: Map einlesen, in einen Array packen und dann die Map erstellen.

Aber bewegende Geister und verschwindende Coins zu realisieren fällt mir schwer zu realisieren.

Jemand eine Idee?

Grüße


----------



## Runtime (13. Feb 2011)

Nimm Tiles für die Animationen, für die Kollision kannst du einfach die nächste Position im Array überprüfen, falls es eine Mauer ist, haltet/en Pacman/die Geister an, falls es eine Münze ist, geht er auf das Feld und sie verschwindet.


----------



## sherru (13. Feb 2011)

Ich bin gerade beim Zeichnen der Map, die ich schon im Array habe.
Aber wenn ich nun mit paintComponent was zeichnen möchte, ist der Array natürlich nicht deklariert. Wie deklariere ich ihn, ohne die Werte zu reseten (ansonsten kommt map[][] cannot be resolved).

Vielen Dank!


----------



## Runtime (13. Feb 2011)

Ich versteh nicht was Du meinst... Zeig es mal am Source Code.


----------



## sherru (13. Feb 2011)

Ich habe einen Array (10x10) in der Main und würde nun gerne mit einer for Schleife


```
for(int i=0; i<=11; i++) {
			for(int j=0; j<11; j++)
			if (map[i][j].equals("0")) {
				g.setColor(Color.BLACK);
				g.fillRect(i, j, 20, 20);
			}
```

die Teile Zeichnen (0 = Wand / an der Position i j, ist aber erst noch unwichtig). Die Schleife muss sich ja in paintComponent befinden, damit ich überhaupt zeichnen kann, oder?

Aber da der Array nicht deklariert ist, gibts einen Fehler.


----------



## XHelp (13. Feb 2011)

Ich habe da eine böse Vorahnung... zeig mal den ganzen Code.


----------



## sherru (13. Feb 2011)

```
import java.awt.Color;
import java.awt.Graphics;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

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


public class pac extends JPanel {
	
	public pac() {
		fenster();
	}
	
	public void fenster() {
		 JFrame frame = new JFrame("sdfd");
	        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	        frame.setAlwaysOnTop(true);
	        frame.setLocationByPlatform(true);
	        frame.setSize(500, 500);
	        frame.getContentPane().add(this);
	        frame.setVisible(true);
	}
	
	
	

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		new pac();
		
		
		Scanner scn = null;
		try {
			scn = new Scanner(new File("map.txt"));
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		ArrayList<String> fileCon = new ArrayList<String>();
		while (scn.hasNext()) 
		    fileCon.add(scn.nextLine());
		 
		String[][] content = new String[fileCon.size()][];
		for (int i=0; i<content.length; i++) {
		    content[i] = fileCon.get(i).split(",");
		}
		 
		for (int i=0; i<content.length; i++) {
		    for (int j=0; j<content[i].length; j++)
		        System.out.print(content[i][j] + " | ");
		    System.out.println();
		}
		
		
		String[][] map = new String[10][10];
		
		for (int i=0; i<11; i++) {
			for (int j=0; j<11; j++)
			map[i][j] = "K ";
		}
		
		for (int i=0; i<11; i++) {
			for (int j=0; j<11; j++)
			map[i][j] = content[i][j];
		}
		
		
		for (int i=0;i<11;i++ ){
			for (int j=0;j<11;j++)
				System.out.print(map[i][j]);
			System.out.println();
		}
		
		
		
		
	
		
		
	}
	
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		
		for(int i=0; i<11; i++) {
			for(int j=0; j<11; j++)
			if (map[i][j].equals("0")) {
				g.setColor(Color.BLACK);
				g.fillRect(i, j, 20, 20);
			}
		}
		
				
	}
	

}
```


----------



## XHelp (13. Feb 2011)

Ja, das habe ich mir fast gedacht... So wird die ganze Sache nicht funktionieren. Das was in der main steht muss da weg. Und außerdem hast du ein Panel, der ein Frame erzeugt. :autsch:
Vllt solltest du dir erstmal paar Grundlagen zur OOP durchlesen und ein paar "Hallo Welt"-Programme machen, bevor du dich an sowas rantraust.


----------



## sherru (13. Feb 2011)

Leider stehe ich unter Zeitdruck... 

Ok ich werde mal wieder von vorne Anfangen... also für das Spielfeld mache ich eine neue Klasse und initialisiere die dann in der Main?


----------



## XHelp (13. Feb 2011)

Nein. Bestenfalls sieht deine main so aus:

```
public static void main(String[] args) {
  new PacManGui();
}
```

Auch wenn du unter Zeitdruck stehst: ohne Grundlagen kommst du nicht weiter, also nimm dir ruhig die Zeit.


----------

