ежевика нити ява - PullRequest
       8

ежевика нити ява

0 голосов
/ 02 декабря 2011

Я работаю над игрой для моего BlackBerry и загружаю буфер с потоками.В методе процесса, если 'множители' меньше нуля, я хочу, чтобы поток прекратил работу и на экране появилось диалоговое окно.Все, что я пробовал, не работает.Диалог появляется, как только открывается экран в большинстве случаев.Я попытался создать логическое поле, в котором метод run зацикливается, и присвоил ему значение false, но безрезультатно.

package Test;

import java.util.Random;
import java.util.Vector;

import net.rim.device.api.system.Bitmap;
import net.rim.device.api.system.Display;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.container.FullScreen;

class game extends FullScreen {

public static gameGraphics gfx;
Vector objects = new Vector();
private int lives = 5;
private int score = 0;
private Item item;

private int screenHeight = Display.getHeight();

//Bitmaps
Bitmap red = Bitmap.getBitmapResource("redblock.png");
Bitmap blue = Bitmap.getBitmapResource("blueblock.png");
Bitmap green = Bitmap.getBitmapResource("greenblock.png");


public game()
{
super(FullScreen.DEFAULT_MENU|FullScreen.DEFAULT_CLOSE);
this.initialize();
}

private void initialize() {

Block block1 = new Block(1);
Block block2 = new Block(5);
Block block3 = new Block(9);
objects.addElement(block1);
objects.addElement(block2);
objects.addElement(block3);
item = new Item(2,red,objects);
objects.addElement(item);

gfx = new gameGraphics();
refresher rf = new refresher(item,block1,block2,block3);
Dialog.ask(Dialog.D_OK,"Your score: " + score); //Is this in the right place?

}

private class refresher extends Thread{

    private Item item;
    private Block block1;
    private Block block2;
    private Block block3;
    private int endOfBlocks;
    private boolean runLoop = true;

    refresher(Item i,Block a, Block b, Block c)
    {
        item = i;
        block1 = a;
        block2 = b;
        block3 = c;
        endOfBlocks = block3.getBottom();
        start();
    }

public void run()
{

while(true)
{
    Process();
    try 
    {
        Thread.sleep(1);
    }
    catch (InterruptedException e) {
        e.printStackTrace();
    }
invalidate();
}
}

public void Process()
{
if(lives > 0){

    if(item.getTop() > endOfBlocks)
    {
        CheckEndOfScreen();
    }else{
        if(item.collides()){
            RepositionBlocks();
            lives--;
        }
    }

    item.move();
}else{
    //What goes here? ----------------------------------
}
}



public void CheckEndOfScreen(){
if(item.getBottom() > screenHeight){
RepositionBlocks();
score++;
}
}


public void RepositionBlocks()
{
Random random = new Random();
block1.setValues(random.nextInt(3) + 1);
block2.setValues(random.nextInt(3) + 4);
block3.setValues(random.nextInt(3) + 7);

int x = random.nextInt(3) + 1;

switch(random.nextInt(3)){
case 0: item.setValues(red, x); break;
case 1: item.setValues(blue,x); break;
case 2: item.setValues(green,x); break;
}

}

} //End of refresher

protected void paint(Graphics graphics)
{
gfx.Process(graphics, objects, lives);
}


public void close()
{
 int response = Dialog.ask(Dialog.D_YES_NO,"Return to menu" +           item.leftChannel,Dialog.NO);
 if(response == Dialog.YES)
 {
     super.close();
 }
}



protected boolean navigationMovement(int dx,int dy,int status,int time)
{
if(dx > 0){
    item.moveRight();
}

if(dx < 0){
    item.moveLeft();
}

return true;
}



}
...