servercanvas.java

来自「一款模仿劲舞团的手机游戏」· Java 代码 · 共 184 行

JAVA
184
字号


import java.util.Hashtable;
import java.util.Timer;
import java.util.TimerTask;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;

/**
 * @author trojan
 * 
 * �����Ƿ�����UI
 * 
 */
public class ServerCanvas extends Canvas {

	private NetGameInformationCanvas iCanvas;// ��Canvas����

	private Timer receiveTimer;// ���ն�ʱ��

	private Server server;// ���������

	private String sendText;// �������

	private String receiveText;// �������

	private int showIndex = 0;// l�ӽ��

	private int width;// ��Ļ�Ŀ�

	private int height;// ��Ļ�ĸ�

	private MyMIDLET midlet;// �������

	private Hashtable gameInfo;// ��Ϸ������

	private Hashtable firstCharacterInfo;// ����һ������

	private Hashtable secondCharacterInfo;// �����������

	private boolean isWaiting = true;// ��ʶ�������Ƿ����ڵȴ�

	private final int STRING_ANCHOR = Graphics.HCENTER | Graphics.BASELINE;// �����

	private int count = 0;// l�Ӽ���

	// ���췽��
	public ServerCanvas(NetGameInformationCanvas canvas, Hashtable gameInfo,
			Hashtable firstCharacterInfo, MyMIDLET midlet) {
		// TODO �Զ���ɹ��캯����
		setFullScreenMode(true);

		width = getWidth();
		height = getHeight();

		this.midlet = midlet;
		this.iCanvas = canvas;
		this.gameInfo = gameInfo;
		this.firstCharacterInfo = firstCharacterInfo;
		secondCharacterInfo = new Hashtable();

		// �����������,�ȴ�l��
		server = new Server();
		// ����������˶�ʱ��
		receiveTimer = new Timer();
		receiveTimer.schedule(new TimerRecevieServerTask(), 2000, 500);
	}

	// ���ͷ���
	public void send() {
		server.setSendText(sendText);
		try {
			server.send();
		} catch (Exception e) {
			// TODO: handle exception
		}

	}

	// ��ͼ����
	protected void paint(Graphics g) {
		// �������
		try {
			receiveText = server.receive();
		} catch (Exception e) {
			// TODO: handle exception
		}

		// ����յ���ݲ�Ϊ��
		if (receiveText != null) {
			// �����Ϊ��ready��,����l���ѽ�b,������Ϸ������һ������
			if (receiveText.equals("ready")) {
				isWaiting = false;
				count = 0;
				showIndex = 1;
				sendText = firstCharacterInfo.get("cName").toString()
						+ firstCharacterInfo.get("cAppPath").toString()
						+ gameInfo.get("musicPath").toString().substring(6, 7)
						+ gameInfo.get("gameScenePath").toString().substring(6,
								7);
				send();
			}

			// ���յ�����ݳ���Ϊ��,��˵��˫����ݴ������,���ͣ�ok����ʾ���Կ�ʼ��Ϸ
			if (receiveText.length() == 9) {
				showIndex = 2;
				sendText = "ok";
				send();

				secondCharacterInfo.put("cName", receiveText.substring(0, 8));
				secondCharacterInfo
						.put("cAppPath", receiveText.substring(8, 9));
			}

			// ���յ�"ok",��ʾ˫�����Ѿ���,��ʼ��Ϸ
			if (receiveText.equals("ok")) {
				showIndex = 3;
			}
			receiveText = null;
		}
		if ((count == 30) && (isWaiting == false)) {
			showIndex = 4;
		}

		Font font = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD,
				Font.SIZE_LARGE);
		g.setFont(font);
		g.setColor(0xff000000);
		g.fillRect(0, 0, width, height);
		g.setColor(0xffffffff);
		if (isWaiting) {
			g.drawString("����", width / 2 + 55, height / 2 + 90, Graphics.LEFT
					| Graphics.TOP);
		}
		switch (showIndex) {
		case 0:
			g.drawString("���ڵȴ�l��....", width / 2, height / 2, STRING_ANCHOR);
			break;
		case 1:
			g.drawString("�ɹ���bl��....", width / 2, height / 2, STRING_ANCHOR);
			break;
		case 2:
			g.drawString("���ڳ�ʼ����Ϸ...", width / 2, height / 2, STRING_ANCHOR);
			break;
		case 3:
			g.drawString("��Ϸ��ʼ", width / 2, height / 2, STRING_ANCHOR);
			receiveTimer.cancel();
			midlet.startNetCompetition(gameInfo, firstCharacterInfo,
					secondCharacterInfo, server, null);
			break;
		case 4:
			g.drawString("l�ӳ�ʱ", width / 2, height / 2, STRING_ANCHOR);
			isWaiting = true;
		}
		count++;
	}

	// ���̰����¼�
	protected void keyPressed(int key) {
		// ��l�����ڽ�b,�������˳�
		if (isWaiting == false) {
			return;
		}
		// ���������,���˳�
		if (key == -7) {
			receiveTimer.cancel();
			server.close();
			Display.getDisplay(midlet).setCurrent(iCanvas);
		}
		super.keyPressed(key);
	}

	// ��ʱ��,���ڶ�ʱ�������
	class TimerRecevieServerTask extends TimerTask {
		public void run() {
			// TODO �Զ���ɷ������
			repaint();
		}

	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?