letters [i ][y1 ];
15 }
16 }
17 }else if (x1 ==x2){
18 if (y2>y1){
19 for (var i =y1;i<=y2;++i){
20 tempWord +=words.letters [x1 ][i ];
21 }
22 }else if (y1>y2){
23 for (var i =y2;i<=y1;++i){
24 tempWord +=words.letters [x1 ][i ];
25 }
26 }
27 }else if (x1 !=x2 &&y1 !=y2 &&Math.abs(x1-x2)==
.Math.abs(y1-y2)){
28 var xSign =(x2-x1)/Math.abs(x2-x1);
29 var ySign =(y2-y1)/Math.abs(y2-y1);
30 var steps =Math.abs(x2-x1);
31 for (var i =0;i<=steps;++i){
32 tempWord +=words.letters [x1+xSign*i ][y1+ySign*i ];
33 }
34 }
35 if (tempWord !=undefined){
36 if (checkList(tempWord)){
37 var x1 =x1*gridspacing+gridspacing/2;
38 var x2 =x2*gridspacing+gridspacing/2;
39 var y1 =y1*gridspacing+gridspacing/2;
40 var y2 =y2*gridspacing+gridspacing/2;
41 var rise =y2-y1;
42 var run =x2-x1;
43 var angle =Math.atan2(rise,run)*180/Math.PI;
44 var distance =Math.sqrt(rise*rise+run*run);
45 var name ="circle"+(++board.circles);
46 board.attachMovie("circler",name,++board.depth);
47 var clip =board [name ];
48 clip._x =x1;
49 clip._y =y1;
50 clip._rotation =angle;
51 clip.right._x =distance;
52 clip.lineStyle(0,0x000099,100);
53 clip.moveTo(0,9.3);
54 clip.lineTo(distance,9.3);
55 clip.moveTo(0,-9.3);
56 clip.lineTo(distance,-9.3);
57 clip._alpha =50;
58 displayList();
59 }
60 }
61 }
Вначале мы определяем по положению мыши квадраты сетки, над которыми находился курсор, когда была нажата кнопка мыши и когда она была отпущена. (Этот простой математический трюк разъяснялся в Главе 7, «Плиточные миры»; «разрядка» из той главы работает здесь как «шаг сетки».) Затем мы проверяем координаты этих положений по трем условиям. Есть три допустимых относительных положения этих координат: Координата y может быть в той же колонке (вертикальной); то есть, x1 равно x2