2010-07-07 9 views
2

Je suis un développeur Java Blackberry. J'essaye de développer une logique simple de machine à sous. Je suis nouveau pour les graphiques animés etc dans blackberry. Alors, quelqu'un peut-il me dire comment concevoir une machine à sous simple où, en appuyant sur un bouton, les images dans 3 blocs doivent commencer à tourner et après l'arrêt, les prix seront affichés en fonction des photos. Alors pouvez-vous m'aider avec quelques exemples ou tutoriels de la façon de le faire ...Conception d'une machine à sous dans blackberry

Editer: Je le développe tout aussi amusant que l'application qui n'implique aucune transaction d'argent. Ainsi, tous les développeurs de Blackberry peuvent m'aider à réaliser la tâche et à faire tourner les trois images en cliquant sur un bouton ...

Répondre

3

Ceci est un exemple simple mais vous devrez vous occuper de la décoration, du roulement doux etc.

Disons que vous avez 6 images 70x70. simple extension BitmapField pour peindre l'image de fente actuelle, la moitié de l'image ci-dessus et la moitié de l'image ci-dessous:

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); 
    } 
} 

Maintenant, mettez ces champs à l'écran et animez avec minuterie:

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

Pour la fonctionnalité de l'interface utilisateur, lire

Blackberry User Interface Design - Customizable UI?

et

Blackberry - fields layout animation

+0

Merci Max ... Puis-je savoir quelle sera la procédure pour parvenir à une transition en douceur des images. –

+0

Vous pouvez ajouter du code dans la méthode paint(). utilisez y coordonnée dans g.drawBitmap(), ajoutez simplement une valeur dy et changez de timerTask run(). Mais soyez sûr, il deviendra 0 à la fin. Désolé, vous devrez l'écrire vous-même :) –

+0

Merci tellement mush ... Je vais certainement mettre en œuvre votre idée ... –

0

La simulation de bobines mécaniques sur une machine de jeu est protégée par United States Patent 7452276. La page Web de brevets contient des liens vers 40 autres brevets américains et internationaux que vous devriez examiner avant de pouvoir commencer à développer votre logiciel. Une fois que vous avez reçu la permission de tous les différents détenteurs de brevets américains et internationaux de développer votre logiciel, vous développez une longue bande .gif avec les différentes images que vous descendez rapidement dans trois positions ou plus. Votre logiciel devrait déformer les bords supérieur et inférieur des parties visibles de la bande .gif pour donner l'apparence d'une roue à fente mécanique.

+0

Pensez-vous que l'Inde suit la loi américaine? –

+0

Si ils souhaitent vendre sur le marché américain, ils devraient. Il y a aussi des brevets internationaux. –

+0

Je ne conçois pas une machine à sous typique où l'argent est impliqué. J'ai besoin du mécanisme (exemple de code ou de tutoriels) nécessaire pour le développer. J'ai besoin de travailler sur comment faire tourner l'image et comment obtenir réellement les valeurs des 3 images après l'arrêt du spin .. Tous les développeurs de Blackberry peuvent m'aider ??? –