BlackBerry Forums Support Community
              

Closed Thread
 
Thread Tools
Old 03-29-2009, 08:36 PM   #1
bmjones
New Member
 
Join Date: Mar 2009
Model: 8330
PIN: N/A
Carrier: Verizon Wireless
Posts: 2
Default Building first app, general help needed.

Please Login to Remove!

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;
	}
}
Offline  
Old 03-29-2009, 11:13 PM   #2
bmjones
New Member
 
Join Date: Mar 2009
Model: 8330
PIN: N/A
Carrier: Verizon Wireless
Posts: 2
Default 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?
Offline  
Closed Thread


Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


OEM Dell XPS 8910 8920 8930 Alienware Aurora R5 R6 R7 Front Cooling Fan 7M0F5 picture

OEM Dell XPS 8910 8920 8930 Alienware Aurora R5 R6 R7 Front Cooling Fan 7M0F5

$13.00



DELL 330-6581 3306581 725-10229 OEM LAMP FOR 1510X 1610HD 1610X  - Made By DELL picture

DELL 330-6581 3306581 725-10229 OEM LAMP FOR 1510X 1610HD 1610X - Made By DELL

$39.98



Dell OEM Latitude Rugged Extreme 7404 GPS Antenna Junction Cable Cable KMX0M picture

Dell OEM Latitude Rugged Extreme 7404 GPS Antenna Junction Cable Cable KMX0M

$3.94



DELL K3756 HIGH CAPACITY TONER CARTRIDGE FOR 1700 / 1710 ;  SEALED BOX picture

DELL K3756 HIGH CAPACITY TONER CARTRIDGE FOR 1700 / 1710 ; SEALED BOX

$19.99



Dell 2400MP Audio Video Computer Projector OEM Lamp Part No: 0CF900 picture

Dell 2400MP Audio Video Computer Projector OEM Lamp Part No: 0CF900

$109.95



Dell OEM Latitude Rugged Extreme 7404 Docking Connector Circuit Board picture

Dell OEM Latitude Rugged Extreme 7404 Docking Connector Circuit Board

$9.98







Copyright © 2004-2016 BlackBerryForums.com.
The names RIM © and BlackBerry © are registered Trademarks of BlackBerry Inc.