纯js实现游戏加农炮

devtools/2024/11/24 22:26:05/

项目简介

这是一个使用 HTML、CSS 和 jQuery 开发的简单射击html" title=游戏>游戏。以下是项目的详细描述:
项目名称:加农炮气球射击html" title=游戏>游戏
技术栈:
HTML5
CSS3
jQuery 3.6.0
html" title=游戏>游戏特点:
简单易上手:只需点击鼠标即可操作,适合所有年龄段玩家
即时反馈:击中气球有分数反馈,html" title=游戏>游戏结束时显示最终得分
持续挑战:气球会持续生成,难度逐渐提升
响应式设计:html" title=游戏>游戏界面居中显示,适应不同屏幕尺寸

核心功能

  1. 加农炮射击
  • 固定位置的加农炮
  • 点击屏幕发射子弹
  • 子弹按照点击方向运动

气球系统

  • 定时从右侧生成气球
  • 气球匀速向左移动
  • 碰撞检测系统

计分系统

  • 击中气球得10分
  • 实时显示当前得分
  • html" title=游戏>游戏结束显示最终得分

html" title=游戏>游戏控制

  • html" title=游戏>游戏开始/重新开始功能
  • html" title=游戏>游戏结束条件判定
  • 状态管理系统

项目展示

项目展示

代码展示

代码展示

代码文件

html"><!DOCTYPE html>
<html>
<head><title>加农炮html" title=游戏>游戏</title><style>body {display: flex;justify-content: center;align-items: flex-start;min-height: 100vh;margin: 0;padding: 20px;background: #f5f5f5;font-family: Arial, sans-serif;}.container {display: flex;gap: 20px;max-width: 1200px;}.game-instructions {width: 250px;background: white;padding: 20px;border-radius: 8px;box-shadow: 0 2px 4px rgba(0,0,0,0.1);}.game-instructions h2 {color: #333;margin-top: 0;}.game-instructions ul {padding-left: 20px;line-height: 1.6;}.game-wrapper {text-align: center;}#gameArea {width: 800px;height: 600px;border: 2px solid black;position: relative;overflow: hidden;background: #f0f0f0;border-radius: 8px;box-shadow: 0 2px 4px rgba(0,0,0,0.1);}#score {margin-top: 10px;font-size: 20px;font-weight: bold;}.cannon {width: 50px;height: 50px;background: #333;position: absolute;bottom: 20px;left: 20px;border-radius: 25px;}.bullet {width: 10px;height: 10px;background: #000;position: absolute;border-radius: 5px;}.balloon {width: 30px;height: 40px;background: #0066ff;position: absolute;border-radius: 15px;}.game-over {display: none;position: fixed;top: 50%;left: 50%;transform: translate(-50%, -50%);background: white;padding: 20px;border: 2px solid #333;text-align: center;z-index: 1000;border-radius: 8px;box-shadow: 0 4px 6px rgba(0,0,0,0.1);}.game-over button {margin-top: 10px;padding: 8px 20px;cursor: pointer;background: #0066ff;color: white;border: none;border-radius: 4px;font-size: 16px;}.game-over button:hover {background: #0052cc;}</style>
</head>
<body><div class="container"><div class="game-instructions"><h2>html" title=游戏>游戏说明</h2><ul><li>点击屏幕任意位置发射炮弹</li><li>炮弹会朝着点击位置发射</li><li>击中蓝色气球可得10分</li><li>不要让气球碰到左边界</li><li>气球碰到左边界html" title=游戏>游戏结束</li></ul><h2>操作方法</h2><ul><li>使用鼠标点击进行射击</li><li>瞄准气球的运动轨迹</li><li>预判气球的位置进行射击</li></ul></div><div class="game-wrapper"><div id="gameArea"><div class="cannon"></div></div><div id="score">得分:<span>0</span></div></div></div><div class="game-over"><h2>html" title=游戏>游戏结束!</h2><p>最终得分:<span class="final-score">0</span></p><button onclick="restartGame()">重新开始</button></div><script src="https://code.html" title=jquery>jquery.com/html" title=jquery>jquery-3.6.0.min.js"></script><script>html" title=javascript>javascript">$(document).ready(function() {let score = 0;let gameActive = true;let balloonInterval;function createBalloon() {if (!gameActive) return;const $balloon = $('<div class="balloon"></div>');const startY = Math.random() * 400;const gameWidth = $('#gameArea').width();$balloon.css({left: gameWidth,  // 改用 left 属性来控制位置top: startY});$('#gameArea').append($balloon);let currentLeft = gameWidth;const moveSpeed = 2;  // 控制气球移动速度const moveBalloon = setInterval(function() {if (!gameActive) {clearInterval(moveBalloon);return;}currentLeft -= moveSpeed;$balloon.css('left', currentLeft);// 检查是否触碰左边界if (currentLeft <= 0) {clearInterval(moveBalloon);gameOver();return;}// 检查气球是否被移除(比如被子弹击中)if (!$.contains(document, $balloon[0])) {clearInterval(moveBalloon);return;}}, 16);  // 约60fps的更新频率}function startGame() {gameActive = true;score = 0;$('#score span').text(score);// 清除所有现有的气球和定时器$('.balloon').remove();if (balloonInterval) {clearInterval(balloonInterval);}// 开始定期创建气球balloonInterval = setInterval(function() {if (gameActive) {createBalloon();}}, 2000);}function gameOver() {gameActive = false;$('.final-score').text(score);$('.game-over').show();// 清除所有定时器和气球clearInterval(balloonInterval);$('.balloon').stop();}window.restartGame = function() {$('.game-over').hide();startGame();};// 初始化html" title=游戏>游戏startGame();// 子弹碰撞检测优化$('#gameArea').on('click', function(e) {if (!gameActive) return;const $bullet = $('<div class="bullet"></div>');const cannonPos = $('.cannon').position();const gameAreaOffset = $('#gameArea').offset();// 计算鼠标点击在html" title=游戏>游戏区域内的相对位置const clickX = e.pageX - gameAreaOffset.left;const clickY = e.pageY - gameAreaOffset.top;$bullet.css({left: cannonPos.left + 25,top: cannonPos.top + 25});$('#gameArea').append($bullet);// 计算炮弹角度(使用html" title=游戏>游戏区域内的相对坐标)const angle = Math.atan2(clickY - (cannonPos.top + 25),clickX - (cannonPos.left + 25));// 调整炮弹速度和移动逻辑const speed = 15; // 增加速度使射击更流畅const vx = Math.cos(angle) * speed;const vy = Math.sin(angle) * speed;const bulletInterval = setInterval(function() {if (!gameActive) {clearInterval(bulletInterval);$bullet.remove();return;}const pos = $bullet.position();const newLeft = pos.left + vx;const newTop = pos.top + vy;$bullet.css({left: newLeft,top: newTop});// 检测碰撞$('.balloon').each(function() {const $balloon = $(this);if ($balloon.length && isColliding($bullet, $balloon)) {$balloon.remove();$bullet.remove();clearInterval(bulletInterval);score += 10;$('#score span').text(score);}});// 移除超出边界的炮弹if (newLeft < 0 || newLeft > 800 || newTop < 0 || newTop > 600) {$bullet.remove();clearInterval(bulletInterval);}}, 16);});// 碰撞检测function isColliding($div1, $div2) {const rect1 = $div1[0].getBoundingClientRect();const rect2 = $div2[0].getBoundingClientRect();return !(rect1.right < rect2.left || rect1.left > rect2.right || rect1.bottom < rect2.top || rect1.top > rect2.bottom);}});</script>
</body>
</html> 

总结

这个项目适合作为前端开发学习案例,展示了如何使用基础的 Web 技术实现一个互动性强的小html" title=游戏>游戏。


http://www.ppmy.cn/devtools/136656.html

相关文章

企业OA管理系统:Spring Boot技术深度解析

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

flutter 专题十一 Fair原理篇Fair逻辑动态化架构设计与实现

数据逻辑处理布局中的逻辑处理Flutter类型数据处理 一、数据逻辑处理 我们接触的每一个Flutter界面&#xff0c;大多由布局和逻辑相关的代码组成。如Flutter初始工程的Counting Demo的代码&#xff1a; class _MyHomePageState extends State<MyHomePage> {// 变量 in…

Java基础面试题01-请描述Java中JDK和JRE的区别?

什么是 JDK&#xff1f; JDK 全称 Java Development Kit&#xff0c;中文叫“Java 开发工具包”。 它是给 Java 开发者用的工具箱&#xff0c;里面有一切写代码、编译代码、调试代码所需要的工具。 JDK 包括什么&#xff1f; Java 编译器&#xff08;javac&#xff09;&…

mini-lsm通关笔记Week2Day5

项目地址&#xff1a;https://github.com/skyzh/mini-lsm 个人实现地址&#xff1a;https://gitee.com/cnyuyang/mini-lsm Summary 在本章中&#xff0c;您将&#xff1a; 实现manifest文件的编解码。系统重启时从manifest文件中恢复。 要将测试用例复制到启动器代码中并运行…

HashMap源码详解

提醒你一下&#xff0c;用电脑或者平板看&#xff0c;手机屏幕小&#xff0c;图片会看不清楚&#xff0c;源码不方便看 基础前置 看该篇文章之前先看看这篇基础文章 HashMap底层原理-CSDN博客 先来看HashMap里面的一些参数。 1.DEFAULT_INITIAL_CAPACITY 默认的数组初…

Pytorch使用手册-Automatic Differentiation with torch.autograd(专题六)

自动微分(Automatic Differentiation)和 torch.autograd torch.autograd 是 PyTorch 中的核心模块之一,用于支持自动微分。它通过动态计算图的方式实现梯度计算,主要应用于深度学习中的反向传播算法,自动求导无需手动计算梯度,简化了训练神经网络的过程。以下为模块核心…

Origin教程003:数据导入(2)-从文件导入和导入矩阵数据

文章目录 3.3 从文件导入3.3.1 导入txt文件3.3.2 导入excel文件3.3.3 合并工作表3.4 导入矩阵数据3.3 从文件导入 所需数据 https://download.csdn.net/download/WwLK123/900267473.3.1 导入txt文件 选择【数据->从文件导入->导入向导】: 选择文件之后,点击完成即可…

ElasticSearch学习笔记四:基础操作(二)

一、前言 上一篇文章中我们学习了ES中的基础操作&#xff0c;包括索引和映射&#xff0c;同时也学习了ES中的基础数据类型&#xff0c;今天我们继续学习其他的数据类型。 二、复杂数据类型 1、数组&#xff08;Array&#xff09; 在ES中没有特别指定数据类型&#xff0c;换…