Nytt problem .. Jag har lagt till ett hinder som ska avsluta spelet när du träffar det. Problemet är att hindret spawnar ibland mitt på mitt hinder eller mitt på mig, försökte avhjälpa det med
if(bilx<hinderx)
if(bilx+50>hinderx)
if(bily<hindery)
if(bily+50>hindery){
hinderx= RADIE+(1200-2*RADIE)*Math.random();
hindery= RADIE+(400-2*RADIE)*Math.random();}
if(bilx<hinderx)
if(bilx+50>hinderx)
if(bily>hindery)
if(bily-50<hindery){
hinderx= RADIE+(1200-2*RADIE)*Math.random();
hindery= RADIE+(400-2*RADIE)*Math.random();}
if(bilx>hinderx)
if(bilx-50<hinderx)
if(bily<hindery)
if(bily+50>hindery){
hinderx= RADIE+(1200-2*RADIE)*Math.random();
hindery= RADIE+(400-2*RADIE)*Math.random();}
if(bilx>hinderx+RADIEF)
if(bilx-50<hinderx+RADIEF)
if(bily>hindery+RADIEF)
if(bily-50<hindery+RADIEF){
hinderx= RADIE+(1200-2*RADIE)*Math.random();
hindery= RADIE+(400-2*RADIE)*Math.random();}
//------------------------------------------------------------------------------
if(targetx<hinderx)
if(targetx+50>hinderx)
if(targety<hindery)
if(targety+50>hindery){
hinderx= RADIE+(1200-2*RADIE)*Math.random();
hindery= RADIE+(400-2*RADIE)*Math.random();}
if(targetx<hinderx)
if(targetx+50>hinderx)
if(targety>hindery)
if(targety-50<hindery){
hinderx= RADIE+(1200-2*RADIE)*Math.random();
hindery= RADIE+(400-2*RADIE)*Math.random();}
if(targetx>hinderx)
if(targetx-50<hinderx)
if(targety<hindery)
if(targety+50>hindery){
hinderx= RADIE+(1200-2*RADIE)*Math.random();
hindery= RADIE+(400-2*RADIE)*Math.random();}
if(targetx>hinderx+RADIEF)
if(targetx-50<hinderx+RADIEF)
if(targety>hindery+RADIEF)
if(targety-50<hindery+RADIEF){
hinderx= RADIE+(1200-2*RADIE)*Math.random();
hindery= RADIE+(400-2*RADIE)*Math.random();}
}
Något som inte hjälpte tyvärr. Linkar hela min källkod också,
package spel1;
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.VolatileImage;
public class KeyApp3 extends Applet implements Runnable,
KeyListener{
int DEATH= 1;
double hinderx= 600, hindery=325;
int RADIEF= 40;
int points= 0;
double targetx=200, targety=200;
VolatileImage bgi;
int WIDTH= 1210;
int HEIGHT= 760;
int RADIE=20;
double bilx=100, bily=100;
double vx=0, vy=0;
boolean leftDown= false, rightDown= false, up= false, down= false;
public void init(){
addKeyListener( this);
requestFocus();
}
public void paint( Graphics g)
{
g.drawRect(10,10,1200,750);
g.setColor( Color.gray);
g.fillRect(11,11,1199,749);
g.setColor( Color.black);
g.fillOval((int)hinderx-RADIEF,(int)hindery-RADIEF, 2*RADIEF, 2*RADIEF);
g.setColor( Color.red);
g.fillOval( (int)targetx-RADIE, (int)targety-RADIE, 2*RADIE, 2*RADIE);
g.setColor( Color.blue);
g.fillOval( (int)(bilx-RADIE), (int)(bily-RADIE), 2*RADIE, 2*RADIE);
if( DEATH==1338){
g.setColor( Color.black);
g.fillRect(10,10, 1200,750);
g.setColor( Color.red);
g.drawString( "YOU FAIL, bara "+points+" poäng. Better luck next time", 400,300);
}
}
public void update(Graphics g) {
if (bgi == null) {
bgi = createVolatileImage(1600, 1200);
this.requestFocus();
}
bgi.getGraphics().clearRect(0, 0, 1600, 1200);
paint(bgi.getGraphics());
g.drawImage(bgi, 0, 0, this);
}
public void start()
{
Thread ny= new Thread( this);
ny.start();
}
public void run()
{
while( true){
double dx= targetx- bilx;
double dy= targety- bily;
double distSqr= dx*dx+dy*dy;
if( distSqr< (RADIE+RADIE)*(RADIE+RADIE)){
targetx= RADIE+(1200-2*RADIE)*Math.random();
targety= RADIE+(400-2*RADIE)*Math.random();
points= points+1;
showStatus(points+" poäng");
RADIEF= RADIEF+5;
hinderx= RADIE+(1200-2*RADIE)*Math.random();
hindery= RADIE+(400-2*RADIE)*Math.random();
if(bilx<hinderx)
if(bilx+50>hinderx)
if(bily<hindery)
if(bily+50>hindery){
hinderx= RADIE+(1200-2*RADIE)*Math.random();
hindery= RADIE+(400-2*RADIE)*Math.random();}
if(bilx<hinderx)
if(bilx+50>hinderx)
if(bily>hindery)
if(bily-50<hindery){
hinderx= RADIE+(1200-2*RADIE)*Math.random();
hindery= RADIE+(400-2*RADIE)*Math.random();}
if(bilx>hinderx)
if(bilx-50<hinderx)
if(bily<hindery)
if(bily+50>hindery){
hinderx= RADIE+(1200-2*RADIE)*Math.random();
hindery= RADIE+(400-2*RADIE)*Math.random();}
if(bilx>hinderx+RADIEF)
if(bilx-50<hinderx+RADIEF)
if(bily>hindery+RADIEF)
if(bily-50<hindery+RADIEF){
hinderx= RADIE+(1200-2*RADIE)*Math.random();
hindery= RADIE+(400-2*RADIE)*Math.random();}
//------------------------------------------------------------------------------
if(targetx<hinderx)
if(targetx+50>hinderx)
if(targety<hindery)
if(targety+50>hindery){
hinderx= RADIE+(1200-2*RADIE)*Math.random();
hindery= RADIE+(400-2*RADIE)*Math.random();}
if(targetx<hinderx)
if(targetx+50>hinderx)
if(targety>hindery)
if(targety-50<hindery){
hinderx= RADIE+(1200-2*RADIE)*Math.random();
hindery= RADIE+(400-2*RADIE)*Math.random();}
if(targetx>hinderx)
if(targetx-50<hinderx)
if(targety<hindery)
if(targety+50>hindery){
hinderx= RADIE+(1200-2*RADIE)*Math.random();
hindery= RADIE+(400-2*RADIE)*Math.random();}
if(targetx>hinderx+RADIEF)
if(targetx-50<hinderx+RADIEF)
if(targety>hindery+RADIEF)
if(targety-50<hindery+RADIEF){
hinderx= RADIE+(1200-2*RADIE)*Math.random();
hindery= RADIE+(400-2*RADIE)*Math.random();}
}
double fx= hinderx-bilx;
double fy= hindery-bily;
double fdiag= (fx*fx)+(fy*fy);
if( fdiag< (RADIEF+RADIE)*(RADIEF+RADIE)){
vx=0;
vy=0;
DEATH= 1338;
}
if(leftDown) vx= vx- 0.05;
if(rightDown) vx= vx+ 0.05;
if(up) vy= vy- 0.05;
if(down) vy= vy+ 0.05;
if(bilx+RADIE >= WIDTH)
vx= 0.5*-vx-0.5;
if(bilx-RADIE<=10)
vx= 0.5*-vx+0.5;
if(bily+RADIE >= HEIGHT)
vy= 0.5*-vy-0.5;
if(bily-RADIE<=10)
vy= 0.5*-vy+0.5;
bilx= bilx+ vx;
bily= bily+ vy;
repaint();
try{ Thread.sleep( 10);} catch( InterruptedException ie){}
}
}
public void keyPressed(KeyEvent ke) {
if( ke.getKeyCode() == KeyEvent.VK_LEFT) leftDown= true;
if( ke.getKeyCode() == KeyEvent.VK_RIGHT) rightDown= true;
if( ke.getKeyCode() == KeyEvent.VK_UP) up= true;
if( ke.getKeyCode() == KeyEvent.VK_DOWN) down= true;
}
public void keyReleased(KeyEvent ke) {
if( ke.getKeyCode() == KeyEvent.VK_LEFT) leftDown= false;
if( ke.getKeyCode() == KeyEvent.VK_RIGHT) rightDown= false;
if( ke.getKeyCode() == KeyEvent.VK_UP) up= false;
if( ke.getKeyCode() == KeyEvent.VK_DOWN) down= false;
}
public void keyTyped(KeyEvent e) {}
}
Skulle bli glad om någon visste vad jag gjorde för fel. Hindret ska ju respawna om det spawnar på mig eller målet, men det vill sig inte