|
@@ -0,0 +1,309 @@
|
|
|
+event.load("block_place");
|
|
|
+event.load("block_click");
|
|
|
+event.load("function_key");
|
|
|
+tic_tac_toe_blocks = list.new();
|
|
|
+
|
|
|
+/*games_world = world.getGames();
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 148, -49));
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 149, -49));
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 150, -49));
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 148, -49));
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 149, -49));
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 150, -49));
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 148, -49));
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 149, -49));
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 150, -49));
|
|
|
+
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 148, -50));
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 149, -50));
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 150, -50));
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 148, -50));
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 149, -50));
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 150, -50));
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 148, -50));
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 149, -50));
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 150, -50));
|
|
|
+
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 148, -51));
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 149, -51));
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -430, 150, -51));
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 148, -51));
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 149, -51));
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -431, 150, -51));
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 148, -51));
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 149, -51));
|
|
|
+list.add(tic_tac_toe_blocks, loc.new(games_world, -432, 150, -51));*/
|
|
|
+
|
|
|
+winning_blocks = list.new();
|
|
|
+playing_players = list.new();
|
|
|
+
|
|
|
+ttt_start_loc_list = list.new();
|
|
|
+list.add(ttt_start_loc_list, loc.new(games_world, -427, 147, -50));
|
|
|
+list.add(ttt_start_loc_list, loc.new(games_world, -431, 147, -54));
|
|
|
+list.add(ttt_start_loc_list, loc.new(games_world, -435, 147, -50));
|
|
|
+list.add(ttt_start_loc_list, loc.new(games_world, -435, 147, -46));
|
|
|
+
|
|
|
+placed_blocks = list.new();
|
|
|
+
|
|
|
+dimension = 3;
|
|
|
+dem_array = array-new[dimension - 3]
|
|
|
+for(a = 0; a < dimension - 2; a++){
|
|
|
+ dem_array[a] = 0;
|
|
|
+}
|
|
|
+length = 3;
|
|
|
+
|
|
|
+@end
|
|
|
+for(a = 0; a < list.getSize(placed_blocks); a++){
|
|
|
+ block.set(list.getIndex(placed_blocks, a), "minecraft:air");
|
|
|
+}
|
|
|
+list.clear(placed_blocks);
|
|
|
+goto("wait");
|
|
|
+
|
|
|
+@wait
|
|
|
+wait();
|
|
|
+
|
|
|
+if(event == "block_click"){
|
|
|
+ if(list.contains(ttt_start_loc_list, block_loc)){
|
|
|
+ list.add(playing_players, player);
|
|
|
+ }
|
|
|
+}
|
|
|
+if(event == "block_place"){
|
|
|
+ if(list.contains(playing_players, player)){
|
|
|
+ if(is.tictactoe_placeable(block_loc)){
|
|
|
+ temp_array = array.new[dimension - 2];
|
|
|
+ temp_array[0] = block_loc;
|
|
|
+
|
|
|
+ list.add(placed_blocks, temp_array)
|
|
|
+ if(is.triplet(block_loc)){
|
|
|
+ goto("tic_tac_toe_win");
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ cancel = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+if(event == "function_key"){
|
|
|
+ if(list.contains(playing_players, player)){
|
|
|
+
|
|
|
+ }
|
|
|
+}
|
|
|
+goto("wait");
|
|
|
+
|
|
|
+@tic_tac_toe_win
|
|
|
+msg(player, "You won.");
|
|
|
+for(a = 0; a < list.getSize(tic_tac_toe_blocks); a++){
|
|
|
+ block.set(list.getIndex(tic_tac_toe_blocks, a), "minecraft:air");
|
|
|
+}
|
|
|
+list.add(winning_blocks, block_loc);
|
|
|
+for(a = 0; a < list.getSize(winning_blocks); a++){
|
|
|
+ block.set(list.getIndex(winning_blocks, a), "minecraft:red_wool");
|
|
|
+}
|
|
|
+list.clear(winning_blocks);
|
|
|
+list.clear(playing_players);
|
|
|
+goto("wait");
|
|
|
+
|
|
|
+
|
|
|
+function is.tictactoe_placeable(block_loc){
|
|
|
+ if(!list.contains($tic_tac_toe_blocks, block_loc)){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ loc.addY(block_loc, -1);
|
|
|
+ if(block.isAir(block_loc)){
|
|
|
+ loc.addY(block_loc, 1);
|
|
|
+ return false;
|
|
|
+ }else{
|
|
|
+ loc.addY(block_loc, 1);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|
|
|
+function is.triplet(block_loc){
|
|
|
+ if(triplet.straight(block_loc)){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ if(triplet.cross(block_loc)){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ if(triplet.cross_cross(block_loc)){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function triplet.straight(block_loc){
|
|
|
+ list.clear($winning_blocks);
|
|
|
+ temp_block_count = 1;
|
|
|
+ loc.addX(block_loc, -length + 1);
|
|
|
+ for(a = 0; a < 2 * length - 2; a++){
|
|
|
+ temp_block_count = temp_block_count + is.blockType(block_loc);
|
|
|
+ loc.addX(block_loc, 1);
|
|
|
+ }
|
|
|
+ loc.addX(block_loc, -length+1);
|
|
|
+ if(temp_block_count > 2){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ list.clear($winning_blocks);
|
|
|
+ temp_block_count = 1;
|
|
|
+ loc.addY(block_loc, -length + 1);
|
|
|
+ for(a = 0; a < 2 * length - 2; a++){
|
|
|
+ temp_block_count = temp_block_count + is.blockType(block_loc);
|
|
|
+ loc.addY(block_loc, 1);
|
|
|
+ }
|
|
|
+ loc.addY(block_loc, -length + 1);
|
|
|
+ if(temp_block_count > 2){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ list.clear($winning_blocks);
|
|
|
+ temp_block_count = 1;
|
|
|
+ loc.addZ(block_loc, -length + 1);
|
|
|
+ for(a = 0; a < 2 * length - 2; a++){
|
|
|
+ temp_block_count = temp_block_count + is.blockType(block_loc);
|
|
|
+ loc.addZ(block_loc, 1);
|
|
|
+ }
|
|
|
+ loc.addZ(block_loc, -length + 1);
|
|
|
+ if(temp_block_count > 2){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ list.clear($winning_blocks);
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+function triplet.cross(block_loc){
|
|
|
+ list.clear($winning_blocks);
|
|
|
+ temp_block_count = 1;
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 0,-2));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 0, 1));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 0, 2));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 0, 1));
|
|
|
+ loc.addX(block_loc, -2);
|
|
|
+ loc.addZ(block_loc, -2);
|
|
|
+ if(temp_block_count > 2){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ list.clear($winning_blocks);
|
|
|
+ temp_block_count = 1;
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 0, 2));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 0,-1));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 0,-2));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 0,-1));
|
|
|
+ loc.addX(block_loc, -2);
|
|
|
+ loc.addZ(block_loc, 2);
|
|
|
+ if(temp_block_count > 2){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ list.clear($winning_blocks);
|
|
|
+ temp_block_count = 1;
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0,-2,-2));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 1, 1));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 2, 2));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 1, 1));
|
|
|
+ loc.addY(block_loc, -2);
|
|
|
+ loc.addZ(block_loc, -2);
|
|
|
+ if(temp_block_count > 2){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ list.clear($winning_blocks);
|
|
|
+ temp_block_count = 1;
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0,-2, 2));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 1,-1));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 2,-2));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 0, 1,-1));
|
|
|
+ loc.addY(block_loc, -2);
|
|
|
+ loc.addZ(block_loc, 2);
|
|
|
+ if(temp_block_count > 2){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ list.clear($winning_blocks);
|
|
|
+ temp_block_count = 1;
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2,-2, 0));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1, 0));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 2, 0));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1, 0));
|
|
|
+ loc.addY(block_loc, -2);
|
|
|
+ loc.addX(block_loc, -2);
|
|
|
+ if(temp_block_count > 2){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ list.clear($winning_blocks);
|
|
|
+ temp_block_count = 1;
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2,-2, 0));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-1, 1, 0));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 2, 0));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-1, 1, 0));
|
|
|
+ loc.addY(block_loc, -2);
|
|
|
+ loc.addX(block_loc, 2);
|
|
|
+ if(temp_block_count > 2){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ list.clear($winning_blocks);
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+function triplet.cross_cross(block_loc){
|
|
|
+ list.clear($winning_blocks);
|
|
|
+ temp_block_count = 1;
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2,-2,-2));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1, 1));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 2, 2));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1, 1));
|
|
|
+ loc.addY(block_loc, -2);
|
|
|
+ loc.addX(block_loc, -2);
|
|
|
+ loc.addZ(block_loc, -2);
|
|
|
+ if(temp_block_count > 2){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ list.clear($winning_blocks);
|
|
|
+ temp_block_count = 1;
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2,-2,-2));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-1, 1, 1));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 2, 2));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-1, 1, 1));
|
|
|
+ loc.addY(block_loc, -2);
|
|
|
+ loc.addX(block_loc, 2);
|
|
|
+ loc.addZ(block_loc, -2);
|
|
|
+ if(temp_block_count > 2){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ list.clear($winning_blocks);
|
|
|
+ temp_block_count = 1;
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2, 2,-2));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1,-1, 1));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2,-2, 2));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1,-1, 1));
|
|
|
+ loc.addY(block_loc, 2);
|
|
|
+ loc.addX(block_loc, -2);
|
|
|
+ loc.addZ(block_loc, -2);
|
|
|
+ if(temp_block_count > 2){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ list.clear($winning_blocks);
|
|
|
+ temp_block_count = 1;
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc,-2,-2, 2));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1,-1));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 2, 2,-2));
|
|
|
+ temp_block_count = temp_block_count + is.blockType(t_loc_add(block_loc, 1, 1,-1));
|
|
|
+ loc.addY(block_loc, -2);
|
|
|
+ loc.addX(block_loc, -2);
|
|
|
+ loc.addZ(block_loc, 2);
|
|
|
+ if(temp_block_count > 2){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ list.clear($winning_blocks);
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+function t_loc_add(block_loc, x, y, z){
|
|
|
+ loc.add(block_loc,x, y ,z);
|
|
|
+ return block_loc;
|
|
|
+}
|
|
|
+
|
|
|
+function is.blockType(block_loc){
|
|
|
+ if(block.getType(block_loc) == $block_type){
|
|
|
+ list.add($winning_blocks, block_loc);
|
|
|
+ return 1;
|
|
|
+ }else{
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+}
|