代码本色应用demo,互动媒体课程作业

代码本色应用demo,互动媒体课程作业
这个游戏是一个变种的贪吃蛇一类游戏,是一群围绕鼠标旋转的粒子,需要控制鼠标让他们获取跟多同类和躲避敌人,使用到了代码本色的0,1,2,3章的随机,向量,力和三角函数。

开发过程
简单的就不赘述了,主要讲开发中特别的地方,首先没有使用background,而是使用
 fill(2,2,2,15);
  rect(0,0,width,height);
这样就实现了轨迹的效果。
开始菜单中
 if(mouseX>100 && mouseX<width-200 && mouseY>height/2+20 && mouseY<height/2+75){
    textSize(45);
    text("START",width/2-10,height/2+20);
  }
  else{
    textSize(40);
    text("START",width/2-10,height/2+20);
  }
这段代码的作用是当鼠标移动到start上面的时候,字母会变大,提示这个是可以点击的

还有开始菜单的背景
void lizivertical(){
  pushMatrix();
  for(int i = 0;i<width;i=i+2){
      moriangle[i] += doriangle[i];
      v[i].lerp(i, sin(moriangle[i]*0.1)*(suijir[i]+height),0,easing[i]);
      fill(c[i]);
      ellipse(v[i].x, v[i].y, pointr[i],pointr[i]);
  }
  popMatrix();
}

接下来进入游戏之后,主要分为三种粒子。第一种是一开始就出现,围绕鼠标运动的,点击鼠标会聚集起来的部分,鼠标按下判断和显示
void mousePressed(){
  mv = false;
}

void mouseReleased(){
  mv = true;
}
if(mv){
    fill(#33CCFF);
    text("Spread",200,0);没有按下显示分散
  }
  if(!mv){
    fill(#FF6699);
    text("Gather",200,0);如果按下则显示聚集
  }
粒子系统
void lizixuanzhuan(float locationx,float locationy){
  pushMatrix();
  if(mv){
    eatr = r;
    for(int i = 0;i<num-1;i++){
      moriangle[i] += doriangle[i];
      v[i].lerp(locationx+cos(suijix[i]*moriangle[i])*(suijir[i]+r*suijix[i]), locationy+sin(suijix[i]*moriangle[i])*(suijir[i]+r*suijix[i]),0,easing[i]);
      fill(c[i]);
      ellipse(v[i].x, v[i].y, pointr[i],pointr[i]);
    }
  }
  if(!mv){
    eatr = ranger;
    for(int i = 0;i<num-1;i++){
      moriangle[i] += doriangle[i];
      v[i].lerp(locationx+cos(moriangle[i])*suijir[i], locationy+sin(moriangle[i])*suijir[i],0,easing[i]);
      fill(c[i]);
      ellipse(v[i].x, v[i].y, pointr[i],pointr[i]);
    }
  }
  popMatrix();
}
这段使用三角函数让粒子随时间做圆周旋转,填色采用随机填色,当鼠标按下的时候,旋转的半径被限制到5以内。
第二部分是同类单元
void friendchuxian(){
  pushMatrix();
  friendnum = 10;
  friendr = 10;
  if(distance(chuxianx[k],chuxiany[k],mouseX,mouseY) > eatr+friendr){
      for(int i = 0;i<friendnum+19;i++){
      moriangle[i] += doriangle[i];
      vv[i].lerp(chuxianx[k]+cos(moriangle[i])*(suijir[i]+friendr), chuxiany[k]+sin(moriangle[i])*(suijir[i]+friendr),0,easing[i]);
      fill(c[i+k*friendnum]);
      ellipse(vv[i].x, vv[i].y, pointr[i],pointr[i]);
    }  
  }
  if(distance(chuxianx[k],chuxiany[k],mouseX,mouseY) <= eatr+friendr){
    k++;
    r+=2;
    num+=50;
  }
  popMatrix();
}
基本结构和主体一样,当和主体碰撞的时候,主体半径增加,计数增加
最后一种是敌人
class Mover {
  PVector position;
  PVector velocity;
  PVector acceleration;
  float mass;

  Mover(float m, float x, float y) {
    mass = m;
    position = new PVector(x, y);
    velocity = new PVector(1, 0);
    acceleration = new PVector(0, 0);
  }

  void applyForce(PVector force) {
    PVector f = PVector.div(force, mass);
    acceleration.add(f);
  }

  void update() {
    velocity.add(acceleration);
    position.add(velocity);
    acceleration.mult(0);
  }

  void display() {
    fill(255,255,255);
    rect(position.x, position.y, mass*3+2, mass*3+2);
    if(num>50){
      if(distance(position.x,position.y,mouseX,mouseY) <= eatr+5){
          r-=0.1;
          num-=2.5;
      }
    }
  }
}
敌人跟随控制
class Attractor {
  float mass;    
  float G;       
  PVector position;   
  PVector dragOffset;

  Attractor() {
    position = new PVector(width/2,height/2);
    mass = 20;
    G = 1;
    dragOffset = new PVector(0.0,0.0);
  }
    PVector attract(Mover m) {
    PVector force = PVector.sub(position,m.position);   
    float d = force.mag();                              
    d = constrain(d,5.0,25.0);                        
    force.normalize();                                  
    float strength = (G * mass * m.mass) / (d * d);      
    force.mult(strength);                                 
    return force;
  }
  
  void drag() {
    position.x = mouseX + dragOffset.x;
    position.y = mouseY + dragOffset.y;
  }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值