目录

  • 游戏内容
    • 1.开始界面
      • 1. 设定了 **字体**、**大小**、**颜色**、**位置**;
      • 2. 点击 **START** 开始游戏;
    • 2.过度场景
      • 1.得分情况
      • 2.生命值
      • 3.背景泡泡 用到《**代码本色**》第0章 **随机数** 随机产生泡泡
    • 3.游戏场景
      • 1.画鱼代码:
      • 2.鱼食:用到《代码本色》第1章 **向量**
      • 3.碰撞检测
        • 1.判断是否触碰到
        • 2.判断是否可食用
        • 3.加分
        • 4.针对红色鱼食的设定:如被吸收,鱼有几率得到进化(生命值、得分、速度)
        • 5.增长狂暴值能量
    • 4.升级/通关/GAME OVER
      • 1.通关/GAME OVER
      • 2.狂暴模式
  • 交互功能键
    • 开挂
      • 如玩家想降低难度,则可(大写模式下):
      • 如玩家想提高难度,则可(大写模式下):
  • 与《代码本色》的结合
    • 1.随机数
    • 2.向量
    • 3.继承
  • 效果展示
    • 正常版通关全过程

每次到了做作业的时候,总觉得漫漫学习夜需要点食物陪伴,于是这次做了一条能够吃了彩虹食物变大变强的鱼儿,和在代码海洋喂鲨鱼的我不同,我要让它称霸这片渔场。

这是一个简单的小游戏,玩法是:玩家操控小鱼去吃掉那些当前可以食用的鱼食,以此来不断升级得分并将小鱼变大变色,最后获得游戏的胜利。主要通过页面设计,游戏难易等级设定,增添交互的趣味性。

游戏内容

1.开始界面

1. 设定了 字体大小颜色位置

2. 点击 START 开始游戏;

该段代码判断是否点击中 start

 if (mousePressed && startTimer > 30) {if (abs(mouseX -  2 * width / 3) < 150 && (abs(mouseY -  height / 2) < 150)) {x = mouseX;y = mouseY;}}

如点击成功,则载入游戏场景;

}if (x != 0 && y != 0) {fill(0);size *= 1.05;ellipse(x, y, size, size);if (size >= 1200) {colorList = new int[5][1];loadColors("one");drawBar();b.redraw();p.displayLives();fill(0, fadeAgain);rect(0, 0, width, height);fadeAgain *= 0.95; if (fadeAgain <= 10)stages.moveToNextStage();}}

2.过度场景

在游戏开始之前,先显示当前 游戏难度等级状态栏(FrenzyTime进度条:蓄满之后一定时间内得分×2;当前分数;历史最高得分;当前可食用鱼食类型;生命值)。

1.得分情况

class Bar {float percent = 0;               // 得分进度条boolean frenzy;                  // 狂暴模式void displayScore() { fill(245, 90, 61);textAlign(LEFT, TOP);          // 左上对齐font = createFont(fName, 26);  // 载入字体textFont(font);int posX = 250;                // 分数栏位置int posY = barHeight / 2 - 15;text("score: " + score, posX, posY);text("high: " + highScore, posX + 160, posY);}void redraw() {stroke(10);strokeWeight(2);strokeCap(ROUND);rect(30, 30, 150, 20);noStroke();    fill(0);if (percent <= 0) percent = 0;if (percent >= 100) {percent = 100;frenzy = true;}if (frenzy) {displayFrenzy();if (percent <= 0) frenzy = false;} else percent -= 0.03;rect(34, 34, 142*percent*0.01, 13);  displayScore();displayFish();}void addPercent(float s) {percent += s * 0.2;}void displayFrenzy() {percent -= 0.1;textAlign(CENTER);font = createFont(fName, 50);textFont(font);fill(#FFCC00);text("FRENZY", width / 2, barHeight + 100);}void displayFish() {int x = width / 2 + 100; int y = barHeight / 2;Fish[] fish = new Fish[5];for (int i = 0; i < 5; i++) {int s = (i + 1) * 10;int move = (s + 10) / 2;fish[i] = new Fish(s, x, y, true);x += s / 2 + 2;stroke(0);strokeWeight(1);if (p.size >= s && p.size < s + 10) line(x, y - move, x, y + move);noStroke();x += move + 3;}}
}

2.生命值

  void displayLives() {int temp = 0;int pos = 900;text("HP:" , 840, 23);while (temp < 3) {strokeWeight(1);stroke(255, 0, 0);  if (temp < lives) fill(255, 0, 0);else {noFill();}ellipse(pos, barHeight / 2, 25, 25);noStroke();temp+=1;pos+=30;}}

3.背景泡泡 用到《代码本色》第0章 随机数 随机产生泡泡

class Bubble {float size;PVector position = new PVector();boolean gone;float speed;Bubble() {size = random(2, 13);position.x = random(0, width-300);position.y = height+size;speed = size*2/5;}void update() {stroke(255);strokeWeight(1);fill(166, 223, 248, 100);ellipse(position.x, position.y, size, size);position.y-=speed;if (position.y<-2*size) {gone = true;}}
}

