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



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


New Factory Sealed AB 1756-L62 SER B ControlLogix 4MB Memory Controller 1756L62 picture

New Factory Sealed AB 1756-L62 SER B ControlLogix 4MB Memory Controller 1756L62

$505.00



Memory Stick RAM Shipping Box - 5 Trays fits 250 DDR5 DDR4 DDR3 DIMM Modules New picture

Memory Stick RAM Shipping Box - 5 Trays fits 250 DDR5 DDR4 DDR3 DIMM Modules New

$41.50



2 - RAM DRAM Tray-Container Box For Server PC Memory DIMM Modules - Fits 100 NEW picture

2 - RAM DRAM Tray-Container Box For Server PC Memory DIMM Modules - Fits 100 NEW

$21.90



Memory Blister Pack Box for DDR DIMM Module Anti Static - Lot of 6 18 35 100 200 picture

Memory Blister Pack Box for DDR DIMM Module Anti Static - Lot of 6 18 35 100 200

$17.95



Dental Endodontic Endo Memory Engine Rotary Root Canal NiTi File 25mm files 6PCS picture

Dental Endodontic Endo Memory Engine Rotary Root Canal NiTi File 25mm files 6PCS

$349.50



1PC NEW Memory card 2711-NM11 2711-NM11 SPOT STOCK picture

1PC NEW Memory card 2711-NM11 2711-NM11 SPOT STOCK

$364.61







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