我的第一个项目(十四) :完成数据保存功能(前端,增查改接口)

这篇具有很好参考价值的文章主要介绍了我的第一个项目(十四) :完成数据保存功能(前端,增查改接口)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

好家伙,天天拖,终于写完了

 

代码已开源(Gitee)

PH-planewar: 个人开发的全栈小游戏 前端:vue2 + element-ui 后端: Springboot + mybatis-plus 数据库: mysql 目前实现功能: 1.注册登陆 2.游戏数据保存 3.游戏运行 (gitee.com)

(前后端放一起了)

怎么说呢,感觉比较简洁,但是问题不大

实现了分数保存的功能

 文章来源地址https://www.toymoban.com/news/detail-461040.html

1.效果如下:

1.刷新页面后依旧保存数据

我的第一个项目(十四) :完成数据保存功能(前端,增查改接口)

 

2.重新登录后,依旧保存数据

我的第一个项目(十四) :完成数据保存功能(前端,增查改接口)

 

3.生命值为零后,游戏重置

 

2.代码如下:

Game.vue

我的第一个项目(十四) :完成数据保存功能(前端,增查改接口)Game.vue

MyLogin.vue

我的第一个项目(十四) :完成数据保存功能(前端,增查改接口)我的第一个项目(十四) :完成数据保存功能(前端,增查改接口)
<template>
  <div class="login-container">
    <div class="login-box">

      <!-- 头像区域 -->
      <div class="text-center avatar-box">
        <img src="../assets/logo.png" class="img-thumbnail avatar" alt="">
      </div>

      <!-- 表单区域 -->
      <div class="form-login p-4">
        <!-- 登录名称 -->
        <div class="form-group form-inline">
          <label for="username">账号:</label>
          <input type="text" class="form-control ml-2" id="username" placeholder="请输入账号" autocomplete="off"
            v-model.trim="loginForm.loginName" />
        </div>
        <!-- 登录密码 -->
        <div class="form-group form-inline">
          <label for="password">密码:</label>
          <input type="password" class="form-control ml-2" id="password" placeholder="请输入密码"
            v-model.trim="loginForm.password" />
        </div>
        <!-- 登录和重置按钮 -->
        <div class="form-group form-inline d-flex justify-content-end">
          <button type="button" class="btn btn-secondary mr-2" @click="writenum">测试</button>
          <button type="button" class="btn btn-secondary mr-2" @click="toregister">去注册</button>
          <button type="button" class="btn btn-primary" @click="login">登录</button>
        </div>
      </div>

    </div>
  </div>
</template>

<script>
import bus from '../js/eventBus'
export default {
  name: 'MyLogin',
  data() {
    return {
      loginForm: {
        id: '',
        password: '',
        life: null,
        score: null,
        loginName: null,
        isFirst:true
      }
    }
  },
  methods: {
    writenum() {
      this.loginForm.loginName = 123456;
      this.loginForm.password = 123456;

    },
    login() {
      //  console.log(this.$store.state.count)
      // console.log('submit!',this.loginForm);
      //表单验证
      if (this.loginForm.loginName == "") {
        this.$message({
          message: '请输入用户名',
          type: 'error'
        });
        return;
      }
      if (this.loginForm.password == "") {
        this.$message({
          message: '请输入密码',
          type: 'error'
        });
        return;
      }
      //发送登陆请求
      if (this.loginForm.loginName != "" && this.loginForm.password != "") {
        this.axios.post('http://localhost:3312/sys-user/login', this.loginForm).then((resp) => {

          console.log("this is login", resp);
          let data = resp.data;
          // console.log(this.$store.state.user)
          console.log(resp.data.content)
          //es6语法,扩展操作符,找到resp.data.content的每一个属性然后赋值给新的对象
          // this.$store.state.user = { ...resp.data.content }
          // console.log(this.$store.state.user)
          //localStorage存
          localStorage.setItem("insuranceCode", JSON.stringify(resp.data.content));
          console.log(this.loginForm.isFirst)
          localStorage.setItem("getisFirst", JSON.stringify(this.loginForm.isFirst));
          console.log(JSON.parse(localStorage.getItem("getisFirst")))
          //localStorage取
          console.log(JSON.parse(localStorage.getItem("insuranceCode")))
          if (data.success) {
            this.loginForm = {};
            this.$message({
              message: '登陆成功!!!',
              type: 'success'
            });
            this.$router.push({ path: '/game' })
          } else {
            this.$message({
              message: '登陆失败,密码错误或用户名未注册',
              type: 'error'
            });
            console.log(data)
          }
        })
      }
    },
    toregister() {
      this.$router.push('/register')
    },
  },
  mounted() {
    // bus.$emit('getLoginName', this.loginForm)
  }
}
</script>

