|
JAVA Micro Edition Низкоуровневое программирование мобильных телефонов. |
15.11.2009, 02:42
|
#1
|
AnyKey`щик
Регистрация: 15.11.2009
Сообщений: 5
Написано одно полезное сообщение (для 3 участников)
|
алгоритм поиска пути ии
Нашел на этом сайте исходный код алгоритма поиска пути, но вот беда он сделан на мидлет паскале. Может кто сможет переделать в ява или даст совет где найти?
|
(Offline)
|
|
15.11.2009, 09:02
|
#2
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: алгоритм поиска пути ии
Лучше всего будет просто найти алгоритм и самому реализовать на java.
Можно, конечно, попробовать скомпилить в MP и вытащить классы.
|
(Offline)
|
|
15.11.2009, 20:33
|
#3
|
AnyKey`щик
Регистрация: 15.11.2009
Сообщений: 5
Написано одно полезное сообщение (для 3 участников)
|
Ответ: алгоритм поиска пути ии
я пробовал классы декомпилятором открыть там ошибок несколько возникают так как я не очень селен в яве не могу их исправить
|
(Offline)
|
|
15.11.2009, 21:11
|
#4
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: алгоритм поиска пути ии
Во-первых - если не удается исправить ошибки, то возможно и не удастся написать программу, так как для этого java нужно знать еще более глубоко.
Во-вторых, тут смысл в том, чтобы скомпилить класс как модуль и просто вызвать функции из него, ничего не декомпиля. Хотя опять же, с этим могут возникнуть сложности.
|
(Offline)
|
|
15.11.2009, 21:24
|
#5
|
AnyKey`щик
Регистрация: 15.11.2009
Сообщений: 5
Написано одно полезное сообщение (для 3 участников)
|
Ответ: алгоритм поиска пути ии
vint а у тебя нет каких-нибуть алгоритмов поиска пути на яве?
не подскажишь где взять исходники такого плана?
|
(Offline)
|
|
15.11.2009, 21:34
|
#6
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: алгоритм поиска пути ии
Сообщение от mifos
vint а у тебя нет каких-нибуть алгоритмов поиска пути на яве?
не подскажишь где взять исходники такого плана?
|
У меня таких исходников нет.
Где-взять - пробовать искать, если найти не удается, выход один - искать просто алгоритм и реализовать его на java самому.
|
(Offline)
|
|
10.07.2011, 01:47
|
#7
|
Оператор ЭВМ
Регистрация: 18.11.2010
Сообщений: 23
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: алгоритм поиска пути ии
// Main.java import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class Main extends MIDlet { public static Main midlet; public void startApp() { midlet = this; Display.getDisplay(this).setCurrent(new TGameCanvas()); } public void pauseApp() { } public void destroyApp(boolean unconditional) { notifyDestroyed(); } } //TGameCanvas.java import javax.microedition.lcdui.game.GameCanvas; import javax.microedition.lcdui.*; import java.util.*; public class TGameCanvas extends GameCanvas implements CommandListener { public int width, height, i, xi, yi, x, y, x1, y1, key; public Command cHelp = new Command("Help", Command.EXIT, 1); public boolean Dsetka, cel; public int[][] solid = new int[10][10]; public Graphics G; public Random R = new Random(); public int getKeyClicked; protected void showNotify() { Draw(); keyPressed(-1); flushGraphics(); } public TGameCanvas() { super(false); setFullScreenMode(true); setCommandListener(this); G = getGraphics(); Dsetka = false; cel = true; width = getWidth() / 10; height = getHeight() / 10; solid[0][0] = 1; x1 = 9; y1 = 9; addCommand(cHelp); } public void Draw() { G.setColor(255, 255, 255); G.fillRect(0, 0, getWidth(), getHeight()); G.setColor(0, 0, 128); for (i = 0; i < 10; i++) { G.drawLine(width * i, 0, width * i, getHeight()); } for (i = 0; i < 10; i++) { G.drawLine(0, height * i, getWidth(), height * i); } G.setColor(128, 255, 0); for (xi = 0; xi < 10; xi++) { for (yi = 0; yi < 10; yi++) { if (solid[xi][yi] == -1) { G.fillRect(width * xi, height * yi, width, height); } else if (solid[xi][yi] == 1) { G.drawLine(width * xi, height * yi, width * xi + width, height * yi + height); G.drawLine(width * xi + width, height * yi, width * xi, height * yi + height); } } } if (Dsetka) { G.setColor(0, 0, 0); for (xi = 0; xi < 10; xi++) { for (yi = 0; yi < 10; yi++) { G.drawString("" + solid[xi][yi], width * xi, height * yi, 20); } } } } public int min(int v1, int v2, int v3, int v4) { int vmin = v1; if (vmin > v2) { vmin = v2; } if (vmin > v3) { vmin = v3; } if (vmin > v4) { vmin = v4; } return vmin; } public void poisc() { int xp, yp, num = 1; boolean perebor = true; while (!(perebor == false)) { for (xp = 0; xp < 10; xp++) { for (yp = 0; yp < 10; yp++) { if (solid[xp][yp] == num) { if (xp - 1 > -1) { if (solid[xp - 1][yp] == 0) { solid[xp - 1][yp] = num + 1; } } if (xp + 1 < 10) { if (solid[xp + 1][yp] == 0) { solid[xp + 1][yp] = num + 1; } } if (yp - 1 > -1) { if (solid[xp][yp - 1] == 0) { solid[xp][yp - 1] = num + 1; } } if (yp + 1 < 10) { if (solid[xp][yp + 1] == 0) { solid[xp][yp + 1] = num + 1; } } } } } num++; if (num > 40) { perebor = false; } } } public void dvijenie() throws Exception { int left, right, up, down, vmin; while (!(solid[x1][y1] == 1)) { if (x1 - 1 > -1) { up = solid[x1 - 1][y1]; } else { up = 999; } if (x1 + 1 < 10) { down = solid[x1 + 1][y1]; } else { down = 999; } if (y1 - 1 > -1) { left = solid[x1][y1 - 1]; } else { left = 999; } if (y1 + 1 < 10) { right = solid[x1][y1 + 1]; } else { right = 999; } if (up < 1) { up = 999; } if (down < 1) { down = 999; } if (left < 1) { left = 999; } if (right < 1) { right = 999; } vmin = min(up, down, left, right); if (up == vmin) { x1 = x1 - 1; } if (down == vmin) { x1 = x1 + 1; } if (left == vmin) { y1 = y1 - 1; } if (right == vmin) { y1 = y1 + 1; } if ((right == 999) && (down == 999) && (left == 999) && (right == 999)) { G.setColor(255, 255, 255); G.fillRect(getWidth() / 2 - 55, getHeight() / 2, 110, 15); G.setColor(0, 0, 0); G.drawRect(getWidth() / 2 - 55, getHeight() / 2, 110, 15); G.drawString("Пути не существует", getWidth() / 2 - 53, getHeight() / 2 + 1, 20); flushGraphics(); Thread.sleep(1000); break; } if ((right == vmin) && (down == vmin) && (left == vmin) && (right == vmin)) { x1 += R.nextInt(2) - 1; } Draw(); G.setColor(255,0,0); G.fillArc(width * x1, height * y1, width, height, 0, 360); flushGraphics(); Thread.sleep(500); } } public void obnul() { int xp, yp; solid[x1][y1] = 999; for (xp = 0; xp < 10; xp++) { for (yp = 0; yp < 10; yp++) { if (solid[xp][yp] > 0) { solid[xp][yp] = 0; } } } } public void help() throws Exception { do { G.setColor(255, 255, 255); G.fillRect(20, 0, getWidth() - 20, getHeight()); G.setColor(0, 0, 0); G.drawRect(20, 0, getWidth() - 20, getHeight()); G.drawString("клавиши :", 22, 1, 20); G.drawString("1-добавить/убрать стену", 22, 12, 20); G.drawString("2,8,4,6-перемещение", 22, 23, 20); G.drawString("3-переместить цель", 22, 34, 20); G.drawString("7-показать/убрать матрицу", 22, 45, 20); G.drawString("0-выход из программы", 22, 56, 20); flushGraphics(); Thread.sleep(100); } while ((getKeyClicked == 0 ? 0 : -1) == 0); } public void commandAction(Command c, Displayable d) { if (c == cHelp) { try { help(); } catch (Exception Ex) { } } } protected void keyPressed(int key) { Draw(); if (key == KEY_NUM2) { y--; } if (key == KEY_NUM8) { y++; } if (key == KEY_NUM4) { x--; } if (key == KEY_NUM6) { x++; } if (y < 0) { y = 0; } if (y > 9) { y = 9; } if (x < 0) { x = 0; } if (x > 9) { x = 9; } G.setColor(255, 0, 0); G.drawRect(width * x, height * y, width, height); G.fillArc(width * x1, height * y1, width, height, 0, 360); if (key == KEY_NUM1) { if (solid[x][y] == 0) { solid[x][y] = -1; } else if (solid[x][y] == -1) { solid[x][y] = 0; } } if ((key == KEY_NUM3) && (solid[x][y] != 999)) { for (xi = 0; xi < 10; xi++) { for (yi = 0; yi < 10; yi++) { if (solid[xi][yi] == 1) { solid[xi][yi] = 0; } } } solid[x][y] = 1; cel = true; } if (key == KEY_NUM7) { if (Dsetka) { Dsetka = false; } else { Dsetka = true; } } if ((key == KEY_NUM5) && (cel)) { poisc(); try { dvijenie(); } catch (Exception Ex) { } obnul(); cel = false; } if (key == KEY_NUM0) { Main.midlet.destroyApp(true); } flushGraphics(); } protected void keyReleased(int keyCode) { getKeyClicked = 0; } }
//Запара в том , что при движении экран не перерисовываеться...
Мог би отладить, но инет щас закончиться...
|
(Offline)
|
|
10.07.2011, 08:21
|
#8
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Ответ: алгоритм поиска пути ии
foldel, в j2me нельзя постоянно рисовать в один и тот же graphics, т.е. получить его при старте игры и потом использовать не прокатит. Все отрисовки делаются в переопределённом методе public void paint(Graphics g).
Пример:
public void paint(Graphics g) {
Draw(g); //твоя функция рисования
}
Второе: нельзя (ОЧЕНЬ нежелательно) вызывать отрисовку в системных функциях опроса кнопок, таких как keyPressed, keyReleased, keyRepeated, pointerDragged, pointerPressed, pointerReleased.
Типичной конструкцией для игры является наличие главного цикла, в котором есть опрос пользовательского ввода, логика игры и отрисовка.
Для j2me нужно добавить в класс канваса implements Runnable, и главный игровой цикл прописать в обязательной для переопределения функции run()
Например:
boolean bRunning = true;
while(bRunning == true) {
checkUserInput();
doGameLogic();
flip();
}
Для функции flip такой код:
public void flip() {
repaint(); //вызывает функцию paint(), в которой мы всё рисуем
serviceRepaint(); //приказ рисовать пока не нарисует (внимательно читай описание!)
}
|
(Offline)
|
|
11.07.2011, 20:56
|
#9
|
Оператор ЭВМ
Регистрация: 18.11.2010
Сообщений: 23
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: алгоритм поиска пути ии
Это же GameCanvas.
|
(Offline)
|
|
12.07.2011, 13:16
|
#10
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Ответ: алгоритм поиска пути ии
Значит свой flush можно не писать, но функцию paint и и главный цикл всё равно надо.
Вечером если будет подходящий момент сделаю тебе пример, исправив твой код.
|
(Offline)
|
|
12.07.2011, 17:34
|
#11
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Ответ: алгоритм поиска пути ии
Сообщение от foldel
Это же GameCanvas.
|
точно, у него можно так как ты сделал.
Кстати, у меня рисуется движение по клеточкам, или что-то ещё должно быть?
И всё-таки - откажись от обработки логики в функции keyPressed. Взамен этого в этой функции просто запоминай код нажатой кнопки в переменную, а потом в главном цикле проверяй код кнопки и выполняй то что нужно.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:30.
|