本次作业主要用到javaSript的Dom树部分知识。作业代码的编写是在10.19-22之间完成。
10.19确定了主要需要完成两个表单部分:setting——进行游戏前数据的设置,gaming——游戏过程中的操作。通过标签的onclick属性调用js的函数,js通过标签的class和id来获取要操作的dom节点,实现数据的展示和修改。此时我对于dom树的应用局限于获取节点,修改节点的属性和内容。
此外,在js文件中通过判断语句来对用户输入数据进行限制,以防用户输入违规数据。
10.20-21通过csdn继续学习dom树的相关知识,掌握通过js来增删dom节点,将原本要通过用户输入上传的交互方式优化为下拉菜单的选择,同时也实现了对游戏过程的展示功能。
在模拟人机对战的过程中,为了突出电脑操作的过程,搜索掌握了setTimeout()函数,给电脑操作设定延时,使游戏过程更加真实。
同时引出其他问题:等待电脑操作时玩家仍然可以操作,会扰乱游戏程序。对此的解决方案是给input标签设置disabled属性,防止玩家的违规操作。
这次作业只包含一个html文件,为了实现设置页面、游戏页面等的展示,通过js函数修改div的display属性,不需要展示时就设为none。这也帮助了不同游戏模式的实现。人机对战和人人对战的设置界面、游戏界面要有区别,为节省代码量,没有编写新的盒子,而是通过js函数对原有盒子的属性进行修改。
10.22本日主要完善css代码,美化外观。这部分内容相当枯燥,同时让人烦躁。此外对逻辑代码进行修改,完善了程序的健壮性,这部分有一处问题。游戏设置数据时无法避免用户输入小数,程序会自动认定为整数,所以无法从程序上拦截。我采取的方法包括对1取余,再跟0做等值判断;包括倍数×10,再跟10取余,但都没得到理想效果。
同时优化了电脑取值的代码部分。max和mini分别是取值的上下限,present剩下的值,则电脑每次的取值应该等于present%(max+mini),只要保证每次取值后剩下的值是(mini+max)的倍数,那就一定能赢。