自制inscode项目推荐:色块小游戏

小编的inscode部署项目:割绳子游戏。

更多精彩内容见InsCode - 让你的灵感立刻落地~

介绍一下项目及玩法。

游戏概述

颜色匹配小游戏是一款基于HTML、CSS和JavaScript开发的简单而有趣的网页游戏。游戏的目标是通过点击颜色块,将整个游戏板上的所有方块变成同一种颜色。玩家需要在有限的步数内完成任务,否则游戏将结束。游戏的设计简洁明了,适合所有年龄段的玩家。

游戏界面

游戏的界面设计非常直观,主要由以下几个部分组成:

  1. 控制面板:位于游戏界面的顶部,包含“New Game”按钮和当前步数显示。玩家可以通过点击“New Game”按钮重新开始游戏。
  2. 游戏板:位于游戏界面的中央,是一个10x10的方格矩阵,每个方格代表一个颜色块。
  3. 颜色选择区:位于游戏板的下方,显示当前可用的颜色块,玩家可以通过点击这些颜色块来改变游戏板上的颜色。
  4. 游戏结束提示:当游戏结束时,会显示“You Win!”或“Oops! Try Again...”的提示信息。
游戏规则
  1. 初始状态:游戏开始时,游戏板上的所有方块都是随机分配的颜色。
  2. 目标:玩家需要通过点击颜色选择区中的颜色块,将整个游戏板上的所有方块变成同一种颜色。
  3. 步数限制:玩家在游戏中只有有限的步数(默认为20步),如果在步数用完之前未能完成任务,游戏将结束。
  4. 胜利条件:当游戏板上的所有方块都变成同一种颜色时,玩家获胜。
  5. 失败条件:如果玩家在步数用完之前未能完成任务,游戏将结束并提示“Oops! Try Again...”。
游戏实现细节
HTML结构

游戏的HTML结构非常简单,主要由以下几个部分组成:

  • <main>元素:包含游戏的控制面板、游戏板、颜色选择区和游戏结束提示。
  • <div class="controls">:包含“New Game”按钮和当前步数显示。
  • <div id="board">:游戏板,包含100个方块。
  • <div id="colors">:颜色选择区,包含当前可用的颜色块。
  • <div id="game-over">:游戏结束提示,当游戏结束时显示相应的提示信息。
CSS样式

游戏的CSS样式主要用于定义游戏的外观和布局,包括:

  • 字体和颜色:使用了Google Fonts中的“Bubblegum Sans”字体,并定义了多种颜色用于游戏板和颜色块。
  • 布局:使用Flexbox布局来确保游戏板和颜色选择区在页面中居中显示。
  • 动画效果:为颜色块的背景颜色变化添加了平滑的过渡效果,增强了游戏的视觉效果。
JavaScript逻辑

游戏的JavaScript逻辑主要用于处理游戏的逻辑和交互,包括:

  • 初始化游戏:在页面加载完成后,调用newGame()函数初始化游戏。
  • 生成游戏板和颜色选择区:使用builder()函数生成游戏板和颜色选择区的方块。
  • 颜色匹配逻辑:当玩家点击颜色选择区中的颜色块时,调用checkColor()函数将游戏板上的方块变成相应的颜色,并检查是否满足胜利条件。
  • 胜利和失败检查:在每次玩家点击颜色块后,调用checkWin()函数检查是否满足胜利或失败条件,并更新游戏结束提示。
游戏体验

颜色匹配小游戏的设计旨在提供一种简单而有趣的体验。游戏的规则简单易懂,但挑战性适中,适合休闲娱乐。玩家可以通过不断尝试和调整策略来提高自己的成绩,增加游戏的可玩性。

总结

颜色匹配小游戏是一款基于HTML、CSS和JavaScript开发的简单而有趣的网页游戏。通过点击颜色块,玩家需要在有限的步数内将整个游戏板上的所有方块变成同一种颜色。游戏的设计简洁明了,适合所有年龄段的玩家。通过不断尝试和调整策略,玩家可以提高自己的成绩,增加游戏的可玩性。

希望你喜欢这款游戏,并享受其中的乐趣!