3.游戏场景

1.画鱼代码:

 void redraw() {noStroke();fill(R,G,B);triangle(centerX,centerY, centerX-size, centerY-size/3, centerX-size, centerY+size/3);ellipse(centerX, centerY, size*1.15, size);colorMode(RGB) ;fill(255);ellipse(centerX+size/5,centerY,size/3,size/3);fill(0);ellipse(centerX+size/4,centerY,size/5,size/5);triangle(centerX-size/2,centerY, centerX-size/4, centerY-size/4, centerX-size/4, centerY+size/4); }

2.鱼食:用到《代码本色》第1章 向量

用于计算鱼食和鱼的关系,如果鱼食比鱼体积大则会以一定速度向鱼冲刺,否则会以一定速度远离鱼。

void update() {    if (nextLevelAnimation) {accelX += 20 / size * dirX * -0.5;accelY = 0;} else {float deltaX = p.centerX-centerX;float deltaY = p.centerY-centerY;changeX(deltaX);changeY(deltaY);smaller = p.size > this.size;if (smaller) {if (within(deltaX, deltaY, (int)size * 4)) {accelX += 20 / size * dirX * -0.5;accelY += 20 / size * dirY * -0.5;}} else {if (within(deltaX, deltaY, (int)size * 4)) {//acceleration is greater the smaller it isaccelX += 20 / size * dirX * 1;accelY += 20/ size * dirY * 1;}}}if (display) {speedX = 0; speedY = 0;accelX = 0; accelY = 0;}centerX += (speedX + accelX) / frameRate * 1.5;centerY += (speedY + accelY) / frameRate * 1.5;redraw();}

3.碰撞检测

1.判断是否触碰到
boolean touching(Fish t) {float distance = p.size / 2 + t.size / 2;boolean x = abs(t.centerX - p.centerX) < distance;boolean y = abs(t.centerY - p.centerY) < distance;return x && y;
}
2.判断是否可食用
boolean canEat(Fish t) {return touching(t) && (t.size < p.size) && !p.lifeAnimation;
}boolean canBeEaten(Fish t) {return touching(t) && (t.size >= p.size) && !p.lifeAnimation && !(p.invulnerable > 0);
}
3.加分
void updateFish() {for (Fish f : fishies) {f.update();if (f.outOfBounds()) {fishies.remove(f);break;}if (canEat(f)) {eat(f);if (b.frenzy)score += f.size * multi * 2;else score += f.size * multi;break;} if (canBeEaten(f)) {p.loseLife();p.invulnerable += 270;break;}}
}
4.针对红色鱼食的设定:如被吸收,鱼有几率得到进化(生命值、得分、速度)
void absorb(Powerup pow) {if (random(2) < 1) {if (p.lives < 3)p.lives++;} else if (random(500) < 1) {score = (round(score * 1.5));if (b.frenzy)score = (round(score * 1.5));} else if (random(10) < 1) {p.speedBoost = 50;p.springing = 0.05;} else {p.invulnerable = 250;}powers.remove(pow);
}
5.增长狂暴值能量
void eat(Fish f) {p.upsize((f.size + 5) / p.size * 0.25);if (!b.frenzy)b.addPercent((f.size + 5) / p.size * f.size * multi);fishies.remove(f);
}

4.升级/通关/GAME OVER

1.通关/GAME OVER

if (win) {winScreen();} else if (!(p.dead) && !win) {fillBlack(); p.update();updatePowers();updateFish();nextLevelCheck();if (!nextLevelAnimation) addFish();   addPowers();//menu bardrawBar();b.redraw();p.displayLives();} else gameOver();}

2.狂暴模式

void redraw() {stroke(10);strokeWeight(2);strokeCap(ROUND);rect(30, 30, 150, 20);noStroke();    fill(0);if (percent <= 0) percent = 0;if (percent >= 100) {percent = 100;frenzy = true;}if (frenzy) {displayFrenzy();if (percent <= 0) frenzy = false;} else percent -= 0.03;rect(34, 34, 142*percent*0.01, 13);  displayScore();displayFish();}

交互功能键

无敌:空格
变大:Q
威慑:W
嘲讽:E
加速:R

开挂

如玩家想降低难度,则可(大写模式下):

1.按空格 ( 无敌)变成无敌模式

2.按Q ( 变大)迅速变大通关

3.按R ( 加速)小鱼快速移动,追逐食物躲闪攻击

如玩家想提高难度,则可(大写模式下):

1.按W ( 威慑),让可食鱼食加速离开

2.按E ( 嘲讽),增加有攻击性鱼食的攻击范围,加速移动

与《代码本色》的结合

1.随机数

泡泡、鱼食的生成,特殊鱼食的出现和奖励都用到了随机数这个知识点

2.向量

用向量来使满足条件的鱼食移动,给游戏增加难度和趣味性

3.继承

由于功能比较细小繁多,为避免重复和单调,使用继承提高了代码的复用性。

效果展示

正常版通关全过程

FISHFOOD——代码本色相关推荐

  1. 《代码本色》作者Daniel Shiffman:艺术家也编程

    非商业转载请注明作译者.出处,并保留本文的原始链接:http://www.ituring.com.cn/article/179855 Daniel Shiffman是纽约大学Tisch艺术学院助理艺术 ...

  2. 《代码本色:用编程模拟自然系统》作者Daniel Shiffman访谈问题有奖征集

    Daniel Shiffman是纽约大学Tisch艺术学院助理艺术教授,"代码本色"便是其主讲课程之一.他在耶鲁大学获得了数学与哲学学士学位和交互通讯的硕士学位.多年来,他一直用P ...

  3. 代码本色——雪梨的Processing探索·Chapter 0:随机游走

    概述 Chapter 0为我们介绍了随机数.概率和噪声在运动当中起到的变化作用,下面就让我们来好好的了解下这些数学名词,究竟可以起到怎样的公用,最后再让我们来发挥想象进行这些知识的运用创作. 原理介绍 ...

  4. 基于《代码本色》的processing学习与拓展

    目录 1. 第0章 引言 2. 第1章 向量 3. 第2章 力 4. 第3章 振荡 5. 第4章 粒子系统 1. 第0章 引言 <代码本色>在这一章节的主要内容是模拟随机游走. 讲了利用r ...

  5. 代码本色0章——Perlin噪声生成起伏地形

    代码本色0章--Perlin噪声生成起伏地形 此博文依据代码本色第0章中的随机数与Perlin噪声运用写成,并观看了丹尼尔希夫曼关于perlin噪声的讲解,https://www.youtube.co ...

  6. 互动媒体技术——《代码本色》习作二:向量

    1.概念介绍 2.参考案例 3.个人作品 一.概念介绍 Processing中的向量 向量实则时两点之间的差异,也就是从一个点到另一个点的移动.向量实际上描述的时路径的一个路线过程,但是它与路径不同的 ...

  7. 【编程书籍】《The Nature of Code》笔记 -《代码本色》7.细胞自动机

    7.1 什么是细胞自动机 7.2 初等细胞自动机 *背景:Wolfram提出初等CA模型,CA有三大要素 *思想: 时间 -> 代 : 下一代的细胞状态 = f(上一代的细胞状态) *扩展:谢尔 ...

  8. 物理系统与艺术结合下的代码创作

    创意编程作业 主题及要求 参考<代码本色>0-4章节,针对每个章节,编写5个习作.要求每个习作至少参考2个案例且必须有一定拓展. 完成情况 本次作业按照规定要求认真学习书上相关内容,并运行 ...

  9. androidtv item获取焦点设置动画和背景_动画技术的交互应用所作的动画

    动画技术的交互应用所作的动画 作者: 周益铭 本交互设计的实现主要运用了<The Nature of Code><代码本色-Daniel Shiffman>中向量(Vector ...

最新文章

  1. php代码实现关键词搜索,PHP代码实现百度统计关键词及来路推送
  2. mysql的调用有哪三种方式_MySQL数据库之mysql命令行中执行sql的几种方式总结
  3. 使用深度神经网络进行自动呼叫评分(一)
  4. python装饰器作用-什么是Python装饰器,有什么作用?
  5. Linux/Unix the definition of cpu-nice
  6. mysql-Federated存储方式,远程表,相当于sql server的linked server
  7. Linux中对进程的管理
  8. requirej入门(二)
  9. 《Android进阶之光》--Dagger2
  10. 色不迷人人自迷,情不伤人人自伤
  11. 软件测试分为哪几个阶段?
  12. PHP 判断操作系统位数
  13. Unity3d程序必备的几种设计模式
  14. 中国人民大学信息学院夏令营经验贴
  15. webrtc中的码率控制
  16. python爬虫获取网站销售情况(内置源码)
  17. 小白深度学习入坑指南
  18. csdn新手上路,多多关照
  19. uni-app H5使用web-view父子之间的相互传值
  20. 李炎恢 PropertyGrid(属性表格)

热门文章

  1. 夯实Java基础系列23:深入理解Java继承、封装、多态的底层实现原理
  2. #736Div2---C.Web of Lies
  3. Python实现的直线段生成算法和圆弧生成算法
  4. 学习Java过程中那些知道名字却不理解含义的大集合
  5. Android 屏幕适配的一种方案
  6. 计算机java二级考试下载_2017年全国计算机二级JAVA考试题库下载
  7. pte模拟考试_【PTE从零开始学】PTE模拟考与正式考,区别有哪些?
  8. 【论文笔记】On Recognizing Texts of Arbitary Shapes with 2D Self-Attention(SATRN)
  9. 计算机相关英文文档重点单词(一)
  10. Eclipse安装错误 engine code=4