Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > JAVA Micro Edition

JAVA Micro Edition Низкоуровневое программирование мобильных телефонов.

Ответ
 
Опции темы
Старый 15.11.2009, 02:42   #1
mifos
AnyKey`щик
 
Регистрация: 15.11.2009
Сообщений: 5
Написано одно полезное сообщение
(для 3 участников)
алгоритм поиска пути ии

Нашел на этом сайте исходный код алгоритма поиска пути, но вот беда он сделан на мидлет паскале. Может кто сможет переделать в ява или даст совет где найти?
Вложения
Тип файла: zip PoiscPuti.zip (12.7 Кб, 1471 просмотров)
(Offline)
 
Ответить с цитированием
Старый 15.11.2009, 09:02   #2
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: алгоритм поиска пути ии

Лучше всего будет просто найти алгоритм и самому реализовать на java.
Можно, конечно, попробовать скомпилить в MP и вытащить классы.
(Offline)
 
Ответить с цитированием
Старый 15.11.2009, 20:33   #3
mifos
AnyKey`щик
 
Регистрация: 15.11.2009
Сообщений: 5
Написано одно полезное сообщение
(для 3 участников)
Ответ: алгоритм поиска пути ии

я пробовал классы декомпилятором открыть там ошибок несколько возникают так как я не очень селен в яве не могу их исправить
(Offline)
 
Ответить с цитированием
Старый 15.11.2009, 21:11   #4
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: алгоритм поиска пути ии

Во-первых - если не удается исправить ошибки, то возможно и не удастся написать программу, так как для этого java нужно знать еще более глубоко.
Во-вторых, тут смысл в том, чтобы скомпилить класс как модуль и просто вызвать функции из него, ничего не декомпиля. Хотя опять же, с этим могут возникнуть сложности.
(Offline)
 
Ответить с цитированием
Старый 15.11.2009, 21:24   #5
mifos
AnyKey`щик
 
Регистрация: 15.11.2009
Сообщений: 5
Написано одно полезное сообщение
(для 3 участников)
Ответ: алгоритм поиска пути ии

vint а у тебя нет каких-нибуть алгоритмов поиска пути на яве?
не подскажишь где взять исходники такого плана?
(Offline)
 
Ответить с цитированием
Старый 15.11.2009, 21:34   #6
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: алгоритм поиска пути ии

Сообщение от mifos Посмотреть сообщение
vint а у тебя нет каких-нибуть алгоритмов поиска пути на яве?
не подскажишь где взять исходники такого плана?
У меня таких исходников нет.
Где-взять - пробовать искать, если найти не удается, выход один - искать просто алгоритм и реализовать его на java самому.
(Offline)
 
Ответить с цитированием
Старый 10.07.2011, 01:47   #7
foldel
Оператор ЭВМ
 
Аватар для foldel
 
Регистрация: 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
foldel
Оператор ЭВМ
 
Аватар для foldel
 
Регистрация: 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)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
А* - самый эффективный алгоритм поиска пути. Черный крыс Библиотеки 4 31.03.2008 14:47
Пути elmortem 2D-программирование 11 30.08.2007 12:18
Wave.dll - Волновой алгоритм поиска пути. Черный крыс Библиотеки 15 04.07.2007 21:08
Поиск пути WaReZ_MEN 3D-программирование 10 27.04.2007 02:24
Алгоритмы поиска impersonalis C++ 0 18.09.2005 18:51


Часовой пояс GMT +4, время: 21:54.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com