大部分代码展示。。。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>颜色匹配小游戏</title><style>
@import url("https://fonts.googleapis.com/css?family=Bubblegum+Sans");
/* colors */
.a, .a-x {background: #573659;
}.b, .b-x {background: #ad4375;
}.c, .c-x {background: #fa7370;
}.d, .d-x {background: #f59231;
}.e, .e-x {background: #fecd5f;
}.f, .f-x {background: #9ccf5e;
}.g, .g-x {background: #3cad5b;
}.h, .h-x {background: #36cbbf;
}.i, .i-x {background: #1d839c;
}.j, .j-x {background: #2f506c;
}.k, .k-x {background: #4b4b4b;
}.l, .l-x {background: #000;
}.m, .m-x {background: #fff;
}body {margin: 0;height: 100vh;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;-webkit-box-pack: center;-ms-flex-pack: center;justify-content: center;font-size: calc(1em + 1vmin);font-family: 'Bubblegum Sans', Helvetica, FontAwesome, sans-serif;background: #212429;color: #fffced;
}.controls {display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-pack: justify;-ms-flex-pack: justify;justify-content: space-between;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;padding: 1em 0;
}#board {display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-orient: horizontal;-webkit-box-direction: normal;-ms-flex-flow: row wrap;flex-flow: row wrap;height: 70vmin;width: 70vmin;border: 1ch solid;border-radius: .3em;
}#board > * {-webkit-box-flex: 0;-ms-flex: 0 1 7vmin;flex: 0 1 7vmin;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;-webkit-box-pack: center;-ms-flex-pack: center;justify-content: center;height: 7vmin;-webkit-transition: background 300ms linear;transition: background 300ms linear;
}#board:not(.started) > *:first-of-type::after {content: '\f006';
}#colors {display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-pack: justify;-ms-flex-pack: justify;justify-content: space-between;margin-top: 1ch;
}#colors > * {-webkit-box-flex: 0;-ms-flex: 0 1 7vmin;flex: 0 1 7vmin;height: 7vmin;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;-webkit-box-pack: center;-ms-flex-pack: center;justify-content: center;cursor: pointer;border-radius: .3em;
}.new-game {pointer-events: auto;cursor: pointer;text-decoration: underline;color: #00bcd4;
}#game-over {pointer-events: none;position: absolute;top: 50%;left: 50%;-webkit-transform: translate(-50%, -50%);transform: translate(-50%, -50%);font-size: 3em;
}
</style>
</head>
<body><main><div class="controls"><div class="new-game">New Game</div><div>Moves <span class="moves">0</span> / <span>20</span></div></div><div id="board"></div><div id="colors"></div><div id="game-over"></div>
</main><script>
((document) => {// parts of the game boardlet moves = document.querySelector('.moves')// ?let board = document.querySelector('#board')let colors = document.querySelector('#colors')let gameover = document.querySelector('#game-over')// control variables let colorArray = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm']let running = falselet cell = '-x'let skill = 5let tally = 0let cap = 15    //zuiyyyyylet color//  game play methods// ----------------------------let shuffle = (collection) => {for (let i = collection.length; i; i--) {let j = Math.floor(Math.random() * i);[collection[i - 1], collection[j]] = [collection[j], collection[i - 1]]}return collection}let setColors = (collection, n) => {return n < 10 ? shuffle(collection).slice(0, n) : collection}let checkWin = (moves) => {let n = 0let msg = ''if (moves <= cap) {if (board.childNodes[99].className.indexOf(cell) > -1) {for (var i = 0; i < 100; i++) {if (board.childNodes[i].className.indexOf(cell) > -1) {n++}}}if (n === 100) {msg = '<span class="new-game">You Win!</span>'running = false} else if (n < 100 && moves >= cap) {msg = '<span class="new-game">Oops! Try Again...</span>'running = false}}if(!running) {gameover.innerHTML = msg}}let checkColor = (color) => {let tiles = board.childNodesfor(var x = 0; x < 100; x++) {if(tiles[x].className.indexOf(cell) > -1) {tiles[x].className = color + cellif (x + 1 < 100 && tiles[x + 1].className === color) {tiles[x + 1].className += cell}if (x + 10 < 100 && tiles[x + 10].className === color) {tiles[x + 10].className += cell}if (x - 1 >= 0 && x % 10 > 0 && tiles[x - 1].className === color) {tiles[x - 1].className += cell}if (x - 10 >= 0 && x % 10 > 0 && tiles[x - 10].className === color) {tiles[x - 10].className += cell}}}}let builder = (container, element, collection, count, randomize) => {container.innerHTML = ''count = count || collection.lengthrandomize = randomize || falsefor (let i = 0; i < count; i++) {let child = document.createElement(element)child.className = randomize ? collection[Math.floor((Math.random() * collection.length))] : collection[i]container.appendChild(child)}}let newGame = () => {let options = setColors(colorArray.slice(), skill)tally = 0moves.innerText = tally//?gameover.innerHTML = ''running = truebuilder(colors, 'chip', options)builder(board, 'tile', options, 100, true)color = board.childNodes[0].classNameboard.className = ''board.childNodes[0].className = color + cellcheckColor(color)}let play = (chip) => {if (running && color !== chip){color = chipif(board.className !== 'started') {board.className = 'started'}tally++//?checkColor(chip)checkWin(tally)}}document.addEventListener("DOMContentLoaded", () => {newGame()}, false)document.addEventListener('click', (event) => {let css = Array.from(event.target.classList)if(event.target.tagName === 'CHIP') {play(event.target.className)}else if(css.includes('new-game')) {newGame()}})
})(document)
</script></body>
</html>

