一杆子打到底

问题描述 投票:0回答:1

嘿,伙计们,我正在做一个台球游戏和大部分完成,但我似乎只是想弄清楚一些最后的步骤,基本上一切都是正确的,除了这些细节。任何人都可以请帮助我如此接近。

在任何时候,按键盘上的'c'键都会清除游戏,允许玩家再次尝试。

第1步--鼠标第一次左键点击时,应显示一个白色的提示球,位于鼠标被点击时的中心位置。

第2步-第二次左击鼠标时,在鼠标被点击的地方应该显示一个目标球,目标球的颜色应该与提示球不同。 目标球应该与提示球的颜色不同。 注意,目标球不能放在球杆球的上面。 在这个步骤中,你应该测量两个球之间的距离,所以你知道台球要走多远。

第3步--当两个球都显示出来后,左键点击会向目标球发射提示球。

第4步 - 当提示球触及目标球的边缘时,提示球应该停止,目标球应该以相同的速度向同一方向移动,并移动相同数量的距离,提示球移动第5步 - 现在所有的动作都发生了,你可以重置整个应用程序,将其设置为第3步,或者什么都不做,并通知用户点击C按钮。

这是我的代码,我真的很感激大家的帮助。

ball whiteBall, blackBall;
int click;
String msg;
Boolean moving = false;
int difx, dify;
float cdistance;
int steps = 20;
void setup(){
   click=0;
   size(600,400);
   background(16,77,27);
   whiteBall = new ball(35,#ffffff);
   blackBall = new ball(35,#000000);
   msg="";
}

void mouseClicked(){
  if(!moving){
 click++; 
  }
}

void draw(){
  background(20,100,20);
  String msg;
  fill(0,0,0);





 fill(200,200,200);
 noStroke();  
 blackBall.xpos=(300 );
 blackBall.ypos=height/2;
 blackBall.update();
 if(click==0){
  whiteBall.xpos=mouseX;
  whiteBall.ypos=mouseY;
 }else if(click==1){
   difx = whiteBall.xpos-blackBall.xpos;
   dify = whiteBall.ypos-blackBall.ypos;
 }else if(click==2){
  cdistance = dist(whiteBall.xpos,whiteBall.ypos,blackBall.xpos,blackBall.ypos);
   if (cdistance>blackBall.ballDiam/2){
    moving = true;
    whiteBall.xpos-=difx/steps;
    whiteBall.ypos-=dify/steps;
   }else{
      moving = false;
      whiteBall.visible=false;
      click=3;
   } 
 }
 whiteBall.update();
}

class ball{
  int xpos, ypos;
  color myColor;
  int ballDiam;
  boolean visible = true;
  ball(int tempdiam, color tempColor){
    myColor=tempColor;
    ballDiam=tempdiam;
  }

   void update(){
   if(visible){
    fill(myColor);
    ellipse(xpos,ypos,ballDiam,ballDiam);
   }
  }
}
processing
1个回答
0
投票

要检测你什么时候打到球,用dist(pos1.x,pos1.y,pos2.x,pos2.y)和(size1+size2)比较,如果dist()比较小,说明他们已经碰撞了,你就改变速度。

© www.soinside.com 2019 - 2024. All rights reserved.