Java 敌方任意位置

Java 敌方任意位置,java,processing,collision,Java,Processing,Collision,因此,我试图编写一个游戏,当你躲开敌人,敌人走到屏幕的尽头,一个你自己的迷你版本产生,如果你或你的迷你你碰到敌人,游戏结束。我现在被困在生成随机位置的敌人后,它去了屏幕的尽头。任何人都有一个想法,我的敌人的位置只是在同一个位置反弹。而且,任何人都知道如何对主要生物和敌人进行碰撞检测。艾尔的帮助将不胜感激:(我是个呆子,被卡住了,请帮忙 int PosX = 10; int PosY = 10; int counter = 0; float enemyX; float enemyY; float

因此,我试图编写一个游戏,当你躲开敌人,敌人走到屏幕的尽头,一个你自己的迷你版本产生,如果你或你的迷你你碰到敌人,游戏结束。我现在被困在生成随机位置的敌人后,它去了屏幕的尽头。任何人都有一个想法,我的敌人的位置只是在同一个位置反弹。而且,任何人都知道如何对主要生物和敌人进行碰撞检测。艾尔的帮助将不胜感激:(我是个呆子,被卡住了,请帮忙

int PosX = 10;
int PosY = 10;
int counter = 0;
float enemyX;
float enemyY;
float speedX;
float speedY;
float creatureradius = 115;
boolean collisiondetected;



void setup(){
frameRate(60);
size(600,600); 
speedX = random(5);
speedY = random(3);

  
}

void draw(){
  background(154,206,203);
  doraemon();
  enemy();
  check();
  
  //if(collisiondetected = true){
    //gameOver();
  }

// draw the main creature
void doraemon(){
stroke(0,0,0);
fill(0,180,300); 
ellipse(mouseX,mouseY,115,115); 
stroke(0,0,0);
fill(255,255,255); 
ellipse(mouseX,mouseY+10,95,95); 
fill(255,255,255); 
stroke(0,0,0);
ellipse(mouseX-12,mouseY-40,20,30); 
fill(255,255,255); 
stroke(0,0,0);
ellipse(mouseX+12,mouseY-40,20,30); 
fill(0,0,0); 
stroke(0,0,0);
ellipse(mouseX+7,mouseY-45,8,8); 
fill(0,0,0); 
stroke(0,0,0);
ellipse(mouseX-7,mouseY-45,8,8); 
fill(255,0,0); 
stroke(0,0,0);
ellipse(mouseX,mouseY-25,15,15); 
fill(255,255,255); 
stroke(0,0,0);
line(mouseX,mouseY-18,mouseX,mouseY+20); 
line(mouseX-50,mouseY-18,mouseX-10,mouseY-10);
line(mouseX-55,mouseY-1,mouseX-10,mouseY);
line(mouseX-50,mouseY+17,mouseX-10,mouseY+10);
line(mouseX+55,mouseY+1,mouseX+10,mouseY);
line(mouseX+50,mouseY+16,mouseX+10,mouseY+10);
line(mouseX+50,mouseY-17,mouseX+10,mouseY-10);
fill(255,50,0); 
arc(mouseX, mouseY+20, 70, 70, 0, PI, PIE);
stroke(0);
fill(255,0,0); 
rect(mouseX-40,mouseY+55,80,10,7); 
fill(255, 247, 153);
ellipse(mouseX, mouseY+60, 15, 15);
check();
}


void MiniDoraemon(){
stroke(0,0,0);
fill(0,180,300); 
ellipse(mouseX,mouseY,115,115); 
stroke(0,0,0);
fill(255,255,255); 
ellipse(mouseX,mouseY+10,95,95); 
fill(255,255,255); 
stroke(0,0,0);
ellipse(mouseX-12,mouseY-40,20,30); 
fill(255,255,255); 
stroke(0,0,0);
ellipse(mouseX+12,mouseY-40,20,30); 
fill(0,0,0); 
stroke(0,0,0);
ellipse(mouseX+7,mouseY-45,8,8); 
fill(0,0,0); 
stroke(0,0,0);
ellipse(mouseX-7,mouseY-45,8,8); 
fill(255,0,0); 
stroke(0,0,0);
ellipse(mouseX,mouseY-25,15,15); 
fill(255,255,255); 
stroke(0,0,0);
line(mouseX,mouseY-18,mouseX,mouseY+20); 
line(mouseX-50,mouseY-18,mouseX-10,mouseY-10);
line(mouseX-55,mouseY-1,mouseX-10,mouseY);
line(mouseX-50,mouseY+17,mouseX-10,mouseY+10);
line(mouseX+55,mouseY+1,mouseX+10,mouseY);
line(mouseX+50,mouseY+16,mouseX+10,mouseY+10);
line(mouseX+50,mouseY-17,mouseX+10,mouseY-10);
fill(255,50,0); 
arc(mouseX, mouseY+20, 70, 70, 0, PI, PIE);
stroke(0);
fill(255,0,0); 
rect(mouseX-40,mouseY+55,80,10,7); 
fill(255, 247, 153);
ellipse(mouseX, mouseY+60, 15, 15);

}

  
void enemy(){
  fill(100,100,240);
  ellipse (enemyX, enemyY, 50,50);
  ellipse (enemyX, enemyY +10 , 100, 30);  
  enemymove();
  }


void enemymove(){
  outofbound();
  enemyX = enemyX+speedX;
  enemyY = enemyY+speedY;
}

void outofbound(){
  if((enemyX > width+80 || enemyX < -80) && (enemyY>height+80 || enemyY < -80)){
    random(enemyX);
    random(enemyY);
    speedX = speedX * -1;
    speedY = speedY * -1;
    
}
}

void spawnMiniDoraemon(){
  MiniDoraemon();
}

  
void distance(){
  
}





void check(){
if (dist(mouseX,mouseY,enemyX,enemyY)< 50+creatureradius){
  fill(255);
}else{
  fill(0);
}
}
  
    


  

void gameover(){
}


// Swarming effect:
int Swarm(int starting, int end){
  int fly = (end - starting)/24 + starting;
  return fly;
  

}
intposx=10;
int-PosY=10;
int计数器=0;
漂浮灌肠;
漂浮灌肠;
浮动速度x;
快速浮动;
浮点数creatureradius=115;
布尔冲突检测;
无效设置(){
帧率(60);
尺寸(600600);
speedX=随机(5);
快速=随机(3);
}
作废提款(){
背景(154206203);
哆啦A梦();
敌人();
检查();
//如果(collisiondetected=true){
//gameOver();
}
//画出主要的生物
虚空哆啦A梦(){
冲程(0,0,0);
填充(0180300);
椭圆(mouseX,mouseY,115115);
冲程(0,0,0);
填充(255255);
椭圆(mouseX,mouseY+10,95,95);
填充(255255);
冲程(0,0,0);
椭圆(mouseX-12,mouseY-40,20,30);
填充(255255);
冲程(0,0,0);
椭圆(mouseX+12,mouseY-40,20,30);
填充(0,0,0);
冲程(0,0,0);
椭圆(mouseX+7,mouseY-45,8,8);
填充(0,0,0);
冲程(0,0,0);
椭圆(mouseX-7,mouseY-45,8,8);
填充(255,0,0);
冲程(0,0,0);
椭圆(mouseX,mouseY-25,15,15);
填充(255255);
冲程(0,0,0);
线路(mouseX,mouseY-18,mouseX,mouseY+20);
线路(mouseX-50、mouseY-18、mouseX-10、mouseY-10);
线路(mouseX-55、mouseY-1、mouseX-10、mouseY);
线路(mouseX-50、mouseY+17、mouseX-10、mouseY+10);
行(mouseX+55,mouseY+1,mouseX+10,mouseY);
行(mouseX+50、mouseY+16、mouseX+10、mouseY+10);
线路(mouseX+50、mouseY-17、mouseX+10、mouseY-10);
填充(255,50,0);
弧(mouseX,mouseY+20,70,70,0,PI,PIE);
冲程(0);
填充(255,0,0);
rect(mouseX-40,mouseY+55,80,10,7);
填充(255、247、153);
椭圆(mouseX,mouseY+60,15,15);
检查();
}
虚空迷你哆啦A梦(){
冲程(0,0,0);
填充(0180300);
椭圆(mouseX,mouseY,115115);
冲程(0,0,0);
填充(255255);
椭圆(mouseX,mouseY+10,95,95);
填充(255255);
冲程(0,0,0);
椭圆(mouseX-12,mouseY-40,20,30);
填充(255255);
冲程(0,0,0);
椭圆(mouseX+12,mouseY-40,20,30);
填充(0,0,0);
冲程(0,0,0);
椭圆(mouseX+7,mouseY-45,8,8);
填充(0,0,0);
冲程(0,0,0);
椭圆(mouseX-7,mouseY-45,8,8);
填充(255,0,0);
冲程(0,0,0);
椭圆(mouseX,mouseY-25,15,15);
填充(255255);
冲程(0,0,0);
线路(mouseX,mouseY-18,mouseX,mouseY+20);
线路(mouseX-50、mouseY-18、mouseX-10、mouseY-10);
线路(mouseX-55、mouseY-1、mouseX-10、mouseY);
线路(mouseX-50、mouseY+17、mouseX-10、mouseY+10);
行(mouseX+55,mouseY+1,mouseX+10,mouseY);
行(mouseX+50、mouseY+16、mouseX+10、mouseY+10);
线路(mouseX+50、mouseY-17、mouseX+10、mouseY-10);
填充(255,50,0);
弧(mouseX,mouseY+20,70,70,0,PI,PIE);
冲程(0);
填充(255,0,0);
rect(mouseX-40,mouseY+55,80,10,7);
填充(255、247、153);
椭圆(mouseX,mouseY+60,15,15);
}
无效敌人(){
填充(100100240);
椭圆(灌肠,灌肠,50,50);
椭圆(灌肠,灌肠+10100,30);
灌肠移动();
}
void enemymove(){
离谱();
enemyX=enemyX+speedX;
灌肠=灌肠+快速;
}
void out of bound(){
如果((灌肠>宽度+80|||灌肠<-80)&(灌肠>高度+80||灌肠<-80)){
随机(灌肠);
随机(灌肠);
speedX=speedX*-1;
迅捷=迅捷*-1;
}
}
迷你哆啦A梦(){
迷你哆啦A梦();
}
空隙距离(){
}
无效检查(){
if(距离(鼠标、鼠标、灌肠、灌肠)<50+创造者半径){
填充(255);
}否则{
填充(0);
}
}
void gameover(){
}
//群集效应:
int Swarm(int开始,int结束){
int fly=(结束-启动)/24+启动;
回飞;
}

Java严格按值传递。因此,
随机(enemyX)
复制当前持有的
enemyX
的值,并将此副本传递给
random
方法,然后该方法完全被拧紧,无法执行此任务:它可以整天修改其副本,这不起任何作用,无法确定您是否通过了
enemyX
(比如说,
enemyY
),你不会对结果做任何事情

相反,您正在寻找:

enemyX = random();
其中,随机性是指:

private static final Random rnd = new Random(PosX);

float random(int max) {
    return max * rnd.nextFloat();
}

您的代码很难阅读;大概游戏环境定义为X位置在[0,PosX]和[0,PosY]之间对于Y位置,但如果这是错误的,则相应地调整上述代码。

像write@rzwitserloot一样,您的代码不清楚,无法理解您的问题。您需要编写一个尽可能小的代码,以隔离您的错误或问题。但当我阅读代码的最后一部分时,我可能会随机阅读
(enemyX)
这是一个问题,因为这一行生成的随机值的范围等于
0
enemyX
就是这样,之后就不用了。也许你需要这样写:
enemyX=random(enemyX)
但我不是你想要的

以防万一,一个重构程序会像那样咬到你的代码的一部分……如果这有帮助的话

int enemyX = 10000;
int enemyY = 10000;
int speedX = 1;
int speedY = 1;
void setup() {
  println("before ",enemyX,enemyY,speedX,speedY);
  outofbound();
  println("after ",enemyX,enemyY,speedX,speedY);
}

void outofbound() {
  int marge = 80;
  int min_x = -marge;
  int max_x = width+marge;
  int min_y = -marge;
  int max_y = width+marge;
  println("canvas",min_x,max_x,min_y, max_y);
  if((enemyX > max_x || enemyX < min_x) && (enemyY > max_y || enemyY < min_y)) {
    enemyX = (int)random(min_x, max_x);
    enemyY = (int)random(min_y, max_y);
    speedX = speedX * -1;
    speedY = speedY * -1;
  }
}
int-enemyX=10000;
int enemyY=10000;
int-speedX=1;
int=1;
无效设置(){
println(“之前”,enemyX,enemyY,speedX,speedY);
离谱();
println(“之后”,enemyX,enemyY,speedX,speedY);
}
void out of bound(){
int-marge=80;
int min_x=-marge;
int max_x=宽度+边缘;
int min_y=-marge;
int max_y=宽度+边缘;
println(“画布”,最小值x,最大值x,最小值y,最大值y);
如果((灌肠>最大灌肠<最小灌肠)&(灌肠>最大灌肠<最小灌肠)){
enemyX=(int)随机(最小值x,最大值x);
enemyY=(int)随机(最小值,最大值);
speedX=speedX*-1;
迅捷=迅捷*-1;
}
}

您可以在此处寻求帮助,但在此之前,请尝试编写一个非常简单的代码。

当您在outbound中调用random时,您不会将结果分配给任何内容。