运行截图。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/57904.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DevOps赋能:优化业务价值流的实战策略与路径(下)

下篇&#xff1a;加速工作项流动与持续改进优化 —— 跨越差距&#xff0c;迈向卓越交付 在上篇中&#xff0c;我们已经深入探讨了看板方法的四大核心实践&#xff0c;它们共同致力于实现“顺畅且高质量地交付价值”的终极目标。然而&#xff0c;理想与现实之间往往存在一定的…

使用带有令牌认证的 Jupyter Notebook 服务器

当你不想在默认浏览器打开Jupyter Notebook,但是在其他浏览器打开http://localhost:8890/lab或者http://localhost:8889/tree&#xff0c;却显示 Token authentication is enabled&#xff0c;如下图 可以按以下步骤操作&#xff1a; 获取令牌&#xff1a;在启动 Jupyter Note…

FRIENDLYARM Tiny6410 superboot烧写进sd卡教程

友善之臂真的垃圾&#xff0c;pdf乱不说&#xff0c;资料在哪也不说&#xff0c;没有视频教程&#xff0c;就染你自己去一堆资料里找&#xff0c;** superboot在资料B盘tooles-image里 注意有些朋友scan不到sd卡是因为没有给这个软件开启管理员模式&#xff0c;他没权限去扫描…

宝藏虚拟化学习资料大全

最近发现了关于虚拟化的宝藏资料&#xff0c;瑞斯拜&#xff01;原文链接如下&#xff1a; 500篇关于虚拟化的经典资料&#xff0c;含CPU虚拟化&#xff0c;磁盘虚拟化&#xff0c;内存虚拟化&#xff0c;IO虚拟化。 目录 &#x1fa90; 虚拟化基础 &#x1f343; 虚拟化分类&…

C++模拟真人动态生成鼠标滑动路径

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…

【Redis实践】使用zset实现实时排行榜以及一些优化思考

文章目录 1.概述2.zset的基本概念说明2.1.数据结构说明2.2.zset做排行榜的指令 3. 项目中的实践3.1.RedisTemplate实现排行榜3.2.可能存在的问题及解决方案3.2.1. 限制成员的数量3.2.2.保留当前分数与最高分数3.2.3.批量操作成员分数&#xff0c;减少并发 4.总结 1.概述 我们在…

C++_STL_xx_番外01_关于STL的总结(常见容器的总结;关联式容器分类及特点;二叉树、二叉搜索树、AVL树(平衡二叉搜索树)、B树、红黑树)

文章目录 1. 常用容器总结2. 关联式容器分类3. 二叉树、二叉搜索树、AVL树、B树、红黑树 1. 常用容器总结 针对常用容器的一些总结&#xff1a; 2. 关联式容器分类 关联式容器分为两大类&#xff1a; 基于红黑树的set和map&#xff1b;基于hash表的unorder_set和unorder_ma…

【LwIP源码学习4】主线程tcpip_thread

前言 本文对lwip的主要线程tcpip_thread进行分析。 正文 tcpip_thread是lwip最主要的线程&#xff0c;其创建在tcpip_init函数中 sys_thread_new(TCPIP_THREAD_NAME, tcpip_thread, NULL, TCPIP_THREAD_STACKSIZE, TCPIP_THREAD_PRIO);tcpip_init函数被TCPIP_Init函数调用。…

光圈,感光度,感光器件

光圈&#xff08;通光孔&#xff09;&#xff0c;是一个用来控制光线透过镜头进入机身内感光面光量的装置&#xff0c;通常设置在镜头内。通常&#xff0c;我们用f值来表达光圈大小。通俗来说&#xff0c;摄像机镜头拍照时&#xff0c;不可能随意改变镜头直径&#xff0c;但可以…

Llama 3.2 Vision Molmo:多模态开源生态系统基础

