Показать сообщение отдельно
Старый 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 widthheightixiyixyx1y1key;
    public 
Command cHelp = new Command("Help"Command.EXIT, 1);
    public 
boolean Dsetkacel;
    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);
        
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(255255255);
        
G.fillRect(00getWidth(), getHeight());
        
G.setColor(00128);
        for (
010i++) {
            
G.drawLine(width i0width igetHeight());
        }
        for (
010i++) {
            
G.drawLine(0height igetWidth(), height i);
        }
        
G.setColor(1282550);

        for (
xi 0xi 10xi++) {
            for (
yi 0yi 10yi++) {
                if (
solid[xi][yi] == -1) {
                    
G.fillRect(width xiheight yiwidthheight);
                } else if (
solid[xi][yi] == 1) {
                    
G.drawLine(width xiheight yiwidth xi widthheight yi height);
                    
G.drawLine(width xi widthheight yiwidth xiheight yi height);
                }
            }
        }
        if (
Dsetka) {
            
G.setColor(000);
            for (
xi 0xi 10xi++) {
                for (
yi 0yi 10yi++) {
                    
G.drawString("" solid[xi][yi], width xiheight yi20);
                }
            }
        }
    }

    public 
int min(int v1int v2int v3int 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 xpypnum 1;
        
boolean perebor true;
        while (!(
perebor == false)) {
            for (
xp 0xp 10xp++) {
                for (
yp 0yp 10yp++) {
                    if (
solid[xp][yp] == num) {
                        if (
xp > -1) {
                            if (
solid[xp 1][yp] == 0) {
                                
solid[xp 1][yp] = num 1;
                            }
                        }
                        if (
xp 10) {
                            if (
solid[xp 1][yp] == 0) {
                                
solid[xp 1][yp] = num 1;
                            }
                        }
                        if (
yp > -1) {
                            if (
solid[xp][yp 1] == 0) {
                                
solid[xp][yp 1] = num 1;
                            }
                        }
                        if (
yp 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 leftrightupdownvmin;
        while (!(
solid[x1][y1] == 1)) {
            if (
x1 > -1) {
                
up solid[x1 1][y1];
            } else {
                
up 999;
            }
            if (
x1 10) {
                
down solid[x1 1][y1];
            } else {
                
down 999;
            }
            if (
y1 > -1) {
                
left solid[x1][y1 1];
            } else {
                
left 999;
            }
            if (
y1 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(updownleftright);
            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(255255255);
                
G.fillRect(getWidth() / 55getHeight() / 211015);
                
G.setColor(000);
                
G.drawRect(getWidth() / 55getHeight() / 211015);
                
G.drawString("Пути не существует"getWidth() / 53getHeight() / 120);
                
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 x1height y1widthheight0360);
            
flushGraphics();
            
Thread.sleep(500);
        }
    }

    public 
void obnul() {
        
int xpyp;
        
solid[x1][y1] = 999;
        for (
xp 0xp 10xp++) {
            for (
yp 0yp 10yp++) {
                if (
solid[xp][yp] > 0) {
                    
solid[xp][yp] = 0;
                }
            }
        }
    }

    public 
void help() throws Exception {
        do {
            
G.setColor(255255255);
            
G.fillRect(200getWidth() - 20getHeight());
            
G.setColor(000);
            
G.drawRect(200getWidth() - 20getHeight());
            
G.drawString("клавиши :"22120);
            
G.drawString("1-добавить/убрать стену"221220);
            
G.drawString("2,8,4,6-перемещение"222320);
            
G.drawString("3-переместить цель"223420);
            
G.drawString("7-показать/убрать матрицу"224520);
            
G.drawString("0-выход из программы"225620);
            
flushGraphics();
            
Thread.sleep(100);
        } while ((
getKeyClicked == : -1) == 0);
    }

    public 
void commandAction(Command cDisplayable d) {
        if (
== 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 (
0) {
            
0;
        }
        if (
9) {
            
9;
        }
        if (
0) {
            
0;
        }
        if (
9) {
            
9;
        }
        
G.setColor(25500);
        
G.drawRect(width xheight ywidthheight);
        
G.fillArc(width x1height y1widthheight0360);
        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 0xi 10xi++) {
                for (
yi 0yi 10yi++) {
                    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)
 
Ответить с цитированием