Hallo,
ich habe eine kleine Snake App gemacht. Vielleicht kann mir ja jemand ein Feedback geben.
Die Schlange lässt sich über 4 Buttons steuern und muss zufällig verteilte Äpfel einsammeln. Wenn sie den Rand berührt oder sich selbst beisst, kommt der Gameover Screen und man kann ein neues Spiel starten. Die Punkte werden gezählt und die Highscores gespeichert.
Im Anhang sind zwei Bilder von dem Spiel.
Schonmal Danke im vorraus.
ich habe eine kleine Snake App gemacht. Vielleicht kann mir ja jemand ein Feedback geben.
Die Schlange lässt sich über 4 Buttons steuern und muss zufällig verteilte Äpfel einsammeln. Wenn sie den Rand berührt oder sich selbst beisst, kommt der Gameover Screen und man kann ein neues Spiel starten. Die Punkte werden gezählt und die Highscores gespeichert.
Im Anhang sind zwei Bilder von dem Spiel.
Java:
public class MainActivity extends AppCompatActivity {
private static Button hoch;
private static Button rechts;
private static Button unten;
private static Button links;
private Schlange schlange;
private TextView PunkteText;
private static TextView PunkteTextView;
private static MediaPlayer mp = new MediaPlayer();
private static TextView HighscoreText;
private static TextView HighscoreTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
hoch = (Button) findViewById(R.id.button1);
rechts = (Button) findViewById(R.id.button2);
unten = (Button) findViewById(R.id.button3);
links = (Button) findViewById(R.id.button4);
PunkteText = (TextView) findViewById(R.id.textView1);
PunkteTextView = (TextView) findViewById(R.id.textView2);
HighscoreText = (TextView) findViewById(R.id.textView3);
HighscoreTextView = (TextView) findViewById(R.id.textView4);
schlange = new Schlange(this);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(900, 900);
schlange.setLayoutParams(params);
RelativeLayout layout = (RelativeLayout) findViewById(R.id.layout1);
schlange.setBackgroundColor(Color.YELLOW);
layout.addView(schlange);
try {
mp.setDataSource( this,Uri.parse("android.resource://com.example.admin.snake/raw/hintergrund"));
mp.prepare();
} catch (Exception e) {e.printStackTrace();}
mp.start();
mp.setLooping(true);
}
public static Button getHoch() { return hoch; }
public static Button getRechts() { return rechts;}
public static Button getUnten() { return unten; }
public static Button getLinks() { return links; }
public static TextView getPunkteTextView() { return PunkteTextView;}
public static MediaPlayer getMediaPlayer(){ return mp;}
public static TextView getHighscoreTextView(){return HighscoreTextView;}
}
Java:
public class Schlange extends SurfaceView implements View.OnClickListener,SurfaceHolder.Callback {
private int maxLänge =1000;
private int aktLängeSchlange = 1;
private Richtung richtung;
private int KoordX[] = new int[maxLänge];
private int KoordY[] = new int[maxLänge];
private Button hoch = MainActivity.getHoch();
private Button rechts = MainActivity.getRechts();
private Button unten = MainActivity.getUnten();
private Button links = MainActivity.getLinks();
private int breite = 30;
private int höhe = 30;
private int Feld[][] = new int[breite][höhe];
private static int Punkte = 0;
private MainActivity activity = new MainActivity();
private Timer timer = new Timer();
private int FutterX, FutterY;
private TextView PunkteTextView = MainActivity.getPunkteTextView();
private MediaPlayer mp = new MediaPlayer();
private TextView HighscoreTextView = MainActivity.getHighscoreTextView();
public Schlange(Context context) {
super(context);
hoch.setOnClickListener(this);
rechts.setOnClickListener(this);
links.setOnClickListener(this);
unten.setOnClickListener(this);
StartPunktSchlange();
zufälligerApfel();
PunkteTextView.setText("0");
HighscoreTextView.setText(""+HighscoreLaden());
timer.schedule(new BewegungSchlange(), 0,125);
}
class BewegungSchlange extends TimerTask {
public void run() {
activity.runOnUiThread(new TimerTask() {
public void run() {
for (int i = aktLängeSchlange; i > 0; i--) {
KoordX[I] = KoordX[i-1];
KoordY[I] = KoordY[i-1];
}
RichtungÄndern();
essen();
invalidate();
}
});
}
}
public void StartPunktSchlange() {
KoordX[0] = (int)(Math.random()*(breite-2))+1;
KoordY[0] = (int)(Math.random()*(höhe-2))+1;
}
public enum Richtung {
Hoch, Unten, Rechts, Links;
}
public void RichtungÄndern() {
if(richtung!=null) {
switch (richtung) {
case Hoch:
KoordY[0] = KoordY[0] - 1;
break;
case Unten:
KoordY[0] = KoordY[0] + 1;
break;
case Rechts:
KoordX[0] = KoordX[0] + 1;
break;
case Links:
KoordX[0] = KoordX[0] - 1;
break;
}
}
}
public static int getPunkte() {
return Punkte;
}
public static void setPunkte() {
Punkte=0;
}
public void essen() {
if(KoordX[0]==FutterX && KoordY[0]==FutterY) {
try {
mp.setDataSource( getContext(), Uri.parse("android.resource://com.example.admin.snake/raw/apfel"));
mp.prepare();
} catch (Exception e) {e.printStackTrace();}
mp.start();
try {
mp.setDataSource(getContext(), Uri.parse("android.resource://com.example.admin.snake/raw/hintergrund"));
mp.setLooping(true);
} catch(Exception ex) {ex.printStackTrace();}
aktLängeSchlange= aktLängeSchlange+1;
Punkte = Punkte +1;
zufälligerApfel();
PunkteTextView.setText(""+Punkte);
invalidate();
}
}
public void HighscoreSchreiben() {
SharedPreferences pref = getContext().getSharedPreferences("GAME",0);
SharedPreferences.Editor editor = pref.edit();
editor.putInt("HIGHSCORE", Punkte);
editor.commit();
}
public int HighscoreLaden() {
SharedPreferences pref = getContext().getSharedPreferences("GAME",0);
return pref.getInt("HIGHSCORE",0);
}
public void zufälligerApfel() {
FutterX = (int) (Math.random()*(breite-2));
FutterY = (int) (Math.random()*(höhe-2));
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.button1:
richtung = Richtung.Hoch;
break;
case R.id.button2:
richtung = Richtung.Rechts;
break;
case R.id.button3:
richtung = Richtung.Unten;
break;
case R.id.button4:
richtung = Richtung.Links;
break;
}
}
public boolean GameOver() {
for(int i=1; i<aktLängeSchlange; i++) {
if(KoordX[0]==KoordX[I] && KoordY[0] == KoordY[I]) {
timer.cancel();
return true;
}
}
if(KoordX[0]<0 || KoordX[0]>29 || KoordY[0]<0 ||KoordY[0]>29 ) {
timer.cancel();
return true;
}
return false;
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}
@Override
public void surfaceCreated(SurfaceHolder holder) {}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint p = new Paint();
p.setColor(Color.GREEN);
canvas.drawRect(FutterX*30, FutterY*30,FutterX*30+30,FutterY*30+30,p );
p.setColor(Color.RED);
canvas.drawRect(KoordX[0]*30, KoordY[0]*30, KoordX[0]*30+30, KoordY[0]*30+30,p); // Kopf
p.setColor(Color.BLUE);
for(int i=1; i<aktLängeSchlange; i++) { // Rumpf
canvas.drawRect(KoordX[I]*30, KoordY[I]*30, KoordX[I]*30+30, KoordY[I]*30+30,p);
}
if(GameOver()==true) {
if(Punkte>HighscoreLaden()) {
HighscoreSchreiben();
}
Intent intent = new Intent(getContext(), GameOverScreen.class);
getContext().startActivity(intent);
}
}
}
Java:
public class GameOverScreen extends AppCompatActivity implements View.OnTouchListener{
private ZeichenView zw ;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity2);
RelativeLayout layout = (RelativeLayout) findViewById(R.id.layout);
zw = new ZeichenView(this);
layout.setOnTouchListener(this);
layout.addView(zw);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
int aktion = event.getAction();
if(aktion==MotionEvent.ACTION_DOWN) {
Intent intent = new Intent(this, MainActivity.class);
this.startActivity(intent);
return true;
}
return false;
}
class ZeichenView extends View {
ZeichenView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint p = new Paint();
p.setColor(Color.BLACK);
p.setTextSize(200);
canvas.drawText("Game Over",50,400,p);
p.setTextSize(75);
canvas.drawText("Deine Punkte:"+Schlange.getPunkte(),300,600,p);
Schlange.setPunkte();
}
}
}
Anhänge
Zuletzt bearbeitet: