基于canvas 十滴水小游戏改造--彩色豆豆

2023-10-20 07:50

本文主要是介绍基于canvas 十滴水小游戏改造--彩色豆豆,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在写一个canvas小游戏,十滴水游戏的改造版本,一样是点击球会变大,变到最大之后会爆开变成四个小球,我写成了彩色豆豆的样式,下面就把我的思路大概讲一下。

游戏规则:
每关的难度随机,每关减少两个球,为0是则game over

一.首先是页面的布局,在顶部是关卡数和剩余球数,中间是核心的canvas画布,底部是重新开始游戏的按钮。
二.canvas画布上逻辑的实现
1)首先个人觉得不要一下在就想着把所有球的排布一下子做好,第一步要先绘制出一个球,在这个球的基础上可以点击变大最后变成四个小球,并且四个小球可以上下左右匀速移动;

2)当一个球的动作都写好之后,需要考虑进行封装对象,由于在球碰撞之后需要有新的样式,所以后续有碰撞检测,需要知道每个球的坐标,并且小球是移动的,所以我建立了两个对象,一个存放大球 Drop,一个存放小球SmallDrop,具体球的方法上代码:

function Drop(x,y){this.x = x;this.y = y;this.style = 1;//通过style判断什么形状的大水滴this.color = getRandomColor();//水滴随机色this.r1 = null;//横轴半径this.r2 = null;//纵轴半径
}Drop.prototype = {draw:function(){switch(this.style){case 1:this.draw1();break;case 2:this.draw2();break;case 3:this.draw3();break;case 4:this.draw4();break;default:break;}},//绘制不同球的函数draw1:function(){this.style = 1;ctx.beginPath();ctx.fillStyle = this.color;ctx.ellipse(this.x,this.y,this.r1,this.r2,0,0,2 * Math.PI,true);ctx.fill();this.r1 = 15;this.r2 = 20;},draw2:function(){this.style = 2;ctx.beginPath();ctx.fillStyle = this.color;ctx.ellipse(this.x,this.y,this.r1,this.r2,0,0,2 * Math.PI,true);ctx.fill();this.r1 = 20;this.r2 = 20;},draw3:function(){this.style = 3;ctx.beginPath();ctx.fillStyle = this.color;ctx.ellipse(this.x,this.y,this.r1,this.r2,0,0,2 * Math.PI,true);ctx.fill();this.r1 = 40;this.r2 = 35;},draw4:function(){this.style = 4;ctx.beginPath();ctx.fillStyle = this.color;ctx.ellipse(this.x,this.y,this.r1,this.r2,0,0,2 * Math.PI);ctx.fill();this.r1 = 50;this.r2 = 50;}
};//小球
function smallDrop(x,y,dir){this.x = x;this.y = y;this.color = getRandomColor();this.dir = dir;//小球的方向
}
smallDrop.prototype = {draw:function(){//通过小球的dir绘制小球的移动switch (this.dir){case 'left':ctx.beginPath();ctx.fillStyle = this.color;ctx.ellipse(this.x-=4,this.y,10,10,0,0,2 * Math.PI,true);ctx.fill();break;case 'right':ctx.beginPath();ctx.fillStyle = this.color;ctx.ellipse(this.x+=4,this.y,10,10,0,0,2 * Math.PI,true);ctx.fill();break;case 'up':ctx.beginPath();ctx.fillStyle = this.color;ctx.ellipse(this.x,this.y-=4,10,10,0,0,2 * Math.PI,true);ctx.fill();break;case 'down':ctx.beginPath();ctx.fillStyle = this.color;ctx.ellipse(this.x,this.y+=4,10,10,0,0,2 * Math.PI,true);ctx.fill();break;default:break;}}
};

3)本游戏的核心:

(1)this.style进行球的变化,点击球球的样式会根据style来变化
(2)this.dir进行小球的变化,小球会根据dir来决定运动方向

(3)碰撞检测
(4)本地存储


源代码在github上传,欢迎大家参阅,https://github.com/chancejl/colorful-beans.git

有很多不足,有问题请随时指点,我们一块学习。

这篇关于基于canvas 十滴水小游戏改造--彩色豆豆的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/245746

相关文章

彩色成像的基础和应用 原理 Principles(四)人类视觉 修订版

