strange effect: program works only when board clicked
- To: mathgroup at smc.vnet.net
- Subject: [mg93335] strange effect: program works only when board clicked
- From: Karl Scherer <karlscherer333 at yahoo.co.nz>
- Date: Tue, 4 Nov 2008 06:17:45 -0500 (EST)
The following notebook is a wittled-down version of a game where one can move tiles (polygons) around.
Problem:
As the code is now, changing the "challenge" option, say from 1 to 14, changes the board setup. That is fine.
However,when I add another line of similar code,
namely the one that is commented out at the moment:
(* ,cols[[10]],Translate[tiles[[10]],p[[10]]] *)
Then changing the challenge option from 1 to 14 does not cause the board pieces to be rearranged anymore.
That rearrangement then only occurs after moving a locator.
What is going on??
Please send any answers to my email address:
k a r l s c h e r e r 3 3 3 @ y a h o o . c o . n z
(without the blanks; the blanks protect against malware looking for email addresses).
Thanks a lot, Karl
So here is the code:
========================================================
INITIALIZATION CODE:
snap[{p_,q_}] :={Floor[p +.5],Floor[q +.5]}; (* find nearest grid point*)
\
(* ----------- DEFINE tiles ------------- *)
tiles={
Polygon[{{0,0},{0,1},{3,1},{3,-1},{1,-1},{1,0}}],
Polygon[{{0,0},{0,2},{2,2},{2,0}}],
Polygon[{{0,0},{0,1},{2,1},{2,-1},{1,-1},{1,0}}],
Polygon[{{0,0},{0,3},{1,3},{1,2},{2,2},{2,1},{1,1},{1,0}}],
Polygon[{{0,0},{0,3},{1,3},{1,2},{2,2},{2,1},{1,1},{1,0}}],
Polygon[{{0,0},{0,1},{3,1},{3,-1},{1,-1},{1,0}}],
Polygon[{{0,0},{0,2},{1,2},{1,3},{3,3},{3,2},{2,2},{2,1},{1,1},{1,0}}]\
,
Polygon[{{0,0},{0,1},{1,1},{1,2},{2,2},{2,0}}],
Polygon[{{0,0},{0,2},{1,2},{1,3},{2,3},{2,1},{1,1},{1,0}}],
Polygon[{{0,0},{0,1},{3,1},{3,0}}],
Polygon[{{0,0},{0,3},{2,3},{2,1},{1,1},{1,0}}],
Polygon[{{0,0},{0,1},{2,1},{2,2},{3,2},{3,0}}],
Polygon[{{0,0},{0,1},{1,1},{1,0}}]
};
(* 'locator1' = locator positions at start of some challenges *)
(* pts[] = current positons of locators *)
locators1={
{4.5,2.5},{2.5,3.5},{4.5,8.5},
{2.5,7.5},{7.5,3.5},{7.5,2.5},
{6.5,7.5},{1.5,5.5},{5.5,3.5},
{6.5,6.5},{3.5,5.5},{1.5,1.5}
};
(* 'locator2' = locator positions at start of some other challenges *)
locators2={{4.5,2.5},{4.5,4.5},{6.5,4.5},
{1.5,6.5},{3.5,5.5},{5.5,8.5},
{7.5,5.5},{2.5,2.5},{8.5,4.5},
{2.5,1.5},{1.5,2.5},{2.5,8.5}};
(* tile positions at start of some challenges *)
(* p = current positions of tiles *)
p1={{4,2},{2,3},{4,8},
{2,7},{7,3},{7,2},
{6,7},{1,5},{5,3},
{6,6},{3,5},{1,1}};
(* tile positions at start of some other challenges *)
p2={{4,2},{4,4},{6,4},
{1,6},{3,5},{5,8},
{7,5},{2,2},{8,4},
{2,1},{1,2},{2,8}};
cols={Cyan,Blue,Purple,Green,
Yellow,Orange,Brown,RGBColor[.8,.3,.2],
Gray,Magenta,Pink,RGBColor[.4,.0,.0],Black};
MANIPULATE:
(* reset Locators *)
For[i=1,i<=12,i++,pts[[i]]=p[[i]]+{.5,.5}];
If[9>=ch>1,{r[[9,3]]=13}];
If[9>=ch>2,{r[[9,4]]=13}];
If[9>=ch>3,{r[[9,5]]=13}];
If[9>=ch>4,{r[[9,6]]=13}];
If[9>=ch>5,{r[[9,7]]=13}];
If[9>=ch>6,{r[[9,8]]=13}];
If[9>=ch>7,{r[[9,9]]=13}];
If[ch==9,{r[[1,9]]=13}];
If[16>=ch>=10,{r[[9,1]]=13,r[[9,3]]=13,r[[2,9]]=13}];
If[16>=ch>=11,{r[[9,2]]=13}];
If[16>=ch>=12,{r[[9,4]]=13}];
If[16>=ch>=13,{r[[9,9]]=13}];
If[16>=ch>=14,{r[[9,8]]=13}];
If[16>=ch>=15,{r[[1,1]]=13}];
If[ch==16,{r[[1,9]]=13}];
If[ch!=chold,{
chold=ch,
If[ch<10,{p=p1,pts=locators1}], (* first type of setup *)
If[ch>9, {p=p2,pts=locators2}] (* second type of setup *)
}];
Graphics[{
(* display tiles: *)
EdgeForm[Thick],
cols[[1]],Translate[tiles[[1]],p[[1]]],
cols[[2]],Translate[tiles[[2]],p[[2]]],
cols[[3]],Translate[tiles[[3]],p[[3]]],
cols[[4]],Translate[tiles[[4]],p[[4]]],
cols[[5]],Translate[tiles[[5]],p[[5]]],
cols[[6]],Translate[tiles[[6]],p[[6]]],
cols[[7]],Translate[tiles[[7]],p[[7]]],
cols[[8]],Translate[tiles[[8]],p[[8]]],
cols[[9]],Translate[tiles[[9]],p[[9]]]
(*
,
cols[[10]],Translate[tiles[[10]],p[[10]]] *)
},
PlotRange->{{.8,20.2},{.8,10.2}} ,
ImageSize->{500,400}
], (* end graphics *)
{{ch,chold,"challenge"},Range[16], ControlType->PopupMenu},
{{pts,locators1},{1.1,1.1},{9.9,9.9},Locator},
{{p,p1}, ControlType->None}, (* positions of handles *)
{{chold,1}, ControlType->None},
ControlPlacement->Left,
SaveDefinitions->True
]