使用processing写一个仿雷电小游戏

本文介绍了使用processing仿写《雷电》小游戏的过程,包括背景云彩的随机生成、飞行尾气效果、击中敌人的粒子效果、怪物类和武器系统的实现。文章详细讨论了各个关键功能的代码实现和设计思路,展示了作者在互动媒体技术课程中学到的知识应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

非常幸运这个学期在互动媒体技术这门课上深入的了解了Daniel Shiffman的《代码本色 The Nature of Code》 这本书,在课程最后,老师也是希望我们能利用书中的内容做一个交互应用出来,这就是我们本次博文内容的主题啦。

1.前言

那么怎么才能让这个交互小应用变得足够有趣呢,我思考了很多的表现形式,最终还是回到了我比较熟悉的游戏上来。
当然,可供选择的游戏模式依旧有很多,正好在思考这个问题的几天里,我的网易云推给了我一首FC游戏的bgm,一下子无数回忆涌上心头,就想使用processing仿照着去写一个小时候玩过的《雷电》

2.内容展示

在这里插入图片描述

3.实现过程

首先我们需要实现这个小应用需要什么功能,然后再把这些功能抽象成一个个类,这样实现起来会方便很多。
然后我们可以想到,我们需要的有:子弹类,主角类,云彩类,怪物类,飞机尾气类还有子弹消失的粒子效果类。
这些类别共同构成了我们可以进行交互娱乐的游戏应用,接下来我们就几个关键技术看他们的具体实现。

3.1.背景云彩的随机生成

在这份小游戏中,背景由天蓝色的整体颜色以及白色的云朵组成,在这里我们可以设定云彩的数量上限,然后在每次初始化的时候进行随机生成。

class cloud {
   
   
  int num_cloud;
  float[] bgptx;
  float[] bgpty;

  cloud(int num) {
   
   
    bgptx = new float[num];
    bgpty = new float[num];
    num_cloud = num;
    for (int i = 0; i<num_cloud; i++) {
   
   
      bgptx[i] = random(-width*0.4, boxx+width*0.4);
      bgpty[i] = random(-height*0.4, boxy+height*0.4);
    }
  }

  void update() {
   
   
    show();
  }

  void show() {
   
   
    for (int i = 0; i<num_cloud; i++) {
   
   
      noStroke();
      fill(255);
      ellipse(bgptx[i]+anchordist.x, bgpty[i]+anchordist.y, 130, 130);
      ellipse(bgptx[i]+anchordist.x+80, bgpty[i]+anchordist.y+10, 100, 100);
      ellipse(bgptx[i]+anchordist.x+130, bgpty[i]+anchordist.y+30, 55, 55);
      ellipse(bgptx[i]+anchordist.x-80, bgpty[i]+anchordist.y+10, 95, 95);
    }
  }
}

在这里我们可以看到,cloud在执行构造函数时,每次都会通过random()函数随机地获得一个坐标位置,然后在show()函数中,在这个随机位置上,绘制云彩的图案。

然后我们在背景类中实体化云彩类,最后在主页sketch中调用实体化的背景类——层层调用。

// 背景类的构造函数
background() {
   
   
    bds = new bullet_die_particle ();
    cl = new cloud(20);// 每次生成20朵云
  }
// sketch主页上的调用
public background bg;
bg = new background();
void draw() {
   
   
    bg.show();
  }

3.2.飞行尾气的实现

在这里插入图片描述
要实现每次按动方向键就能出现飞行尾气,我们首先需要能产生“一条”尾气。
所以我们这里建立两个类,一个onefire,一个powerFire,虽然二者至今没有直接的继承关系,但是由于他们关系密切,我们将他们放在一个标签页中。
这里我们可以想到,对于“一条”尾气来说,他应该有三个参数,位置,速度,以及判断是否处在“加速”状态(方向键按下)。
接下来我们看一下onefire类的构造函数。

onefire(PVector loc0, PVector vel0, boolean powerup) {
   
   
    loc = new PVector(loc0.x, loc0.y
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值