?? tframe.java
字號:
import java.awt.*;import java.awt.event.*;import dialog.*;import javax.swing.*;import server.*;import client.*;import java.util.*;public class TFrame extends JFrame implements NetRead{ public Tetrics m_tetrics;// public JPanel m_pStatus; public StatusBar m_pStatus;// public JLabel m_lStatus; //用于網絡 public MyServer m_server; public MyClient m_client; //定義表征現在網絡狀態的常量。 //NOCONNECT表示單機運行。 //SERVE表示這個游戲用作服務器。 //CLIENT表示這個游戲用作客戶端 public static final int NOCONNECT=0,SERVER=1,CLIENT=2; public int m_nNetStatus=NOCONNECT; public TFrame() { super(); try { jbInit(); myInit(); } catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) { TFrame mframe=new TFrame(); mframe.show(); } private void jbInit() throws Exception { this.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(WindowEvent e) { this_windowClosing(e); } }); this.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(WindowEvent e) { this_windowClosing(e); } }); } private void myInit() { setSize(750,580); setLocation(500,400); addMenu(); //setLayout(null); JPanel gameP=new JPanel(); gameP.setLayout(null); m_tetrics=new Tetrics(this); m_tetrics.setBounds(0,0,Tetrics.WIDTH,Tetrics.HEIGHT);/* m_pStatus=new JPanel(); m_pStatus.setBackground(Color.lightGray); m_lStatus=new JLabel("游戲裝載完畢"); m_lStatus.setBackground(Color.lightGray); m_pStatus.add(m_lStatus);*/ m_pStatus=new StatusBar(this); m_pStatus.setBounds(0,Tetrics.HEIGHT,Tetrics.WIDTH,Tetrics.HEIGHT+130); gameP.add(m_tetrics); gameP.add(m_pStatus);// add(m_tetrics);// add(m_pStatus); getContentPane().add(gameP); } void this_windowClosing(WindowEvent e) { if(m_nNetStatus==SERVER)m_server.close(); if(m_nNetStatus==CLIENT)m_client.close(); System.exit(0); } private void addMenu() { MenuBar menuBar=new MenuBar(); MenuListener menuListener=new MenuListener(this); MenuShortcut ms=new MenuShortcut(KeyEvent.VK_S); Menu menu1=new Menu("游戲"); Menu menu2=new Menu("控制"); Menu menu3=new Menu("關于"); menuBar.add(menu1); menuBar.add(menu2); menuBar.add(menu3); MenuItem menuItem1_1=new MenuItem("開始游戲"); MenuItem menuItem1_2=new MenuItem("暫停游戲"); MenuItem menuItem1_3=new MenuItem("結束游戲"); MenuItem menuItem1_4=new MenuItem("關閉"); menu1.add(menuItem1_1); menu1.add(menuItem1_2); menu1.add(menuItem1_3); menu1.addSeparator(); menu1.add(menuItem1_4); //安裝監聽器 menuItem1_1.addActionListener(menuListener); menuItem1_2.addActionListener(menuListener); menuItem1_3.addActionListener(menuListener); MenuItem menuItem2_1=new MenuItem("設置級別"); MenuItem menuItem2_2=new MenuItem("查看分數"); MenuItem menuItem2_3=new MenuItem("等待對方連接"); MenuItem menuItem2_4=new MenuItem("連接對方");// MenuItem menuItem2_1=new MenuItem("設置游戲級別"); menu2.add(menuItem2_1); menu2.add(menuItem2_2); menu2.addSeparator(); menu2.add(menuItem2_3); menu2.add(menuItem2_4); menuItem2_1.addActionListener(menuListener); menuItem2_2.addActionListener(menuListener); menuItem2_3.addActionListener(menuListener); menuItem2_4.addActionListener(menuListener); MenuItem menuItem3_1=new MenuItem("關于"); menu3.add(menuItem3_1); menuItem3_1.addActionListener(menuListener); setMenuBar(menuBar); } public void insertScoreReport(int nScore) { Score score=new Score(); if(score.isScoreTop(nScore)) { JDialog d=new JDialog(this,"恭喜"); InsertURScoreP ius=new InsertURScoreP(nScore,d); d.add(ius); d.setSize(306,231); d.setLocation(400,300); d.show(); } } /** * 從對方讀來字串時,調用這個方法 * @param str 讀來的字串 */ public void readStr(String str) { //如果讀來的數據是對方的狀態信息 if(str.startsWith("Status:")) { int[] nRivalField=new int[Tetrics.m_nCols*(Tetrics.m_nRows+4)]; str=str.substring(7,str.length()); StringTokenizer st=new StringTokenizer(str,"|"); int i=0; try { while(st.hasMoreTokens()) { nRivalField[i]=Integer.parseInt(st.nextToken()); i++; } }catch(Exception e){} i=0; for(int col=0;col<Tetrics.m_nCols;col++) for(int row=0;row<Tetrics.m_nRows;row++) { m_tetrics.m_nRivalField[col][row]=nRivalField[i]; i++; } } //如果讀來的數據是對方消去一行的消息。 else if(str.equals("RemoveLine")) { m_tetrics.addRandomLine(); } //如果讀來的數據是對方開始游戲的信息 else if(str.equals("StartGame")) { m_tetrics.start(); } //如果讀來的數據是對方暫停游戲的信息 else if(str.equals("PauseGame")) { m_tetrics.pause(); } //如果讀來的數據是對方中止游戲的信息 else if(str.equals("StopGame")) { m_tetrics.stop(); } //如果讀來的數據是對方要求改變游戲級別的信息 else if(str.startsWith("Level:")) { str=str.substring(6,str.length()); try{ m_tetrics.setPlayLevel(Integer.parseInt(str)); } catch(Exception e){} } //如果讀來的數據是對方對你談話的內容 else if(str.startsWith("Talk:")) { str=str.substring(5,str.length()); m_pStatus.appendStr("對手:"+str+"\n"); } //如果讀來的數據是對方的游戲已經結束的信息 else if(str.startsWith("GameOver:")) { str=str.substring(9,str.length()); if(m_tetrics.m_bGameInPlay) { m_tetrics.m_bGameInPlay=false; m_tetrics.stop(); sendStr("GameOver:"+m_tetrics.m_nTheScore); } try{ int nRivalScore=Integer.parseInt(str); new GameOverD(this,m_tetrics.m_nTheScore,nRivalScore); }catch(Exception e){e.printStackTrace();} } } /** * 用來在StatusBar里顯示現在的聯網狀況 */ public void showMessage(String str) { m_pStatus.appendStr(str+"\n"); } /** * 將信息發給對方 */ 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; } } private class MenuListener implements ActionListener { TFrame m_tFrame; public MenuListener(TFrame tFrame) { m_tFrame=tFrame; } public void actionPerformed(ActionEvent e) { //Invoked when an action occurs. String sCommand=e.getActionCommand(); if(sCommand.equals("開始游戲")) { //控制開始玩游戲的代碼加到這兒// System.out.println("開始游戲"); if(m_tFrame.m_nNetStatus==TFrame.CLIENT) { new WarningD(m_tFrame); return; } if(m_tFrame.m_nNetStatus==TFrame.SERVER) { m_tFrame.sendStr("StartGame"); m_tFrame.sendStr("Level:"+m_tFrame.m_tetrics.getPlayLevel()); } m_tetrics.start();// m_lStatus.setText("開始游戲"); } else if(sCommand.equals("結束游戲")) { //控制結束游戲的代碼加到這兒。 if(m_tFrame.m_nNetStatus==TFrame.CLIENT) { new WarningD(m_tFrame); return; } if(m_tFrame.m_nNetStatus==TFrame.SERVER)m_tFrame.sendStr("StopGame"); m_tetrics.stop();// m_lStatus.setText("結束游戲"); } else if(sCommand.equals("暫停游戲")) { //控制暫停游戲的代碼加到這兒。 if(m_tFrame.m_nNetStatus==TFrame.CLIENT) { new WarningD(m_tFrame); return; } if(m_tFrame.m_nNetStatus==TFrame.SERVER)m_tFrame.sendStr("PauseGame"); m_tetrics.pause();// m_lStatus.setText("暫停游戲"); } else if(sCommand.equals("關閉游戲")) { //控制關閉游戲的代碼加到這兒。 dispose();// m_lStatus.setText("關閉游戲"); } else if(sCommand.equals("設置級別")) { //控制設置級別的代碼加到這兒。 if(m_tFrame.m_nNetStatus==TFrame.CLIENT) { new WarningD(m_tFrame); return; } JDialog d=new JDialog(m_tFrame,"設置級別"); selectLevelP slp=new selectLevelP(m_tFrame,d); d.getContentPane().add(slp); d.setSize(252,126); d.setLocation(400,300);// System.out.println("ddddd"); d.show(); } else if(sCommand.equals("查看分數")) { //控制設置級別的代碼加到這兒。 JDialog d=new JDialog(m_tFrame,"分數報告-Top10"); ScoreReportP srp=new ScoreReportP(d); d.getContentPane().add(srp); d.setSize(643,300); d.setLocation(400,300); d.show(); } else if(sCommand.equals("等待對方連接")) { //做一個服務器,等待對方連接 if(m_tFrame.m_nNetStatus==TFrame.CLIENT) { new WarningD(m_tFrame); return; } m_tFrame.m_server=new MyServer(m_tFrame); System.out.println("開始監聽"); m_nNetStatus=SERVER; } else if(sCommand.equals("連接對方")) { //連接對方 JDialog d=new JDialog(m_tFrame,"連接對方"); d.getContentPane().add(new ConnectP(d,m_tFrame)); d.setSize(284,131); d.setLocation(400,300); d.show(); } else if(sCommand.equals("關于")) { JDialog d=new JDialog(m_tFrame,"關于"); d.getContentPane().add(new AboutP(d)); d.setSize(400,320); d.setLocation(400,300); d.show(); //控制顯示游戲的關于對話框的代碼加到這兒。 } } }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -