整个游戏过程中,只能有一个前台进程,即我们控制坦克的进程,其他进程都需要放到后台,发射炮弹的函数也不例外。
一枚炮弹(即一个坐标)的运动过程即一个坐标从起点到终点的移动过程,很明显,炮弹发射的初始参数至少要包含起点的坐标和方向,而终点则不确定,因为中间可能会击中对方的坦克,这里我们先不考虑击中对方坦克的情况,那么它的终点就是我们的可运动范围的边界。
因为坦克头节点左边和方向跟即将发射的炮弹的起点坐标和方向基本一致,因此炮弹函数执行时我们只需要通知它坦克的头节点信息即可。但有一个问题, 一个后台运行的函数只有在初始运行时才会读取全局变量, 运行后,当全局变量发生变化了,它会毫不知晓:
v_global_var=1200 f_print_global_var(){ while : do echo $v_global_var sleep 0.5 done } f_print_global_var & sleep 1 v_global_var=1000 echo "it's been changed to 1000" sleep 100
展示:
[root@GipagodHost ~]# sh Tank7_1.sh 1200 1200 it's been changed to 1000 1200 1200 1200 # 全局变量已经改变,但后台进程并未改变 1200 1200
解决这个问题,暂时能想到的办法,只有从文件中获取了。 也就是说,我们需要在坦克的每一次移动时将头节点信息存储到文件中, 虽然效率会很低,但貌似没有更好的解决办法。 因此我们在坦克的操作函数中添加存储信息的相关代码: