【Alpha阶段】第五次Scrum Meeting


【Alpha阶段】第五次Scrum Meeting

这个作业属于哪个课程 软件工程
这个作业要求在哪里 作业要求
这个作业的目标 会议+项目燃尽图+成员代码/文档签入记录+每人每日总结

Github仓库链接

团队队员

学号 姓名
3119005415 黄奕威
3219005447 连婉玲
3119005417 黄智权
3119005431 欧智昕
3219005448 刘淑婷
3119005410 冯波昌
3219005445 何婉莹

一、例会图片

线上讨论:

二、Burndown Chart

三、代码/文档签入记录

四、项目进度

队员 昨日已完成任务 任务概述 今日待完成任务
黄奕威 添加bgm,修改道具逻辑 · Issue #19 道具修改成对战时消耗 结束后重置的逻辑,简化需求
连婉玲 更新用户类 · Issue #22 修改用户实体类 继续根据需求完善设计
黄智权 精灵等级计算、血量计算 · Issue #17 与其他成员对项目各模块进行了分析与讨论,理清需求逻辑,修改了部分模块。 精灵等级计算、血量计算。 精灵表的修改
欧智昕 重构了精灵类· Issue #23 重构了精灵类 重构精灵类子类
刘淑婷 关卡模块 · Issue #21 对接接口 关卡信息的获取
冯波昌 更新道具 · Issue #24 道具类型的更新 修改道具表
何婉莹 完成用户模块接口 · Issue #20 用户模块的注册、登录接口;测试 查看战斗模块的接口文档 初步规划dao层和service层

五、最新模块代码

主页面(点击查看) import React, { Component, useState } from 'react' import { Link } from 'react-router-dom' import './index.css' import Block from '../../components/Block' import SpiritBag from '../../components/SpiritBag' import PropsBag from '../../components/PropsBag' import ReactAudioPlayer from 'react-audio-player'

// 进入游戏之后的页面
export default function Main (props) {
let [isSpiritBagShow, setSBShow] = useState(false)
let [isPropsBagShow, setPBShow] = useState(false)
// 返回
function backTo () {
let res = window.confirm('确定要退出登录吗?')
if (res) {
props.history.push({
pathname: '/'
})
}
}
// 跳转战斗
function toFight (type) {
let res = window.confirm(确定要进入${type}吗?)
if (res) {
props.history.push({
pathname: '/fight'
})
}
}
return (


autoPlay
src={require('../../assets/audios/home.mp3').default}
/>



    
usernamessssss
LV.100
{/* 宠物面板 */} {isSpiritBagShow ? ( ) : null} {/* 道具面板 */} {isPropsBagShow ? ( ) : null}

)
}

Home界面(点击查看) import React, { useState } from 'react' import './index.css'

