这个作业属于哪个课程 | <班级的链接> |
---|---|
这个作业要求在哪里 | <作业要求的链接> |
个人学号 | <102299144> |
结对成员学号 | <102299217> |
GitHub 仓库地址 | <GitHub仓库地址> |
一、需求分析
Need(需求):
并发生成数独:系统能够同时生成9个九宫格数独,以满足用户同时挑战多个数独的需求,提高游戏难度和效率。
保证数独可解性:系统确保生成的每个九宫格数独都可解,以保证用户能够在后续游戏中解决这些数独,展示他们的解谜技能。
Approach(做法):
并行生成独立数独页面: 9个9宫格数独并行生成,每个数独都可独立求解。
Benefit(好处):
九个九宫格数独共存,操作便捷。
Competition(竞争):
操作简单,界面简洁。
Delivery,推广
邀请身边喜欢数独的同学体验,请他们提供使用感受和建议。
不断更新和完善平台的功能和服务,提高用户体验和满意度,吸引更多的用户加入并留存。
二、PSP表格
PSP任务 | 估计时间(分钟) | 实际时间(分钟) |
---|---|---|
Planning(计划) | 30 | 20 |
Analysis(需求分析) | 60 | 50 |
Learning (学习) | 200 | 300 |
Design(具体设计) | 120 | 150 |
Development(开发) | 200 | 300 |
Coding(具体编码) | 300 | 400 |
Test(测试) | 120 | 150 |
Postmortem & Process Improvement Plan(事后总结) | 30 | 30 |
Total(总计) | 1060 | 1400 |
三、原型展示
[原型链接](https://modao.cc/proto/dpPdVlKHs1qr5lHyzUnK0K/sharing?view_mode=read_only #数独原型-分享)
原型采用Axure制作并上传到墨刀
四、算法与技术
我们此次作业用的是Python,前后端链接用的flask,因为比较简单,上手快一点
并发性算法
# 创建一个空列表用于保存生成的九个数独谜题
sudokus = []
# 定义生成数独的函数
def generate_sudoku():
sudoku = generate()
blank = copy.deepcopy(sudoku)
remove(blank, 50)
return (sudoku, blank)
# 创建九个线程,每个线程生成一个数独谜题并将其保存到列表中
threads = []
for _ in range(9):
thread = threading.Thread(target=lambda: sudokus.append(generate_sudoku()))
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
唯一解保证
def unique_solution(msg, blanks):
msg_copy = [row[:] for row in msg]
# 挖掉指定位置的数字
for b in blanks:
row = b // 9
col = b % 9
msg_copy[row][col] = 0
# 使用回溯法求解谜题
solutions = []
solve(msg_copy, solutions)
return len(solutions) == 1