big steppy
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 

240 行
4.9 KiB

  1. var baseHeight = 3.65;
  2. var baseMass = 1360;
  3. var scale = 1;
  4. var strolling = false;
  5. victims = {};
  6. function toggle_auto()
  7. {
  8. strolling = !strolling;
  9. }
  10. function initVictims()
  11. {
  12. return {
  13. "Person": 0,
  14. "Car": 0,
  15. "Bus": 0,
  16. "Motorcycle": 0,
  17. "House": 0,
  18. "Train": 0,
  19. "Parking Garage": 0,
  20. "Overpass": 0,
  21. "Tide Pod": 0
  22. };
  23. };
  24. function getOnePrey(area)
  25. {
  26. var potential = ["Person", "Car", "Bus", "House", "Train", "Parking Garage", "Tide Pod"];
  27. var potAreas = []
  28. potential.forEach(function (x) {
  29. potAreas.push([x,areas[x]]);
  30. });
  31. potAreas = potAreas.sort(function (x,y) {
  32. return x[1] < y[1];
  33. });
  34. for (var i=0; i<potAreas.length; i++) {
  35. x = potAreas[i];
  36. if (x[1] < area) {
  37. return new things[x[0]](1);
  38. }
  39. };
  40. return new Person(1);
  41. }
  42. function getPrey(region, area)
  43. {
  44. switch(region)
  45. {
  46. case "suburb": return suburbPrey(area);
  47. }
  48. }
  49. function suburbPrey(area)
  50. {
  51. return fill_area(area, {"Person": 0.5, "House": 0.5, "Car": 0.2, "Tide Pod": 100});
  52. }
  53. function updateVictims(type,prey)
  54. {
  55. var sums = prey.sum();
  56. for (var key in sums) {
  57. if (sums.hasOwnProperty(key)) {
  58. victims[type][key] += sums[key];
  59. }
  60. }
  61. }
  62. function scaleAddMass(scale, baseMass, mass)
  63. {
  64. var startMass = Math.pow(scale, 3) * baseMass;
  65. var newMass = startMass + mass;
  66. return Math.pow(newMass / baseMass, 1/3) ;
  67. }
  68. function feed()
  69. {
  70. var prey = getPrey("suburb", 0.5*scale*scale);
  71. var line = prey.eat();
  72. var preyMass = prey.sum_property("mass");
  73. scale = scaleAddMass(scale, baseMass, preyMass);
  74. updateVictims("stomach",prey);
  75. update([line]);
  76. }
  77. function stomp()
  78. {
  79. var prey = getPrey("suburb", 1.5*scale*scale);
  80. var line = prey.stomp();
  81. var preyMass = prey.sum_property("mass");
  82. scale = scaleAddMass(scale, baseMass, preyMass);
  83. updateVictims("stomped",prey);
  84. update([line]);
  85. }
  86. function anal_vore()
  87. {
  88. var prey = getOnePrey(scale*scale*2)
  89. var line = prey.anal_vore();
  90. var preyMass = prey.sum_property("mass");
  91. scale = scaleAddMass(scale, baseMass, preyMass);
  92. updateVictims("bowels",prey);
  93. update([line]);
  94. }
  95. function update(lines = [])
  96. {
  97. var log = document.getElementById("log");
  98. lines.forEach(function (x) {
  99. var line = document.createElement('div');
  100. line.innerHTML = x;
  101. log.appendChild(line);
  102. });
  103. log.scrollTop = log.scrollHeight;
  104. var height = baseHeight * scale;
  105. var mass = baseMass * Math.pow(scale, 3);
  106. document.getElementById("height").innerHTML = "Height: " + Math.round(height * 3) + " feet";
  107. document.getElementById("mass").innerHTML = "Mass: " + Math.round(mass * 2.2) + " pounds";
  108. for (var type in victims) {
  109. if (victims.hasOwnProperty(type)) {
  110. for (var key in victims[type]){
  111. if (victims[type].hasOwnProperty(key)) {
  112. if (document.getElementById("stats-" + type + "-" + key) == null) {
  113. if (victims[type][key] == 0)
  114. continue;
  115. child = document.createElement('div');
  116. child.id = "stats-" + type + "-" + key;
  117. child.classList.add("stat-line");
  118. document.getElementById("stats-" + type).appendChild(child);
  119. }
  120. document.getElementById("stats-" + type + "-" + key).innerHTML = key + ": " + victims[type][key];
  121. }
  122. }
  123. }
  124. }
  125. }
  126. function pick_move()
  127. {
  128. if (!strolling) {
  129. setTimeout(pick_move, 2000);
  130. return;
  131. }
  132. var choice = Math.random();
  133. if (choice < 0.2) {
  134. anal_vore();
  135. setTimeout(pick_move, 2000);
  136. } else if (choice < 0.6) {
  137. stomp();
  138. setTimeout(pick_move, 2000);
  139. } else {
  140. feed();
  141. setTimeout(pick_move, 2000);
  142. }
  143. }
  144. function grow()
  145. {
  146. scale *= 1.2;
  147. update();
  148. }
  149. function digest()
  150. {
  151. var newlyDigested = initVictims();
  152. var stomach = victims["stomach"];
  153. for (var key in stomach) {
  154. if (stomach.hasOwnProperty(key)) {
  155. var digested = Math.ceil(stomach[key] / 2);
  156. newlyDigested[key] += digested;
  157. victims["digested"][key] += digested;
  158. victims["stomach"][key] -= digested;
  159. }
  160. }
  161. var bowels = victims["bowels"];
  162. for (var key in bowels) {
  163. if (bowels.hasOwnProperty(key)) {
  164. var digested = Math.ceil(bowels[key] / 3);
  165. newlyDigested[key] += digested;
  166. victims["digested"][key] += digested;
  167. victims["bowels"][key] -= digested;
  168. }
  169. }
  170. var melted = [];
  171. for (var key in newlyDigested) {
  172. if (newlyDigested.hasOwnProperty(key) && newlyDigested[key] > 0) {
  173. melted.push(new things[key](newlyDigested[key]));
  174. }
  175. }
  176. var meltedTotal = new Container(melted);
  177. if (meltedTotal.count > 0)
  178. update(["Your stomach gurgles as it digests " + meltedTotal.describe()]);
  179. else
  180. update();
  181. setTimeout(digest, 5000);
  182. }
  183. window.addEventListener('load', function(event) {
  184. victims["stomped"] = initVictims();
  185. victims["digested"] = initVictims();
  186. victims["stomach"] = initVictims();
  187. victims["bowels"] = initVictims();
  188. setTimeout(pick_move, 2000);
  189. setTimeout(digest, 5000);
  190. update();
  191. });