Когда-то давно делал эту игру. Решил выложить её исходник в свободный доступ, добавив комментарии к коду.
В конце этого сообщения ссылка на исходник с дизайном. Вы можете создать свой дизайн.
Используется сторонняя библиотека VkApi, для работы с методами Вконтакте API. Находится в архиве с исходником. В итоге у вас может получиться примерно такое приложение:
Приложение написано на ActionScript 3.0 в Adobe Flash CS4.
1. Добавляем на сцену:
Текстовые поля с именами:
- message_tf (будет выводиться сообщение о результате)
- input_tf (поле ввода)
- try_count_tf (информация об оставшихся попытках)
- records_tf (список рекордов)
Кнопку guess_btn.
2. Создаём Main.as и пишем код:
Code
package {
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.text.*;
import flash.ui.ContextMenu;
import flash.ui.ContextMenuItem;
import vk.VkApiNode;
public class Main extends Sprite {
private var api_id:Number=1727522;// ID приложения
private var api_secret:String="1gqE8m34rb";// секретный ключ
private var beginMessage:String;
private var randomNumber:uint;
private var my_guess:uint;
private var try_count:int;
private var api:VkApiNode;
private var url_loader:URLLoader;
private var url_request:URLRequest;
private var query:String;
private var uids:Array;
private var fields:Array;
private var viewer_id:Number;
public function Main():void {
// настройка меню по правому клику мыши
var cm = new ContextMenu();
cm.hideBuiltInItems();
var p1:ContextMenuItem=new ContextMenuItem('«Угадай число»');
var p2:ContextMenuItem=new ContextMenuItem('flapps.ru');
p2.separatorBefore=true;
cm.customItems.push(p1,p2);
this.contextMenu=cm;
// создание стиля текста, для вывода рекордов
var myCSS = new StyleSheet();
myCSS.setStyle("a:link", {textDecoration:"none"});
myCSS.setStyle("a:hover", {textDecoration:"underline"});
records_tf.styleSheet=myCSS;
// получение текущих рекордов
getHightScores();
// запуск главной функции игры
init();
}
public function init():void {
play_again_btn.visible=false;
guess_btn.visible=true;
beginMessage="Введите число от 1 до 100.";
message_tf.autoSize=TextFieldAutoSize.CENTER;
message_tf.text=beginMessage;
try_count=10; // количество попыток
try_count_tf.text="У вас осталось "+try_count+" попыток.";
message_tf.restrict="0-9";
input_tf.text="";
// генерация случайного числа
randomNumber=Math.floor(Math.random()*100+1);
guess_btn.addEventListener(MouseEvent.CLICK, yourGuess);
}
public function yourGuess(event:MouseEvent):void {
// проверка числа, введенного пользователем
my_guess=uint(input_tf.text);
try_count--;
try_count_tf.text="У вас осталось "+try_count+" попыток.";
if (my_guess>randomNumber) {
message_tf.text="Ваше число, "+my_guess+" слишком большое.";
} else if (my_guess < randomNumber) {
message_tf.text="Ваше число, "+my_guess+" слишком маленькое.";
} else {
message_tf.text="Правильно! Это число "+randomNumber+".";
winGame();
}
if (try_count==0) {
try_count_tf.text="У вас больше нет попыток.";
guess_btn.visible=false;
play_again_btn.visible=true;
guess_btn.removeEventListener(MouseEvent.CLICK, yourGuess);
play_again_btn.addEventListener(MouseEvent.CLICK, guessAgain);
}
}
public function winGame():void {
// выигрыш
// очки высчитываются по формуле (оставшееся кол-во попыток)*10
try_count_tf.text="Ваш результат: "+try_count*10+" баллов.";
// отправка рекорда
setHightScores();
guess_btn.visible=false;
play_again_btn.visible=true;
guess_btn.removeEventListener(MouseEvent.CLICK, yourGuess);
play_again_btn.addEventListener(MouseEvent.CLICK, guessAgain);
}
public function guessAgain(event:MouseEvent):void {
init();
}
public function setHightScores():void {
// функция отправки рекорда на сервер вконтакте
viewer_id=LoaderInfo(root.loaderInfo).parameters.viewer_id;
// содание запроса для отправки рекорда
api=new VkApiNode(viewer_id,api_id,api_secret);
query=api.setUserScore(''+(try_count*10));
url_request=new URLRequest(query);
url_loader=new URLLoader ;
url_loader.addEventListener(Event.COMPLETE,onLoaded2);
url_loader.load(url_request);
}
public function getHightScores():void {
// функция получения рекордов
viewer_id=LoaderInfo(root.loaderInfo).parameters.viewer_id;
api=new VkApiNode(viewer_id,api_id,api_secret);
query=api.getHighScores();
url_request=new URLRequest(query);
url_loader=new URLLoader ;
url_loader.addEventListener(Event.COMPLETE,onLoaded);
url_loader.load(url_request);
}
public function onLoaded(event:Event):void {
if (url_loader.data!=null) {
var externalXML=new XML(url_loader.data);
var topUsers='';
var len=externalXML.score_info.length();
for (var i=0; i<len; i++) {
topUsers=topUsers+externalXML..score[i]+' <a href="http:/vkontakte/id'+externalXML..user_id[i]+'">'+externalXML..user_name[i]+'</a>
';
}
records_tf.htmlText=topUsers;
} else {
trace("Error!");
}
}
public function onLoaded2(event:Event):void {
getHightScores();
}
}
}
Заменяем app_id и api_secret на свои данные.
3. Подключаем Main.as к fla.
4. Загружаем приложение в контакт.
- Если приложение выключено, то включаем.
- Если включен контейнер, то выключаем.
Исодник : guess_game.rar