BlackBerry Forums Support Community

BlackBerry Forums Support Community (http://www.blackberryforums.com/index.php)
-   Developer Forum (http://www.blackberryforums.com/forumdisplay.php?f=15)
-   -   Building first app, general help needed. (http://www.blackberryforums.com/showthread.php?t=183616)

bmjones 03-29-2009 08:36 PM

Building first app, general help needed.
 
Hi, im real new to this and have no clue what im doing. I have a java file that does a real simple tic tac toe game with a server. I have to figure out how to install this program on my BB 8330. I was wondering if someone could give me some pointers or steps on what i have to do. The code was written as a Midlet i think and is supposed to be a general java phone app. Just not sure how to install it on my phone. Here is the code in the java file:

Code:

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import java.io.*;
import java.util.*;

interface Constants
{
        public static final int CONDITION_WIN        =        255;
        public static final int CONDITION_LOST =        254;
        public static final int CONDITION_DRAW        =        253;
}

class TicTacCanvas extends Canvas implements Constants
{
        private TicTacClient app_;

        public TicTacCanvas(TicTacClient app)
        {
                app_ = app;
        }

        public void paint(Graphics g)
        {
                int linesx, linesy, lineex, lineey;
                int circlecx, circlecy, circler;

                g.setColor(255, 255, 255);
                g.fillRect(0, 0, getWidth(), getHeight());
                g.setColor(0, 0, 0);

                //g.drawString("Hello World!", 0, 0, Graphics.LEFT | Graphics.TOP);

                int i, j, contents;
                int skipX, skipY;

                g.setColor(0, 0, 0);

                //Draw lines of tic tac toe board
                skipX = getWidth() / 3;
                skipY = getHeight() / 3;

                //Draw game board lines
                for (i = 1; i < 3; i++)
                {
                        linesx = i * skipX;
                        linesy = 0;

                        lineex = i * skipX;
                        lineey = getHeight();

                        g.drawLine(linesx, linesy, lineex, lineey);

                        for (j = 1; j < 3; j++)
                        {
                                linesx = 0;
                                linesy = j * skipY;

                                lineex = getWidth();
                                lineey = j * skipY;

                                g.drawLine(linesx, linesy, lineex, lineey);
                        }
                }

                //Draw Xes and Os
                for (i = 0; i < 3; i++)
                {
                        for (j = 0; j < 3; j++)
                        {
                                contents = app_.gameBoard[(j * 3) + i];

                                if (contents == 1)
                                {
                                        //Draw blue X
                                        g.setColor(0, 0, 255);

                                        linesx = (i * skipX) + 2;
                                        linesy = (j * skipY) + 2;

                                        lineex = ((i + 1) * skipX) - 2;
                                        lineey = ((j + 1) * skipY) - 2;

                                        g.drawLine(linesx, linesy, lineex, lineey);

                                        linesx = ((i + 1) * skipX) - 2;
                                        linesy = (j * skipY) + 2;

                                        lineex = (i * skipX) + 2;
                                        lineey = ((j + 1) * skipY) - 2;

                                        g.drawLine(linesx, linesy, lineex, lineey);
                                }
                                else if (contents == 2)
                                {
                                        //Draw red O
                                        g.setColor(255, 0, 0);

                                        circlecx = (i * skipX) + (skipX / 2) + 1;
                                        circlecy = (j * skipY) + (skipY / 2);

                                        if (skipX < skipY)
                                                circler = skipX / 2;
                                        else
                                                circler = skipY / 2;

                                        circler -= 3;

                                        //note the ridiculous gymnastics we have to do to draw a simple circle
                                        g.drawArc(circlecx - (circler), circlecy - (circler), circler * 2, circler * 2, 0, 360);
                                }
                        }
                }

                //If we are waiting for something, notify user
                if (app_.winner != 0)
                {
                        g.setColor(0, 0, 0);

                        if (app_.winner == 1)
                        {
                                g.drawString("You Win!", getWidth() / 2, getHeight() / 2, Graphics.HCENTER | Graphics.BASELINE);
                        }
                        else if (app_.winner == 2)
                        {
                                g.drawString("You Lose!", getWidth() / 2, getHeight() / 2, Graphics.HCENTER | Graphics.BASELINE);
                        }
                        else
                        {
                                g.drawString("Draw!", getWidth() / 2, getHeight() / 2, Graphics.HCENTER | Graphics.BASELINE);
                        }
                }
        }

        public void keyPressed(int keyCode)
          {
                int cell = -1;

                //no input if winner
                if (app_.winner != 0)
                        return;

                switch (keyCode)
                {
                        case KEY_NUM1:
                        cell = 0;
                        break;

                        case KEY_NUM2:
                        cell = 1;
                        break;

                        case KEY_NUM3:
                        cell = 2;
                        break;

                        case KEY_NUM4:
                        cell = 3;
                        break;

                        case KEY_NUM5:
                        cell = 4;
                        break;

                        case KEY_NUM6:
                        cell = 5;
                        break;

                        case KEY_NUM7:
                        cell = 6;
                        break;

                        case KEY_NUM8:
                        cell = 7;
                        break;

                        case KEY_NUM9:
                        cell = 8;
                        break;
                }

                if (cell < 0)
                        return;

                //If the cell is clear, fill it in
                if (app_.gameBoard[cell] == 0)
                {
                        app_.gameBoard[cell] = 1;
                        app_.winner = app_.checkWin();

                        if (app_.winner == 0)
                        {
                                //Send move to server, receive server's move
                                if (app_.writeMove(cell))
                                {
                                        app_.readMove();
                                }
                        }
                        else        //Send win condition to server
                        {
                                if (app_.winner == 1)
                                        app_.writeMove(CONDITION_WIN);
                                else if (app_.winner == 2)
                                        app_.writeMove(CONDITION_LOST);
                                else
                                        app_.writeMove(CONDITION_DRAW);
                        }
                }

                repaint();
                serviceRepaints();
        }
}

public class TicTacClient extends MIDlet implements CommandListener, Constants
{
        private int move_;
        private TicTacCanvas canvas_;
        private Display display_;

        private SocketConnection sc_;
        private InputStream is_;
        private OutputStream os_;

        public int[] gameBoard;
        public int winner;

        public TicTacClient()
        {
                winner = 0;

                canvas_ = new TicTacCanvas(this);

                gameBoard = new int[9];

                for (int i = 0; i < 9; i++)
                {
                        gameBoard[i] = 0;
                }
        }

        public void startApp()
        {
                openConnection();

                display_ = Display.getDisplay(this);
                display_.setCurrent(canvas_);
                canvas_.repaint();
        }

        public void pauseApp()
        {
        }

        public void destroyApp(boolean unconditional)
        {
                closeConnection();
        }

        public void commandAction(Command c, Displayable s)
        {

          }

          boolean writeMove(int movedata)
          {
                move_ = (char)movedata;

                try
                {
                        os_.write(move_);
                }
                catch(IOException e)
                {
                        Alert a = new Alert("TicTacClient", "Write Move: Connection failed...", null, AlertType.ERROR);
                        a.setTimeout(Alert.FOREVER);
                        display_.setCurrent(a);
                        return false;
                }

                if (move_ >= CONDITION_DRAW)
                {
                        //game over
                        closeConnection();
                }

                return true;
        }

          boolean readMove()
          {
                try
                {
                        //we only want to read one byte
                        int move_ = 0;
                        move_ = is_.read();

                        if (move_ >= 0)
                        {
                                gameBoard[move_] = 2;

                                winner = checkWin();

                                if (winner > 0)
                                {
                                        if (winner == 1)
                                        {
                                                writeMove(CONDITION_WIN);
                                        }
                                        else if (winner == 2)
                                        {
                                                writeMove(CONDITION_LOST);
                                        }
                                        else
                                        {
                                                writeMove(CONDITION_DRAW);
                                        }

                                        closeConnection();

                                        return (false);
                                }
                                else
                                        return (true);
                        }
                }
                catch(IOException e)
                {
                        Alert a = new Alert("TicTacClient", "ReadMove: " + e, null, AlertType.ERROR);
                        a.setTimeout(Alert.FOREVER);
                        display_.setCurrent(a);
                }

                return (false);
        }

        void openConnection()
        {
                try
                {
                        sc_ = (SocketConnection)Connector.open("socket://SERVER IP AND PORT");
                        is_ = sc_.openInputStream();
                        os_ = sc_.openOutputStream();
                }
                catch(IOException e)
                {
                        Alert a = new Alert("TicTacClient", "Open Connection: connection failed...", null, AlertType.ERROR);
                        a.setTimeout(Alert.FOREVER);
                        display_.setCurrent(a);
                }
        }

        void closeConnection()
        {
                try
                {
                        is_.close();
                        os_.close();
                        sc_.close();
                }
                catch(IOException e)
                {
                        Alert a = new Alert("TicTacClient", "Close Connection: connection failed...", null, AlertType.ERROR);
                        a.setTimeout(Alert.FOREVER);
                        display_.setCurrent(a);
                }

        }

        int checkWin()
        {
                if (scanBoard(1))
                        return 1;

                if (scanBoard(2))
                        return 2;

                if (scanBoard(3))
                        return 3;

                return 0;
        }

        boolean scanBoard(int player)
        {
                int i;

                //Scan for a draw
                if (player == 3)
                {
                        for (i = 0; i < 9; i++)
                        {
                                if (gameBoard[i] == 0)
                                        return false;
                        }

                        return true;
                }

                //Check horizontals and verticals
                for (i = 0; i < 3; i++)
                {
                        if ( (gameBoard[(i * 3)] == player) &&
                                (gameBoard[(i * 3) + 1] == player) &&
                                (gameBoard[(i * 3) + 2] == player) )
                        {
                                return true;
                        }

                        if ( (gameBoard[i] == player) &&
                                (gameBoard[(1 * 3) + i] == player) &&
                                (gameBoard[(2 * 3) + i] == player) )
                        {
                                return true;
                        }

                }

                //Check diagonals
                if ( (gameBoard[0] == player) &&
                        (gameBoard[1 + 3] == player) &&
                        (gameBoard[2 + 6] == player) )
                {
                        return true;
                }

                if ( (gameBoard[2] == player) &&
                        (gameBoard[1 + 3] == player) &&
                        (gameBoard[6] == player) )
                {
                        return true;
                }

                return false;
        }
}


bmjones 03-29-2009 11:13 PM

Update
 
UPDATE:

Ok so ive converted the .jar file that i got from my IDE to a .cod file. And i seemed to get it onto my BB. However i am getting a null pointer exception when i try to run it. I read something about cods and alx files. do i need an alx file for this to work?


All times are GMT -5. The time now is 07:39 AM.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.