https://ofqa2i.axshare.com
说明你所采用的原型开发工具(1分)
pigTail采用的原型开发工具是:axure,ps
图片结合内容展示:
原型由以下几个页面构成
登入页面有输入账号密码,密码为掩码构成,此外细节较为丰富,拥有“记住我”,“忘记密码”,音乐,设置,提示功能
输入正确账号密码后跳转到游戏模式选择界面
若选择人机对战模式,则有不同难度的人机模式供用户选择
若选择在线对战,则进入在线对战模块,该页面细节也较为丰富,有创建对局,加入对局等功能(在线对战原型设计确实走心了)
加入房间页面提供了目前空闲的uuid,用户可以点击加入房间,也可以选择查找uuid,若uuid存在,则显示出房间供用户选择加入与否。
此外还有该原型界面加入了一些细节,如刷新信息,随机加入,回到主页等功能
玩家在选择模式后,即将进入房间对局页面,期间会有3秒的动画等待过渡,期间可以选择退出等待,释放对局
[2.2.2]遇到的困难及解决方法:(4分)
困难描述(1分)
python中变量和包名不能取相同的名字,不然寻找bug时候就会有多绝望可以体会
python中pygame框架自我感觉不适合写交互类游戏,没有很多ui小组件啊,绝望。
本次作业用到py中两个主要框架,pyqt5和pygame,由于一些文档显示和输入内容难以在pygame框架中展现,在作业的最后几天临时添加进pyqt框架,使得这两个框架显示的ui界面无法很好的交互,主要由于时间问题,这个问题还有待解决。
解决过程(2分)
慢慢coding,一段段代码测试过去,才知道问题所在。
关于pygame和pyqt这两个框架,毫无疑问,pygame适合用来写游戏,但是一些交互信息文档类的ui界面就难以用pygame了,于是在网上查找另一些pyUI框架。决定用pyqt进行与pygame整合优缺点了。
有何收获(1分)
熟练掌握了pygame工具,对python更加膜拜了,网络请求库资源方便利索,也掌握了几种适用的pyui框架。想转python了,毕竟python,及时行乐。
增强了团队之间的容错率,分工明确,默契配合。
我们将测试组的同学们提供的接口文档细致阅读后,对于游戏的基本接口信息交互有了充分认知后,设计了一个类用于对每种接口的核心信息做了分类,以及接口信息返回做了分类,具体如下、对于异常状况做了相应的异常处理、否则可能会出现由于少量的网络波动和非理想状况(如:玩家登陆失败、网络波动导致程序终止、因此必须考虑所有可能的返回参数)
接口简称 | 接口参数需求 | 可能的返回状况 |
---|---|---|
登录连接 | student_id 、password |
登陆成功、登录失败(含网络超时) |
登录连接 | student_id 、password |
登陆成功、登录失败(含网络超时) |
加入对局 | token 、uuid |
加入成功、失败(对局不存在、无法加入(人满)、网络超时) |
创建对局 | token |
创建成功、创建失败 |
获取上步信息 | token 、uuid |
获取成功、网络超时 |
执行玩家操作 | token 、uuid |
执行成功、失败 |
获取上步操作 | token 、uuid |
获取成功、失败 |
import requests import json def get_last(token, uuid): url = 'http://172.17.173.97:9000/api/game/' + uuid + '/last' header = {'Authorization': token, 'Content-Type': 'application/json'} r = requests.get(url, headers=header,timeout=5) user_dict = json.loads(r.text) # print(user_dict) return user_dict
user_dict['data']['last_code']
某次偶发性的网络波动导致user_dict['data']
根本不存在、没能正确处理而导致了程序的异常终止是非常糟糕的。而坏处也很明显将庞大的返回信息的处理交给了后续的程序、也加重了工作量。# filename="./tests/test_api.py import unittest from datetime import datetime from django.core.cache import cache from ..utils import Highlighter, UpdatedAtKeyBit class PostViewSetTestCase(APITestCase): def test_list_post_create_game(self): def test_list_post_join_game(self): def test_list_post_getlast_game(self,token): ''' :param token: :param uuid: :return: ''' #这里以获取上步操作为例:本以为这个接口不会有太大的问题,因为很偶然的错误没能加入了一场已经人满的对局 #在测试过程中才发现,没有考虑到人没齐的时候,返回的报文不存在last_code字段,看了错误堆栈才明白问题所在。 url = 'http://172.17.173.97:9000/api/game/' + uuid + '/last' header = {'Authorization': token, 'Content-Type': 'application/json'} r = requests.get(url, headers=header) user_dict = json.loads(r.text) response = self.client.get(url, {"token": token, "uuid":uuid}) self.assertEqual(response.status_code, status.HTTP_200_OK) #可能返回的有状态码"200"、"403"、"404" serializer = PostListSerializer(instance=[self.post2, self.post1], many=True) self.assertEqual(response.data["results"], serializer.data) result = field.to_representation(document) self.assertEqual(user_dict_result, expected) return user_dict_result def test_list_put_Do_card(self): def test_list_get_result(self): def test_list_get_list(self):
Angular
:翁敏to伟煌
伟煌是队里的主力,我主要是给他端茶倒水,擦汗扇风,找找bug,写写边角料的代码和文字工作。队长虽然能力强,但是作风武断,不顾及我的感受把我原本用js写的web端猪尾巴程序给否定掉了(毕竟正经人谁用pygame写这种程序啊)。但是最后作业也绝大部分都做出来了,我也只能心怀感恩了。
第N周 | 新增代码(行) | 累计代码(行) | 周学习耗时(小时) | 累计学习耗时(小时) | 重要成长与任务进展 |
---|---|---|---|---|---|
1 | 506 | 506 | 15 | 15 | 学习了JS的初步知识、尝试修改自己的博客样式、测试了接口的通用性、学会了gitmoji、gitcommit规范 |
2 | 1006 | 1512 | 12 | 27 | 使用JS完成了基本的登陆界面、寻找了相关素材、对柯老师的感恩之情深入心府 |
3 | 200 | 1712 | 19 | 46 | JS解决跨域问题纯前端方法太困难了、很痛苦地换了方案、开始学习python的pygame |
4 | 1700 | 3412 | 10 | 66 | pygame写完了最基本的人人对战,人机对战,基本的登陆逻辑、对柯老师课堂上的淳淳教导更加深有体会、后悔没有早点遇到这样的好老师 |
5 | 1000 | 4412 | 20 | 86 | 完成了通过手动输入uuid进行在线人人对战的代码、进行了部分网络测试 |
…