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

非常幸运这个学期在互动媒体技术这门课上深入的了解了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) 
  • 6
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下面是一个简单的示例代码,演示了如何使用Processing和Arduino来实现一个名为"点亮灯泡"的小游戏: Arduino端代码: ```arduino const int buttonPin = 2; const int ledPin = 13; void setup() { pinMode(buttonPin, INPUT_PULLUP); pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { int buttonState = digitalRead(buttonPin); // 按下按钮时发送信号给Processing if (buttonState == LOW) { Serial.println("buttonPressed"); digitalWrite(ledPin, HIGH); delay(500); digitalWrite(ledPin, LOW); delay(500); } delay(10); } ``` Processing端代码: ```java import processing.serial.*; Serial arduino; boolean isButtonPressed = false; void setup() { size(200, 200); // 根据需要修改串口号和波特率 arduino = new Serial(this, "COM3", 9600); } void draw() { background(0); // 检测从Arduino发送的按钮状态 while (arduino.available() > 0) { String data = arduino.readStringUntil('\n'); if (data != null) { data = data.trim(); if (data.equals("buttonPressed")) { isButtonPressed = true; } } } // 绘制游戏界面 if (isButtonPressed) { fill(255, 0, 0); ellipse(width/2, height/2, 100, 100); } else { fill(255); ellipse(width/2, height/2, 100, 100); } isButtonPressed = false; } ``` 这个示例中的游戏很简单,当你按下Arduino上的按钮时,Processing中的圆形会变成红色。当你松开按钮时,圆形会变回白色。 要运行这个示例,你需要将一个按钮连接到Arduino的引脚2(buttonPin),并将一个LED连接到引脚13(ledPin)。然后,在Arduino IDE中上传Arduino代码,并在Processing中运行Processing代码。 当你按下按钮时,Arduino会发送一个信号给ProcessingProcessing会根据接收到的信号来更新游戏界面。这个示例只是一个基础的小游戏,你可以根据需要扩展和改进它。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值