| Sphinx_Rider |
05.08.2010 15:02 |
Оптимизация поиска совпадений
Пишу игру со словами.
Она выглядит примерно так: внизу поле 5х5 букв. Надо поочерёдно выбрать буквы и собрать из них слово. Пролема в том, что база слов БОЛЬШАЯ, и из-за этого после каждого щелчка на букве игра подвисает. А ещё я не могу понять, почему при этом слова не опознаются :eek:
Кто-нибудь сможет помочь?
Код основного класса ниже:
Код AS3:
package {
import flash.display.*;
import flash.text.*;
import flash.events.*;
import flash.net.URLLoader;
import flash.net.URLRequest;
public class WordGame extends MovieClip {
private var lettersCages:Array=new Array();
private var lettersStartX:Array=new Array();
private var lettersStartY:Array=new Array();
private var lettersSelected:Array=new Array();
private var letterX:int=50;
private var theWord:String=new String();
private var myDictionary:Array=new Array();
private var myXML:XML;
public function WordGame() {
iniDict();
buildCages();
}
private function iniDict() {
var xmlURL:URLRequest=new URLRequest("1.xml");
var xmlLoader:URLLoader=new URLLoader(xmlURL);
xmlLoader.addEventListener(Event.COMPLETE, buildDict);
}
private function buildDict(event:Event) {
myXML=XML(event.target.data);
var tempString:String;
tempString=myXML;
myDictionary=tempString.split("\r");
}
private function buildCages() {
for (var y:int=0; y<5; y++) {
for (var x:int=0; x<5; x++) {
var cage:Cage=new Cage ;
cage.x=150+x*50;
cage.y=150+y*50;
addChild(cage);
lettersCages.push(cage);
lettersStartX.push(cage.x);
lettersStartY.push(cage.y);
cage.addEventListener(MouseEvent.CLICK, clickCage);
cage.Litera.text=String.fromCharCode(1039+Math.floor(Math.random()*26));
}
}
}
private function clickCage(event:MouseEvent) {
event.currentTarget.removeEventListener(MouseEvent.CLICK, clickCage);
event.currentTarget.addEventListener(MouseEvent.CLICK, clickReturn);
event.currentTarget.x=letterX;
event.currentTarget.y=50;
letterX+=50;
lettersSelected.push(event.currentTarget);
if (lettersSelected.length!=1) {
lettersSelected[lettersSelected.length-2].removeEventListener(MouseEvent.CLICK, clickReturn);
}
searchWord();
checkWord();
}
private function clickReturn(event:MouseEvent) {
var a:int;
event.currentTarget.x=20;
a=lettersCages.indexOf(event.currentTarget);
event.currentTarget.x=lettersStartX[a];
event.currentTarget.y=lettersStartY[a];
letterX-=50;
if (lettersSelected.length!=1) {
lettersSelected[lettersSelected.length-2].addEventListener(MouseEvent.CLICK, clickReturn);
}
lettersSelected.pop();
event.currentTarget.removeEventListener(MouseEvent.CLICK, clickReturn);
event.currentTarget.addEventListener(MouseEvent.CLICK, clickCage);
}
private function checkWord() {
for (var i:int=0;i<myDictionary.length;i+=10) {
if (theWord==myDictionary[i]) {
trace("Yes!");
Hit.text="Попадание!";
} else {
Hit.text="Промах!";
}
}
}
private function searchWord() {
theWord="";
for (var d:int=0; d<lettersSelected.length; d++) {
theWord=theWord.concat(lettersSelected[d].Litera.text);
}
trace(theWord);
}
}
}
|