OpenSCAD Castle

This thing was made in OpenSCAD with the following code:
translate([0,0,-10])cylinder(30,1,10);
translate([40,0,-10])cylinder(30,1,10);
translate([0,40,-10])cylinder(30,1,10);
translate([40,40,-10])cylinder(30,1,10);
cube([40,1,20]);
difference() { translate([0,40,0])cube([40,1,20]); rotate([90,0,0]) translate([20,20,-60])cylinder(50,8,8); }
cube([1,40,20]);
translate([40,0,0])cube([1,40,20]);
translate([-10,-10,20])cube([60,60,1]);
difference() { translate([0,0,-10])cylinder(6,10,10); translate([0,0,-10])cylinder(3,9,9); }
difference() { translate([0,40,-10])cylinder(6,10,10); translate([0,40,-10])cylinder(3,9,9); }
difference() { translate([40,0,-10])cylinder(6,10,10); translate([40,0,-10])cylinder(3,9,9); }
difference() { translate([40,40,-10])cylinder(6,10,10); translate([40,40,-10])cylinder(3,9,9); }
translate([20,20,10])cube([5,10,5]);