由于此书覆盖的领域之巨大, 翻译此书是非常具有挑战性的工作,如有过错请谅解和指正。 【注:彩色成像的基础(二)讨论光的传播 (三)光与物质的相互作用 暂时未翻译完成】                  前面几章讨论了光及其与物质的相互作用。当光线进入人眼时,会发生一种特别重要的相互作用。光落在视网膜上,会引发一连串最引人注目的事件。在本章和下一章中,我们将根据目前的知识水平,重点讨论这一系列事件。

改造了一个流量阈值自动关机的脚本

改造后的脚本地址:https://raw.githubusercontent.com/BiuBIu-Ka/traffic_monitor/main/main.sh 优化的问题: 优化脚本运行多次会一直叠加流量的问题优化服务器重启后流量记录值清空的问题增加一个小日志系统 wget https://raw.githubusercontent.com/BiuBIu-Ka/traffic_monit

影响画布微信小程序canvas及skyline和webview用户界面布局的关键流程

影响微信小程序画布canvas及skyline和webview用户界面布局的关键流程 目录 影响微信小程序画布canvas及skyline和webview用户界面布局的关键流程 一、微信小程序canvas开发流程 1.1、官方指南 1.2、客制化开发 第一步:在 WXML 中添加 canvas 组件 第二步:获取 Canvas 对象和渲染上下文 第三步 画布#ID选择器执行回调——

【Godot4.3】CanvasShape资源化改造

概述 通过把之前自定义的CanvasShape类变成资源类型,将可以同时用于CanvasItem绘图和创建扩展的Node2D和Polygon2D节点等。 本篇就完成CanvasShape类的资源化改造,并记录改造过程和思路。 CanvasShape资源类型体系 CanvasShape仍然为图形基类,提供共有的属性和方法,只不过改为继承自Resource,成为自定义资源类型CanvasX

Android canvas save restore saveLayer的异同点

一、基础操作 drawText、drawRect、drawColor等 对于这些基础操作,相信每一个安卓开发者都能说上个一二点出来,这些就不多做介绍,api 工程师必备技能之一。 在进阶之前,先回答这个问题:    问:canvas既然大家都理解为画布,那如果先在画布上绘制了某些内容,然后再canvas.rotate旋转了画布,为什么这些已经绘制在画布上的内容不会跟随着旋转?    答:由此可

无需更换摄像头,无需施工改造,降低智能化升级成本的智慧工业开源了。

智慧工业视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。 项目搭建地址 项目开源地址:yihecode-server 本项目基于ai场景而开发,提供算法模型管理、摄像头管

opencv中伪彩色applyColorMap函数

colormap(色度图) 假设我们想在地图上显示美国不同地区的温度。我们可以把美国地图上的温度数据叠加为灰度图像——较暗的区域代表较冷的温度,更明亮的区域代表较热的区域。这样的表现不仅令人难以置信,而且代表了两个重要的原因。首先,人类视觉系统没有被优化来测量灰度强度的微小变化。我们能更好地感知颜色的变化。第二,我们用不同的颜色代表不同的意思。用蓝色和较温暖的温度用红色表示较冷的温度更有意义。

信也持续构建集群容器化改造之路

1. 前言 随着应用构建需求增加以及新构建场景引入,公司对构建系统的扩展性、稳定性要求日益提高。多语言构建(如Golang、Java、Python、Node.js 等)所依赖的环境,部署在同一台物理机上时,使构建机环境维护困难;并且多应用同时在一台机器上构建会相互影响;在传统的构建机主从模式下,单一的Master 构建节点会成为系统单点故障源,导致整个构建集群不可用。 通过行业方案调研,

自定义View-Canvas

转载自:https://www.jianshu.com/p/f69873371763 Android Canvas 方法总结 简介 在自定义 View的时候,我们经常需要绘制一些自己想要的效果。 这里就需要使用Canvas对象。 下面将Canvas对象常用方法做个笔记,方便记忆。 对Canvas进行操作 对Canvas的一系列操作,是指对Canvas进行旋转、平移、缩放等操作。 这些操作可以

WordPressMIP主题下载,WordPress MIP与百度熊掌号改造接入(V3.4.1)

WordPressMIP主题,是基于熊掌号最新移动端主题,根据百度MIP开发规范升级改造而成,移除冗余代码,完美符合百度MIP规范的一款WordPress移动端主题。   WordPress快速引入百度MIP其实也挺简单,懂代码的人可以直接根据百度MIP官网的规范和验证提示进行原有移动端的改造,不过需要说一点的就是,那些使用自适应的网站引入MIP估计是有点繁琐,甚至基本不太可能,与其改造原