当前位置: 首页 > news >正文

掉落的俄罗斯方块

欢迎来到程序小院

掉落的俄罗斯方块

玩法:上键 W↑变换、 左键 A← 左移、右键 D→ 右移、下键S ↓ 加速,两种模式,
可以一个大人玩,也可以两个人一起玩,小鸟经过会撞走方块,快去体验吧^^。

开始游戏

html

  <div id='container'></div>

css

canvas{display: block;touch-action: none;user-select: none;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); width: 800px; height: 500px; cursor: inherit; margin-left: 97px; margin-right: -97px
}

js

function playState(){var layer;var player,bird;var iBox,lBox,oBox,tBox,xBox;var overGroup,gameOver=false;var point,playerPoint=0;var gameOverText;var keys;var xNumber,yNumber;this.init = function(){//获取当前可用分辨率if(!isPc){game.width = Math.floor(window.innerWidth/16)*16;game.height = Math.floor(window.innerHeight/16)*16;}}this.create = function () {game.physics.startSystem(Phaser.Physics.P2JS);game.physics.p2.gravity.y=150;//添加瓦片地图if(isPc){var map = game.add.tilemap('map_1');map.addTilesetImage('mario','mario');layer = map.createLayer('bg');layer.resizeWorld();//设置世界大小等于图层大小map.setCollision(40);}else{xNumber = width/16;yNumber = height/16;var map = game.add.tilemap();map.addTilesetImage('mario','mario',16,16);layer = map.create('layer',xNumber,yNumber,16,16);map.fill(0,0,0,xNumber,yNumber,layer);map.replace(0,39,Math.floor(xNumber/4),yNumber-Math.floor(yNumber/3),Math.floor(xNumber/2),Math.floor(yNumber/3)-1,layer)layer.resizeWorld();//设置世界大小等于图层大小map.setCollision(39);}game.physics.p2.convertTilemap(map, layer);//鸟bird = game.add.sprite(20,200,'bird');bird.anchor.setTo(0.5);game.physics.p2.enable(bird,false);bird.body.kinematic = true;bird.animations.add('fly',[1,2,3]);bird.animations.play('fly',12,true);bird.body.angle = 10;game.add.tween(bird.body).to({y:180,angle:-10},450,null,true,0,Number.MAX_VALUE,true);//随机产生boxfunction createBox(){var random = Math.floor(Math.random()*7);switch (random){case 0:player = game.add.sprite(width/2,50,'iBox');game.physics.p2.enable(player,false);break;case 1:player = game.add.sprite(width/2,50,'lBox');game.physics.p2.enable(player,false);player.body.clearShapes();player.body.loadPolygon('physicsData','LBox');break;case 2:player = game.add.sprite(width/2,50,'oBox');game.physics.p2.enable(player,false);break;case 3:player = game.add.sprite(width/2,50,'tBox');game.physics.p2.enable(player,false);player.body.clearShapes();player.body.loadPolygon('physicsData','TBox');break;case 4:player = game.add.sprite(width/2,50,'xBox');game.physics.p2.enable(player,false);player.body.clearShapes();player.body.loadPolygon('physicsData','XBox');break;case 5:player = game.add.sprite(width/2,50,'xBox_');game.physics.p2.enable(player,false);player.body.clearShapes();player.body.loadPolygon('physicsData','XBox_');break;case 6:player = game.add.sprite(width/2,50,'lBox_');game.physics.p2.enable(player,false);player.body.clearShapes();player.body.loadPolygon('physicsData','LBox_');break;}player.body.damping=0.6;player.body.onBeginContact.addOnce(blockHit, this);}createBox();//碰撞檢測function blockHit(body, bodyB, shapeA, shapeB, equation){if(!gameOver){if(body){groundSound.play();if(body.sprite==null||body.sprite.key!='bird'){getPoint();createBox();}else{player.body.onBeginContact.removeAll();player.body.onBeginContact.addOnce(blockHit, this);}}}}//在底部添加碰撞的组.如果被碰撞游戏结束overGroup=game.add.group();overGroup.enableBody=true;overGroup.physicsBodyType=Phaser.Physics.P2JS;for (var i=0;i<width/16/2;i++){var over = overGroup.create(i*32+10,height-8,'down');over.body.kinematic = true;//保持固定over.body.onBeginContact.add(function(body, bodyB, shapeA, shapeB, equation){if(body){gameOver=true;game.input.onDown.add(function(){game.state.start('menu');gameOver=false;playerPoint = 0;gameOverText=null;});}},this);}//计分函数point = game.add.text(width-100,50,playerPoint);point.font = 'Arial Black';point.fontWeight = 'bold';point.fill = '#ec008c';point.fontSize = 50;point.setShadow(2, 2, 'rgba(0, 0, 0, 0.5)', 2);function getPoint(){playerPoint++;point.text=playerPoint;}//添加触屏按钮if(!isPc){var btn_change = game.add.button(width-150,height/3*2,'change',actionOnClick,this);btn_change.scale.setTo(1.2);btn_change.alpha=0.3;var btn_left = game.add.button(0,height/3*2,'fxj',left_go,this);var btn_right = game.add.button(200,height/3*2,'fxj',right_go,this);var btn_up = game.add.button(100,height/3*2-100,'fxj',up_go,this);var btn_down = game.add.button(100,height/3*2+100,'fxj',down_go,this);btn_left.alpha = 0.3;btn_left.scale.setTo(1.2);btn_right.alpha = 0.3;btn_right.scale.setTo(1.2);btn_up.alpha = 0.3;btn_up.scale.setTo(1.2);btn_down.alpha = 0.3;btn_down.scale.setTo(1.2);function actionOnClick(){btnSound.play();player.body.angle = player.body.angle + 90;}function left_go(key){btnSound.play();player.body.velocity.x = -120;}function right_go(key){btnSound.play();player.body.velocity.x = 120;}function up_go(key){btnSound.play();player.body.velocity.y = 0;}function down_go(key){btnSound.play();player.body.velocity.y += 100;}}else{//按键keys = game.input.keyboard.addKeys({ left: Phaser.Keyboard.LEFT, right: Phaser.Keyboard.RIGHT, up: Phaser.Keyboard.UP,down:Phaser.Keyboard.DOWN,spin: Phaser.Keyboard.SPACEBAR });keys.left.onDown.add(keyDown,this);keys.right.onDown.add(keyDown,this);keys.up.onDown.add(keyDown,this);keys.spin.onDown.add(keyDown,this);keys.down.onDown.add(keyDown,this);function keyDown(key){if(!gameOver){switch (key.keyCode){case Phaser.Keyboard.LEFT:btnSound.play();player.body.velocity.x = -80;break;case Phaser.Keyboard.RIGHT:btnSound.play();player.body.velocity.x = 80;break;case Phaser.Keyboard.UP:btnSound.play();player.body.velocity.y = 0;break;case Phaser.Keyboard.DOWN:btnSound.play();player.body.velocity.y +=100;break;case Phaser.Keyboard.SPACEBAR:btnSound.play();player.body.angle = player.body.angle + 90;break;}}}}}this.update = function () {bird.body.x+=3;if(bird.body.x > width+20){bird.body.x = 0;}if(gameOver){createGameOverText();}}function createGameOverText(){if(gameOverText==null){if(player.body.y==50){playerPoint--;player.kill();point.text=playerPoint;}scoreSound.play();gameOverText = game.add.text(game.width/2,game.height/2,'游戏结束 !!\n得分:' + playerPoint+'\n点击屏幕重新开始');gameOverText.anchor.setTo(0.5);gameOverText.font = 'Arial Black';gameOverText.fontWeight = 'bold';gameOverText.fill = '#ec008c';gameOverText.fontSize=40;gameOverText.setShadow(5, 5, 'rgba(0, 0, 0, 0.5)', 5);}}
}

源码

需要源码请关注添加好友哦^ ^

转载:欢迎来到本站,转载请注明文章出处https://ormcc.com/

相关文章:

掉落的俄罗斯方块

欢迎来到程序小院 掉落的俄罗斯方块 玩法&#xff1a;上键 W↑变换、 左键 A← 左移、右键 D→ 右移、下键S ↓ 加速,两种模式&#xff0c; 可以一个大人玩&#xff0c;也可以两个人一起玩&#xff0c;小鸟经过会撞走方块&#xff0c;快去体验吧^^。开始游戏 html <div idc…...

医院不良事件报告系统源码带鱼骨图分析

医院不良事件上报系统通过 “事前的人员知识培训管理和制度落地促进”、“事中的事件上报和跟进处理”、 以及 “事后的原因分析和工作持续优化”&#xff0c;结合预存上百套已正在使用的模板&#xff0c;帮助医院从对护理事件、药品事件、医疗器械事件、医院感染事件、输血事件…...

数据库相关算法题 V3

订单最多的客户 在考虑多个最多订单客户的情况下可以采用dense_rank()函数&#xff0c;最多则由group by customer_number以及order count(*)得到 select customer_number from (select customer_number,dense_rank() over (order by count(*) desc) as rk from Orders group…...

第二证券:本周3只新股申购,大豆蛋白行业领军企业来了!

截至发稿&#xff0c;本周网上发行有2只新股宣布发行价。创业板新股丰茂股份发行价为31.9元&#xff0c;发行市盈率28.27倍&#xff0c;工作最近一个月平均动态市盈率25.76倍。沪主板新股索宝蛋白发行价为21.29元&#xff0c;发行市盈率26.74倍&#xff0c;工作最近一个月平均动…...

【go语言开发】loglus日志框架的使用

本文将简单介绍loglus框架的基本使用&#xff0c;并给出demo 文章目录 前言Loglus常见用法自定义日志级别使用字段钩子输出到多个位置使用钩子实现自定义日志处理demo 前言 Logrus 是一个用于 Go 语言的结构化日志框架&#xff0c;它提供了丰富的日志级别、钩子和格式化选项。…...

【Unity动画】Unity 动画播放的流程

本文以2D为案例&#xff0c;讲解Unity 播放动画的流程 准备和导入2D动画资源 外部导入序列帧生成的 Unity内部制作的 外部导入的3D动画 2.创建动画过程 打开时间轴Ctrl6 选中场景中的一个未来需要播放动画的物体 回到时间轴点击Create一个新动画片段 拖动2D动画资源放入…...

深度学习——第3章 Python程序设计语言(3.2 Python程序流程控制)

3.2 Python程序流程控制 目录 1.布尔数据类型及相关运算 2.顺序结构 3.选择&#xff08;分支&#xff09;结构 4.循环结构 无论是在机器学习还是深度学习中&#xff0c;Python已经成为主导性的编程语言。而且&#xff0c;现在许多主流的深度学习框架&#xff0c;例如PyTorc…...

EasyExcel生成多sheet页的excel

一、controller层 ApiOperation(value "明细查询导出") PostMapping(value "/SummaryDetailExport") public void summaryDetailExport(RequestBody SearchDTO dto, HttpServletResponse response) throws IOException {reportService.deptPackagingSum…...

家用小型洗衣机哪款性价比高?内衣洗衣机品牌推荐

近日&#xff0c;国内著名的电子商务平台公布了“内衣洗衣机产业趋势”的研究报告。该报告指出&#xff0c;由于消费者对生活质量的要求越来越高&#xff0c;内衣洗衣机的行业也有了长足的发展&#xff0c;特别是在今年以来&#xff0c;内衣洗衣机的销售额同比上涨了830%&#…...

为何Go爬虫依然远没有Python爬虫流行

目录 一、Go与Python的比较 1、语言生态 2、易用性 3、库支持 二、Go爬虫的优势 1、性能与并发性 2、跨平台性 3、内存占用 三、Go爬虫的潜力与未来发展 1、社区支持与库完善 2、跨平台移动应用开发 3、大数据处理与实时分析 四、代码示例 五、结论 在当今的互联…...

【华为OD题库-057】MELON的难题-java

题目 MELON有一堆精美的雨花石(数量为n&#xff0c;重量各异)&#xff0c;准备送给S和W。MELON希望送给俩人的雨花石重星一致&#xff0c;请你设计一个程序帮MELON确认是否能将雨花石平均分配。 输入描述 第1行输入为雨花石个数:n&#xff0c;0<n <31. 第2行输入为空格分…...

OGG实现Oracle19C到postgreSQL14的实时同步

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…...

windows 你的电脑不能投影到其他屏幕,请尝试重新安装驱动程序

注意 千万不要去下载什么驱动精灵&#xff0c;太垃圾不好用还一堆附带的软件。按以下步骤进行解决&#xff1a; 解决方法 可能是显卡驱动的问题&#xff0c;我的笔记本按照如下步骤重启一下驱动后解决了&#xff0c;步骤如下: 右键点击桌面的开始菜单&#xff0c;选择”设备…...

2023-简单点-树莓派中的硬件通讯

树莓派中的通讯方式 串口通讯什么是串口通讯&#xff1f;串口通讯的特点 tips并行通讯&#xff1f;基于网络的通讯?socket通讯 串口通讯 什么是串口通讯&#xff1f; 串行通信每次传输一个位元数据&#xff0c;并在连续进行单次过程的基础上进行通信。根据数据的传送方向&am…...

游戏反Frida注入检测方案

在游戏安全对抗过程中&#xff0c;有不少外挂的实现基于对游戏内存模块进行修改&#xff0c;这类外挂通常会使用内存修改器&#xff0c;除此之外&#xff0c;还有一种门槛相对更高、也更难检测的「注入挂」。 据FairGuard游戏安全数据统计&#xff0c;在游戏面临的众多安全风险…...

观海微电子---AF、AG、AR 的差别和作用

一、名称解释及原理 1.AF ---- Anti-fingerprint&#xff0c;中文为抗指纹。一般 SiO2AF 材料&#xff08;DON&#xff0c;M4、道康宁 AF 材料&#xff09;&#xff0c;一般采用真空蒸发镀膜法。 原理&#xff1a;AF 防污防指纹玻璃是根据荷叶原理&#xff0c;在玻璃外表面涂制…...

颠覆性语音识别:单词级时间戳和说话人分离

vbenjs/vue-vben-admin[1] Stars: 19.7k License: MIT Vue Vben Admin 是一个免费开源的中后台模板&#xff0c;使用最新的 vue3、vite4 和 TypeScript 等主流技术进行开发。该项目提供了现成的中后台前端解决方案&#xff0c;并可用于学习参考。 使用先进的前端技术如 Vue3/…...

吉利展厅 | 透明OLED拼接2x2:科技与艺术的完美融合

产品&#xff1a;4块55寸OLED透明拼接屏 项目地点&#xff1a;南宁 项目时间&#xff1a;2023年11月 应用场景&#xff1a;吉利展厅 在2023年11月的南宁&#xff0c;吉利展厅以其独特的展示设计吸引了众多参观者的目光。其中最引人注目的亮点是展厅中央一个由四块55寸OLED透…...

qnx修改tcp和udp缓冲区默认大小

拷贝/home/test/qnx/qos223/target/qnx7/aarch64le/sbin/sysctl进系统中 https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.neutrino.utilities/topic/s/sysctl.html kern.sbmax 默认262144&#xff0c;这个限制住了发送、接收缓冲器大小 ./sysctl -w kern.sbmax10000…...

vscode的eslint检查代码格式不严谨的快速修复

问题&#xff1a; 原因&#xff1a;复制的代码&#xff0c;esLint检查代码格式不正确。或者写的代码位置不严谨&#xff0c;总是提示 解决 设置在Ctrl S保存时自动格式化代码 1、vscode设置 2、点击右上角&#xff0c;切换json模式 3、添加设置 "editor.codeActionsOn…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...