import Button from '../../components/Button'
import LoginPanel from '../../components/LoginPanel';
import ReactAudioPlayer from 'react-audio-player';
// 主页模块
function Home () {
let [isClick, setClick] = useState(false);
if (isClick) {
return (


@信安1班——红橙黄绿青蓝紫队



)
} else {
return (

@信安1班——红橙黄绿青蓝紫队
Monster(点击查看) package ruangong.our_land.model.spirit.monster;

import lombok.extern.slf4j.Slf4j;
import ruangong.our_land.model.spirit.Spirit;

import java.util.Random;

@Slf4j
/**

  • 野怪类,野怪可捕捉

  • @author wizardk

  • @author HuangZhiquan

  • @email ozx1341530199@gmail.com
    /
    public class Monster extends Spirit {
    /
    *

    • 野怪的初始等级,默认为1
      /
      protected static final int INITIAL_LEVEL = 1;
      /
      *
    • 经验常量
      */
      protected static final int EXP_CONSTANT = 100;

    /**

    • 根据概率生成野怪(稀有野怪出现概率低,约为3%;普通野怪出现概率高,约为10%),用于精灵捕捉

    • @return 野怪精灵的id
      */
      public static int getMonster() {
      log.info("根据概率生成野怪");
      //初始化野怪id数组
      int[] monsterId = new int[100];
      monsterId[0] = 4;
      monsterId[1] = 5;
      monsterId[2] = 6;
      for (int i = 3; i < 13; i++) {
      monsterId[i] = 7;
      }
      for (int i = 13; i < 23; i++) {
      monsterId[i] = 8;
      }
      for (int i = 23; i < 34; i++) {
      monsterId[i] = 9;
      }
      for (int i = 34; i < 46; i++) {
      monsterId[i] = 10;
      }
      for (int i = 46; i < 59; i++) {
      monsterId[i] = 11;
      }
      for (int i = 59; i < 69; i++) {
      monsterId[i] = 12;
      }
      for (int i = 69; i < 79; i++) {
      monsterId[i] = 13;
      }
      for (int i = 79; i < 89; i++) {
      monsterId[i] = 14;
      }
      for (int i = 89; i < 100; i++) {
      monsterId[i] = 15;
      }

      //随机生成范围为[0,99]的数组下标
      Random rand = new Random();
      int randNumber = rand.nextInt(100);

      //随机选择野怪id
      return monsterId[randNumber];
      }

    /**

    • 获取经验值,即精灵经验值在原本的基础上加gained
    • @param gained 获取到的经验值
      */
      public void gainExp(int gained) {

    /**

    • 当野怪被击败后,给予用户精灵经验
    • @return 经验值
      */
      public int getExp() {
      return EXP_CONSTANT;
      }
Boss类(点击查看) package ruangong.our_land.model.spirit.boss;

import ruangong.our_land.model.spirit.Spirit;

/**

  • boss类

  • @author wizardk

  • @author HuangZhiquan

  • @email ozx1341530199@gmail.com
    */
    public class Boss extends Spirit {

    /**

    • 经验常量
      */
      protected static final int EXP_BOSS = 1000;

    /**

    • 当boss被击败后,给予用户精灵经验
    • @return 经验值
      */
      public int getExp() {
      return EXP_BOSS;
      }
      }
Spirit类(点击查看) package ruangong.our_land.model.spirit;

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.lang.NonNull;
import ruangong.our_land.model.helper.ObjectHelper;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import java.util.List;

/**

  • 精灵类,包括boss、用户初始和野怪

  • @author HuangZhiquan

  • @author Wizardk

  • @Description 精灵类

  • @date Created in 2021-11-02 22:57

  • @Modified By
    */
    @Data
    @Slf4j
    @NoArgsConstructor
    public abstract class Spirit {

    /**

    • 精灵的最高等级
      /
      @Max(value = 100, message = "等级最高为100")
      public static final int MAX_LEVEL = 100;
      /
      *
    • 最大经验值
      /
      private static final int MAX_EXP = 10000;
      /
      *
    • 攻击力
      /
      @Min(value = 0)
      private static int attack;
      /
      *
    • 防御力
      /
      @Min(value = 0)
      private static int defence;
      /
      *
    • 速度
      /
      @Min(value = 0)
      private static int speed;
      /
      *
    • 精灵名
      /
      @NonNull
      private String name;
      /
      *
    • 精灵的id
      /
      @NonNull
      private String id;
      /
      *
    • 精灵是否稀有(是:1,否:0)
    • 精灵稀有与否,关系到精灵捕捉时的成功率
      /
      @NonNull
      private int isRare;
      /
      *
    • 等级
      /
      @Min(value = 1, message = "等级最低为1")
      private int level;
      /
      *
    • 血量
      /
      @Min(value = 0)
      private int blood;
      /
      *
    • 精灵类型(初始、野怪或boss)
      */
      private String type;

    /**

    • 精灵属性(水、火、草)
      */
      private String nature;

    @JsonIgnore
    private int skill1;
    @JsonIgnore
    private int skill2;
    @JsonIgnore
    private int skill3;
    @JsonIgnore
    private int skill4;

    /**

    • 存放精灵的4个技能
      */
      @NonNull
      private List skills;

    /**

    • 初始化技能
      */
      protected void initSkills() {
      //调用SpiritMapper中的getskill获取skill信息,然后赋值给skill1-4
      }

    /**

    • 根据用户经验值获取当前精灵等级
    • @param exp 用户经验值
    • @return 精灵当前等级
      */
      public int getLevel(int exp) {
      int level;
      if (exp >= MAX_EXP) {
      level = MAX_LEVEL;
      } else {
      level = exp / 100;
      }
      return level;
      }

    /**

    • 获取当前精灵血量
    • @param blood 精灵原血量
    • @param exp 用户经验值
    • @return 当前精灵血量
      */
      public int getBlood(int blood, int exp) {
      int curLevel = getLevel(exp);
      int curBlood = (int) (blood + (curLevel - 1) * 0.1);
      return curBlood;
      }

    /**

    • 使用技能后修改相应的属性
    • @param skill 被使用的技能
      */
      public void useSkill(Skill skill) {
      }

    /**

    • 技能类
      /
      @Data
      @NoArgsConstructor
      public static class Skill {
      //技能基本属性
      /
      *

      • 技能名
        /
        @NonNull
        String name;
        /
        *
      • 技能描述
        /
        @NonNull
        String description;
        /
        *
      • 技能使用次数
        */
        int times = 0;

      /**

      • 技能类型(伤害型或提升型)
      • 伤害型:基础伤害值
      • 提升型:提升精灵属性(攻击、防御、速度)
        */
        @NonNull
        String type;

      /**

      • 技能伤害(若技能为伤害型),用于精灵对战
        */
        int hurt;

      public void setTimes(int times) {
      this.times = ObjectHelper.verifyNonZeroPositive(times, "times");
      }

    }
    }

六、遇到的困难

在写接口的时候,我们才发现前面我们实现的精灵类是在本地模拟,并没有和数据库进行交互,意识到这点后,我们赶紧进行了重构。

七、每人每日总结

黄奕威:总结前端需要的接口文档给后台会比较简单明了

连婉玲:需要和负责其他类的小伙伴充分沟通才不会做无用功

黄智权:一个新功能的实现需要用不同的方法进行尝试,往往很难一步就想出实现方法。不断尝试,不断修改,最终向目标功能靠近。

欧智昕:精灵类需要做挺多东西的,和同样负责精灵类的小伙伴要做好前期沟通

刘淑婷:和小伙伴的对接有点失败,准备重构下

冯波昌:使用navicat进行数据库表的修改很方便

何婉莹:注册,登录模块对代码逻辑要求更加严谨,心思要更缜密才行