⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.java

📁 网络游戏21点源码 java版本 支持网络连接 如有问题
💻 JAVA
字号:
 package com.dfun.blackjack;

import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.rms.RecordStore;
import java.util.*;
import java.io.*;

/**************************************************
 * @author Beetle
 * 类功能介绍:主控类,用于控制调用各个模块
 **************************************************/
public class Main
	extends MIDlet
	implements CommandListener, Runnable {
	private Display display;
	private TextField phoneNumber;
	private TextField password;
	private TextField userName;
	private Command cmdOk;
	private Command cmdHelp;
	private String url; //连接地址
	private Connection conn; //连接对象
	private MainCanvas mainCanvas; //游戏主界面
	//刷新状态,0为刷新大厅,1为刷新房间用户列表第一次接到房间用户列表时将状态值改为1
	//并且建立房间,状态值为1后只刷新房间列表不建立,2为刷新mainCanvas 的用户列表
	public int refreshState;
	public Hall hall; //游戏大厅
	public House house;
	public Form register;
	public String strPhoneNumber; //用户手机号
	public String strPassword; //用户密码
	public String strUserName; //用户昵称
	public long userId; //当次游戏用户的唯一id
	public int userCount; //用户总分
	public Msg msg;
	public Thread getTwoData;
	public String[][] jettonList; //筹码列表

	/*******************************************************
	 * 功能介绍:构造函数
	 * 输入参数:无
	 *******************************************************/
	public Main() {
		phoneNumber = new TextField("请输入您的手机号码它将用于兑奖,请保证正确无误!", "", 11, TextField.NUMERIC);
		password = new TextField("登陆密码", "", 6, TextField.PASSWORD);
		userName = new TextField("用户昵称", "", 10, TextField.ANY);
		cmdOk = new Command("注册", Command.OK, Command.OK);
		cmdHelp = new Command("帮助", Command.OK, Command.HELP);
		register = new Form("注册");
		register.addCommand(cmdOk);
		register.addCommand(cmdHelp);
		register.append(phoneNumber);
		register.append(password);
		register.append(userName);
		register.setCommandListener(this);
		refreshState = 0; //默认为刷新房间列表
	}

	protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
	}

	protected void pauseApp() {
	}

	protected void startApp() throws MIDletStateChangeException {
		display = Display.getDisplay(this);
		conn = new Connection(this); // 初始化网络
		msg = new Msg(this, display, conn); // 初始化聊天室
		getTwoData = new Thread(this);
		hall = new Hall(display, conn, strPhoneNumber, this);
		house = new House(display, conn, strPhoneNumber, this, hall);
		if (getUserInfo()) { //检测是否注册
			display.setCurrent(new Welcom(display, conn, this));
		}
		else {
			showRegister();
		}
	}

	/*****************************************************
	 * 功能介绍:取得手机号码
	 * 输入参数:无
	 * 输出参数:手机号码
	 *****************************************************/
	public boolean getUserInfo() {
		RecordStore rs;
		byte[] data1, data2, data3;
		try {
			rs = RecordStore.openRecordStore("userInfo", false);
			if (rs.getNumRecords() == 0) {
				return false;
			}
			else {
				data1 = rs.getRecord(1);
				data2 = rs.getRecord(2);
				data3 = rs.getRecord(3);
			}
			rs.closeRecordStore();
			strPhoneNumber = new String(data1);
			strPassword = new String(data2);
			ByteArrayInputStream bis = new ByteArrayInputStream(data3);
			DataInputStream is = new DataInputStream(bis);
			strUserName = is.readUTF();
			return true;
		}
		catch (Exception e) {
			System.out.println(e.getMessage());
			return false;
		}
	}

	/*****************************************************
	 * 功能介绍:设置手机号码
	 * 输入参数:手机号码
	 * 输出参数:无
	 *****************************************************/
	public void setUserInfo(String phoneNumber, String password, String userName) {
		try {
			this.strPhoneNumber = phoneNumber;
			this.strPassword = password;
			this.strUserName = userName;
			RecordStore rs = null;
			byte data1[] = phoneNumber.getBytes();
			byte data2[] = password.getBytes();
			ByteArrayOutputStream bos = new ByteArrayOutputStream();
			DataOutputStream dos = new DataOutputStream(bos);
			dos.writeUTF(userName);
			byte data3[] = bos.toByteArray();
			rs = RecordStore.openRecordStore("userInfo", true);
			for (int i = 1; i <= rs.getNumRecords(); i++) {
				rs.deleteRecord(1);
			}
			if (rs.getNumRecords() == 0) {
				rs.addRecord(data1, 0, data1.length);
				rs.addRecord(data2, 0, data2.length);
				rs.addRecord(data3, 0, data3.length);
			}
			rs.closeRecordStore();

		}
		catch (Exception e) {
			System.out.println(e.toString());
		}
	}

	/*****************************************************
	 * 功能介绍:装入指定的图片
	 * 输入参数:无
	 * 输出参数:无
	 ****************************************************/
	public Image[] loadImg(int gameType) {
		Image img[];
		if (gameType == 1) { //欢迎图片
			try {
				img = new Image[2];
				img[0] = Image.createImage("/welcomone.png");
				img[1] = Image.createImage("/welcomtwo.png");
				return img;
			}
			catch (Exception e) {
				System.out.println("load image error");
				return null;
			}
		}
		else if (gameType == 2) {
			try {
				img = new Image[8];
				img[0] = Image.createImage("/backdrop.png");
				img[1] = Image.createImage("/heitao.png");
				img[2] = Image.createImage("/hongxin.png");
				img[3] = Image.createImage("/caohua.png");
				img[4] = Image.createImage("/fangkuai.png");
				img[5] = Image.createImage("/caidan.png");
				img[6] = Image.createImage("/message.png");
				img[7] = Image.createImage("/gameover.png");
				return img;
			}
			catch (Exception e) {
				System.out.println("load image error");
				return null;
			}
		}
		else if (gameType == 3) {
			try {
				img = new Image[5];
				img[0] = Image.createImage("/fangjian.png");
				return img;
			}
			catch (Exception e) {
				System.out.println("load image error");
				return null;
			}

		}
		else if (gameType == 4) {
			try {
				img = new Image[5];
				img[0] = Image.createImage("/renwu.png");
				return img;
			}
			catch (Exception e) {
				System.out.println("load image error");
				return null;
			}

		}

		return null;
	}

	public void showMainCanvas(int type) {
		mainCanvas = new MainCanvas(type, display, conn, this, house.houseUserList, jettonList, hall.houseList[hall.choHouseList.getSelectedIndex()][1], (int) userId);
		refreshState = 2;
		display.setCurrent(mainCanvas);

	}

	public void showRegister() {
		display.setCurrent(register);
		return;
	}

	public void showHall() {
		getTwoData.start();
		hall.showHall();
	}

	/*****************************************************
	 * 功能介绍:退出整个程序
	 * 输入参数:无
	 * 输出参数:无
	 *****************************************************/
	public void exit() {
		try {
			destroyApp(false);
			notifyDestroyed();
		}
		catch (Exception e) {
		}
	}

	/*****************************************************
	 * 功能介绍:根据间隔字符将一字符串切成数组
	 * 输入参数:要切的字符串,间隔字符
	 * 输出参数:字符串数组
	 *****************************************************/
	public String[] split(String str, String pre) {
		Vector veTmp = new Vector();
		while (str.indexOf(pre) != -1) {
			veTmp.addElement(str.substring(0, str.indexOf(pre)));
			str = str.substring(str.indexOf(pre) + 1, str.length());
		}
		if (veTmp.size() == 0) {
			return null;
		}
		String arrTmp[] = new String[veTmp.size()];
		for (int i = 0; i < arrTmp.length; i++) {
			arrTmp[i] = (String) veTmp.elementAt(i);
		}
		veTmp = null;
		return arrTmp;
	}

	/*****************************************************
	 * 功能介绍:根据间隔字符将一字符串切成数组
	 * 输入参数:要切的字符串,间隔字符
	 * 输出参数:字符串数组
	 *****************************************************/
	public String[][] split(String str, String pre, int col) {
		Vector veTmp = new Vector();
		while (str.indexOf(pre) != -1) {
			veTmp.addElement(str.substring(0, str.indexOf(pre)));
			str = str.substring(str.indexOf(pre) + 1, str.length());
		}

		if (veTmp.size() == 0) {
			return null;
		}

		String arrTmp[][] = new String[veTmp.size() / col][col];
		int n = 0;
		for (int i = 0; i < arrTmp.length; i++) {
			for (int j = 0; j < col; j++) {
				arrTmp[i][j] = (String) veTmp.elementAt(n);
				n++;
			}
		}
		veTmp = null;
		return arrTmp;
	}

	/*****************************************************
	 * 功能介绍:刷新用户牌公共方法
	 * 输入参数:服务端发下的筹码数据
	 * 输出参数:无
	 *****************************************************/
	private void refreshCards(String inputStr) {
		String cardsTmp[][] = split(inputStr, ",", 3);
		if (cardsTmp==null){
			return;
		}
		int cards[][] = new int[cardsTmp.length][3];
		for (int i = 0; i < cardsTmp.length; i++) {
			cards[i][0] = Integer.parseInt(cardsTmp[i][0]);
			cards[i][1] = Integer.parseInt(cardsTmp[i][1]);
			cards[i][2] = Integer.parseInt(cardsTmp[i][2]);
		}
		mainCanvas.refreshDeal(cards);
	}

	public void run() {
		String inputStr;
		int order;
		while (true) {
			inputStr = conn.getTwoData();
			order = Integer.parseInt(inputStr.substring(0, 2));
			inputStr = inputStr.substring(2, inputStr.length());
			switch (order) {
				case 5: //如果用户列表有变动则主动将它发下来
					if (inputStr.equals("full")) {
						display.setCurrent(new Alert("系统提示", "房间人数已满或游戏已开始", null, AlertType.INFO));
					}
					else {
						house.refreshUserList(inputStr);
					}
					break;
				case 7: //游戏开始
					String arrTmp[] = split(inputStr, "*");
					house.refreshUserList(arrTmp[0]);
					this.jettonList = split(arrTmp[1], ",", 3);
					showMainCanvas(0);
					break;
				case 8: //所有玩家下注完毕后发牌
					refreshCards(inputStr); //刷新发牌列表
					break;
				case 9:
					String arrJetton[][] = split(inputStr, ",", 3);
					mainCanvas.refreshJetton(arrJetton); //刷新筹码列表
					break;
				case 10:
					refreshCards(inputStr); //刷新发牌列表
					break;
				case 11:
					refreshCards(inputStr); //刷新发牌列表
					break;
				case 12: //该用户要牌完毕
					refreshCards(inputStr); //刷新发牌列表
					break;
				case 13: // 聊天消息
					msg.addMsg(inputStr);
					if (display.getCurrent() == house.houseForm || display.getCurrent() == mainCanvas) {
						msg.showForm();
					}
					break;
				case 14: //游戏结束显示游戏结果
					mainCanvas.gameOver(inputStr);
					break;
				case 15: //新用户加入刷新
					String arrAddUser[] = split(inputStr, "*");
					house.refreshUserList(arrAddUser[0]);
					String t0[][] = split(arrAddUser[0], ",", 3);
					String t1[][] = split(arrAddUser[1], ",", 3);
					mainCanvas.refreshHouseUserList(t0); //刷新用户列表
					mainCanvas.refreshJetton(t1); //刷新筹码列表
					break;
				case 16: //加入已开始的游戏
					String arr[] = split(inputStr, "*");
					house.refreshUserList(arr[0]);
					this.jettonList = split(arr[1], ",", 3);
					showMainCanvas(1);
					refreshCards(arr[2]);
					break;
				case 17: //刷新用户列表
					house.refreshUserList(inputStr);
					String houseUserList[][] = split(inputStr, ",", 3);
					mainCanvas.refreshHouseUserList(houseUserList);
					break;
				case 18:  //刷新大厅
					hall.refreshHall(inputStr);
					break;
			}
		}
	}

	public void commandAction(Command c, Displayable d) {
		if (d == register && c == cmdOk) {
			strPhoneNumber = phoneNumber.getString();
			strUserName = userName.getString();
			strPassword = password.getString();
			if (strPhoneNumber.length() < 11) {
				display.setCurrent(new Alert("系统提示", "手机号码长度必须是11位!", null, AlertType.ERROR));
				return;
			}
			if (strPassword.length() <= 0) {
				display.setCurrent(new Alert("系统提示", "您还未填写登陆密码!", null, AlertType.ERROR));
				return;
			}
			if (strUserName.length() <= 0) {
				display.setCurrent(new Alert("系统提示", "您还未填写昵称!", null, AlertType.ERROR));
				return;
			}

			setUserInfo(strPhoneNumber, strPassword, strUserName);
			display.setCurrent(new Welcom(display, conn, this));
		}
	}
}

⌨️ 快捷键说明

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