试图打完台球比赛

时间:2014-04-16 23:49:41

标签: processing

嘿伙计们我正在制作一个台球游戏,并且大部分时间我已经完成但我似乎无法弄清楚几个最后的步骤基本上一切都是正确的,除了这些细节。任何人都可以帮助我这么近。

在任何时候,按下键盘上的“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);
   }
  }
}

1 个答案:

答案 0 :(得分:0)

要检测何时击球,请使用dist(pos1.x,pos1.y,pos2.x,pos2.y)并将其与(size1 + size2)进行比较。如果dist()较小,则说明它们已发生碰撞,因此您更改了速度。