# Panel/View für Android



## cHUCKn0RRIS (20. Jun 2011)

Hi

Achtung, bin ein Anfänger(???:L)!!!
Hebe es geschafft ein Snake zu machen, welches ich nun für Android machen möchte, habe aber kein plan? Dass Programm kann man ja glaub lassen? einfach das Panel. Habe mir schon Android SDK und so heruntergeladen. Aber ich schaf das nicht! ab auch niergends auf deutsch die GUI befehle gefunden. Auch habe ich nirgends die Befehle gefunden, für neigung erkennen, oder optischen trackball?

Vielen dank für Hilfe

Ps. Code:

Snake


```
// Highscore 470
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.*;

public class snake2 extends JFrame {
	private static final long serialVersionUID = 1L;

	int speed = 5;
	int felder = 40;
	private snakePanel sp;
	public Schlange schlange;
	public String richtung;
	public pos apfel = new pos();
	Timer timer = new Timer();
	Task task;
	boolean verloren = false;
	int score = 0;

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

	private snake2() {
		schlange = new Schlange();
		initGui();
		// task = new Task(schlange, sp, this);
		reset();

		this.addKeyListener(new KeyListener() {

			@Override
			public void keyPressed(KeyEvent arg0) {
				if (arg0.getKeyCode() == KeyEvent.VK_UP
						&& schlange.letzterichtung != "unten") {
					richtung = "oben";
				} else if (arg0.getKeyCode() == KeyEvent.VK_LEFT
						&& schlange.letzterichtung != "rechts") {
					richtung = "links";
				} else if (arg0.getKeyCode() == KeyEvent.VK_DOWN
						&& schlange.letzterichtung != "oben") {
					richtung = "unten";
				} else if (arg0.getKeyCode() == KeyEvent.VK_RIGHT
						&& schlange.letzterichtung != "links") {
					richtung = "rechts";
				} else if (arg0.getKeyCode() == KeyEvent.VK_ENTER) {
					if (verloren) {
						neustart();
					}
				}
			}
			

			// if (arg0.getKeyCode() == KeyEvent.VK_P) {
			// apfellegen();
			// }
			// if (arg0.getKeyCode() == KeyEvent.VK_O) {
			// schlange.länge++;
			// }
			//
			// if (arg0.getKeyCode() == KeyEvent.VK_H) {
			// verlieren();
			// }

			@Override
			public void keyReleased(KeyEvent arg0) {
				// TODO Auto-generated method stub

			}

			@Override
			public void keyTyped(KeyEvent arg0) {
				// TODO Auto-generated method stub

			}

		});

	}

	private void reset() {
		richtung = "rechts";
		apfellegen();
		score = 0;
		sp.setScore(score);
		task = new Task(schlange, sp, this);
		timer.schedule(task, 1000, 400 / speed);
		
	}

	public void apfellegen() {
		apfel.x = (int) (Math.random() * felder);
		apfel.y = (int) (Math.random() * felder);

		boolean gut = true;
		do {
			gut = true;
			for (int i = 0; i < schlange.länge; i++) {
				if (apfel.x == schlange.position[i].x
						&& apfel.y == schlange.position[i].y) {
					apfel.x = (int) (Math.random() * felder);
					apfel.y = (int) (Math.random() * felder);
					gut = false;
				}
			}
		} while (!gut);
	}

	private void initGui() {
		// setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		sp = new snakePanel(schlange, apfel);
		sp.setGrösse(felder);
		sp.setBackground(Color.WHITE);
		this.add(sp);
		// this.setSize(1020, 1520);// noch genau einstelen
		this.pack();
		this.setVisible(true);
	}

	public void verlieren() {
		sp.verloren = true;
		verloren = true;
		sp.repaint();
		task.cancel();
	}

	public void neustart() {
		schlange.reset();
		reset();
		sp.verloren = false;
		verloren = false;
		sp.repaint();
	}
}

class Task extends TimerTask {
	Schlange schlange;
	snakePanel sp;
	snake2 sn2;

	public Task(Schlange schlange, snakePanel sp, snake2 sn2) {
		this.schlange = schlange;
		this.sp = sp;
		this.sn2 = sn2;
	}

	public void run() {
		schlange.fahren(sn2.richtung);
		sp.repaint();
		if (draussen()) {
			sn2.verlieren();
		}
		if (überfahren()) {
			sn2.verlieren();
		}
		if (schlange.position[0].x == sn2.apfel.x
				&& schlange.position[0].y == sn2.apfel.y) {
			schlange.länge += 4;
			sn2.apfellegen();
			sn2.score += 10;
			sp.setScore(sn2.score);
		}
	}

	private boolean überfahren() {
		for (int i = 1; i < schlange.länge; i++) {
			if (schlange.position[0].x == schlange.position[i].x
					&& schlange.position[0].y == schlange.position[i].y) {
				return true;
			}
		}
		return false;
	}

	private boolean draussen() {

		if (schlange.position[0].x >= sn2.felder || schlange.position[0].x < 0
				|| schlange.position[0].y >= sn2.felder
				|| schlange.position[0].y < 0) {
			return true;
		}

		return false;
	}
}
```

