Когда-то давно делал эту игру. Решил выложить её исходник в свободный доступ, добавив комментарии к коду.
В конце этого сообщения ссылка на исходник с дизайном. Вы можете создать свой дизайн.
Используется сторонняя библиотека VkApi, для работы с методами Вконтакте API. Находится в архиве с исходником.
В итоге у вас может получиться примерно такое приложение:
http://vkontakte.ru/app1727522
Приложение написано на ActionScript 3.0 в Adobe Flash CS4.
1. Добавляем на сцену:
Текстовые поля с именами:
- message_tf (будет выводиться сообщение о результате)
- input_tf (поле ввода)
- try_count_tf (информация об оставшихся попытках)
- records_tf (список рекордов)
Кнопку guess_btn.
2. Создаём Main.as и пишем код:
Код: Выделить всё
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><br />'; } records_tf.htmlText=topUsers; } else { trace("Error!"); } } public function onLoaded2(event:Event):void { getHightScores(); } }}
3. Подключаем Main.as к fla.
Если не знаете как, то посмотрите как это было сделано в этом уроке topic3.html
4. Загружаем приложение в контакт.
- Если приложение выключено, то включаем.
- Если включен контейнер, то выключаем.
Исходник https://flapps.ru/example/guess_game.rar