第五周作业

一、理论学习

1、完成慕课第六、七章的相关学习。

第五周作业_第1张图片

第五周作业_第2张图片

 

 2、阅读《构建之法》讲义中的“需求”。

       需求是人们要解决的某个问题或达到某种目的的需要,是作为系统开发、测试、验收和提交的正式文档依据。利用NABCD模型来分析项目开发的过程能有效的避免拍脑袋做决定,为项目开发提供良好的前提。需求发的获取有焦点小组、深入面谈、卡片分类用户调查问卷、用户日志研究、民族/人种研究、软件可用性研究、眼动跟踪研究、纸上模型调研和A/B测试等方式。其中各有优缺点,可以综合利用这些方式获取需求。

二、实践学习

  本周通过讨论与分析完成了诗词库的建立,游戏框架的搭建、部分主程序以及分模块的编程等任务。在任务完成的过程中尝试着利用Tower平台进行任务分配,管理项目进度,提升协作效率。实践部分采用石墨文档编辑,文档地址为:https://shimo.im/docs/8cxtdCRyDGKCH3DY。代码仓库地址为:https://gitee.com/lixiaohua_03/joint_development_project/tree/master/ChinesePoetry,具体的实践内容如下:

 

  (一)利用Tower进行项目进度安排以及任务分配,具体分配方式的制定主要是以编程能力的大小为依据,其中李肖华主要负责诗词库的建立与扩展,以及其他分模块程序的编写;陆遥负责游戏主程序的编写与检测。项目地址为:https://tower.im/teams/864718/projects/133,相关截图如下所示

第五周作业_第3张图片

  (二)首先完成了诗词库的建立,通过使用json对诗词数据库进行封装,方便Python程序的调用,然后从网站中唐诗宋词选出100首耳熟能详的诗词完善数据库,随后从诗句中提取关键词,建立相应的列表和字典,经过完善后的数据库达到了100首唐诗宋词。随着项目的进度,数据库会进一步扩展。采用这种数据库格式的主要原因是:在调用数据库时,可以精确的知道某个显示的关键词来自于哪里,同时也方便后期添加其他一些功能(如:显示答案),相关截图如下所示

第五周作业_第4张图片

   (三)利用python中的GUI库对游戏进行编程,最初完成了游戏的可视化以及关键词与诗句的一一对应,相当于一个测试程序,相关截图如下所示

第五周作业_第5张图片第五周作业_第6张图片

 

随后对程序进一步的完善 ,使得程序可以一次性随机的的显示12个非同首诗词中的关键词,优化了变量的命名和UI的排版,后续会添加游戏退出按钮,游戏开始界面等。相关截图如下所示

 

第五周作业_第7张图片 第五周作业_第8张图片

 

  完善后的代码如下:

 1 # -*- coding: UTF-8 -*-
 2 
 3 import json
 4 import random
 5 import tkinter as tk
 6 
 7 
 8 def open_database(json_file):
 9     f = open(json_file, encoding="utf-8")
