Discuss Scratch
- ilikelegos
- Scratcher
100+ posts
[ATC#4] Tic Tac Toe
:O NOOOO!!!!!*wants *Want's ATC#5 to be out…*
I'm postponing it for a full five seconds because of that!
Hi! I'm a computer science student who learned coding on Scratch!
- MartinBraendli2
- Scratcher
100+ posts
[ATC#4] Tic Tac Toe
Just for completeness, here's the source code I used to generate the costumes (SVG) and a costume part for the JSON.
package ch.brandley.martin; import java.io.PrintWriter; public class TicTacToe { final static String HEAD = "<svg x=\"0px\" y=\"0px\" width=\"480px\" height=\"360px\" viewBox=\"0 0 480 360\">\n<line style=\"fill:none;stroke:#000000;stroke-width:10;stroke-miterlimit:10;\" x1=\"290\" y1=\"360\" x2=\"290\" y2=\"60\"/>\n<line style=\"fill:none;stroke:#000000;stroke-width:10;stroke-miterlimit:10;\" x1=\"190\" y1=\"360\" x2=\"190\" y2=\"60\"/>\n<line style=\"fill:none;stroke:#000000;stroke-width:10;stroke-miterlimit:10;\" x1=\"90\" y1=\"160\" x2=\"390\" y2=\"160\"/>\n<line style=\"fill:none;stroke:#00000;stroke-width:10;stroke-miterlimit:10;\" x1=\"90\" y1=\"260\" x2=\"390\" y2=\"260\"/>"; final static String FOOT = "\n</svg>"; static int validPermutations = 0; static String json = ""; static String lastPermutationName = ""; public static void main(String[] args) { PrintWriter out; try { out = new PrintWriter("json.txt"); int[] permutation = {0,0,0,0,0,0,0,0,0}; for(int j = 0; j < 19683; j++){ if(validate(permutation)){ json += nextJson(); } boolean carry = true; for(int i = 8; i >= 0; i--){ if(carry){ permutation[i]=(permutation[i]+1)%3; if(permutation[i]>0){ carry = false; } } } } out.write(json); out.close(); System.out.println(validPermutations); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } //writeSvg(HEAD+addText("Blue is on turn","blue")+FOOT,"test.svg"); } private static String nextJson() { final String HEAD = "\t\t\t{\"costumeName\": \""; final String MID = "\",\"baseLayerID\": "; final String TAIL = ",\"bitmapResolution\": 1,\"rotationCenterX\": 240,\"rotationCenterY\": 180},\n"; return HEAD+lastPermutationName+MID+validPermutations+TAIL; } public static String toAsci(int[] permutation) { String asci = ""; for(int i = 0; i < 3; i++){ for(int j = 0; j < 3; j++){ asci += toChar(permutation[j+3*i]); } asci += "\n"; } return asci; } public static char toChar(int i){ switch(i){ case 1: return 'X'; case 2: return 'O'; } return '_'; } public static String addO(int pos){ final String HEAD = "\n<circle style=\"fill:none;stroke:#0000FF;stroke-width:10;stroke-miterlimit:10;\" cx=\""; final String MID = "\" cy=\""; final String FOOT = "\" r=\"30\"/>"; int x = 140+(pos%3)*100; int y = 110+(pos/3)*100; return HEAD+x+MID+y+FOOT; } public static String addX(int pos){ final String HEAD = "\n<line style=\"fill:none;stroke:#FF0000;stroke-width:10;stroke-miterlimit:10;\" x1=\""; final String MID1 = "\" y1=\""; final String MID2 = "\" x2=\""; final String MID3 = "\" y2=\""; final String MID4 = "\"/>\n<line style=\"fill:none;stroke:#FF0000;stroke-width:10;stroke-miterlimit:10;\" x1=\""; final String MID5 = "\" y1=\""; final String MID6 = "\" x2=\""; final String MID7 = "\" y2=\""; final String FOOT = "\"/>"; int xOffset = (pos%3)*100; int yOffset = (pos/3)*100; return HEAD+ (110+xOffset)+ MID1+ (80+yOffset)+ MID2+ (170+xOffset)+ MID3+ (140+yOffset)+ MID4+ (170+xOffset)+ MID5+ (80+yOffset)+ MID6+ (110+xOffset)+ MID7+ (140+yOffset)+ FOOT; } public static String addText(String text, String colour){ final String HEAD = "<text x=\"20\" y=\"30\" fill=\""; final String MID = "\">"; final String FOOT = "</text>"; return HEAD+colour+MID+text+FOOT; } public static boolean validate(int[] permutation){ int[] sum = {0,0,0}; for(int i = 0; i < 9; i++){ sum[permutation[i]]++; } if(sum[2]>sum[1]) return false; if(sum[1]-sum[2]>1) return false; int round = sum[1]+sum[2]; boolean[] winner = {false,false,false}; for(int i = 0; i < 3; i++){ //Horizontal if(permutation[i*3]==permutation[i*3+1] && permutation[i*3]==permutation[i*3+2]){ if(permutation[i*3] != 0){ winner[permutation[i*3]] = true; } } //Vertical if(permutation[i]==permutation[i+3] && permutation[i]==permutation[i+6]){ if(permutation[i] != 0){ winner[permutation[i]] = true; } } } if(permutation[0]==permutation[4] && permutation[0] == permutation[8]){ if(permutation[0] != 0){ winner[permutation[0]] = true; } } if(permutation[2]==permutation[4] && permutation[2] == permutation[6]){ if(permutation[2] != 0){ winner[permutation[2]] = true; } } if(winner[1] && winner[2]) return false; if(winner[1] && sum[1] == sum[2]) return false; if(winner[2] && sum[1] != sum[2]) return false; String svg = HEAD; if(!winner[1] && !winner[2]){ if(round == 9){ svg += addText("Its a draw!","black"); }else if(round%2 == 0){ svg += addText("Red is on turn","red"); }else{ svg += addText("Blue is on turn","blue"); } } else if (winner[1]){ svg += addText("Red wins!","red"); } else { svg += addText("Blue wins!","blue"); } String permutationName = "T"; for(int i = 0; i < 9; i++){ permutationName += permutation[i]; if (permutation[i] == 1) svg += addX(i); else if (permutation[i] == 2) svg += addO(i); } permutationName += (round%2+1); lastPermutationName = permutationName; svg += FOOT; validPermutations++; writeSvg(svg,"./svgs/"+validPermutations+".svg"); return true; } public static void writeSvg(String code, String path){ PrintWriter out; try { out = new PrintWriter(path); out.print(code); out.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } [java]
Last edited by MartinBraendli2 (July 26, 2016 10:36:18)