2023秋软件实践 第二次结对编程作业

2023秋软件实践 第二次结对编程作业

这个作业属于哪个课程2023秋-福州大学软件工程
这个作业要求在哪里2023秋软工实践 第二次结对编程作业
个人学号102101112
结对成员学号102101327
GitHub 仓库地址GitHub仓库

TOC


背景

在并发生成9个九宫格数独,每一个九宫格数独都是串行生成的基础上,进行九个数独求解,必须实现并发求解


一、需求分析(NABCD模型)

1. NEED:

并发生成9个数独谜题,并求解

2.Approach:

设计一个生成数独的网页,用户可自选难度,并给出答案

3.Benefit:

页面简洁直观,便于操作

并发生成数独,减少用户等待时间

可显示标准答案,方便用户参考

4.Competition:

功能基本齐全,增加了背景音乐,以及一个用户提交之后的小彩蛋

5.Delivery:

可向家人,朋友进行宣传

二、原型设计

原型使用Figma进行设计 这是链接

三、代码实现

求解数独


    // 开始解数独
    solveSudoku(0, 0);
    localStorage.setItem('solution' + a, JSON.stringify(board));

  
 
  
    while (emptyCellsCount < emptyCells) {
      const row = Math.floor(Math.random() * 9);
      const col = Math.floor(Math.random() * 9);
      if (board[row][col] !== 0) {
        board[row][col] = 0;
        emptyCellsCount++;
      }
    }
  
    return board;
}

// 生成数独的函数
function generateSudoku(i) 
{
    // 检查本地存储中是否存在数独数据
    const storedSudoku = localStorage.getItem('sudoku' + i);
    if (storedSudoku) {
      return JSON.parse(storedSudoku); // 使用存储的数独数据
    }
  
    // 生成新的数独
    const sudoku = generateNewSudoku(i);
    
    // 存储数独数据到本地存储
    localStorage.setItem('sudoku' + i, JSON.stringify(sudoku));
  
    return sudoku;
}
  
  // 将数独输出到页面上
  function displaySudoku(sudoku, container) {
    var sudokuElement = document.createElement("div");
    sudokuElement.className = "sudoku";
  
    // 创建数独格子
    for (var i = 0; i < 9; i++) {
      for (var j = 0; j < 9; j++) {
        var cell = document.createElement("div");
        cell.className = "sudoku-cell";
        cell.textContent = sudoku[i][j] !== 0 ? sudoku[i][j] : "";
        if (sudoku[i][j] !== 0) {
          cell.classList.add("filled");
        }
        sudokuElement.appendChild(cell);
      }
    }
  
    container.appendChild(sudokuElement);
  }



      

并发实现

  function generateAndDisplayNineSudokus() {
    var container = document.getElementById("sudoku-container");
  
    // 使用Promise.all来并发生成九个数独
    var promises = [];
    for (var i = 0; i < 9; i++) {
      var promise = new Promise(function(resolve) {
        var sudoku = generateSudoku(i);
        resolve(sudoku);
      });
  
      promises.push(promise);
    }
  
    Promise.all(promises).then(function(results) {
      // 显示生成的九个数独
      for (let i = 0; i < results.length; i++) {
        displaySudoku(results[i], container);
      }
      
      console.log("九个数独生成并显示完成");
    });
  }
  
  generateAndDisplayNineSudokus();

四、PSP

任务耗时
分析2.5h
设计3h
新技术学习3h
代码调试5h
博客1h

五、重点功能及思考

1.并发求解
2.清除本地副本以更新数据
3.更新界面UI以区分数独题目与答案

六、总结

在这里插入图片描述

这次是结对作业,要求团队合作,这样既能互帮互助,也能学习技能。我们两人在初期也商讨了很多,我也跟我的搭子学了技能。很有收获,学会了多线程或多进程、并发数据结构、调优和性能测试等技术。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值