当前位置:首页 > VUE

vue实现打人游戏

2026-03-08 21:33:28VUE

vue实现打人游戏

以下是一个基于 Vue.js 实现的简单打人游戏方案,包含核心逻辑和代码示例:

vue实现打人游戏

游戏核心设计

使用 Vue 的响应式数据管理游戏状态,包括角色位置、血量、得分等。通过键盘事件监听实现角色移动和攻击。

基础代码结构

<template>
  <div class="game-container">
    <div class="player" :style="playerStyle" @click="attack"></div>
    <div 
      v-for="(enemy, index) in enemies" 
      :key="index"
      class="enemy"
      :style="getEnemyStyle(enemy)"
      @click="hitEnemy(index)"
    ></div>
    <div class="score">Score: {{ score }}</div>
    <div class="health">Health: {{ health }}</div>
  </div>
</template>

游戏逻辑实现

<script>
export default {
  data() {
    return {
      playerX: 200,
      playerY: 200,
      enemies: [],
      score: 0,
      health: 100,
      gameInterval: null
    }
  },
  computed: {
    playerStyle() {
      return {
        left: `${this.playerX}px`,
        top: `${this.playerY}px`
      }
    }
  },
  methods: {
    getEnemyStyle(enemy) {
      return {
        left: `${enemy.x}px`,
        top: `${enemy.y}px`
      }
    },
    spawnEnemy() {
      this.enemies.push({
        x: Math.random() * 500,
        y: Math.random() * 500,
        speed: 1 + Math.random() * 2
      })
    },
    hitEnemy(index) {
      this.score += 10
      this.enemies.splice(index, 1)
    },
    attack() {
      // 检测攻击范围内的敌人
      this.enemies = this.enemies.filter(enemy => {
        const distance = Math.sqrt(
          Math.pow(enemy.x - this.playerX, 2) + 
          Math.pow(enemy.y - this.playerY, 2)
        )
        return distance > 50 // 攻击范围
      })
    },
    movePlayer(e) {
      const speed = 10
      switch(e.key) {
        case 'ArrowUp': this.playerY -= speed; break
        case 'ArrowDown': this.playerY += speed; break
        case 'ArrowLeft': this.playerX -= speed; break
        case 'ArrowRight': this.playerX += speed; break
      }
    },
    updateEnemies() {
      this.enemies.forEach(enemy => {
        // 敌人向玩家移动
        const dx = this.playerX - enemy.x
        const dy = this.playerY - enemy.y
        const dist = Math.sqrt(dx*dx + dy*dy)

        enemy.x += (dx/dist) * enemy.speed
        enemy.y += (dy/dist) * enemy.speed

        // 检测碰撞
        if(dist < 30) {
          this.health -= 5
        }
      })
    }
  },
  mounted() {
    window.addEventListener('keydown', this.movePlayer)
    this.gameInterval = setInterval(() => {
      this.spawnEnemy()
      this.updateEnemies()
      if(this.health <= 0) {
        clearInterval(this.gameInterval)
        alert('Game Over!')
      }
    }, 1000)
  },
  beforeDestroy() {
    clearInterval(this.gameInterval)
    window.removeEventListener('keydown', this.movePlayer)
  }
}
</script>

样式增强

<style>
.game-container {
  position: relative;
  width: 600px;
  height: 600px;
  border: 1px solid #000;
}

.player {
  position: absolute;
  width: 40px;
  height: 40px;
  background-color: blue;
  border-radius: 50%;
  cursor: pointer;
}

.enemy {
  position: absolute;
  width: 30px;
  height: 30px;
  background-color: red;
  border-radius: 50%;
}

.score, .health {
  position: absolute;
  top: 10px;
  font-size: 20px;
}

.score { right: 10px; }
.health { left: 10px; }
</style>

功能扩展建议

  1. 添加攻击动画效果
  2. 实现不同敌人类型
  3. 添加音效系统
  4. 设计关卡系统
  5. 添加技能冷却时间
  6. 实现本地存储高分记录

该实现使用 Vue 的响应式特性管理游戏状态,通过计算属性动态更新角色位置,使用事件监听实现交互。游戏核心循环通过 setInterval 驱动,包含敌人生成、移动和碰撞检测等基本机制。

标签: 打人游戏
分享给朋友:

相关文章

uniapp游戏源码

uniapp游戏源码

获取UniApp游戏源码的途径 开源平台 GitHub、Gitee等平台提供大量UniApp开发的游戏源码,搜索关键词如“uniapp game demo”或“uniapp 游戏源码”,可找到类似《2…

react如何实现游戏上号器

react如何实现游戏上号器

React 实现游戏上号器的关键步骤 技术选型与架构设计 使用 React 作为前端框架,结合 TypeScript 增强类型安全。后端可采用 Node.js + Express 或 Python F…

react实现游戏

react实现游戏

React 实现游戏的基本方法 使用 React 实现游戏可以结合其组件化特性和状态管理能力。以下是一些关键步骤和常用库: 选择游戏类型 适合 React 实现的游戏类型包括 2D 游戏、文字冒险游…

游戏制作css

游戏制作css

CSS 在游戏制作中的应用 CSS 不仅用于网页设计,还可以用于创建简单的浏览器游戏或游戏界面元素。以下是几种利用 CSS 制作游戏的方法和技巧。 使用 CSS 动画制作简单游戏 CSS 动画可以通…

css制作游戏代码

css制作游戏代码

CSS 制作游戏代码 使用纯 CSS 制作游戏虽然有一定局限性,但可以通过动画、过渡和交互选择器等实现简单的游戏效果。以下是几种常见的 CSS 游戏实现方法: 贪吃蛇游戏 通过键盘事件和 C…

css制作游戏页面

css制作游戏页面

CSS制作游戏页面 制作游戏页面需要结合CSS的布局、动画和交互特性。以下是一些关键方法和技巧: 布局设计 使用Flexbox或Grid布局创建游戏界面的基础结构。Flexbox适合简单的一维布局,…