Skip to content

zj05409/pong

Repository files navigation

3D第一人称乒乓球游戏

快速开始: 下载后双击 index.html 文件即可打开游戏,无需安装任何依赖。

这是一个基于Web的3D第一人称乒乓球游戏,使用Three.js开发。游戏模拟了真实的乒乓球物理特性,提供沉浸式的第一人称体验。

游戏特点

  • 真实的3D乒乓球环境和物理系统
  • 精确的碰撞检测和反弹物理模型
  • 基于真实乒乓球原理的击球系统
  • 可调节的球拍角度
  • 智能AI对手
  • 实时计分系统
  • 沉浸式第一人称视角

控制方式

  • 鼠标移动: 控制球拍在左右和前后方向的位置
    • 左右移动鼠标:球拍左右移动
    • 上下移动鼠标:球拍前后移动(上移靠近球网,下移远离球网)
  • 鼠标滚轮: 调整球拍角度(可在180度范围内旋转,从-90度到+90度)
  • 按R键: 重新开始游戏或重置球

游戏规则

  • 点击"开始游戏"按钮开始游戏
  • 通过鼠标控制球拍击球
  • 按照真实乒乓球规则:当球落到球桌所在平面但不在球桌范围内时,由上次击球方得分
  • 球触网也会导致对方得分
  • 先得到11分的一方获胜

物理系统实现

击球物理模型

游戏使用了一个独特的三因素物理模型来确定球的反弹方向:

  1. 挥拍方向 (70% 影响)

    • 球的主要飞行方向由鼠标移动方向决定
    • 快速向左挥动会使球向左飞行,向右则球向右飞行
    • 向上挥动会使球更平直,向下挥动会使球下沉
  2. 球拍角度 (20% 影响)

    • 球拍前倾时球会飞得更高
    • 球拍后倾时球会飞得更低
    • 垂直球拍会给出中等高度的回球
  3. 击球点 (10% 影响)

    • 球拍中心偏左击球,球会向左飞
    • 球拍中心偏右击球,球会向右飞
    • 击球点的高低也会影响球的垂直方向

击球后,球的运动方向完全由这三个因素决定,与来球方向无关,这与真实乒乓球的物理特性一致。

碰撞检测

  • 使用距离计算进行球拍与球的碰撞检测
  • 精确计算球与桌面的碰撞和反弹
  • 模拟真实的重力效应
  • 球网碰撞检测确保真实的游戏体验

AI对手

游戏实现了一个智能AI对手,具有以下特点:

  • 预测球的轨迹,提前移动到预计落点
  • 考虑重力影响,计算球的落点
  • 根据球的距离动态调整移动速度
  • 能够返回各种类型的球,包括快球和高球
  • 难度平衡,既有挑战性又不会太难

技术实现

3D渲染

  • 使用Three.js实现3D场景渲染
  • 实现了阴影和光照效果,增强视觉体验
  • 使用透视相机提供逼真的第一人称视角

动态UI

  • 实时显示玩家和对手得分
  • 使用CSS为UI元素添加样式
  • 游戏状态提示(开始、结束画面)

事件处理

  • 监听鼠标移动事件控制球拍位置
  • 监听滚轮事件调整球拍角度
  • 监听窗口大小变化事件,保证游戏在不同分辨率下的良好体验

性能优化

  • 合理设置物理更新频率
  • 优化碰撞检测算法
  • 限制不必要的重新渲染

如何运行

  1. 克隆或下载此仓库

  2. 使用本地服务器运行项目(由于浏览器安全限制,直接打开HTML文件可能无法正常工作)

    可以使用以下方法之一来启动本地服务器:

    • 使用Python:

      # Python 3
      python -m http.server
      
      # Python 2
      python -m SimpleHTTPServer
      
    • 使用Node.js和npm:

      # 全局安装http-server
      npm install -g http-server
      
      # 在项目目录运行
      http-server
      
  3. 在浏览器中访问提供的本地URL(通常是 http://localhost:8000http://127.0.0.1:8000)

自定义设置

可以在game.js文件中调整以下参数:

物理参数

  • BALL_SPEED:控制球的基础速度
  • GRAVITY:控制重力大小
  • AI_SPEED:控制AI对手移动速度
  • MIN_TILTMAX_TILT:控制球拍可倾斜的最小和最大角度

球拍参数

  • 修改createPaddle()函数可以自定义球拍外观
  • 调整paddleOffset.y可以改变球拍的默认高度

游戏规则

  • 修改得分上限(目前为11分)
  • 调整球桌大小

项目结构

  • index.html: 游戏的HTML结构
  • style.css: 游戏界面样式
  • game.js: 游戏核心逻辑和物理实现

未来改进计划

  • 添加音效
  • 实现多人联网对战
  • 增加更多的球拍和球桌样式
  • 添加游戏难度选择
  • 增加击球特效

开发者

  • 开发者: [您的名字]
  • 联系方式: [您的联系方式]

许可证

[选择合适的许可证]

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages