Потестите игру плиз
Я недавно увлёкся javascript'ом и написал игру. Беда в том что по непонятной причине скрипт иногда зависает, при этом немного грузится проц, но страница не подаёт признаков жизни. Гуру яваскрипта, может вы заметите где там косяк?
Правила игры - нужно накопить власть 100 или уничтожить противника. каждая карта стоит ресурс который написан в нижнем углу. Ресурсы добавляются каждый ход. Дизайн ещё не доделал но думаю разберётесь. https://c9.io/iwinalone/lernphp/workspace/Acromage.html |
Цитата:
Инструментов отладки( инструменты разработчика) не существует? В любом браузере есть профилировщик, запустив который можно узнать что выполняется дольше, сколько выполняется каждая функция. В тех же инструментах и ошибки можно посмотреть |
Спасибо за плофилировщик, с ним ещё не работал, поищу инфу на эту тему... Но всё же мне бы хотелось чтобы профи посмотрели на код и сказали чего не хватает и что можно оптимизировать. Явных ошибок там вроде нет.
|
Я не могу понять в чём проблема. Просто по прошествии нескольких минут скрипт останавливается и весь браузер виснет. При обновлении страницы игра начинается заново. Может кто подскажет как от этого избавиться, ведь не всегда получается довести игру до конца
|
фигасе нет.. просто тупо потыкал, по кликал.. ерроры сыпятся..
Uncaught TypeError: Object #<player> has no method 'Drop'. вываливается на 373 строчке Uncaught TypeError: Cannot call method 'reload' of null. вывалилось на 379 строчке используйте фаербаг. в хроме вызывается f12. вкладка console |
Большое спасибо, нашёл в фаербаге и исправил ошибку. AI не мог сбрасывать карты. Просто метод дроп должен писаться с маленькой буквы, а вторая вылезла из за первой. Может ещё что найдёте?:)
|
ммм, давайте исправленный код
или на том сайте исправили? на 379-й по прежнему валится ошибка... |
Всё там же по ссылке, правлю в онлайн ide cloud9
https://c9.io/iwinalone/lernphp/workspace/Acromage.html |
такое возможно из за циклов. идет бесконечный цикл(т.е. без выхода) грузится проц и притормаживает страница.. сразу нужно искать циклы..
там у вас они есть несколько, но они все с определенным интервалом? например: for (i=7;i<13;i++). разумеется здесь ни будет бесконечного цикла.. а вот есть два цикла странных.. // это первый while( i ){ j = Math.floor( ( i-- ) * Math.random() ); t = b && typeof this[i].shuffle!=='undefined' ? this[i].shuffle() : this[i]; this[i] = this[j]; this[j] = t; } //вот это второй while(rCard===undefined){takeCard();lvl=lvl-1;} разместите туда console.log(1) и console.log(2) вот так: while( i ){ j = Math.floor( ( i-- ) * Math.random() ); t = b && typeof this[i].shuffle!=='undefined' ? this[i].shuffle() : this[i]; this[i] = this[j]; this[j] = t; console.log(1); } while(rCard===undefined){takeCard();lvl=lvl-1; console.log(2);} откройте фаербаг, вкладка консоль и смотрите.. если туда бесконечно будут сыпаться 1 или двойки - значит у вас бесконечный цикл! |
я заметил, когда это происходит в конце вашей игры..
|
Добавил консоли, буду смотреть...
Спасибо за подсказки в использовании отладчика) |
вообще на будующее. console.log() - очень удобная функция для отладки. когда нужно проверить промежуточные данные в проге используется имеено console.log(имя_переменной); если будет передана строковая переменная то выводится будет строка, если числовая - то число, если массив - то будет выводится массив (var a = [1, 2, 3, 4]; console.log(a);) ну и так далее.. в нете можно найти лит-ру.. советую почитать
|
Цитата:
|
dmitriymar - Помощь мне нужна была, и я её получил. Узнал как искать ошибки. Для этого и существуют форумы как бы. Опытному человеку достаточно беглого взгляда на код чтобы подсказать и направить. И если вам это не интересно (помогать другим), стойте молча в сторонке...
|
Цитата:
А есть ещё тонкости и особенности клиентского языка , причём могут быть индивидуальные для браузеров. А ещё алгоритмы правильные, а ещё нагрузка .... И на это всё нужно время, понимание, глубокое тестирование . ... На эту простыню кода нужно часов 5 тестов - беглый взгляд блин, ему так кажется ... |
Я просил именно бегло осмотреть и посоветовать мне, на что обратить внимание и как лучше тестировать. Сейчас я уже продвинулся дальше, выставил правильную последовательность событий onload, добавив консоль лог на каждую функцию. Теперь стоит проблема что делать если картинка карты не загрузилась (допустим из за слабого интернета), как сделать чтобы скрипт не стопорился и попытка загрузки происходила до успешного завершения?. Копаю в сторону onerror но не пойму пока как его применить. window.onerror почему то не работает в chrome. И ещё как заставить картинку перезагрузиться (метод reload?). Если подскажете буду признателен
|
Цитата:
|
В основном по этому учебнику и учился JS
Было бы хорошо если б в нём были ответы на все вопросы... |
прочитайте про объет Image, у него есть событие onload
|
Цитата:
Цитата:
|
Дизайн я буду переделывать мне щас логику отладить надо
Пока что всё что синим себе всё что красным врагу |
Цитата:
|
Цитата:
|
Цитата:
Цель - накопить 100 власти или уничтожить противника понизив его власть до 0. Чем больше власти тем более высокого уровня карты приходят из колоды. Каждая карта стоит ресурсов. Если она раскрашена оранжевым нужен труд, если зелёным, нужна пища, если синим - нужна мана. Бывают составные карты которые стоят несколько ресурсов. Ресурс по цвету цифры в этом случае определяется. Прогресс - труд добавляемый за ход Магия - мана добавляемае за ход Урожай - еда добавляемая за ход В картах всё что красным относится к противнику, всё что синим - себе. Ну вот вроде и всё. Скоро реализую карты с правилами. например шпион будет показывать карты противника. пока что он не делает ничего |
В Фаерфоксе при клике на карту (попытке ходить) выдаётся ошибка на строке 446: ReferenceError: event is not defined. Это из-за того, что вы используете глобальную переменную event в обработчике события. Насколько я понимаю, такой способ передачи события считается устаревшим, нужно брать событие из первого параметра обработчика.
|
Я бы ещё посоветовал всегда использовать строгий режим, когда пишете свой код. Подробнее - здесь. Хоть и он может сломать работающий код, работать в строгом режиме легче, так как он часто выдает ошибки там, где нестрогий режим просто игнорирует операцию, а запрещает он только то, что и в нестрогом режиме делать не рекомендуется.
|
Вы создаете функцию this.turn и this.drop для каждого объекта, который создаёт конструктор player. Таким образом, когда вы создаёте 2 игроков, каждый из них имеет копию этих функций. Это негативно сказывается на памяти. Лучше добавить эти функции один раз в player.prototype. То же самое касается и карт.
|
oneguy. хочу выразится про строгий режим. то что можно работать с ним это может и хорошо. но.. если есть правила в которых указывается что перед использованием нужно ставить var, то это нужно делать.. вы свой код знайте. а если работайте в команде?? и ваш код просматривает ваш сотрудник?? и попробуй разбери.. локальная то переменная или глобальная...
лично я против этого |
enigmat, попробуйте свой код сделать с использованием библиотеки jquery. конечно нужно время для изучения этой библиотеки. о том как она работает. но у нее есть плюс. она кроссбраузерная. документацию можно найти в нете, даже на русском.. вот офиц сайт http://jquery.com/
на этом же сайте можно и скачать библиотеку |
skrudjmakdak,
вы что-то перепутали. Одно другому не противоречит. Строгий режим запрещает создавать глобальные переменные неявным способом, а через var - разрешает. |
Итак, теперь всё играбельно.
Я написал ИИ, теперь он не рандомный. Переделал дизайн немного. Сделал игру рабочей во всех популярных браузерах. Спасибо большое всем за советы. Скоро перепишу код с использованием use strict и разберусь с созданием методов в prototype, ну а до jquery доберусь когда освоюсь получше с javascript'ом. Жду ещё ваших советов и замечаний по оптимизации кода. |
Часовой пояс GMT +3, время: 20:12. |