<style lang="less" scoped>
.login-container {
  background-color: #35495e;
  height: 100%;

  .login-box {
    width: 400px;
    height: 250px;
    background-color: #fff;
    border-radius: 3px;
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    box-shadow: 0 0 6px rgba(255, 255, 255, 0.5);

    .form-login {
      position: absolute;
      bottom: 0;
      left: 0;
      width: 100%;
      box-sizing: border-box;
    }
  }
}

.form-control {
  flex: 1;
}

.avatar-box {
  position: absolute;
  width: 100%;
  top: -65px;
  left: 0;

  .avatar {
    width: 120px;
    height: 120px;
    border-radius: 50% !important;
    box-shadow: 0 0 6px #efefef;
  }
}
</style>
MyLogin.vue

 

 

3.代码解释:

这个怎么说呢,其实整个思路非常简单,就是写的时候会有很多小毛病,小bug

思路:

 

 

3.1.登陆验证

首先我们在登陆的时候,拿着用户输入的用户名和密码,发一次登陆请求,

后端验证密码后,将用户的数据返回(包括id,分数,生命...)

前端拿到数据之后,将数据保存到本地localStorage

localStorage.setItem("insuranceCode", JSON.stringify(resp.data.content));

我的第一个项目(十四) :完成数据保存功能(前端,增查改接口)

 

3.2然后跳转到我们的Game.vue中去

 

3.3.判断是否首次进入

我们在表单数据中添加一个isFirst属性,来判断是否首次进入游戏界面

isFirst:true
localStorage.setItem("getisFirst", JSON.stringify(this.loginForm.isFirst));

 

 

3.3.1.若为首次进入游戏界面

if (JSON.parse(localStorage.getItem("getisFirst")) == true) {
      location.reload();
      console.log("已刷新")
      localStorage.setItem("getisFirst", JSON.stringify("false"));
    }

将页面刷新

随后将isFirst的状态改为"false"

(解释一下,感觉是资源加载的问题,首次进入游戏界面的时候,需要刷新一下,图片资源才能加载出来,

这也是为什么没有用其他的传值方案.其他的传值方案,刷新一下就没了)

 

3.4.随后拿到数据并赋值给this.player

//ES6对象的拓展运算符{...Object}
//拓展运算符(...)用于取出参数对象所有可遍历属性然后拷贝到当前对象
this.player = { ...JSON.parse(localStorage.getItem("insuranceCode")) };

 

    window.life = this.player.life
    window.score = this.player.score

 

3.5.为游戏状态赋值

window.life和window.score是我们的游戏参数

我的第一个项目(十四) :完成数据保存功能(前端,增查改接口)

 

3.6.使用计时器

随后就是我们的关键计时器了

    setInterval(() => {
      //当生命值小于1,即为零时,游戏重置
      if (window.life < 1) {
        // window.life = 3
        // window.score = 0;
        console.log("已重置")
        this.player.life = 3;
        this.player.score = 0;
        localStorage.setItem("insuranceCode", JSON.stringify(this.player));
        this.axios.post('http://localhost:3312/sys-user/update', this.player)
        .then((resp) => {

          console.log("this is update", resp);
          let data = resp.data;
          //
          if (data.success) {
            console.log({
              message: '修改成功',
              type: 'success'
            });
          }
        })
        window.life = 3
        window.score = 0
      }
      this.player.life = window.life
      this.player.score = window.score
      console.log(this.player)
      localStorage.setItem("insuranceCode", JSON.stringify(this.player));
      console.log(this.player.life, this.player.score,window.life,window.score)
      this.axios.post('http://localhost:3312/sys-user/update', this.player)
        .then((resp) => {

          console.log("this is update", resp);
          let data = resp.data;
          //
          if (data.success) {
            console.log({
              message: '修改成功',
              type: 'success'
            });
          }
        })
    }, 1000)

这里是一个每秒(1000毫秒)执行一次的计时器

此处进行判断,

3.6.1.若生命值为零了,对游戏数据进行初始化(分数归零,生命值为3)

随后发一次请求,保存数据

 

3.6.2.若生命值不为0,则

      this.player.life = window.life
      this.player.score = window.score

更新分数和生命值,然后发请求,将数据保存

 

解释完毕

 

