Bu örnek fare olayları işlenerek gerçekleştirilen kullanıcı etkileşimini gösterir. Kullanıcılar bir ızgara üzerindeki rastgele seçilmiş harfleri ızgara içerisinde yatay veya dikey olarak hareket ettirerek ve aynı harfi yalnız bir kere kullanarak mümkün olduğu kadar çok sözcük türetir. Bu örnek aşağıdaki ActionScript 3.0 özelliklerini gösterir:
-
Dinamik olarak bir içerik ızgarası oluşturma
-
Fare olaylarını yanıtlama
-
Kullanıcı etkileşimi tabanlı bir puan elde etme
Bu örneğin uygulama dosyalarını edinmek için bkz.
www.adobe.com/go/learn_programmingAS3samples_flash_tr
. WordSearch uygulama dosyalarını Samples/WordSearch klasörü içinde bulabilirsiniz. Uygulama aşağıdaki dosyaları içerir:
File
|
Açıklama
|
WordSearch.as
|
Uygulamanın temel işlevini sağlayan sınıf.
|
WordSearch.fla
veya
WordSearch.mxml
|
Flex (MXML) veya Flash (FLA) için ana uygulama dosyası.
|
dictionary.txt
|
Türetilen sözcüklere puan verilip verilmeyeceğini ve sözcüklerin doğru yazılıp yazılmadığını belirlemek için kullanılan dosya.
|
Bir sözlük yükleme
Sözcük türetme ile ilgili bir oyun oluşturmak için bir sözlük gereklidir. Örnek, satır başı karakteri ile ayrılmış kelimelerin bulunduğu dictionary.txt adlı bir metin dosyası içerir.
words
adlı bir dizi oluşturduktan sonra
loadDictionary()
işlevi bu dosyayı ister ve başarılı şekilde yükledikten sonra dosya uzun bir dize haline gelir. Bu dizeyi
split()
yöntemiyle satır başı (karakter kodu 10) veya yeni satır (karakter kodu 13) örneklerinin her birini atarak bir sözcük dizisine ayrıştırabilirsiniz. Ayrıştırma
dictionaryLoaded()
işlevinde gerçekleşir:
words = dictionaryText.split(String.fromCharCode(13, 10));
Kullanıcı arabirimini oluşturma
Sözcükler saklandıktan sonra kullanıcı arabirimini oluşturabilirsiniz. Biri türetilen sözcüğü göndermek diğeri de yazılmakta olan kelimeyi silmek için olmak üzere iki Button örneği oluşturun. Her iki durum için de düğmenin yayınladığı
MouseEvent.CLICK
olayını dinleyip bir işlev çağırarak kullanıcı girişine yanıt vermeniz gerekir.
setupUI()
işlevinde bu kod iki düğme üzerinde dinleyici oluşturur:
submitWordButton.addEventListener(MouseEvent.CLICK,submitWord);
clearWordButton.addEventListener(MouseEvent.CLICK,clearWord);
Bir oyun tahtası oluşturma
Oyun tahtası rastgele seçilmiş harflerden oluşan bir ızgaradır.
generateBoard()
işlevinde, iç içe iki döngüden oluşan iki boyutlu bir ızgara oluşturulur. İlk döngü sıraları artırırken ikinci döngü o sırada bulunan toplam sütun sayısını artırır. Bu sıra ve sütunlar ile oluşturulan hücrelerin her biri tahta üzerinde bir harfi temsil eden bir düğme içerir.
private function generateBoard(startX:Number, startY:Number, totalRows:Number, totalCols:Number, buttonSize:Number):void
{
buttons = new Array();
var colCounter:uint;
var rowCounter:uint;
for (rowCounter = 0; rowCounter < totalRows; rowCounter++)
{
for (colCounter = 0; colCounter < totalCols; colCounter++)
{
var b:Button = new Button();
b.x = startX + (colCounter*buttonSize);
b.y = startY + (rowCounter*buttonSize);
b.addEventListener(MouseEvent.CLICK, letterClicked);
b.label = getRandomLetter().toUpperCase();
b.setSize(buttonSize,buttonSize);
b.name = "buttonRow"+rowCounter+"Col"+colCounter;
addChild(b);
buttons.push(b);
}
}
}
Sadece bir satırda
MouseEvent.CLICK
olayı için bir dinleyici eklenmiş olmasına rağmen
for
döngüsünde olduğundan Button örneklerinin her birine atanmıştır. Ayrıca her düğmeye sıra ve sütun konumundan derlenmiş bir ad verilmiştir ve bu şekilde kodun sonraki bölümlerinde düğmelerin sırasına ve sütununa dağa kolay başvurulabilir.
Kullanıcı girişinden sözcük oluşturma
Sözcükler alt alta veya yan yana olan harfler seçilerek türetilebilir ancak harflerin tümü yalnızca bir kez kullanılabilir. Her tıklatmayla bir fare olayı üretilir ve bu noktada kullanıcının türettiği sözcük daha önce tıklanan harflerden düzgün şekilde devam ettiğinden emin olmak için kontrol edilmelidir. Eğer devam etmiyorsa önceki sözcük silinir ve yeni sözcüğe başlanır. Bu kontrol,
isLegalContinuation()
yönteminde oluşur.
private function isLegalContinuation(prevButton:Button, currButton:Button):Boolean
{
var currButtonRow:Number = Number(currButton.name.charAt(currButton.name. indexOf("Row") + 3));
var currButtonCol:Number = Number(currButton.name.charAt(currButton.name.indexOf("Col") + 3));
var prevButtonRow:Number = Number(prevButton.name.charAt(prevButton.name.indexOf("Row") + 3));
var prevButtonCol:Number = Number(prevButton.name.charAt(prevButton.name.indexOf("Col") + 3));
return ((prevButtonCol == currButtonCol && Math.abs(prevButtonRow - currButtonRow) <= 1) ||
(prevButtonRow == currButtonRow && Math.abs(prevButtonCol - currButtonCol) <= 1));
}
String sınıfının
charAt()
ve
indexOf()
yöntemleri hem tıklanmakta olan hem de daha önce tıklanmış olan düğmelerin uygun sıralarını ve sütunlarını getirir. Bir sıra veya sütun değişmemişse veya değişen sıra veya sütun öncekinden sadece bir farklıysa
isLegalContinuation()
yöntemi
true
değerini döndürür. Oyunun kurallarını değiştirmek ve çapraz sözcük türetmeye izin vermek isterseniz değişmeyen sıra veya sütunun işaretlerini kaldırabilirsiniz, bu durumda son satır aşağıdaki şekilde görünecektir:
return (Math.abs(prevButtonRow - currButtonRow) <= 1) && Math.abs(prevButtonCol - currButtonCol) <= 1));
Gönderilen sözcükleri kontrol etme
Oyun kodunu tamamlamak için, gönderilen sözcükleri kontrol etme ve puan hesaplama mekanizmaları gereklidir.
searchForWord()
yöntemi her ikisini de içerir:
private function searchForWord(str:String):Number
{
if (words && str)
{
var i:uint = 0
for (i = 0; i < words.length; i++)
{
var thisWord:String = words[i];
if (str == words[i])
{
return i;
}
}
return -1;
}
else
{
trace("WARNING: cannot find words, or string supplied is null");
}
return -1;
}
Bu işlevin döngüsü sözlükteki tüm sözcükleri kapsar. Kullanıcının türettiği sözcüğün sözlükte bir karşılığı varsa sözlük içindeki pozisyonu döndürülür. Ardından
submitWord()
yöntemi yanıtı kontrol eder ve pozisyon geçerliyse puanı günceller.
Özelleştirme
Sınıf başlangıcında birkaç sabit vardır. Oyunu bu değişkenlerin değerleriyle oynayarak özelleştirebilirsiniz. Örneğin
TOTAL_TIME
değişkeninin değerini yükselterek oyun süresini değiştirebilirsiniz. Ayrıca sözcük bulmayı kolaylaştırmak için
PERCENT_VOWELS
değişkenini değerini de artırabilirsiniz.
|
|
|