Discuss Scratch

ilikelegos
Scratcher
100+ posts

[ATC#4] Tic Tac Toe

CodeLegend wrote:

ilikelegos wrote:

*Want's ATC#5 to be out…*
*wants
I'm postponing it for a full five seconds because of that!
:O NOOOO!!!!!

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)


Powered by DjangoBB