Schlange



```
public class Schlange {

	pos[] position = new pos[10000];
	int länge;
	String letzterichtung;

	Schlange() {
		reset();
	}

	public void reset() {
		länge = 10;
		letzterichtung = "rechts";

		for (int i = 0; i < position.length; i++) {
			position[i] = new pos();

		}

		for (int i = 0; i < länge; i++) {
			position[i].x = 10;
			position[i].y = 10;
		}

	}

	void fahren(String richtung) {

		pos zs1 = new pos(); // zwischenspeicher
		pos zs2 = new pos();
		zs1.x = position[0].x;
		zs1.y = position[0].y;

		if (richtung.equals("oben")) {
			position[0].y += -1;
		} else if (richtung.equals("links")) {
			position[0].x += -1;
		} else if (richtung.equals("unten")) {
			position[0].y += 1;
		} else {
			position[0].x += 1;
		}

		for (int i = 1; i < länge; i++) {

			zs2.x = position[i].x;
			zs2.y = position[i].y;
			position[i].x = zs1.x;
			position[i].y = zs1.y;
			zs1.x = zs2.x;
			zs1.y = zs2.y;

		}
		letzterichtung = richtung;

	}

}

class pos {
	public int x;
	public int y;

	pos() {
		x = -1;
		y = -1;
	}
}
```

SnakePanel


```
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JPanel;

public class snakePanel extends JPanel {

	private static final long serialVersionUID = 1L;
	Schlange schlange;
	int grösse = 20;
	private pos apfel;
	boolean verloren = false;
	int score = 0;

	snakePanel(Schlange schlange, pos apfel) {
		this.schlange = schlange;
		this.apfel = apfel;
	}

	public void paintComponent(Graphics g) {
		super.paintComponent(g);

		paintsnake(g);
		paintpoint(g);
		Score(g);

		if (verloren) {
			paintverlieren(g);
		}
	}

	public void setScore(int score) {
		this.score = score;
	}

	private void paintverlieren(Graphics g) {
		Image img;
		String path = "siehabenverloren.png";
		img = getToolkit().getImage(path);
		g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);

	}

	private void paintpoint(Graphics g) {
		Image img;
		String path = "apple.jpg";
		img = getToolkit().getImage(path);
		g.drawImage(img, apfel.x * grösse, apfel.y * grösse, grösse, grösse,
				this);

	}

	public void Score(Graphics g) {
		g.drawString("Score: " + String.valueOf(score), this.getWidth() - 70,
				20);
	}

	private void paintsnake(Graphics g) {

		Image img;
		String path;

		for (int i = 0; i < schlange.länge; i++) {
			if (i == 0) {

				if (schlange.letzterichtung.equals("oben")) {
					path = "schlangechopf.oben.jpg";
				} else if (schlange.letzterichtung.equals("rechts")) {
					path = "schlangechopf.rechts.jpg";
				} else if (schlange.letzterichtung.equals("unten")) {
					path = "schlangechopf.unten.jpg";
				} else {
					path = "schlangechopf.links.jpg";
				}

			} else {
				path = "schlangemuster.jpg";
			}

			img = getToolkit().getImage(path);
			g.drawImage(img, schlange.position[i].x * grösse,
					schlange.position[i].y * grösse, grösse, grösse, this);

		}
	}

	public void setGrösse(int felder) {
		this.setPreferredSize(new Dimension(grösse * felder, grösse * felder));
	}
}
```


----------



## tfa (20. Jun 2011)

> Dass Programm kann man ja glaub lassen?


Wenn du damit meinst, das Programm könne man so lassen und einfach auf Android starten, muss ich dich enttäuschen. Entwicklung für Java Swing und Android ist was völlig anderes. Hierfür benötigt man eine komplett andere API. 
Fang am besten erstmal mit kleinen Android-Programmen an, bevor du dich an Snake wagst. 
Informationen und Dokumentation gibt es hier: Android Developers


----------



## cHUCKn0RRIS (20. Jun 2011)

Vielen Dank!
Problem: ich kann nicht gut Englisch, gibt es so was auch in deutsch?


----------



## schlingel (21. Jun 2011)

Ja, sogar hier im Forum:
Android - Grundlagen und Programmierung


----------

