Håller på med ett litet snake spel i java applet. Detta spel är inte tänkt att masken ska bli längre efter en viss period utan masken har fast startpunkt. Om man kör in i väggen så "dör" masken. Nu till problemet, ytan som masken får åka omkring på är 700x700 och för att kolla om man kört in i sig själv har jag skapat en: int xkorall[701] (inte 699 för att jag vill kunna ha x kordinaten 700 på 700 och inte på 699) och en ykorall[701].
Om masken är på kordinaten (400,500) så kommer xkor[400] att gå från värdet 0 till 400 och ykor[500] få värdet 500. Sedan kommer samma procedur att hända på nästa punkt som masken är på.
Problemet är att detta inte fungerar alls i praktiken, programet verkar skita fullständigt i att kolla båda kordinaterna, den verkar bara kolla en.
Kan någon hjälpa mig snälla! har försökt i flera dagar nu!
Här är programkoden (Notera att jag imortat mer än som behövs och att jag har vissa funktioner som egentligen inte har med spelet alls att göra!)
det verkar inte fungera att klippa in texten riktigt så det blir lite konstigt utseende på koden.
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;
import java.lang.*;
import java.applet.*;
import java.awt.print.*;
public class snakey01 extends Applet implements Runnable{
int keyCode;
String keyPos;
int x = 500;
int y = 500;
int Code;
Thread t;
int delay = 40;
int dir = 0;
int timer = 0;
int n = 0;
int g = 0;
int[] xkorall = new int[701];
int[] ykorall = new int[701];
int go = 0;
//Detta är bara skräp!
/*class WindowListeners extends WindowAdapter {
public void windowDeactivated(WindowEvent evt) {
}
public void windowClosing(WindowEvent evt) {
}
} */
class onKey extends KeyAdapter{
public void keyPressed (KeyEvent e) {
Code = e.getKeyCode();
//trycker man höger lr vänstar så ökar eller minskar dir:s värde och masken får en ny riktning (längre ned!)
if (Code == 39) {
dir++;
if (dir > 3){
dir = 0;
}
}
else if (Code == 37) {
dir--;
if (dir < 0){
dir = 3;
}
}
else {
dir = dir;
}
//Detta är bara skräp!
keyCode = e.getKeyCode();
keyPos = e.getKeyCode() == 65 ? "hej" : "down";
repaint();
}
public void keyReleased (KeyEvent e) {
//Allt detta är skräp också!
Code = e.getKeyCode();
keyCode = e.getKeyCode();
keyPos = "up";
repaint();
}
}
public void init() {
//Startar en ny tråd med namnet "t"
t=new Thread(this);
t.start();
setBackground(Color.black);
setForeground(Color.white);
addKeyListener (new onKey());
}
public void start (){
}
public void run() {
//While-satsen är till för att men dör om man hamnar utanför spelplanen
while(x<700 && x>10 && y<700 && y>10){
//timer är bara till för att ändra maskens färg efter en viss tid. Sleep är bara för att masken
timer++;
try {
t.sleep(delay);
} catch (InterruptedException e) {}
//Detta är problemet! xkor har 701 värden och för varje gång en punkt ritas ut på skärmen så sparas de x och y värdet.
xkorall[x] = x;
ykorall[y] = y;
//Här sker själva ökandet på x eller y beroende på vad dir är.
if (dir == 0){
x++;
}
else if (dir == 1){
y++;
}
else if (dir == 2){
x--;
}
else {
y--;
}
/*Detta är en del av problemet! Masken borde bara dö om både x och y värdet stämmer
dvs där masken redan varit en gång men detta tycks inte fungera.!
Om masken "dör" så flyttas den bara till mitten (mest för att se när man "dör")
och go får ett väldigt högt värde som även de ritas ut som ett teckewn på att man är "död"*/
if (x == xkorall[x] && y == ykorall[y]){
x = 120;
y = 300;
go = 1000000;
}
repaint();
}
}
public void update(Graphics g) {
paint(g);
}
public void paint(Graphics g){
//detta ändrar bara färgen på masken efter en viss tid har passerat.
if (timer < 2000){
g.setColor(Color.yellow);
g.fillRect(x,y,1,1);
}
else {
g.setColor(Color.red);
g.fillRect(x,y,1,1);
}
//de första 2 strängarna är inget att bry sig om. x och y värdet där maskens huvud är skrivs ut continuerligt.
g.setColor(Color.green);
g.drawString(""+keyCode,20,20);
g.drawString(""+keyPos,60,20);
g.drawString(""+x,150,20);
g.drawString(""+y,200,20);
for (int n = 0;n < 4000000;n++){
}
g.setColor(Color.black);
g.drawString(""+x,150,20);
g.drawString(""+y,200,20);
g.setColor(Color.green);
/*en grön fyrkant ritas ut på samtliga punkter som masken kommer att dö på.
Detta är konstigt eftersom de gröna punkterna faktiskt följer efter den annars gula masken.*/
g.drawRect(xkorall[x],ykorall[y],0,0);
g.drawRect(10,10,690,690);
g.drawRect(9,9,692,692);
g.drawRect(8,8,694,694);
g.drawString(""+go,500,20);
}
}