Игра «Угадай число» (getHighScores, setUserScore)

Темы только для ознакомления. Уроки по использованию старой версии ВКонтакте API и устаревших методов.
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Игра «Угадай число» (getHighScores, setUserScore)

Сообщение Александр »

Игра «Угадай число», с сохранением рекордов на сервере контакта (getHighScores, setUserScore)

Когда-то давно делал эту игру. Решил выложить её исходник в свободный доступ, добавив комментарии к коду.
В конце этого сообщения ссылка на исходник с дизайном. Вы можете создать свой дизайн.
Используется сторонняя библиотека 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();        }     }}
Заменяем app_id и api_secret на свои данные.

3. Подключаем Main.as к fla.
Если не знаете как, то посмотрите как это было сделано в этом уроке topic3.html


4. Загружаем приложение в контакт.
- Если приложение выключено, то включаем.
- Если включен контейнер, то выключаем.


Исходник https://flapps.ru/example/guess_game.rar
VIP
Сообщения: 252
Зарегистрирован: 24 ноя 2009, 18:10

Re: Игра «Угадай число» (getHighScores, setUserScore)

Сообщение VIP »

Большое Спасибо!!!!!!!
Аватара пользователя
112
Модератор
Модератор
Сообщения: 2215
Зарегистрирован: 02 фев 2010, 21:53

Re: Игра «Угадай число» (getHighScores, setUserScore)

Сообщение 112 »

скачал исходник в заменил ид и ключ на свои все но при компиляции выдает ошибку
5001: Имя пакета "vk" не указывает на местоположение этого файла. Измените имя определения пакета внутри этого файла или переместите файл. D:\Мои документы\Новая папка\VkApiNode.as
пробывал прилож заливать вконтакт тож не работает
VIP
Сообщения: 252
Зарегистрирован: 24 ноя 2009, 18:10

Re: Игра «Угадай число» (getHighScores, setUserScore)

Сообщение VIP »

у меня всё ок
Аватара пользователя
112
Модератор
Модератор
Сообщения: 2215
Зарегистрирован: 02 фев 2010, 21:53

Re: Игра «Угадай число» (getHighScores, setUserScore)

Сообщение 112 »

:idea: фух решил эту проблему
Аватара пользователя
112
Модератор
Модератор
Сообщения: 2215
Зарегистрирован: 02 фев 2010, 21:53

Re: Игра «Угадай число» (getHighScores, setUserScore)

Сообщение 112 »

мне писало ту хрень потом я создал папку в папке с приложением назвал ее vk и скинул туда все скрипты кроме main
Аватара пользователя
psix55
Модератор
Модератор
Сообщения: 1015
Зарегистрирован: 09 дек 2009, 17:16

Re: Игра «Угадай число» (getHighScores, setUserScore)

Сообщение psix55 »

эту проблему можно решить сразу же как только прочитаешь сообщение об ошибке :D
Кстати насчёт getHighScores http://forum.antichat.ru/thread191651.html
Sudba
Сообщения: 20
Зарегистрирован: 01 мар 2010, 01:08

Re: Игра «Угадай число» (getHighScores, setUserScore)

Сообщение Sudba »

А что получается сбор рекордов не работает?(
Аватара пользователя
psix55
Модератор
Модератор
Сообщения: 1015
Зарегистрирован: 09 дек 2009, 17:16

Re: Игра «Угадай число» (getHighScores, setUserScore)

Сообщение psix55 »

почему?
Аватара пользователя
112
Модератор
Модератор
Сообщения: 2215
Зарегистрирован: 02 фев 2010, 21:53

Re: Игра «Угадай число» (getHighScores, setUserScore)

Сообщение 112 »

человеки у меня вопрос как можно (если можно)сбросить рекорды потому что у меня самые миним рекорды от 70 и смысла играть нет
Ответить