到了这里,关于我的第一个项目(十四) :完成数据保存功能(前端,增查改接口)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 我的第一个后端项目(环境搭建,Springboot项目,运行,接口验证)

    访问Java Software | OracleOracle官方网站,下载适合你操作系统的最新版本的JDK。安装JDK并设置好JAVA_HOME环境变量。 推荐使用IntelliJ IDEA作为IDE。你可以从官方网站(IntelliJ IDEA – the Leading Java and Kotlin IDE)下载适合你操作系统的版本,并根据安装向导进行安装。最新2023.2版本需要注

    2024年02月15日
    浏览(47)
  • 猿创征文|Python-sklearn机器学习之旅:我的第一个机器学习实战项目

    目录 前言 一、从目的出发 1.导入数据 二、项目开启 1.导入数据

    2024年01月24日
    浏览(53)
  • 我的第一个项目(十二) :分数和生命值的更新(后端增删查改的"改")

    好家伙,写后端,这多是一件美逝. 关于这个项目的代码前面的博客有写  我的第一个独立项目 - 随笔分类 - 养肥胖虎 - 博客园 (cnblogs.com)   现在,我们登陆进去了,我开始和敌人战斗,诶,打到一百分了,我现在要把这个分数保存起来      随便写一个测试样例    (确实是非常朴实无

    2024年02月01日
    浏览(40)
  • MFC——我的第一个MFC

    我的第一个MFC是在图像软件设计课程中创建的,使用Visual Studio 2022软件,基于C++语言,依赖freeimage图像库,实现在窗口应用中对一幅图像进行各种处理功能(如中值滤波等) 微软基础类库(Microsoft Foundation Classes,简称MFC)是微软公司提供的一个类库,以C++类的形式封装了W

    2024年02月06日
    浏览(62)
  • 【JAVA】我和我的第一个“对象”相遇

    🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​ 💫个人格言:“没有罗马,那就自己创造罗马~” 表达式1 ?表达式2 :表达式3 表达式1必须是一个布尔表达式 如果表达式1为真,那么执行表达式2,否则执行表达式3 根据以下代码思考打印的

    2024年01月24日
    浏览(50)
  • 我的第一个Java Swing窗体程序

    Java Swing入门之窗体 目录 Java Swing系列 简介 一、Swing组件结构 二、窗体实现 1. 单窗体编写 2.多窗体编写 总结 Swing是一个用于开发Java应用程序用户界面的开发工具包,是由纯Java实现的。以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格,不依赖

    2024年01月16日
    浏览(113)
  • Spring Boot快速搭建一个简易商城项目【完成登录功能且优化】

    未优化做简单的判断: 优化:返回的是json的格式 GlobalExceptionHandler 这里为啥要写这两个类: 理解:编写 GlobalExceptionHandler 类可以集中处理应用程序中的各种异常,提高代码的可维护性,同时简化了代码 实体:使用注解 抛一个异常: 报错信息: 这个是时候错误已经该变:

    2024年01月22日
    浏览(54)
  • VLLO - 我的第一个视频编辑器Vlog

    ​ ​【应用名称】:VLLO - 我的第一个视频编辑器Vlog ​【适用平台】:#Android   ​【软件标签】:#VLLO ​【应用版本】:9.0.20 ​【应用大小】:180MB ​【软件说明】:VLLO 是一款非常简单的视频编辑器。初學者和一般使用者也能享受剪輯、添加字幕、加入背景音樂與轉場效果

    2024年01月19日
    浏览(74)
  • 【使用VS开发的第一个QT项目——实现相机功能(包括QT下载、配置、摄像头程序)】

    下载链接 windows程序的后缀是.exe Ubuntu程序的后缀是.run 按照安装指示操作、注册QT,然后出现”选择“界面时 勾选“MinGW 7.3.0 64-bit”,“MSVC 2017 64-bit”;点击“Developer and Designer Tools”前的尖号,打开其中选项,勾选“MinGW 7.3.0 64-bit”。 在VS\\\"工具\\\"→\\\"扩展与更新\\\"→\\\"联机\\\"中搜

    2024年02月07日
    浏览(57)
  • 我的第一个NPM包:panghu-planebattle-esm(胖虎飞机大战)使用说明

    好家伙,我的包终于开发完啦   欢迎使用胖虎的飞机大战包!! 为你的主页添加色彩 这是一个有趣的网页小游戏包,使用canvas和js开发 使用ES6模块化开发 效果图如下:  (觉得图片太sb的可以自己改) 代码已开源!! Git: https://gitee.com/tang-and-han-dynasties/panghu-planebattle-esm.git NPM: panghu-pla

    2023年04月19日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包