`
yongjian1092
  • 浏览: 40235 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

基于java平台设计--游戏大厅

 
阅读更多
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


import java.io.*;
import java.net.*;


public class Second
{
	public static JFrame jf2 = new JFrame();
	public static JFrame jf3;
	
	private JTabbedPane jtp2 = new JTabbedPane();             //创建标签面板
	private JTabbedPane jtp3 = new JTabbedPane();
	
	private JPanel jp1 = new JPanel();
	private JPanel jp11= new JPanel();
	private JPanel jp112 = new JPanel();
	private JPanel jp12 = new JPanel();
	private JPanel jp2 = new JPanel();	
	private JPanel jp22 = new JPanel();
	
	private JButton jb1 = new JButton();
	private JButton jb2 = new JButton();
	private JButton lc[] = new JButton[10];
	private JButton rc[] = new JButton[10];
	
	private JLabel jl22 = new JLabel();
	private JLabel jl23 = new JLabel();
	private JLabel lcn[] = new JLabel[10];                 //左边桌子名字
	private JLabel rcn[] = new JLabel[10];                 //右边桌子名字
	private JLabel desk[] = new JLabel[10];
	private JLabel jl111 = new JLabel("<< 象棋游戏  >>");
	private JLabel jl21 = new JLabel(new ImageIcon("./res/img/boy2.gif"));	
	
	private JTextField name = new JTextField();
	private JTextArea jta1 = new JTextArea(50,11);                
	private ImageIcon headicon = new ImageIcon();
	
	private int lnum = 0;
	private int rnum = 0;
	
	private DrawQiPan chessboard = new DrawQiPan();
	private Third th;
	public Socket s = new Socket();
	public static DataInputStream dis;
	public static DataOutputStream dos;


	
	public Second(JTextField name, JFrame jf2, ImageIcon headicon)
	{
		this.name = name;                                               //继承上一届面用户图片
		this.jf2 = jf2;
		this.headicon = headicon;                                      //继承上一届面用户图片
	}
	
	public void connect()                                                    //连接服务器
	{
		try
		{
			s = new Socket("10.0.162.52",9978);
			dos = new DataOutputStream(s.getOutputStream());                 //获得服务器的输出流即能写信息给服务器       
			dis = new DataInputStream(s.getInputStream());                   //获得服务器的输入流即能读取来自服务器的信息
			dos.writeUTF(name.getText());                                    //将用户的名称写入客户端
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
	
	public void createThread()                                        //线程处理,主要用于接收信息
	{
		Client player = new Client(this);                             
		player.start();                                               //开始线程
	}
	
	public JSplitPane createPane()                                             //第二个界面编辑
	{
		J_Action a = new J_Action();
		JSplitPane mainSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);    //平衡分割  
		JSplitPane rightSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);    //竖直分割
		
		jp112.setLayout(new FlowLayout());                              //流式布局
		jb1 = new JButton("加入");        
		jb2 = new JButton("退出");
		jb1.addActionListener(a);                                        //加入和退出设置监听器
		jb2.addActionListener(a);
		jp112.add(jb1);
		jp112.add(jb2);
		jp11.setLayout(new BorderLayout());                                      //默认布局
		jp11.add(jl111, "West");
		jp11.add(jp112, "East");
		
		jp12.setLayout(new GridLayout(5,2));                           //整个座位面板网格式布局5行2列
		int count = 1;
		for(int i = 0; i < 10; i++ )                                    
		{
			lcn[i] = new JLabel(name.getText());
			lcn[i].setVisible(false);
			lc[i] = new JButton(new ImageIcon("./res/img/noone.gif"));
			lc[i].setBackground(new Color(153,153,153));
			lc[i].setActionCommand(String.valueOf(i));
			lc[i].addActionListener(a);
			
			JPanel jp121 = new JPanel();
			jp121.setLayout(new GridLayout(2,1));
			jp121.setBackground(new Color(153,153,153));
			jp121.add(lc[i]);                                             //左边桌子
			jp121.add(lcn[i]);                                            //椅子下面的人物名字
			
			rcn[i] = new JLabel(name.getText());
			rcn[i].setVisible(false);
			rc[i] = new JButton(new ImageIcon("./res/img/noone.gif"));
			rc[i].setBackground(new Color(153,153,153));
			rc[i].setActionCommand(String.valueOf(i + 10));
			rc[i].addActionListener(a);
			
			JPanel jp122 = new JPanel();
			jp122.setLayout(new GridLayout(2,1));
			jp122.setBackground(new Color(153,153,153));
			jp122.add(rc[i]);
			jp122.add(rcn[i]);
			
			desk[i]= new JLabel(new ImageIcon("./res/img/xqnoone.gif"));
			JLabel deskNum = new JLabel( "      -" + count + "-      ");
			
			JPanel jp123 = new JPanel();
			jp123.setLayout(new GridLayout(2,1));
			jp123.add(desk[i]);
			jp123.add(deskNum);
			jp123.setBackground(new Color(153,153,153));


			JPanel jpdesk = new JPanel();
			jpdesk.add(jp121);
			jpdesk.add(jp123);
			jpdesk.add(jp122);
			jpdesk.setBackground(new Color(153,153,153));
			jp12.add(jpdesk);
			count++;
		}
		jp1.setLayout(new BoxLayout(jp1, BoxLayout.Y_AXIS));                  //合式布局
		jp1.add(jp11);
		jp1.add(jp12);
		
		jl22 = new JLabel(headicon);                                           //将人物图标和名字添加进面板
		jl23 = new JLabel(name.getText());


		jp22.add(jl22);
		jp22.add(jl23);
		
		jp2.add(jl21,BorderLayout.NORTH);
		jp2.add(jp22,BorderLayout.SOUTH);
		jtp2.addTab("个人信息",new ImageIcon("./res/img/star.gif"),jp2,"个人信息");
		
		JScrollPane jsp = new JScrollPane(jta1);
		jtp3.addTab("服务器信息", null, jsp, "服务器信息");
		
		rightSplitPane.setBottomComponent(jtp3);
		rightSplitPane.setTopComponent(jtp2);
		rightSplitPane.setDividerLocation(310);                                //分割面板
		rightSplitPane.setDividerSize(5);
		
		mainSplitPane.setRightComponent(rightSplitPane);
		mainSplitPane.setLeftComponent(jp1);
		mainSplitPane.setDividerLocation(450);
		mainSplitPane.setDividerSize(5);
		
		return mainSplitPane;	
	}


	class J_Action implements ActionListener                                //第二个界面的事件响应
	{
		public void actionPerformed(ActionEvent e) 
		{
			JButton b =(JButton)e.getSource();
			if(b == jb1)
			{
				String iconstring = headicon.toString();			
				String desknum = String.valueOf(1);
				try
				{
					dos.writeUTF("sit");                                  
					dos.writeUTF(desknum);            
					dos.writeUTF(iconstring);
				}
				catch(Exception ee)
				{
					ee.printStackTrace();
				}
			}
			else if(b == jb2)
			{
				try
				{
					dos.writeUTF("exit");
					System.exit(0);
				}
				catch(Exception ee)
				{
					ee.printStackTrace();
			    }
			}
			else
			{
				String s = e.getActionCommand();
				int num = Integer.parseInt(s);
				String iconstring = headicon.toString();			
				String desknum = String.valueOf(num + 1);
				try
				{
					dos.writeUTF("sit");
					dos.writeUTF(desknum);
					dos.writeUTF(iconstring);
				}
				catch(Exception ee)
				{
					ee.printStackTrace();
				}
			} 
		}
	}


	public DataInputStream getDataInputStream()
	{
		return dis;
	}
	
	public JTextArea getTextArea()
	{
		return jta1;
	}


	class Client extends Thread
	{
		private Second client;
		public Client(Second client)
		{
			this.client = client;
		}
		
		public void run()
		{
			DataInputStream dis = client.getDataInputStream();
			try{
				while(true){
					String info = dis.readUTF();
					if(info.equals("comein"))
					{
						String desknum = dis.readUTF();
						int num = Integer.parseInt(desknum);
						for(int i = 0; i < num; ++i)
						{			
							try{
							String DeskNum = dis.readUTF();
							String ClientName = dis.readUTF();
							String IconString = dis.readUTF();
							int Num = Integer.parseInt(DeskNum);
							if (Num >= 11)
							{
								rc[Num-11].setIcon(new ImageIcon(IconString));
								rcn[Num-11].setText(ClientName);
								rcn[Num-11].setVisible(true);	
							}
							else
							{
								lc[Num-1].setIcon(new ImageIcon(IconString));
								lcn[Num-1].setText(ClientName);
								lcn[Num-1].setVisible(true);
							}
							
							}catch(Exception e){
								e.printStackTrace();
							}
						}
						String ServerInfo = dis.readUTF();
						client.getTextArea().append(ServerInfo+"\n");					
					}
					else if (info.equals("sit"))
					{						
						try{
							String desknum = dis.readUTF();
							String name = dis.readUTF();
							String iconstring = dis.readUTF();			
							int num = Integer.parseInt(desknum);
		
							for(int i=0;i<10;i++)
							{
								if(lc[i].getIcon().toString().equals(iconstring)&&lcn[i].getText().equals(name))
								{
									lc[i].setIcon(new ImageIcon("./res/img/noone.gif"));
									lcn[i].setVisible(false);						 
								}
								if(rc[i].getIcon().toString().equals(iconstring)&&rcn[i].getText().equals(name))
								{
									rc[i].setIcon(new ImageIcon("./res/img/noone.gif"));
									rcn[i].setVisible(false);
								}													
							}
							
							if (num<11)
							{
								lc[num-1].setIcon(new ImageIcon(iconstring));
								lcn[num-1].setText(name);
								lcn[num-1].setVisible(true);
								lnum = num;
							}
							else
							{
								rc[num-11].setIcon(new ImageIcon(iconstring));
								rcn[num-11].setText(name);
								rcn[num-11].setVisible(true);
								rnum = num-10;
							}
							
						}
						catch(Exception e)
						{
							e.printStackTrace();
						}
						 
					}
					else if (info.equals("exit"))
					{
						try
						{
		                	int num = Integer.parseInt(dis.readUTF());
		                	if (num<11)
	               		{
		                		lc[num - 1].setIcon(new ImageIcon("./res/img/noone.gif"));
		               		lcn[num - 1].setVisible(false);
		               	}
		               	else
		               	{
		               		num = num-10;
             		       	rc[num - 1].setIcon(new ImageIcon("./res/img/noone.gif"));
             		       	rcn[num - 1].setVisible(false);	
		                	}	
		               }
						catch(Exception e)
		               {
		                   e.printStackTrace();
	                   }							
					}
					else if(info.equals("play"))
					{
						try
						{
							String name2 = dis.readUTF();
							String iconstring2 = dis.readUTF();
							Third.headicon2 = iconstring2;
							Third.name2 = name2;
							Third.talk.append(Third.name2+"进入房间"+"\n");
							chessboard.dispaySelect = 1;
							jf3 = new JFrame("象棋游戏");
							th = new Third(th,jf3,chessboard,name,jl22);
							JSplitPane jsp = th.createPane();
							JTabbedPane jtp = new JTabbedPane();
							jtp.addTab("象棋游戏", null, jsp, "象棋游戏");
							jf3.setContentPane(jtp);
							jf3.setLocationRelativeTo(null);
							jf3.setSize(800,700);
							jf3.setVisible(true);
						}
						catch(Exception e)
						{
							e.printStackTrace();
						}
					}
					else if(info.equals("Move"))//当对手有移动棋子时
					{
						int H_YS = dis.readInt();//得到对手移动的坐标
						int H_XS = dis.readInt();//得到对手移动的坐标
						int B_YS = dis.readInt();//得到对手移动的坐标
						int B_XS = dis.readInt();//得到对手移动的坐标
						boolean Rule = dis.readBoolean();
						
						H_YS = 9 - H_YS;//转换成对方的移动
						H_XS = 8 - H_XS;
						B_YS = 9 - B_YS;
						B_XS = 8 - B_XS;
						chessboard.MoveMethod(H_YS, H_XS, B_YS, B_XS, Rule);//运用下一个类方法重画棋盘
					}
					else if(info.equals("Chat"))
					{
						String Chat = dis.readUTF();
						Third.talk.append("对手:"+Chat+"\n");
					}
					else if(info.equals("Start"))
					{
						try
						{
							JOptionPane.showMessageDialog(null,"游戏开始", "开始游戏", JOptionPane.INFORMATION_MESSAGE);
						}
						catch(Exception ee)
						{
							ee.printStackTrace();
						}
						chessboard.HaveStart = true;
						chessboard.repaint();
					}
					else
					{
						client.getTextArea().append(info+"\n");
					}					
				}
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
	}
}

















 
分享到:
评论

相关推荐

    java程序设计-基于Java 构建的棋牌游戏框架,支持单台游戏服务器一到两千人同时在线

    Java 棋牌游戏框架 WG棋牌包网项目, java服务器.支持单台游戏服务器一到两千人同时在线. 包含: 1.游戏基础框架 2.网关,路由通信模块 3.游戏机器人框架 4.大厅,房间,桌子流程 5.完善的统一棋牌控制库存框架,支持游戏...

    精选_基于JAVA实现的游戏大厅_源码打包

    【标题】"精选_基于JAVA实现的游戏大厅_源码打包" 涵盖了Java编程技术在游戏开发领域的应用,特别是构建游戏大厅的功能。Java是一种广泛使用的面向对象的编程语言,以其跨平台、性能稳定、安全性强等特点,在游戏...

    java开发游戏平台

    Java开发游戏平台是一种基于Java编程语言构建的游戏生态系统,它涵盖了服务器端(server)和客户端(client)两个核心组成部分。在本项目中,我们看到的是一个类似腾讯QQ游戏平台的实现,该平台允许用户进行在线对战...

    基于Java web的多功能游戏大厅系统的开发与实现

    "基于Java web的多功能游戏大厅系统的开发与实现" 本文讨论的是基于Java web的多功能游戏大厅系统的开发与实现。该系统采用Java面向对象编程语言,使用Spring MVC、Spring、Mybatis框架,集成了用户管理、游戏管理...

    基于Java的黑白棋游戏的设计与实现

    ### 基于Java的黑白棋游戏的设计与实现——关键技术及过程详解 #### 一、绪论 ##### 1.1 黑白棋简介 黑白棋,亦称苹果棋或奥赛罗棋,是一款历史悠久的经典策略游戏。其采用8×8的棋盘,玩家各执一方(通常是黑色和...

    基于Java的SOSO移动大厅项目(功能全部实现了)

    Java SOSO移动大厅是一个基于Java技术开发的综合性应用程序,旨在为用户提供便捷、高效的移动在线服务。这个项目充分展示了Java在构建大型、分布式系统中的强大能力,尤其在处理网络通信、多线程、数据持久化等方面...

    用java做的一个基于C/S结构的简易五子棋游戏大厅

    这是一个基于Java实现的C/S(Client/Server)结构的简易五子棋游戏大厅项目。C/S结构是一种典型的网络应用架构,其中客户端(Client)负责与用户交互,而服务器端(Server)处理请求并提供服务。在这个项目中,分为...

    java做的 QQ游戏大厅的 对对碰

    java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心...

    基于Java实现的棋牌游戏框架

    【作品名称】:基于Java实现的棋牌游戏框架 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 包含: 1.游戏基础框架 2...

    Java-Uno:Java Gui Uno游戏

    Java-Uno是一款基于Java开发的GUI游戏,实现了经典的Uno牌玩法。Uno是源自美国的一款流行桌面游戏,玩家通过匹配颜色或数字来出牌,目标是将手中的牌全部出完。在Java-Uno项目中,开发者利用Java的图形用户界面(GUI...

    java游戏大厅

    在Java游戏中,构建一个游戏大厅是一项复杂而有趣的工作,它涉及到多方面的编程技术和设计原则。以"俄罗斯方块"为例,这是一个经典的休闲游戏,它的面向对象设计是理解整个游戏大厅架构的关键。首先,我们来看看面向...

    java做的 QQ游戏大厅的 对对碰外挂.zip

    在实际的游戏开发中,Java不仅可用于创建独立的桌面游戏,还可以用于开发移动游戏,尤其是Android平台,因为Android系统是基于Java的。 虽然没有提供具体的压缩包子文件的文件名称列表,但通常一个Java项目可能包含...

    基于 java vue3+springBoot实现的贪吃蛇游戏系统 课程设计

    2. 游戏大厅:展示在线游戏房间,允许用户创建或加入游戏。 3. 游戏房间:每个房间内,玩家进行实时的贪吃蛇对战,游戏状态实时更新。 4. 游戏逻辑:包含蛇的移动规则、食物生成、碰撞检测等。 5. 数据库模型:设计...

    游戏大厅可完成三人斗地主双人五子棋对战大厅内聊天等功能。

    本文将深入探讨基于Java开发的游戏大厅系统,它具备了三人斗地主和双人五子棋等多种对战功能,以及内置的聊天系统。通过分析标题和描述,我们可以提炼出以下关键知识点: 1. **Java开发**:Java是一种广泛应用于...

    Java版对对碰游戏

    在本项目中,我们讨论的是一个基于Java编程语言实现的对对碰游戏。对对碰游戏是一种简单且受欢迎的休闲益智游戏,玩家需要通过匹配相同图案的方块来消除它们,直至完成所有可能的匹配。这个Java版的对对碰游戏具有...

    Java基于Socket网络编程的五子棋对战平台

    Java基于Socket网络编程的五子棋对战平台是一款利用Java编程语言实现的网络应用程序,它允许用户通过互联网进行实时的五子棋对战。在这个项目中,Socket编程扮演了核心角色,它使得客户端和服务器之间能够进行双向...

    基于Java的网络游戏的设计与实现

    输入密码后点击登录进入游戏大厅,退出则关闭程序。 4. 进入大厅后,用户可以选择自己的角色,蓝队或者红队,并可以进行聊天对话。点击准备时将进入准备状态。当所有用户都进入准备状态,游戏自动进入对战场地进行...

    象棋游戏开发java

    接着,`游戏大厅界面`是玩家选择和匹配对手的地方。这里需要实现动态更新的游戏列表,展示在线玩家和正在进行的比赛。可以使用Java集合框架(如ArrayList或LinkedList)来管理游戏房间,并通过多线程技术保证数据...

    仿QQ游戏大厅的联机五子棋

    【标题】"仿QQ游戏大厅的联机五子棋"是一个基于C/S(客户端/服务器)架构的在线游戏项目,其目标是复制QQ游戏大厅的五子棋对战功能,让玩家可以实现实时的多人在线对弈。这个项目的核心在于运用了Java编程语言的关键...

    基于安卓的在线数独对战游戏平台的设计与实现+毕业论文

    2. 游戏大厅:展示在线用户,提供创建房间、加入房间、搜索房间等操作。 3. 对战房间:玩家间进行一对一的数独对决,实时同步双方的游戏进度。 4. 数独生成器:使用算法生成不同难度级别的数独题目,保证游戏的多样...

Global site tag (gtag.js) - Google Analytics