10     poetry_dict = json.load(f)
11     return poetry_dict
12 
13 
14 def random_selection():
15     record = []
16     poetry_dict = open_database("poetry_database.json")
17     for i in range(100):
18         loc = random.randint(1, 30)
19         if loc not in record:
20             record.append(loc)
21             line_count = poetry_dict[loc - 1]["line"]
22             line_num = random.randint(1, line_count)
23             if len(record) == 1:
24                 start_btn.place_forget()
25                 random_keyword_1.set(poetry_dict[loc - 1]["keyword"][line_num - 1])
26             elif len(record) == 2:
27                 random_keyword_2.set(poetry_dict[loc - 1]["keyword"][line_num - 1])
28             elif len(record) == 3:
29                 random_keyword_3.set(poetry_dict[loc - 1]["keyword"][line_num - 1])
30             elif len(record) == 4:
31                 random_keyword_4.set(poetry_dict[loc - 1]["keyword"][line_num - 1])
32             elif len(record) == 5:
33                 random_keyword_5.set(poetry_dict[loc - 1]["keyword"][line_num - 1])
34             elif len(record) == 6:
35                 random_keyword_6.set(poetry_dict[loc - 1]["keyword"][line_num - 1])
36             elif len(record) == 7:
37                 random_keyword_7.set(poetry_dict[loc - 1]["keyword"][line_num - 1])
38             elif len(record) == 8:
39                 random_keyword_8.set(poetry_dict[loc - 1]["keyword"][line_num - 1])
40             elif len(record) == 9:
41                 random_keyword_9.set(poetry_dict[loc - 1]["keyword"][line_num - 1])
42             elif len(record) == 10:
43                 random_keyword_10.set(poetry_dict[loc - 1]["keyword"][line_num - 1])
44             elif len(record) == 11:
45                 random_keyword_11.set(poetry_dict[loc - 1]["keyword"][line_num - 1])
46             elif len(record) == 12:
47                 random_keyword_12.set(poetry_dict[loc - 1]["keyword"][line_num - 1])
48                 break
49         if loc in record:
50             continue
51 
52 
53 window = tk.Tk()
54 window.title("出口成诗小游戏")
55 window.geometry("500x300")
56 
57 random_keyword_1 = tk.StringVar()
58 random_keyword_2 = tk.StringVar()
59 random_keyword_3 = tk.StringVar()
60 random_keyword_4 = tk.StringVar()
61 random_keyword_5 = tk.StringVar()
62 random_keyword_6 = tk.StringVar()
63 random_keyword_7 = tk.StringVar()
64 random_keyword_8 = tk.StringVar()
65 random_keyword_9 = tk.StringVar()
66 random_keyword_10 = tk.StringVar()
67 random_keyword_11 = tk.StringVar()
68 random_keyword_12 = tk.StringVar()
69 
70 start_btn = tk.Button(window, text="开始游戏", font=('微软雅黑', 12, "bold"), width=10, height=1, command=random_selection
71                       )
72 start_btn.place(x=400, y=200)
73 lab_1 = tk.Label(window, textvariable=random_keyword_1, bg="red", fg="white", font=("微软雅黑", 14, "bold"), width=6,
74                  height=2, relief="raised", borderwidth=10).place(x=0, y=0)
75 lab_2 = tk.Label(window, textvariable=random_keyword_2, bg="red", fg="white", font=("微软雅黑", 14, "bold"), width=6,
76                  height=2, relief="raised", borderwidth=10).place(x=100, y=0)
77 lab_3 = tk.Label(window, textvariable=random_keyword_3, bg="red", fg="white", font=("微软雅黑", 14, "bold"), width=6,
78                  height=2, relief="raised", borderwidth=10).place(x=200, y=0)
79 lab_4 = tk.Label(window, textvariable=random_keyword_4, bg="red", fg="white", font=("微软雅黑", 14, "bold"), width=6,
80                  height=2, relief="raised", borderwidth=10).place(x=300, y=0)
81 lab_5 = tk.Label(window, textvariable=random_keyword_5, bg="red", fg="white", font=("微软雅黑", 14, "bold"), width=6,
82                  height=2, relief="raised", borderwidth=10).place(x=0, y=100)
83 lab_6 = tk.Label(window, textvariable=random_keyword_6, bg="red", fg="white", font=("微软雅黑", 14, "bold"), width=6,
84                  height=2, relief="raised", borderwidth=10).place(x=100, y=100)
85 lab_7 = tk.Label(window, textvariable=random_keyword_7, bg="red", fg="white", font=("微软雅黑", 14, "bold"), width=6,
86                  height=2, relief="raised", borderwidth=10).place(x=200, y=100)
87 lab_8 = tk.Label(window, textvariable=random_keyword_8, bg="red", fg="white", font=("微软雅黑", 14, "bold"), width=6,
88                  height=2, relief="raised", borderwidth=10).place(x=300, y=100)
89 lab_9 = tk.Label(window, textvariable=random_keyword_9, bg="red", fg="white", font=("微软雅黑", 14, "bold"), width=6,
90                  height=2, relief="raised", borderwidth=10).place(x=0, y=200)
91 lab_10 = tk.Label(window, textvariable=random_keyword_10, bg="red", fg="white", font=("微软雅黑", 14, "bold"), width=6,
92                   height=2, relief="raised", borderwidth=10).place(x=100, y=200)
93 lab_11 = tk.Label(window, textvariable=random_keyword_11, bg="red", fg="white", font=("微软雅黑", 14, "bold"), width=6,
94                   height=2, relief="raised", borderwidth=10).place(x=200, y=200)
95 lab_12 = tk.Label(window, textvariable=random_keyword_12, bg="red", fg="white", font=("微软雅黑", 14, "bold"), width=6,
96                   height=2, relief="raised", borderwidth=10).place(x=300, y=200)
97 
98 window.mainloop()

  (四)完成了对游戏时间模块程序的编写任务,实现的功能主要是可以控制完成任务的时间,然后会进行倒计时,倒计时结束后会提示时间用尽,点击确定之后用户可以选择是否继续进行,后续会将时间模块的代码整合到游戏代码中相关截图如下所示  