编者按&#xff1a; 视觉功能的融入对模型能力和推理方式的影响如何&#xff1f;当我们需要一个既能看懂图像、又能生成文本的 AI 助手时&#xff0c;是否只能依赖于 GPT-4V 这样的闭源解决方案&#xff1f; 我们今天为大家分享的这篇文章&#xff0c;作者的核心观点是&#xf…

高效视频制作大提速,视频剪辑软件的高级自定义命令功能批量调整视频的色调、饱和度和亮度,轻松驾驭视频编辑技巧

在浩瀚的数字海洋中&#xff0c;视频如同璀璨的星辰&#xff0c;而每一颗星辰都渴望被精心雕琢&#xff0c;闪耀出最独特的光芒。想象一下&#xff0c;你手握一把神奇的钥匙&#xff0c;能够轻松解锁批量视频剪辑的奥秘&#xff0c;让每一帧画面都跃动着你的创意与激情。这把钥…

[RootersCTF2019]ImgXweb

审题 看到robots.txt,看到里面的文件&#xff0c;打开看到 you-will-never-guess这个字符串 进行注册登录 可以看到典型的jwt加密的Cookie 想到之前的字符串可能是密匙&#xff0c;更改为admin&#xff0c;进行登录。 成功后可以看到flag.png。 发现图形打不开 使用curl进…

32单片机HAL库的引脚初始化

在使用HAL库时&#xff0c;GPIO初始化函数定义在stm32f4xx_hal_gpio.c文件中&#xff0c;如下&#xff1a; void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init); 由这个函数可以看出&#xff0c;在初始化GPIO时&#xff0c;需要向函数传入2个结构体&…

ubuntu【桌面】 配置NAT模式固定IP

DHCP分配导致虚拟机IP老变&#xff0c;SSH老要重新配置&#xff0c;设成静态方便些 一、设NAT模式 1、设为NAT模式 2、看模式对应的虚拟网卡 - VMnet8 3、共享主机网卡网络到虚拟网卡 - VMnet8 二、为虚拟网卡设置静态IP 记住这个IP 三、设置ubuntu固定IP 1、关闭DHCP并…

确保企业架构与业务的一致性与合规性:数字化转型中的关键要素与战略实施

在现代企业的数字化转型过程中&#xff0c;确保企业架构&#xff08;Enterprise Architecture, EA&#xff09;与企业业务的紧密一致性与合规性至关重要。无论是在战略层面还是运营层面&#xff0c;EA都为企业的未来发展提供了清晰的蓝图&#xff0c;确保企业在应对复杂的业务环…

Pinctrl子需要中client端使用pinctrl过程的驱动分析

往期内容 本专栏往期内容&#xff1a; Pinctrl子系统和其主要结构体引入Pinctrl子系统pinctrl_desc结构体进一步介绍Pinctrl子系统中client端设备树相关数据结构介绍和解析inctrl子系统中Pincontroller构造过程驱动分析&#xff1a;imx_pinctrl_soc_info结构体 input子系统专栏…

Failed to search for file: Cannot update read-only repo

今天在读《Linux就该这么学》并上机操作RedHat Linux 8。结果在执行指令时却出现了问题: 我明明已经是root权限了&#xff0c;我于是上网去找&#xff0c;但也没看到合适的解答。为什么会和书上的操作结果不一样。 后来我突然意识到是不是我打了不该打的空格&#xff0c;于是…

SpringBoot实现验证码案例

目录 实现逻辑前后端交互接口前端代码后端代码 实现逻辑 1、后端功能&#xff1a;随机生成验证码图片&#xff0c;并把交给前端、接收用户输入&#xff0c;验证用户输入的验证码是否正确、 2、前端功能&#xff1a;显示验证码&#xff0c;提供输入框供用户输入他们看到的验证…

OpenCV基本操作(python开发)——(7)实现图像校正

OpenCV基本操作&#xff08;python开发&#xff09;——&#xff08;1&#xff09; 读取图像、保存图像 OpenCV基本操作&#xff08;python开发&#xff09;——&#xff08;2&#xff09;图像色彩操作 OpenCV基本操作&#xff08;python开发&#xff09;——&#xff08;3&…

记录新建wordpress站的实践踩坑:wordpress 上传源码新建站因权限问题导致无法访问、配置新站建站向导以及插件主题上传配置的解决办法

官方文档&#xff1a;How to install WordPress – Advanced Administration Handbook | Developer.WordPress.org 但是没写权限问题&#xff0c;可以下载到 wordpress官方包。 把下载的wordpresscn的包解压并上传到服务器目录下&#xff0c;但是因为是root上传导致了权限问题…