Snake i JAVA
Håller på att avsluta mitt projekt i Programmering A och har valt att göra en Snake-applet. Jag har fått det mesta att funka, det enda problemet är att lägga till "kroppsdelar" till ormen. Jag har en enkel version där jag kan lägga till kroppsdelar manuellt i koden men det är ju inte hållbart...
Har försökt att göra kroppsdelarna som en array men jag får det inte att fungera. De dyker upp i mitten av "spelplanen" och rör sig sedan inte...
Skulle uppskatta om någon kunde ta en titt på koden och berätta var det är jag tänkt fel!
Tack på förhand.
import java.applet.*;
import java.awt.*;
import java.io.*;
public class Snake extends Applet implements Runnable
{
boolean gameOver = true;
int stop = 0;
int appletsize_x = 500;
int appletsize_y = 500;
int x_pos = appletsize_x / 2;
int y_pos = appletsize_y / 2;
int old_x[] = new int[45];
int old_y[] = new int[45];
int parts = 2;
int points = 0;
int radius = 10;
int dir = 0;
int speed = 30;
int newHighScore = points;
int highscore = newHighScore;
/*private void saveHighscore()
{
try
{
String filnamn = "Highscore.txt";
FileWriter fw = new FileWriter(filnamn,true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter utFil = new PrintWriter(bw);
String innehåll = "Highscore: " + highscore;
utFil.println(innehåll);
utFil.close();
}
catch (IOException ex)
{
}
}*/
public void init()
{
}
public void start()
{
Thread th = new Thread(this);
th.start();
}
public void stop()
{
}
public void destroy()
{
}
public boolean keyDown(Event e, int key)
{
if(key == Event.LEFT && gameOver != false)
{
if(dir != 2)
{
dir = 1;
}
}
else if(key == Event.RIGHT && gameOver != false)
{
if(dir != 1)
{
dir = 2;
}
}
else if(key == Event.UP && gameOver != false)
{
if(dir != 4)
{
dir = 3;
}
}
else if(key == Event.DOWN && gameOver != false)
{
if(dir != 3)
{
dir = 4;
}
}
else if(key == 33)
{
dir = 0;
speed = 30;
points = 0;
x_pos = appletsize_x / 2;
y_pos = appletsize_y / 2;
for(int i = 0; i < parts; i++)
{
old_x[i] = appletsize_x / 2;
old_y[i] = appletsize_y / 2;
}
gameOver = true;
}
else if(key == 32)
{
parts++;
}
return true;
}
public void run()
{
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
while(true)
{
for(int i = 0; i < parts; i++)
{
old_x[i] = appletsize_x / 2;
old_y[i] = appletsize_y / 2;
}
try
{
Thread.sleep(150);
}
catch (InterruptedException ex)
{
}
for(int i = parts; i > 0; i--)
{
old_x[i] = old_x[i - 1];
old_y[i] = old_y[i - 1];
}
switch(dir)
{
case 1:
x_pos -= speed;
points += 5;
break;
case 2:
x_pos += speed;
points += 5;
break;
case 3:
y_pos -= speed;
points += 5;
break;
case 4:
y_pos += speed;
points += 5;
break;
default:
old_x[0] = x_pos;
break;
}
repaint();
try
{
Thread.sleep(150);
}
catch (InterruptedException ex)
{
}
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
}
}
public void paint(Graphics g)
{
g.setColor(Color.GREEN);
g.fillRect(0, 0, appletsize_x, appletsize_y);
g.setColor(Color.RED);
for(int i = 0; i < parts; i++)
{
g.fillRect(old_x[i] - radius, old_y[i] - radius, 2 * radius, 2 * radius);
}
g.setColor(Color.BLACK);
g.fillRect(x_pos - radius, y_pos - radius, 2 * radius, 2 * radius);
g.drawString("Restart: Spacebar", 10, 80);
g.drawString("Parts: " + parts, 10, 60);
g.drawString("Points: " + points, 10, 40);
g.drawString ("Highscore: " + highscore, 10, 20);
if(x_pos == appletsize_x || x_pos > appletsize_x)
{
dir = 0;
speed = 0;
g.setColor(Color.BLACK);
g.drawString ("GAME OVER", 200, 200);
gameOver = false;
}
if(y_pos == appletsize_y || y_pos > appletsize_y)
{
dir = 0;
speed = 0;
g.setColor(Color.BLACK);
g.drawString ("GAME OVER", 200, 200);
gameOver = false;
}
if(x_pos == 0 || x_pos < 0)
{
dir = 0;
speed = 0;
g.setColor(Color.BLACK);
g.drawString ("GAME OVER", 200, 200);
gameOver = false;
}
if(y_pos == 0 || y_pos < 0)
{
dir = 0;
speed = 0;
g.setColor(Color.BLACK);
g.drawString ("GAME OVER", 200, 200);
gameOver = false;
}
}
}
| Sony A580 | Sigma 10-20/4-5.6 | Tamron 17-50/2.8 | Sigma 70/2.8 Macro | Konica Minolta 50/1.7 | Konicha Minolta 75-300/4.5-5.6 |