第五周作业_第9张图片第五周作业_第10张图片

 

  完善后的代码如下:

 1 # Countdown using Tkinter
 2 from tkinter import *
 3 import time
 4 import tkinter.messagebox
 5 
 6 class App:
 7     def __init__(self,master):
 8         frame = Frame(master)
 9         frame.pack()
10         self.entryWidget = Entry(frame)
11         self.entryWidget["width"] = 15
12         self.entryWidget.pack(side=LEFT)
13         self.hi_there = Button(frame, text="开始", command=self.start)
14         self.hi_there.pack(side=LEFT)
15         self.button = Button(frame, text="退出", fg="red", command=frame.quit)
16         self.button.pack(side=LEFT)
17 
18     def start(self):
19         text = self.entryWidget.get().strip()
20         if text != "":
21             num = int(text)
22             self.countDown(num)
23 
24     def countDown(self,seconds):
25         lbl1.config(bg='yellow')
26         lbl1.config(height=3, font=('times', 20, 'bold'))
27         for k in range(seconds, 0, -1):
28             lbl1["text"] = k
29             root.update()
30             time.sleep(1)
31             lbl1.config(bg='red')
32             lbl1.config(fg='white')
33             lbl1["text"] = "时间到!"
34         tkinter.messagebox.showinfo("时间到!","时间到!")
35 
36 
37 def closewindow():
38     if tkinter.messagebox.askokcancel("Quit", "Do you want to exit?"):
39         root.destroy()
40 
41 
42 root = Tk()
43 root.title("Countdown")
44 lbl1 = Label()
45 lbl1.pack(fill=BOTH, expand=1)
46 app = App(root)
47 root.protocol('WM_DELETE_WINDOW', closewindow)
48 root.mainloop()

  总结:本周两人都是初次对一个项目进行开发,遇到了许多问题,特别是在制定计划的时候,对项目的开发过程没有预见性,在时间的安排以及进度的管理上都显得比较混乱,团队之间的沟通交流也不够及时可能是经验不足的原因,应当在以后的开发过程中能及时避免这些问题的出现。除此之外,也许是万事开头难,在开发之初明显感觉到所学的知识不够用,之前也没有学过GUI,只能边学边做,导致游戏开发进程较慢。总的来说,通过本周的理论和实践学习,学到了很多东西,特别是对软件开发有了更深的理解,两人的默契程度得到了提升后面两人将对本周的软件开发工作做好总结,规划好下周的开发任务,一步一个脚印地推进项目。

 三、学习记录

学习阶段 学习内容 学习收获
2019.3.17 14:00-17:00 软件工程

对需求以及配置管理有了一定了解

2019.3.18 14:00-17:00 《构建之法》讲义 进一步了解需求
2019.3.19 14:00-17:00 python基础学习 学习python的基本语法
2019.3.20 09:00-17:00 实践学习 构建诗词数据库
2019.3.21 09:00-2100

 

实践学习

编写实践模块程序

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(第五周作业)