tictactoe.txt 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. event.load("block_place");
  2. event.load("block_click");
  3. tic_tac_toe_blocks = list.new();
  4. games_world = world.getGames();
  5. list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 148, -49));
  6. list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 149, -49));
  7. list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 150, -49));
  8. list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 148, -49));
  9. list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 149, -49));
  10. list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 150, -49));
  11. list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 148, -49));
  12. list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 149, -49));
  13. list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 150, -49));
  14. list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 148, -50));
  15. list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 149, -50));
  16. list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 150, -50));
  17. list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 148, -50));
  18. list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 149, -50));
  19. list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 150, -50));
  20. list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 148, -50));
  21. list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 149, -50));
  22. list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 150, -50));
  23. list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 148, -51));
  24. list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 149, -51));
  25. list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 150, -51));
  26. list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 148, -51));
  27. list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 149, -51));
  28. list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 150, -51));
  29. list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 148, -51));
  30. list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 149, -51));
  31. list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 150, -51));
  32. winning_blocks = list.new();
  33. @start
  34. for(a = 0; a < list.getSize(tic_tac_toe_blocks); a++){
  35. block.set(list.getIndex(tic_tac_toe_blocks, a), "minecraft:air");
  36. }
  37. goto("wait");
  38. @wait
  39. wait();
  40. if(event == "block_click"){
  41. }
  42. if(event == "block_place"){
  43. if(is.tictactoe_placeable(block_loc)){
  44. if(is.triplet(block_loc)){
  45. goto("tic_tac_toe_win");
  46. }
  47. }else{
  48. cancel = true;
  49. }
  50. }
  51. goto("wait");
  52. @tic_tac_toe_win
  53. msg(player, "You won.");
  54. for(a = 0; a < list.getSize(tic_tac_toe_blocks); a++){
  55. block.set(list.getIndex(tic_tac_toe_blocks, a), "minecraft:air");
  56. }
  57. list.add(winning_blocks, block_loc);
  58. for(a = 0; a < list.getSize(winning_blocks); a++){
  59. block.set(list.getIndex(winning_blocks, a), "minecraft:red_wool");
  60. }
  61. list.clear(winning_blocks);
  62. goto("wait");
  63. function is.tictactoe_placeable(block_loc){
  64. if(!list.contains($tic_tac_toe_blocks, block_loc)){
  65. return false;
  66. }
  67. loc.addY(block_loc, -1);
  68. if(block.isAir(block_loc)){
  69. loc.addY(block_loc, 1);
  70. return false;
  71. }else{
  72. loc.addY(block_loc, 1);
  73. }
  74. return true;
  75. }
  76. function is.triplet(block_loc){
  77. if(triplet.straight(block_loc)){
  78. return true;
  79. }
  80. if(triplet.cross(block_loc)){
  81. return true;
  82. }
  83. if(triplet.cross_cross(block_loc)){
  84. return true;
  85. }
  86. else{
  87. return false;
  88. }
  89. }
  90. function triplet.straight(block_loc){
  91. list.clear($winning_blocks);
  92. temp_block_count = 1;
  93. loc.addX(block_loc, -2);
  94. temp_block_count = temp_block_count + is.blockType(block_loc);
  95. loc.addX(block_loc, 1);
  96. temp_block_count = temp_block_count + is.blockType(block_loc);
  97. loc.addX(block_loc, 2);
  98. temp_block_count = temp_block_count + is.blockType(block_loc);
  99. loc.addX(block_loc, 1);
  100. temp_block_count = temp_block_count + is.blockType(block_loc);
  101. loc.addX(block_loc, -2);
  102. if(temp_block_count > 2){
  103. return true;
  104. }
  105. list.clear($winning_blocks);
  106. temp_block_count = 1;
  107. loc.addY(block_loc, -2);
  108. temp_block_count = temp_block_count + is.blockType(block_loc);
  109. loc.addY(block_loc, 1);
  110. temp_block_count = temp_block_count + is.blockType(block_loc);
  111. loc.addY(block_loc, 2);
  112. temp_block_count = temp_block_count + is.blockType(block_loc);
  113. loc.addY(block_loc, 1);
  114. temp_block_count = temp_block_count + is.blockType(block_loc);
  115. loc.addY(block_loc, -2);
  116. if(temp_block_count > 2){
  117. return true;
  118. }
  119. list.clear($winning_blocks);
  120. temp_block_count = 1;
  121. loc.addZ(block_loc, -2);
  122. temp_block_count = temp_block_count + is.blockType(block_loc);
  123. loc.addZ(block_loc, 1);
  124. temp_block_count = temp_block_count + is.blockType(block_loc);
  125. loc.addZ(block_loc, 2);
  126. temp_block_count = temp_block_count + is.blockType(block_loc);
  127. loc.addZ(block_loc, 1);
  128. temp_block_count = temp_block_count + is.blockType(block_loc);
  129. loc.addZ(block_loc, -2);
  130. if(temp_block_count > 2){
  131. return true;
  132. }
  133. list.clear($winning_blocks);
  134. return false;
  135. }
  136. function triplet.cross(block_loc){
  137. list.clear($winning_blocks);
  138. temp_block_count = 1;
  139. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 0,-2));
  140. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 0, 1));
  141. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 0, 2));
  142. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 0, 1));
  143. loc.addX(block_loc, -2);
  144. loc.addZ(block_loc, -2);
  145. if(temp_block_count > 2){
  146. return true;
  147. }
  148. list.clear($winning_blocks);
  149. temp_block_count = 1;
  150. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 0, 2));
  151. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 0,-1));
  152. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 0,-2));
  153. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 0,-1));
  154. loc.addX(block_loc, -2);
  155. loc.addZ(block_loc, 2);
  156. if(temp_block_count > 2){
  157. return true;
  158. }
  159. list.clear($winning_blocks);
  160. temp_block_count = 1;
  161. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0,-2,-2));
  162. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 1, 1));
  163. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 2, 2));
  164. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 1, 1));
  165. loc.addY(block_loc, -2);
  166. loc.addZ(block_loc, -2);
  167. if(temp_block_count > 2){
  168. return true;
  169. }
  170. list.clear($winning_blocks);
  171. temp_block_count = 1;
  172. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0,-2, 2));
  173. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 1,-1));
  174. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 2,-2));
  175. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 1,-1));
  176. loc.addY(block_loc, -2);
  177. loc.addZ(block_loc, 2);
  178. if(temp_block_count > 2){
  179. return true;
  180. }
  181. list.clear($winning_blocks);
  182. temp_block_count = 1;
  183. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2,-2, 0));
  184. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1, 0));
  185. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 2, 0));
  186. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1, 0));
  187. loc.addY(block_loc, -2);
  188. loc.addX(block_loc, -2);
  189. if(temp_block_count > 2){
  190. return true;
  191. }
  192. list.clear($winning_blocks);
  193. temp_block_count = 1;
  194. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2,-2, 0));
  195. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-1, 1, 0));
  196. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 2, 0));
  197. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-1, 1, 0));
  198. loc.addY(block_loc, -2);
  199. loc.addX(block_loc, 2);
  200. if(temp_block_count > 2){
  201. return true;
  202. }
  203. list.clear($winning_blocks);
  204. return false;
  205. }
  206. function triplet.cross_cross(block_loc){
  207. list.clear($winning_blocks);
  208. temp_block_count = 1;
  209. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2,-2,-2));
  210. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1, 1));
  211. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 2, 2));
  212. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1, 1));
  213. loc.addY(block_loc, -2);
  214. loc.addX(block_loc, -2);
  215. loc.addZ(block_loc, -2);
  216. if(temp_block_count > 2){
  217. return true;
  218. }
  219. list.clear($winning_blocks);
  220. temp_block_count = 1;
  221. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2,-2,-2));
  222. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-1, 1, 1));
  223. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 2, 2));
  224. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-1, 1, 1));
  225. loc.addY(block_loc, -2);
  226. loc.addX(block_loc, 2);
  227. loc.addZ(block_loc, -2);
  228. if(temp_block_count > 2){
  229. return true;
  230. }
  231. list.clear($winning_blocks);
  232. temp_block_count = 1;
  233. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 2,-2));
  234. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1,-1, 1));
  235. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2,-2, 2));
  236. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1,-1, 1));
  237. loc.addY(block_loc, 2);
  238. loc.addX(block_loc, -2);
  239. loc.addZ(block_loc, -2);
  240. if(temp_block_count > 2){
  241. return true;
  242. }
  243. list.clear($winning_blocks);
  244. temp_block_count = 1;
  245. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2,-2, 2));
  246. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1,-1));
  247. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 2,-2));
  248. temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1,-1));
  249. loc.addY(block_loc, -2);
  250. loc.addX(block_loc, -2);
  251. loc.addZ(block_loc, 2);
  252. if(temp_block_count > 2){
  253. return true;
  254. }
  255. list.clear($winning_blocks);
  256. return false;
  257. }
  258. function t_loc_add(block_loc, x, y, z){
  259. loc.add(block_loc,x, y ,z);
  260. return block_loc;
  261. }
  262. function is.blockType(block_loc){
  263. if(block.getType(block_loc) == $block_type){
  264. list.add($winning_blocks, block_loc);
  265. return 1;
  266. }else{
  267. return 0;
  268. }
  269. }