在黑莓中设计老虎机

时间:2010-07-07 10:14:21

标签: blackberry blackberry-eclipse-plugin

我是Blackberry java开发人员。我正在尝试开发一个简单的老虎机逻辑。我是黑莓动画图形等的新手。所以,任何人都可以告诉我如何设计一个简单的老虎机,按下一个按钮,3个区块中的图像必须开始旋转,停止后,将根据图片显示奖品。那么你可以帮我提一些样本或教程如何做到这一点......

编辑:我正在开发它,就像有趣的应用程序,不涉及任何金钱交易。因此,任何Blackberry开发人员都会指导我如何完成任务并通过点击按钮来旋转三个图像......

2 个答案:

答案 0 :(得分:3)

这是一个简单的例子,但你必须自己处理装饰,平滑滚动等。

假设您有6张图像70x70。 简单的BitmapField扩展,用于绘制当前插槽图像,上方图像的一半和下方图像的一半:

class SlotField extends BitmapField {
    Bitmap bmp1 = Bitmap.getBitmapResource("img1.png");
    Bitmap bmp2 = Bitmap.getBitmapResource("img2.png");
    Bitmap bmp3 = Bitmap.getBitmapResource("img3.png");
    Bitmap bmp4 = Bitmap.getBitmapResource("img4.png");
    Bitmap bmp5 = Bitmap.getBitmapResource("img5.png");
    Bitmap bmp6 = Bitmap.getBitmapResource("img6.png");

    Bitmap[] bmps = new Bitmap[] { bmp1, bmp2, bmp3, bmp4, bmp5, bmp6 };

    int mPos = 0;

    public SlotField(int position) {
        mPos = position;
    }

    public int getBitmapHeight() {
        return bmp1.getHeight() * 2;
    }

    public int getBitmapWidth() {
        return bmp1.getWidth();
    }

    protected void layout(int width, int height) {
        setExtent(getBitmapWidth(), getBitmapHeight());
    }

    int getNextPos() {
        if (mPos == bmps.length - 1) {
            return 0;
        } else
            return mPos + 1;
    }

    int getPrevPos() {
        if (mPos == 0) {
            return bmps.length - 1;
        } else
            return mPos - 1;
    }

    protected void paint(Graphics g) {
        Bitmap hImg = bmps[getPrevPos()];
        Bitmap mImg = bmps[mPos];
        Bitmap lImg = bmps[getNextPos()];
        g.drawBitmap(0, 0, 70, 35, hImg, 0, 35);
        g.drawBitmap(0, 35, 70, 70, mImg, 0, 0);
        g.drawBitmap(0, 105, 70, 35, lImg, 0, 0);
    }
}

现在将这些字段放在屏幕上并使用计时器进行动画处理:

class MainScr extends MainScreen {
    SlotField slot1 = new SlotField(0);
    SlotField slot2 = new SlotField(3);
    SlotField slot3 = new SlotField(5);
    boolean running = false;

    public MainScr() {
        HorizontalFieldManager hField = new HorizontalFieldManager();
        add(hField);

        hField.add(slot1);
        hField.add(slot2);
        hField.add(slot3);

        ButtonField btnRoll = new ButtonField("Roll");
        btnRoll.setChangeListener(new FieldChangeListener() {
            public void fieldChanged(Field field, int context) {
                if (!running)
                    rollSlots();
            }
        });

        add(btnRoll);
    }

    void rollSlots() {
        Timer timer = new Timer();
        final Random rnd = new Random();
        TimerTask ttask1 = new TimerTask() {
            int cycle = 0;

            public void run() {
                slot1.mPos = slot1.getNextPos();
                invalidate();
                cycle++;
                if (cycle >= 100+rnd.nextInt(6))
                    cancel();
            }
        };

        TimerTask ttask2 = new TimerTask() {
            int cycle = 0;

            public void run() {
                slot2.mPos = slot2.getNextPos();
                invalidate();
                cycle++;
                if (cycle >= 100+rnd.nextInt(6))
                    cancel();
            }
        };

        TimerTask ttask3 = new TimerTask() {
            int cycle = 0;

            public void run() {
                slot3.mPos = slot3.getNextPos();
                invalidate();
                cycle++;
                if (cycle >= 100+rnd.nextInt(6))
                    cancel();
            }
        };

        timer.schedule(ttask1, 0, 50);
        timer.schedule(ttask2, 200, 50);
        timer.schedule(ttask3, 400, 50);
    }
}

alt text http://img534.imageshack.us/img534/2172/slots.jpg

对于UI功能,请阅读

Blackberry User Interface Design - Customizable UI?

Blackberry - fields layout animation

答案 1 :(得分:0)

游戏机上的机械卷轴模拟受United States Patent 7452276保护。专利网页上有与其他40项美国和国际专利的链接,您必须先研究这些专利才能开始开发软件。

在您获得所有不同的美国和国际专利持有者的许可来开发您的软件之后,您将开发一个带有不同图像的长.gif条带,您可以快速向下移动三个或更多位置。您的软件必须扭曲.gif条带的可见部分的顶部和底部边缘,以提供机械槽轮的外观。