第二次结对编程作业

本人博客
队友博客

分工

蒋梦迪:UI,博客
王德钊:AI,网络接口

PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 30
· Estimate · 估计这个任务需要多少时间 30 30
Development 开发 930 1110
· Analysis · 需求分析
(包括学习新技术)
240 300
· Design Spec · 生成设计文档 90 90
· Design Review · 设计复审 30 40
· Coding Standard · 代码规范
(为目前的开发制定合适的规范)
30 20
· Design · 具体设计 90 60
· Coding · 具体编码 360 480
· Code Review · 代码复审 30 30
· Test · 测试
(自我测试,修改代码,提交修改)
60 90
Reporting 报告 90 95
· Test Repor · 测试报告 60 60
· Size Measurement · 计算工作量 10 5
· Postmortem &
Process Improvement Plan
事后总结, 并提出过程改进计划 20 30
-- 合计 1050 1235

解题思路

原本是打算用python或者其他语言实现,但是都没用过,重头学有点慢,所以想着用Unity3D来做,因为之前用过,而且UI和代码的对接比较方便。

算法的话,最简单的就是列举所有情况,用贪心算法暴力搜索。但是肯定不能止步于此,这样的话只保证后墩最大,中墩前墩其次,但是可能中前墩过小,赢不了牌,综合分数低。经过一番查询,觉得设置权重的方法比较靠谱。把每种牌型设置一个权重,然后综合考虑三墩,用权重和最大的一组牌作为最终结果。

网络接口

程序用Unity3D编写,使用U3D自带的UnityWebRequest类实现网络接口的调用。此类有GetPost方法,实现HTTP请求。举例如下:

//Get方法
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;

public class Example : MonoBehaviour
{
    void Start()
    {
        //示例正确地址
        StartCoroutine(GetRequest("https://www.example.com"));

        //错误地址(测试用)
        StartCoroutine(GetRequest("https://error.html"));
    }

    IEnumerator GetRequest(string uri)
    {
        using (UnityWebRequest webRequest = UnityWebRequest.Get(uri))
        {
            //发送请求
            yield return webRequest.SendWebRequest();

            string[] pages = uri.Split('/');
            int page = pages.Length - 1;

            if (webRequest.isNetworkError)
            { //发出错误提示
                Debug.Log(pages[page] + ": Error: " + webRequest.error);
            }
            else
            { //输出收到的信息
                Debug.Log(pages[page] + ":\nReceived: " + webRequest.downloadHandler.text);
            }
        }
    }
}
//Post方法
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;

public class MyBehavior : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(Upload());
    }

    IEnumerator Upload()
    {
        WWWForm form = new WWWForm();
        form.AddField("myField", "myData");

        using (UnityWebRequest www = UnityWebRequest.Post("http://www.my-server.com/myform", form))
        {
            yield return www.SendWebRequest();

            if (www.isNetworkError || www.isHttpError)
            {
                Debug.Log(www.error);
            }
            else
            {
                Debug.Log("Form upload complete!");
            }
        }
    }
}

代码实现

待补充,还没有做出成品(哭了...)

遇到的困难

  1. 没用过HTTP请求
    • 百度了相关知识,查了python、java、以及Unity的各种实现,最后决定用Unity写
    • 已解决
    • 基本了解了HTTP请求的过程
  2. 算法细节逻辑不清楚
    • 查询网络上的牌类游戏的算法,来类比福建十三水,找灵感
    • 基本解决
    • 对写算法的逻辑更加清晰

评价队友

值得学习的地方

改进的地方

学习进度条

第N周 新增代码(行) 累计代码(行) 本周学习耗时(小时) 累计学习耗时(小时) 重要成长
第1周 0 0 5 5 没做多少工作,主要在学习新知识,比如怎么调用API,以及对算法的思考
第2周 200 200 7 12 学习Unity3D的UnityWebRequest类如何使用,以及Unity打包Web端的方法
第3周 400 600 6 18 学习UI的布局,算法的实现
posted @ 2019-10-30 23:23  还辰  阅读(143)  评论(1编辑  收藏  举报