package game;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import dialog.*;
import server.*;
import client.*;
import net.*;
/**
*组织游戏运行的类
* @see <a href="MenuBar.html">MenuBar</a>
* @see <a href="ActionHandler.html">ActionHandler</a>
* @see <a href="Tetrics.html">Tetrics</a>
* @see <a href="ChatBar.html">ChatBar</a>
* @see <a href="../server/MyServer.html">MyServer</a>,<a href="../client/Client.html"> MyClient</a>
* @see <a href="PieceBuffer.html">PieceBuffer</a>
* @see <a href="Producer.html">Producer</a>
*/
public class GameFrame extends JFrame implements Net {
private Container container1;
private Color BackColor=new Color(80,123,166);
/**菜单栏*/
private ActionHandler actionlistener=new ActionHandler(this);
private MenuBar m_mMenuBar=new MenuBar(actionlistener);
/**游戏panel*/
private Tetrics m_pTetricsPanel;
/**聊天Panel*/
private ChatBar m_pChatPane;
/**服务器类*/
private MyServer m_server;
/**客户机类*/
private MyClient m_client;
/**当前网络状态*/
private int m_nNetStatus=NOCONNECT;
/**缓冲存放Piece*/
//PieceBuffer m_PieceBuffer=new PieceBuffer();
private PieceBuffer m_PieceBuffer=new PieceBuffer();
/**生产线程生,产出Piece放入缓冲*/
private Producer m_Producer=null;
/**
* Construct the frame
*/
public GameFrame() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
myInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
/**
* Component initialization
* @throws java.lang.Exception
*/
private void jbInit() throws Exception {
this.setBackground(BackColor);
this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
container1=this.getContentPane();
this.setSize(new Dimension(650, 620));
this.setTitle("毕业设计:基于Internet的Game2D--网络版的俄罗斯方块游戏(作者:赵建川)");
this.setResizable(false);
}
/**
* 将ChatBar Panel和Tetrics Panel加入到TetricsFrame中
*/
private void myInit()
{
//constructMenuBar();
this.setJMenuBar(m_mMenuBar);
JPanel Game2D=new JPanel();
Game2D.setLayout(null);
m_pTetricsPanel = new Tetrics(this);
m_pTetricsPanel.setBounds(new Rectangle(0, 0, 800, 430));
m_pChatPane = new ChatBar(this);
m_pChatPane.setBounds(new Rectangle(0, 430, 800, 200));
Game2D.add(m_pTetricsPanel);
Game2D.add(m_pChatPane);
container1.add(Game2D);
}
/**
* 用来在ChatBar里显示现在的联网状况
* @param str 在本机上显示发送给对方的聊天信息
*/
public void showMessage(String str)
{
m_pChatPane.appendStr(str+"/n");
}
/**
* 从对方读来字符串时,进行解析
* @param str 读来的字符串
*/
public void readStr(String str)
{
if (str!=""&&str!=null)
{
int nStrPre2;
try {
nStrPre2 = Integer.parseInt(str.substring(0, 2));
switch (nStrPre2) {
case STARTGAME:
m_pTetricsPanel.getPieceBuffer(m_PieceBuffer);
m_pTetricsPanel.start();
str = str.substring(3, str.length());
m_pChatPane.appendStr("对手:" + str + "/n");
break;
case PAUSEGAME:
m_pTetricsPanel.pause();
str = str.substring(3, str.length());
m_pChatPane.appendStr("对手:" + str + "/n");
break;
case ENDGAME:
m_pTetricsPanel.stop();
this.m_PieceBuffer.clearpbuffer();
str = str.substring(3, str.length());
m_pChatPane.appendStr("对手:" + str + "/n");
break;
case EXITGAME:
str = str.substring(3, str.length());
m_pChatPane.appendStr("对手:" + str + "/n");
m_pTetricsPanel.stop();
if(this.m_nNetStatus==Net.SERVER)
this.m_Producer.stopProduce();
stopConnect();
m_nNetStatus=NOCONNECT;
m_pTetricsPanel.setNetStatus(NOCONNECT);
break;
case GAMEPIECE:
str = str.substring(3, str.length());
m_PieceBuffer.put(Integer.parseInt(str));
break;
case GAMEDATA:
str = str.substring(3, str.length());
this.m_pTetricsPanel.receRivalGameData(str);
break;
case GAMESCORE:
str = str.substring(3, str.length());
m_pTetricsPanel.setRivalScore(Integer.parseInt(str));
break;
case GAMEOVER:
m_pTetricsPanel.setGameInPlay(false);
m_pTetricsPanel.setWin(1);
str = str.substring(3, str.length());
m_pChatPane.appendStr("对手:" + str + "分/n");
break;
case GAMEREMOVELINE:
int line;
str = str.substring(3, str.length());
line=Integer.parseInt(str);
for(int i=0;i<line;i++)
m_pTetricsPanel.addRandomLine();
break;
case TALK:
str = str.substring(3, str.length());
m_pChatPane.appendStr("对手:" + str + "/n");
break;
case EXITCONN:
str = str.substring(3, str.length());
m_pChatPane.appendStr("对手:" + str + "/n");
stopConnect();
break;
case GAMELEVEL:
str = str.substring(3, str.length());
int Level=Integer.parseInt(str);
m_pTetricsPanel.setPlayLevel(Level);
m_pChatPane.appendStr("对手:更改游戏级别" + str + "/n");
break;
case BUFFERCLEAR:
m_PieceBuffer.clearpbuffer();
break;
default:
m_pChatPane.appendStr("对手:" + str + "/n");
break;
}
}
catch (Exception e) {
//先这么做着
//System.out.println("数据有错!--TetricsFrame.readStr(String str)");
}
}
//else
//System.out.println("没有");
}
/**
* 将信息发送给对方
* @param str 要发送的字符串
*/
public void sendStr(String str)
{
switch(m_nNetStatus)
{
case SERVER:
if(m_server!=null)
m_server.writeStr(str+"/n");
break;
case CLIENT:
if(m_client!=null)
m_client.writeStr(str+"/n");
break;
case NOCONNECT:
break;
default:
m_pChatPane.appendStr("自己:"+str+"/n");
break;
}
}
/**
* 启动游戏
*/
public void startGame()
{
switch (m_nNetStatus)
{
case CLIENT:
warningDialog(this,"作为客户端无权开启游戏,只有服务器端才能开始游戏!");
break;
case SERVER:
if (!m_server.getbConnDone())
{
this.warningDialog(this, "请等待其他玩家加入后再可以游戏");
break;
}
m_PieceBuffer.clearpbuffer();
m_PieceBuffer.initPBuffer(500);
m_pTetricsPanel.getPieceBuffer(m_PieceBuffer);//游戏取得m_pTetricsPanel
sendStr(""+ BUFFERCLEAR+":"+"I清空缓冲");
for(int i=0;i<500;i++) //传给对方
sendStr(GAMEPIECE+":"+m_PieceBuffer.pbuffer[i]);
m_Producer = new Producer(this,m_PieceBuffer);
sendStr(STARTGAME+":"+"开始游戏");
showMessage("开始游戏");
try{
m_Producer.start();
m_pTetricsPanel.start();
}catch(Exception e){}
break;
case NOCONNECT:
m_PieceBuffer.clearpbuffer();
m_PieceBuffer.initPBuffer(500);
m_pTetricsPanel.getPieceBuffer(m_PieceBuffer);//游戏取得m_pTetricsPanel
m_Producer = new Producer(this,m_PieceBuffer);
showMessage("开始游戏");
try{
m_Producer.start();
m_pTetricsPanel.start();
}catch(Exception e){}
break;
}
}
/**
* 暂停游戏
*/
public void pauseGame()
{
switch (m_nNetStatus)
{
case CLIENT:
warningDialog(this,"作为客户端无权暂停游戏,只有服务器端才能暂停游戏!");
break;
case SERVER:
if (!m_pTetricsPanel.getGameInPlay()) {
warningDialog(this, "游戏没有开启,无法暂停游戏!");
}
else {
sendStr(PAUSEGAME + ":" + "暂停游戏");
showMessage("暂停游戏");
m_pTetricsPanel.pause();
}
break;
case NOCONNECT:
if (!m_pTetricsPanel.getGameInPlay()) {
warningDialog(this, "游戏没有开启,无法暂停游戏!");
}
else {
showMessage("暂停游戏");
m_pTetricsPanel.pause();
}
break;
}
}
/**
* 结束游戏
*/
public void endGame()
{
switch ( m_nNetStatus)
{
case CLIENT:
warningDialog(this,"作为客户端无权结束游戏,只有服务器端才能结束游戏");
break;
case SERVER:
if (!m_pTetricsPanel.getGameInPlay()) {
warningDialog(this, "游戏没有开启,无法结束游戏!");
}
else {
sendStr(ENDGAME+":"+"结束游戏");
showMessage("结束游戏");
m_Producer.stopProduce();
m_pTetricsPanel.stop();
m_PieceBuffer.clearpbuffer();
}
break;
case NOCONNECT:
if (!m_pTetricsPanel.getGameInPlay()) {
warningDialog(this, "游戏没有开启,无法结束游戏!");
}
else {
showMessage("结束游戏");
m_Producer.stopProduce();
m_pTetricsPanel.stop();
m_PieceBuffer.clearpbuffer();
}
break;
}
}
/**
* 退出游戏程序
*/
public void exitGame()
{
/**控制关闭游戏的代码加到这儿.*/
switch ( m_nNetStatus)
{
case CLIENT:
sendStr(EXITGAME + ":" + "已经退出游戏");
m_pTetricsPanel.stop();
case SERVER:
sendStr(EXITGAME + ":" + "已经退出游戏");
m_pTetricsPanel.stop();
stopConnect();
break;
case NOCONNECT:
//m_Producer.stopProduce();
m_pTetricsPanel.stop();
break;
}
System.exit(0);
}
/**
* 设置级别
*/
public void setLevel()
{
if(m_pTetricsPanel.getGameInPlay())
{
showMessage("游戏正在玩,请在游戏没有开始前设置级别!");
return;
}
if(m_nNetStatus==CLIENT)
{
this.warningDialog(this, "客户端无权更改游戏级别!");
return;
}
int Level=5;
try{
Level=Integer.parseInt(JOptionPane.showInputDialog("输入游戏的级别!注意:1-11之间"));
if(Level>=1&&Level<=10)
{
this.m_pTetricsPanel.setPlayLevel(Level);
}
else{
showMessage("输入级别不在范围内!");
}
if(m_nNetStatus==SERVER)
sendStr(GAMELEVEL+":"+Level);
}catch(Exception e)
{
showMessage("输入有错误!");
}
}
/**
* 创建游戏,创建游戏后就可变为服务器端
*/
public void createGame()
{
switch ( m_nNetStatus)
{
case CLIENT:
warningDialog(this,"作为客户端无权创建游戏请先退出客户端");
break;
case SERVER:
warningDialog(this,"你已经创建了游戏!");
break;
case NOCONNECT:
m_server = new MyServer(this);
m_server.start();
if(m_server.getServerDone())
{
m_nNetStatus = SERVER;
showMessage("开始监听等待其他玩家加入");
}
break;
}
}
/**
* 加入游戏
*/
public void addGame()
{
switch (m_nNetStatus)
{
case CLIENT:
warningDialog(this,"你已经加入了一个游戏,请先退出再加入其他游戏");
break;
case SERVER:
warningDialog(this,"你已经建立了一个游戏,请先退出再加入其他游戏");
break;
case NOCONNECT:
String strConn;
strConn=JOptionPane.showInputDialog("连接对方输入对方的IP地址或者机器名");
this.setClient(strConn);
break;
}
}
/**
*退出游戏,主要是退出连网状态,断开与对方的连接并结束游戏
*/
public void exitConn()
{
if(m_pTetricsPanel.getGameInPlay())
{
warningDialog(this,"游戏正在进行中,不能推出连接!");
return;
}
switch ( m_nNetStatus)
{
case CLIENT:
case SERVER:
sendStr(EXITCONN + ":" + "已经退出连接");
showMessage("退出连接");
stopConnect();
break;
case NOCONNECT:
break;
}
}
/**
* 查看记录分数
*/
public void seeRecord()
{
RecordDialog jd=new RecordDialog("Recordset.txt");
jd.setSize(300,300);
jd.setLocation(100, 100);
jd.show();
}
/**
* 查看关于制作的情况
*/
public void seeAbout()
{
//System.out.println("关于");
Dialog d = new Dialog( this, "关于");
d.add(new AboutPanel(d));
d.setSize(430, 230);
d.setLocation(100, 100);
d.show();
}
/**
* 中断网络连接
*/
public void stopConnect()
{
switch (m_nNetStatus)
{
case CLIENT:
m_client.close();
break;
case SERVER:
m_server.close();
m_server.setConnDone(false);
break;
}
m_nNetStatus =NOCONNECT;
this.m_pTetricsPanel.setNetStatus(NOCONNECT);
}
/**
* 取得网络状态
* @return m_nNetStatus 网络状态
*/
public int getNetStatus()
{
return m_nNetStatus;
}
/**
* 实例 m_client 连接服务器
* @param strIP 连接服务器端的IP地址
*/
public void setClient(String strIP)
{
m_client = new MyClient(strIP, this);
//System.out.println("连接对方");
if (m_client.getConnectFlag() == true)
{
m_nNetStatus = CLIENT;
//sendStr(TALK + ":" + "加入游戏");
showMessage("自己" +"加入"+strIP+"创建的游戏中");
}
}
/**
* 通过JOptionPane弹出模式对话框显示警告信息
* @param jf 附属的JFrame
* @param msg 要显示的警告消息内容
*/
public static void warningDialog(JFrame jf,String msg)
{
JOptionPane.showMessageDialog(
jf,
msg,
"警告",
JOptionPane.WARNING_MESSAGE);
}
public void setNetStatus(int status)
{
this.m_nNetStatus=status;
}
/*
public void Test()
{
initPieceBuffer(BUFFERSIZE);
m_pTetricsPanel.getPieceBuffer(m_PieceBuffer);
showMessage("开始游戏");
try {
m_Producer.start();
m_pTetricsPanel.start();
//m_pTetricsPanel.requestFocus();
m_pTetricsPanel.setFocusable(true);
m_pTetricsPanel.requestFocus();
}
catch (Exception e) {}
}
*/
} //end file
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import dialog.*;
import server.*;
import client.*;
import net.*;
/**
*组织游戏运行的类
* @see <a href="MenuBar.html">MenuBar</a>
* @see <a href="ActionHandler.html">ActionHandler</a>
* @see <a href="Tetrics.html">Tetrics</a>
* @see <a href="ChatBar.html">ChatBar</a>
* @see <a href="../server/MyServer.html">MyServer</a>,<a href="../client/Client.html"> MyClient</a>
* @see <a href="PieceBuffer.html">PieceBuffer</a>
* @see <a href="Producer.html">Producer</a>
*/
public class GameFrame extends JFrame implements Net {
private Container container1;
private Color BackColor=new Color(80,123,166);
/**菜单栏*/
private ActionHandler actionlistener=new ActionHandler(this);
private MenuBar m_mMenuBar=new MenuBar(actionlistener);
/**游戏panel*/
private Tetrics m_pTetricsPanel;
/**聊天Panel*/
private ChatBar m_pChatPane;
/**服务器类*/
private MyServer m_server;
/**客户机类*/
private MyClient m_client;
/**当前网络状态*/
private int m_nNetStatus=NOCONNECT;
/**缓冲存放Piece*/
//PieceBuffer m_PieceBuffer=new PieceBuffer();
private PieceBuffer m_PieceBuffer=new PieceBuffer();
/**生产线程生,产出Piece放入缓冲*/
private Producer m_Producer=null;
/**
* Construct the frame
*/
public GameFrame() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
myInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
/**
* Component initialization
* @throws java.lang.Exception
*/
private void jbInit() throws Exception {
this.setBackground(BackColor);
this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
container1=this.getContentPane();
this.setSize(new Dimension(650, 620));
this.setTitle("毕业设计:基于Internet的Game2D--网络版的俄罗斯方块游戏(作者:赵建川)");
this.setResizable(false);
}
/**
* 将ChatBar Panel和Tetrics Panel加入到TetricsFrame中
*/
private void myInit()
{
//constructMenuBar();
this.setJMenuBar(m_mMenuBar);
JPanel Game2D=new JPanel();
Game2D.setLayout(null);
m_pTetricsPanel = new Tetrics(this);
m_pTetricsPanel.setBounds(new Rectangle(0, 0, 800, 430));
m_pChatPane = new ChatBar(this);
m_pChatPane.setBounds(new Rectangle(0, 430, 800, 200));
Game2D.add(m_pTetricsPanel);
Game2D.add(m_pChatPane);
container1.add(Game2D);
}
/**
* 用来在ChatBar里显示现在的联网状况
* @param str 在本机上显示发送给对方的聊天信息
*/
public void showMessage(String str)
{
m_pChatPane.appendStr(str+"/n");
}
/**
* 从对方读来字符串时,进行解析
* @param str 读来的字符串
*/
public void readStr(String str)
{
if (str!=""&&str!=null)
{
int nStrPre2;
try {
nStrPre2 = Integer.parseInt(str.substring(0, 2));
switch (nStrPre2) {
case STARTGAME:
m_pTetricsPanel.getPieceBuffer(m_PieceBuffer);
m_pTetricsPanel.start();
str = str.substring(3, str.length());
m_pChatPane.appendStr("对手:" + str + "/n");
break;
case PAUSEGAME:
m_pTetricsPanel.pause();
str = str.substring(3, str.length());
m_pChatPane.appendStr("对手:" + str + "/n");
break;
case ENDGAME:
m_pTetricsPanel.stop();
this.m_PieceBuffer.clearpbuffer();
str = str.substring(3, str.length());
m_pChatPane.appendStr("对手:" + str + "/n");
break;
case EXITGAME:
str = str.substring(3, str.length());
m_pChatPane.appendStr("对手:" + str + "/n");
m_pTetricsPanel.stop();
if(this.m_nNetStatus==Net.SERVER)
this.m_Producer.stopProduce();
stopConnect();
m_nNetStatus=NOCONNECT;
m_pTetricsPanel.setNetStatus(NOCONNECT);
break;
case GAMEPIECE:
str = str.substring(3, str.length());
m_PieceBuffer.put(Integer.parseInt(str));
break;
case GAMEDATA:
str = str.substring(3, str.length());
this.m_pTetricsPanel.receRivalGameData(str);
break;
case GAMESCORE:
str = str.substring(3, str.length());
m_pTetricsPanel.setRivalScore(Integer.parseInt(str));
break;
case GAMEOVER:
m_pTetricsPanel.setGameInPlay(false);
m_pTetricsPanel.setWin(1);
str = str.substring(3, str.length());
m_pChatPane.appendStr("对手:" + str + "分/n");
break;
case GAMEREMOVELINE:
int line;
str = str.substring(3, str.length());
line=Integer.parseInt(str);
for(int i=0;i<line;i++)
m_pTetricsPanel.addRandomLine();
break;
case TALK:
str = str.substring(3, str.length());
m_pChatPane.appendStr("对手:" + str + "/n");
break;
case EXITCONN:
str = str.substring(3, str.length());
m_pChatPane.appendStr("对手:" + str + "/n");
stopConnect();
break;
case GAMELEVEL:
str = str.substring(3, str.length());
int Level=Integer.parseInt(str);
m_pTetricsPanel.setPlayLevel(Level);
m_pChatPane.appendStr("对手:更改游戏级别" + str + "/n");
break;
case BUFFERCLEAR:
m_PieceBuffer.clearpbuffer();
break;
default:
m_pChatPane.appendStr("对手:" + str + "/n");
break;
}
}
catch (Exception e) {
//先这么做着
//System.out.println("数据有错!--TetricsFrame.readStr(String str)");
}
}
//else
//System.out.println("没有");
}
/**
* 将信息发送给对方
* @param str 要发送的字符串
*/
public void sendStr(String str)
{
switch(m_nNetStatus)
{
case SERVER:
if(m_server!=null)
m_server.writeStr(str+"/n");
break;
case CLIENT:
if(m_client!=null)
m_client.writeStr(str+"/n");
break;
case NOCONNECT:
break;
default:
m_pChatPane.appendStr("自己:"+str+"/n");
break;
}
}
/**
* 启动游戏
*/
public void startGame()
{
switch (m_nNetStatus)
{
case CLIENT:
warningDialog(this,"作为客户端无权开启游戏,只有服务器端才能开始游戏!");
break;
case SERVER:
if (!m_server.getbConnDone())
{
this.warningDialog(this, "请等待其他玩家加入后再可以游戏");
break;
}
m_PieceBuffer.clearpbuffer();
m_PieceBuffer.initPBuffer(500);
m_pTetricsPanel.getPieceBuffer(m_PieceBuffer);//游戏取得m_pTetricsPanel
sendStr(""+ BUFFERCLEAR+":"+"I清空缓冲");
for(int i=0;i<500;i++) //传给对方
sendStr(GAMEPIECE+":"+m_PieceBuffer.pbuffer[i]);
m_Producer = new Producer(this,m_PieceBuffer);
sendStr(STARTGAME+":"+"开始游戏");
showMessage("开始游戏");
try{
m_Producer.start();
m_pTetricsPanel.start();
}catch(Exception e){}
break;
case NOCONNECT:
m_PieceBuffer.clearpbuffer();
m_PieceBuffer.initPBuffer(500);
m_pTetricsPanel.getPieceBuffer(m_PieceBuffer);//游戏取得m_pTetricsPanel
m_Producer = new Producer(this,m_PieceBuffer);
showMessage("开始游戏");
try{
m_Producer.start();
m_pTetricsPanel.start();
}catch(Exception e){}
break;
}
}
/**
* 暂停游戏
*/
public void pauseGame()
{
switch (m_nNetStatus)
{
case CLIENT:
warningDialog(this,"作为客户端无权暂停游戏,只有服务器端才能暂停游戏!");
break;
case SERVER:
if (!m_pTetricsPanel.getGameInPlay()) {
warningDialog(this, "游戏没有开启,无法暂停游戏!");
}
else {
sendStr(PAUSEGAME + ":" + "暂停游戏");
showMessage("暂停游戏");
m_pTetricsPanel.pause();
}
break;
case NOCONNECT:
if (!m_pTetricsPanel.getGameInPlay()) {
warningDialog(this, "游戏没有开启,无法暂停游戏!");
}
else {
showMessage("暂停游戏");
m_pTetricsPanel.pause();
}
break;
}
}
/**
* 结束游戏
*/
public void endGame()
{
switch ( m_nNetStatus)
{
case CLIENT:
warningDialog(this,"作为客户端无权结束游戏,只有服务器端才能结束游戏");
break;
case SERVER:
if (!m_pTetricsPanel.getGameInPlay()) {
warningDialog(this, "游戏没有开启,无法结束游戏!");
}
else {
sendStr(ENDGAME+":"+"结束游戏");
showMessage("结束游戏");
m_Producer.stopProduce();
m_pTetricsPanel.stop();
m_PieceBuffer.clearpbuffer();
}
break;
case NOCONNECT:
if (!m_pTetricsPanel.getGameInPlay()) {
warningDialog(this, "游戏没有开启,无法结束游戏!");
}
else {
showMessage("结束游戏");
m_Producer.stopProduce();
m_pTetricsPanel.stop();
m_PieceBuffer.clearpbuffer();
}
break;
}
}
/**
* 退出游戏程序
*/
public void exitGame()
{
/**控制关闭游戏的代码加到这儿.*/
switch ( m_nNetStatus)
{
case CLIENT:
sendStr(EXITGAME + ":" + "已经退出游戏");
m_pTetricsPanel.stop();
case SERVER:
sendStr(EXITGAME + ":" + "已经退出游戏");
m_pTetricsPanel.stop();
stopConnect();
break;
case NOCONNECT:
//m_Producer.stopProduce();
m_pTetricsPanel.stop();
break;
}
System.exit(0);
}
/**
* 设置级别
*/
public void setLevel()
{
if(m_pTetricsPanel.getGameInPlay())
{
showMessage("游戏正在玩,请在游戏没有开始前设置级别!");
return;
}
if(m_nNetStatus==CLIENT)
{
this.warningDialog(this, "客户端无权更改游戏级别!");
return;
}
int Level=5;
try{
Level=Integer.parseInt(JOptionPane.showInputDialog("输入游戏的级别!注意:1-11之间"));
if(Level>=1&&Level<=10)
{
this.m_pTetricsPanel.setPlayLevel(Level);
}
else{
showMessage("输入级别不在范围内!");
}
if(m_nNetStatus==SERVER)
sendStr(GAMELEVEL+":"+Level);
}catch(Exception e)
{
showMessage("输入有错误!");
}
}
/**
* 创建游戏,创建游戏后就可变为服务器端
*/
public void createGame()
{
switch ( m_nNetStatus)
{
case CLIENT:
warningDialog(this,"作为客户端无权创建游戏请先退出客户端");
break;
case SERVER:
warningDialog(this,"你已经创建了游戏!");
break;
case NOCONNECT:
m_server = new MyServer(this);
m_server.start();
if(m_server.getServerDone())
{
m_nNetStatus = SERVER;
showMessage("开始监听等待其他玩家加入");
}
break;
}
}
/**
* 加入游戏
*/
public void addGame()
{
switch (m_nNetStatus)
{
case CLIENT:
warningDialog(this,"你已经加入了一个游戏,请先退出再加入其他游戏");
break;
case SERVER:
warningDialog(this,"你已经建立了一个游戏,请先退出再加入其他游戏");
break;
case NOCONNECT:
String strConn;
strConn=JOptionPane.showInputDialog("连接对方输入对方的IP地址或者机器名");
this.setClient(strConn);
break;
}
}
/**
*退出游戏,主要是退出连网状态,断开与对方的连接并结束游戏
*/
public void exitConn()
{
if(m_pTetricsPanel.getGameInPlay())
{
warningDialog(this,"游戏正在进行中,不能推出连接!");
return;
}
switch ( m_nNetStatus)
{
case CLIENT:
case SERVER:
sendStr(EXITCONN + ":" + "已经退出连接");
showMessage("退出连接");
stopConnect();
break;
case NOCONNECT:
break;
}
}
/**
* 查看记录分数
*/
public void seeRecord()
{
RecordDialog jd=new RecordDialog("Recordset.txt");
jd.setSize(300,300);
jd.setLocation(100, 100);
jd.show();
}
/**
* 查看关于制作的情况
*/
public void seeAbout()
{
//System.out.println("关于");
Dialog d = new Dialog( this, "关于");
d.add(new AboutPanel(d));
d.setSize(430, 230);
d.setLocation(100, 100);
d.show();
}
/**
* 中断网络连接
*/
public void stopConnect()
{
switch (m_nNetStatus)
{
case CLIENT:
m_client.close();
break;
case SERVER:
m_server.close();
m_server.setConnDone(false);
break;
}
m_nNetStatus =NOCONNECT;
this.m_pTetricsPanel.setNetStatus(NOCONNECT);
}
/**
* 取得网络状态
* @return m_nNetStatus 网络状态
*/
public int getNetStatus()
{
return m_nNetStatus;
}
/**
* 实例 m_client 连接服务器
* @param strIP 连接服务器端的IP地址
*/
public void setClient(String strIP)
{
m_client = new MyClient(strIP, this);
//System.out.println("连接对方");
if (m_client.getConnectFlag() == true)
{
m_nNetStatus = CLIENT;
//sendStr(TALK + ":" + "加入游戏");
showMessage("自己" +"加入"+strIP+"创建的游戏中");
}
}
/**
* 通过JOptionPane弹出模式对话框显示警告信息
* @param jf 附属的JFrame
* @param msg 要显示的警告消息内容
*/
public static void warningDialog(JFrame jf,String msg)
{
JOptionPane.showMessageDialog(
jf,
msg,
"警告",
JOptionPane.WARNING_MESSAGE);
}
public void setNetStatus(int status)
{
this.m_nNetStatus=status;
}
/*
public void Test()
{
initPieceBuffer(BUFFERSIZE);
m_pTetricsPanel.getPieceBuffer(m_PieceBuffer);
showMessage("开始游戏");
try {
m_Producer.start();
m_pTetricsPanel.start();
//m_pTetricsPanel.requestFocus();
m_pTetricsPanel.setFocusable(true);
m_pTetricsPanel.requestFocus();
}
catch (Exception e) {}
}
*/
} //end file