1. <script>
    2. /*一个人守着一棵树,各种动物会来撞树,其中80%的概率出现的是兔子,20%的概率出现的是老虎。
    3. 兔子撞树后,60%的概率兔子撞晕了,人直接捡到兔子,40%的概率兔子没撞晕,人有50%的概率抓到活兔子
    4. 老虎撞树后,30%的概率老虎撞晕了,人直接捡到老虎。70%概率老虎没撞晕。对于没撞晕的老虎,人有30%的概率打死老虎,捡到老虎。40%的概率没打死老虎,老虎跑掉。还有30%的概率人被老虎咬死了,这时游戏结束。*/
    5. function Rabbit(){
    6. this.name = "rabbit";
    7. this.isyun = false;
    8. this.hitTree = function(){
    9. var random = Math.random();
    10. if(random < 0.6){
    11. this.isyun = true;
    12. }
    13. };
    14. this.toString = function(){
    15. return this.name;
    16. }
    17. }
    18. function Tiger(){
    19. this.name = "tiger";
    20. this.isyun = false;
    21. this.hitTree = function(){
    22. var random = Math.random();
    23. if(random < 0.3){
    24. this.isyun = true;
    25. }
    26. }
    27. this.toString = function(){
    28. return this.name;
    29. }
    30. }
    31. function Person(){
    32. //数组
    33. this.lanzi = [];
    34. this.isdead = false;
    35. this.name = "武松";
    36. this.doWithAnimal = function(animal){
    37. //如果动物晕掉了,直接捡起来
    38. if(animal.isyun == true){
    39. console.log(this.name+"捡起了"+animal.name);
    40. this.lanzi.push(animal);
    41. }
    42. //如果动物没有晕,我们得区分这个动物是兔子还是老虎
    43. else{
    44. var random = Math.random();
    45. //如果这个没晕的动物是兔子
    46. if(animal instanceof Rabbit){
    47. if(random < 0.5){
    48. console.log(this.name+"抓到了活的"+animal.name);
    49. this.lanzi.push(animal);
    50. }
    51. else{
    52. console.log(animal.name+"跑掉了");
    53. }
    54. }
    55. //如果这个没晕的动物是老虎
    56. else{
    57. if(random < 0.3){
    58. console.log(this.name+"打死了"+animal.name);
    59. this.lanzi.push(animal);
    60. }
    61. else if(random < 0.7){
    62. console.log(animal.name+"跑掉了");
    63. }
    64. else{
    65. console.log(this.name+"被"+animal.name+"咬死了");
    66. this.isdead = true;
    67. }
    68. }
    69. }
    70. }
    71. }
    72. //创建一个人的对象
    73. var p = new Person();
    74. //模拟10次动物来撞树
    75. for (var i = 0; i < 10; i++) {
    76. var r = null;
    77. if(Math.random()<0.8){
    78. //兔子
    79. r = new Rabbit();
    80. }
    81. else{
    82. //老虎
    83. r = new Tiger();
    84. }
    85. //计算机是如何确定究竟该调用兔子的hitTree还是老虎的hitTree
    86. //js是动态类型的语言
    87. r.hitTree();
    88. //引用传递 : 好处当前的全局执行环境的中r和Person对象中doWithAnimal()方法中的animal是同一个东西
    89. p.doWithAnimal(r);
    90. //人死了
    91. if(p.isdead == true){
    92. console.log("GAME OVER");
    93. break;
    94. }
    95. }
    96. if(p.isdead == false){
    97. console.log("今天好开心了,好多动物啊"+p.lanzi);
    98. }
    99. </script>

    image.png