Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java ME (J2ME) > Не работает логика в игре |
Автор: vlad275 14.4.2008, 23:19 | ||
Пишу обучащую иностранным языкам игру. Идея такая. С помощью Random выбираются 3 слова из массива, если одно и тоже слово выпало больше 1 раза то запускается Random снова. На экран мобильного выводится перевод одного из выбранных слов, в ниже три слова. При нажатии на клавиши телефона "1","2","3" пользователь выбирает корректный перевод. Если клавиша и номер перевода в массиве+1 совпадают, то пользователь выиграл. Почему-то у меня все глючит. Большая часть сообщений не выводится. Где ошибка? :-(
Обновлено |
Автор: math64 15.4.2008, 08:24 | ||
Нет вызова schedule() repaint() нужно вызывать в конце run() У тебя 10 вариантов, но ты делаешь rand.nextInt()%9? Нужно rand.nextInt()%strName.length Циклы while() теоретически могут длиться бесконечно.
|
Автор: vlad275 15.4.2008, 15:55 | ||
Прорисовка то как раз не глючит. У меня у воде падающее яблоко нормально прорисовывается. А вот текст по большей части не выводится. Вот эта строка if (intRand3 == intRand) intRand3 = n-1; при совпадении номеров просто отнимает у выпавшего номера 1. А если там уже 1 или 0? Будет 0 или -1 У меня же в коде заново рандомится и заново проверяется на совпадение. Все таки почему часто не выводятся строки, а если и выводится то в основном первая строка? У меня же строки
Выводятся друг под другом. Почему же первая строка видна по большей части а вторая и третья почти всегда не видны? |
Автор: eugine_s 15.4.2008, 16:09 |
vlad275, Random.nextInt() числа из какого диапазона генерирует? Разве только положительные? Добавлено через 1 минуту и 12 секунд Вообще, это легко проверяется. После того как сгенерировал новые intRandX выведи их в консоль.... |
Автор: vlad275 16.4.2008, 02:05 |
http://radikal.ru/F/i038.radikal.ru/0804/c2/cc673ab00c42.jpg.html Должно быть как на правой картинке, но обычно выглядит как на левой и средней картинках |
Автор: vlad275 16.4.2008, 02:28 | ||
Самое странное что часто текст и без условия не выводится
|
Автор: math64 16.4.2008, 07:52 |
Да, nextInt() может выдавать отрицательные числа, поэтому rand.nextInt()%n не получится. Для того чтобы выбрать m различных случайных чисел из 0..n-1 нужно заполнить массив new int[n] числоами 0 ... n-1 и (частично) перетасовать их. Как делать перетасовку, см. за что мне поставили +. Мой пример здесь - отпимизация перетасоки под твой случай (но нужно исправить выборку nextInt()). В строке if (intRand3 == intRand) intRand3 = n-1; я имитирую эту перетасовку без создания массива (если числа совпали, присваиваем число, которое бы было в массиве). |
Автор: eugine_s 16.4.2008, 09:57 | ||||
поменяй местами код, вот так:
т.е. сначало значения intRandX выведи, а потом уже массив. Ну а ошибку с отрицательным числом ты так и не исправил. intRandX = Math.abs(random.nextInt) %N ; |
Автор: math64 16.4.2008, 10:26 |
Кстати intN тоже должен выбираться как intN = Math.abs(rand.nextInt())%3+1; или intN = (rand.nextInt()&0x7FFFFFFF)%3+1; иначе у тебя будет выпадать 2 в вероятностью 1/2, 1 и 3 - с вероятностью 1/4. |
Автор: vlad275 16.4.2008, 15:39 | ||
А почему не всегда выводится
Тут же нет условия? 1. 2. 3. должны выводится! :-( |
Автор: math64 16.4.2008, 15:52 |
Если индексы массива отрицательны, выбрасывается исключение. |
Автор: eugine_s 16.4.2008, 15:55 |
vlad275, потому что Exception появляется. strName[intRand] - бросает Exception, когда intRand меньше нуля. Только я не вижу где у тебя перехватывается эта ошибка. |
Автор: vlad275 16.4.2008, 16:22 |
Теперь я понял. Переделаю |
Автор: vlad275 16.4.2008, 16:43 |
Все заработало!!! Большое спасибо!!! А что в WTK только MIDP 1.0 поддерживается? Мне нужно MIDP 2.0 чтобы вставить .png с головой глотающую яблоки и финальную заставку(не знаю как правильно ее назвать) |
Автор: vlad275 16.4.2008, 16:56 |
Нашел! В Settings->Custom->MIDP 2.0 Добавлено через 4 минуты и 43 секунды Упс. Проблема. Когда я компилировал эту игру в Net Bean то она запускалась на коммуникаторе iPAQ, сейчас откомпилировал в WTK и оказалось, что она не идет на iPAQ. Просто завершает работу. Ничего не выводит. Что такое? ![]() |
Автор: vlad275 18.4.2008, 22:10 |
Оцените игру. Под MIDP 2.0 |