ServiceGUI

package com.wolf.server;


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Random;


import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;


import com.wolf.common.Constant;
import com.wolf.entity.MajiangButton;


public class ServiceGUI extends JFrame implements ActionListener
{
    
    /**
    * 注释内容
    */
    private static final long serialVersionUID = 1321412341234L;
    
    JPanel mainPanel = new JPanel();
    
    GridLayout gridLayout2 = new GridLayout();
    
    JPanel viewPanel = new JPanel();
    
    JPanel rightPanel = new JPanel();
    
    JPanel shanshanPanel = new JPanel();
    
    JPanel changanPanel = new JPanel();
    
    JPanel leileiPanel = new JPanel();
    
    JPanel ganggangPanel = new JPanel();
    
    JPanel majiangPanel = new JPanel();
    
    JPanel centerPanel = new JPanel();
    
    JPanel NPanel = new JPanel();
    
    JPanel WPanel = new JPanel();
    
    JPanel SPanel = new JPanel();
    
    JPanel EPanel = new JPanel();
    
    /**
     * 
     */
    JPanel NPanel1 = new JPanel();
    
    JPanel WPanel1 = new JPanel();
    
    JPanel SPanel1 = new JPanel();
    
    JPanel EPanel1 = new JPanel();
    
    JMenu file = new JMenu("文件");
    
    JMenuItem startitem = new JMenuItem("登录");
    
    JMenuItem exititem = new JMenuItem("退出");
    
    JMenuBar bar = new JMenuBar();
    
    private Icon icon = new ImageIcon("image/mamabeijing.JPG");
    
    private Icon icon2 = new ImageIcon("image/mamabeijing2.JPG");
    
    private Icon icon3 = new ImageIcon("image/mama3.JPG");
    
    private Icon icon4 = new ImageIcon("image/mama4.JPG");
    
    /**
     * 麻将list的排序规则
     */
    Comparator<? super MajiangButton> rule = new Comparator<MajiangButton>()
    {
        
        public int compare(MajiangButton button1, MajiangButton button2)
        {
            try
            {
                int value1 = Integer.valueOf(button1.getValue());
                int value2 = Integer.valueOf(button2.getValue());
                return value1 - value2;
            }
            catch (Exception e)
            {
                return button1.getValue().compareTo(button2.getValue());
            }
        }
        
    };
    
    /**
     * 装麻将的list
     */
    static ArrayList<MajiangButton> majiangList = MajiangService.getMajiang();
    
    /**
     *庄和闲的初始手牌List
     */
    ArrayList<MajiangButton> homeList = new ArrayList<MajiangButton>(14);
    
    ArrayList<MajiangButton> guest1List = new ArrayList<MajiangButton>(14);
    
    ArrayList<MajiangButton> guest2List = new ArrayList<MajiangButton>(14);
    
    ArrayList<MajiangButton> guest3List = new ArrayList<MajiangButton>(14);
    
    /**
     * 最后一张牌的位置
     */
    //private int lastMajiang = 0;
    
    /**
     * 当前牌牌号
     */
    private int nowMajiang = 0;
    
    private JButton fapai = new JButton("FAPAI");
    
    /** 
     * 初始化对象
     * 将牌洗好
     * @return void [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     */
    public void init()
    {
        Collections.shuffle(majiangList);
        setForeground(Color.black);
        setTitle("MNS Majiang v2.0");
        setBounds(10, 10, 500, 500);
        this.mainPanel.setLayout(new BorderLayout());
        this.mainPanel.setMinimumSize(new Dimension(200, 200));
        this.mainPanel.setPreferredSize(new Dimension(1200, 800));
        
        viewPanel.setLayout(new BorderLayout());
        //手牌显示区
        //北区
        //shanshanPanel = setJButton(shanshanPanel, Constant.MajiangType.MAJIANG2);
        //西区
        //changanPanel = setJButton(changanPanel, Constant.MajiangType.MAJIANG1);
        //南区
        //leileiPanel = setJButton(leileiPanel,Constant.MajiangType.MAJIANG2);
        shanshanPanel.setPreferredSize(new Dimension(1000, 200));
        changanPanel.setPreferredSize(new Dimension(200, 400));
        leileiPanel.setPreferredSize(new Dimension(1000, 200));
        ganggangPanel.setPreferredSize(new Dimension(200, 400));
        int dianshu = new Random().nextInt(12) + 1;
        dealMajiang(dianshu);
        
        //东区
        //ganggangPanel = setJButton(ganggangPanel, Constant.MajiangType.MAJIANG1);
        
        //中间摸牌区
        majiangPanel.setLayout(new BorderLayout());
        majiangPanel.setPreferredSize(new Dimension(500, 500));
        
        //北风区
        NPanel = setJButton(NPanel, Constant.MajiangType.MAJIANG3);
        //西风区
        WPanel = setJButton(WPanel, Constant.MajiangType.MAJIANG4);
        //南风区
        SPanel = setJButton(SPanel, Constant.MajiangType.MAJIANG3);
        //东风区
        EPanel = setJButton(EPanel, Constant.MajiangType.MAJIANG4);
        
        //出牌区
        majiangPanel.add(NPanel1, BorderLayout.NORTH);
        majiangPanel.add(WPanel1, BorderLayout.WEST);
        majiangPanel.add(SPanel1, BorderLayout.SOUTH);
        majiangPanel.add(EPanel1, BorderLayout.EAST);
        
        //摸牌区
        centerPanel.setLayout(new BorderLayout());
        centerPanel.setPreferredSize(new Dimension(500, 400));
        centerPanel.add(NPanel, BorderLayout.NORTH);
        centerPanel.add(WPanel, BorderLayout.WEST);
        centerPanel.add(SPanel, BorderLayout.SOUTH);
        centerPanel.add(EPanel, BorderLayout.EAST);
        centerPanel.add(majiangPanel, BorderLayout.CENTER);
        
        viewPanel.add(shanshanPanel, BorderLayout.NORTH);
        viewPanel.add(changanPanel, BorderLayout.WEST);
        viewPanel.add(leileiPanel, BorderLayout.SOUTH);
        viewPanel.add(ganggangPanel, BorderLayout.EAST);
        viewPanel.add(centerPanel, BorderLayout.CENTER);
        rightPanel.setLayout(new BorderLayout());
        //发牌按钮事件
        fapai.addActionListener(new ActionListener()
        {
            
            public void actionPerformed(ActionEvent e)
            {
                if (14 <= homeList.size())
                {
                    return;
                }
                MajiangButton nowmajiang = getNowMajiang();
                nowmajiang.setPreferredSize(new Dimension(70, 107));
                homeList.add(nowmajiang);
                leileiPanel.add(nowmajiang);
                leileiPanel.repaint();
            }
            
        });
        rightPanel.add(fapai, BorderLayout.CENTER);
        
        mainPanel.add(viewPanel, BorderLayout.CENTER);
        mainPanel.add(rightPanel, BorderLayout.EAST);
        file.add(startitem);
        file.add(exititem);
        bar.add(file);
        setJMenuBar(bar);
        
        getContentPane().add(this.mainPanel);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }
    
    /**
     * 抓麻将
     * @param dianshu [参数说明]
     * 
     * @return void [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     */
    private void dealMajiang(int dianshu)
    {
        if (8 < dianshu)
        {
            dianshu = dianshu - 8;
            
        }
        else if (4 < dianshu)
        {
            dianshu = dianshu - 4;
        }
        //开始抓牌的点数
        int homeNum = 18 * dianshu - 2 * dianshu;
        //lastMajiang = homeNum - 1;
        int guest1Num = homeNum + 4;
        int guest2Num = homeNum + 8;
        int guest3Num = homeNum + 12;
        
        //发牌
        for (int j = 0; j < 3; j++)
        {
            for (int i = 1; i < 5; i++)
            {
                //如果牌张超过136张,从头循环抓取
                if (136 <= homeNum)
                {
                    homeNum = homeNum - 136;
                }
                if (136 <= guest1Num)
                {
                    guest1Num = guest1Num - 136;
                }
                if (136 <= guest2Num)
                {
                    guest2Num = guest2Num - 136;
                }
                if (136 <= guest3Num)
                {
                    guest3Num = guest3Num - 136;
                }
                MajiangButton majiang_home = majiangList.get(homeNum);
                majiang_home.setPreferredSize(new Dimension(70, 107));
                majiang_home.addActionListener(this);
                majiang_home.setId(homeNum);
                homeList.add(majiang_home);
                
                MajiangButton majiang_guest1 = majiangList.get(guest1Num);
                majiang_guest1.setPreferredSize(new Dimension(80, 50));
                //majiang_guest1.addActionListener(this);
                guest1List.add(majiang_guest1);
                
                MajiangButton majiang_guest2 = majiangList.get(guest2Num);
                majiang_guest2.setPreferredSize(new Dimension(50, 80));
                guest2List.add(majiang_guest2);
                
                MajiangButton majiang_guest3 = majiangList.get(guest3Num);
                majiang_guest3.setPreferredSize(new Dimension(80, 50));
                guest3List.add(majiang_guest3);
                
                //第十三张字和庄家第十四张字
                if (4 == i && 2 == j)
                {
                    MajiangButton majiang_home_13 = majiangList.get(homeNum + 13);
                    majiang_home_13.setPreferredSize(new Dimension(70, 107));
                    majiang_home.addActionListener(this);
                    majiang_home.setId(homeNum + 13);
                    homeList.add(majiang_home_13);
                    
                    MajiangButton majiang_guest1_13 = majiangList.get(guest1Num + 10);
                    majiang_guest1_13.setPreferredSize(new Dimension(80, 50));
                    guest1List.add(majiang_guest1_13);
                    
                    MajiangButton majiang_guest2_13 = majiangList.get(guest2Num + 7);
                    majiang_guest2_13.setPreferredSize(new Dimension(50, 80));
                    guest2List.add(majiang_guest2_13);
                    
                    MajiangButton majiang_guest3_13 = majiangList.get(guest3Num + 4);
                    majiang_guest3_13.setPreferredSize(new Dimension(80, 50));
                    guest3List.add(majiang_guest3_13);
                    
                    //庄家的第十四张字
                    MajiangButton majiang_home_14 = majiangList.get(homeNum + 17);
                    majiang_home_14.setPreferredSize(new Dimension(70, 107));
                    majiang_home.addActionListener(this);
                    majiang_home.setId(homeNum + 17);
                    homeList.add(majiang_home_14);
                    nowMajiang = homeNum + 18;
                    
                }
                homeNum = homeNum + 1;
                guest1Num = guest1Num + 1;
                guest2Num = guest2Num + 1;
                guest3Num = guest3Num + 1;
            }
            homeNum = homeNum + 13;
            guest1Num = guest1Num + 13;
            guest2Num = guest2Num + 13;
            guest3Num = guest3Num + 13;
            
        }
        
        Collections.sort(homeList, rule);
        Collections.sort(guest1List, rule);
        Collections.sort(guest2List, rule);
        Collections.sort(guest3List, rule);
        for (int i = 0; i < 13; i++)
        {
            MajiangButton homeMajiang = homeList.get(i);
            
            MajiangButton guest1Majiang = guest1List.get(i);
            //麻将不可见
            guest1Majiang.setIcon(Constant.MAJIANGBEIJING);
            guest1Majiang.addActionListener( new NewActionListener());
            MajiangButton guest2Majiang = guest2List.get(i);
            //麻将不可见
            guest2Majiang.setIcon(Constant.MAJIANGBEIJING);
            guest2Majiang.addActionListener( new NewActionListener());
            
            MajiangButton guest3Majiang = guest3List.get(i);
            //麻将不可见
            guest3Majiang.setIcon(Constant.MAJIANGBEIJING);
            guest3Majiang.addActionListener( new NewActionListener());
            
            homeMajiang.addActionListener(this);
            leileiPanel.add(homeMajiang);
            ganggangPanel.add(guest1Majiang);
            shanshanPanel.add(guest2Majiang);
            changanPanel.add(guest3Majiang);
        }
        //庄家第十四张字显示
        MajiangButton homeMajiang = homeList.get(13);
        homeMajiang.addActionListener(this);
        leileiPanel.add(homeMajiang);
    }
    
    /**
     * 传入一个JPanel对象和类型,返回所需要的一些设置。
     * @param panel
     * @param type
     * @return [参数说明]
     * 
     * @return JPanel [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     */
    private JPanel setJButton(JPanel panel, char type)
    {
        JPanel panell = new JPanel();
        panel.setLayout(new FlowLayout(1, 1, 1));
        switch (type)
        {
            case '1':
            {
                panel.setPreferredSize(new Dimension(80, 400));
                for (int i = 0; i < 13; i++)
                {
                    JButton majiang = new JButton();
                    majiang.setIcon(icon2);
                    majiang.setPreferredSize(new Dimension(44, 31));
                    panel.add(majiang);
                }
            }
                break;
            case '2':
            {
                panel.setPreferredSize(new Dimension(800, 70));
                for (int i = 0; i < 13; i++)
                {
                    JButton majiang = new JButton();
                    majiang.setIcon(icon);
                    majiang.setPreferredSize(new Dimension(31, 44));
                    panel.add(majiang);
                }
            }
                break;
            case '3':
            {
                panel.setPreferredSize(new Dimension(500, 50));
                for (int i = 0; i < 17; i++)
                {
                    JButton majiang = new JButton();
                    majiang.setIcon(icon3);
                    majiang.setPreferredSize(new Dimension(20, 30));
                    panel.add(majiang);
                }
            }
                break;
            case '4':
            {
                panel.setPreferredSize(new Dimension(50, 300));
                for (int i = 0; i < 17; i++)
                {
                    JButton majiang = new JButton();
                    majiang.setIcon(icon4);
                    majiang.setPreferredSize(new Dimension(28, 17));
                    panel.add(majiang);
                }
            }
                break;
            default:
            {
                panel.setPreferredSize(new Dimension(800, 70));
                for (int i = 0; i < 13; i++)
                {
                    JButton majiang = new JButton();
                    majiang.setIcon(icon);
                    majiang.setPreferredSize(new Dimension(31, 44));
                    panel.add(majiang);
                }
            }
                break;
        }
        panell = panel;
        return panell;
    }
    
    /**
     * 按钮的监听方法
     * @param e
     */
    public void actionPerformed(ActionEvent e)
    {
        if (14 != homeList.size())
        {
            System.out.println("再出牌你就小相公了!!!");
            return;
        }
        MajiangButton majiang = (MajiangButton) e.getSource();
        System.out.println("麻将牌数:"+homeList.size());
        System.out.println("麻将是:"+majiang.getValue());
        
        for (int i = 0; i < homeList.size(); i++)
        {
            MajiangButton majiangButton = homeList.get(i);
            if (majiang.getId() == majiangButton.getId())
            {
                homeList.remove(i);
                majiangButton.addActionListener(new NewActionListener());
                leileiPanel.remove(majiangButton);
                SPanel1.add(majiangButton);
                break;
            }
        }
        leileiPanel.removeAll();
        Collections.sort(homeList, rule);
        for (MajiangButton majiangButton : homeList)
        {
            leileiPanel.add(majiangButton);
        }
        leileiPanel.repaint();
        SPanel1.repaint();
        xianOutPai(ganggangPanel, guest1List, EPanel1, 1);
        xianOutPai(shanshanPanel, guest2List, NPanel1, 2);
        xianOutPai(changanPanel, guest3List, WPanel1, 1);
        
        /*//庄家摸牌
        MajiangButton nowmajiang = getNowMajiang();
        homeList.add(nowmajiang);
        leileiPanel.add(nowmajiang);
        leileiPanel.repaint();*/
    }
    
    /**
     * 三个电脑玩家出牌
     * @param panel
     * @param list
     * @param panel1 [参数说明]
     * 
     * @return void [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     */
    private void xianOutPai(JPanel panel, ArrayList<MajiangButton> list,
            JPanel panel1, int type)
    {
        MajiangButton nowmajiang = null;
        nowmajiang = getNowMajiang();
        switch (type)
        {
            case 1:
            {
                nowmajiang.setPreferredSize(new Dimension(80, 50));
                break;
            }
                
            case 2:
            {
                nowmajiang.setPreferredSize(new Dimension(50, 80));
                break;
            }
                
            default:
            {
                nowmajiang.setPreferredSize(new Dimension(80, 50));
                break;
            }
        }
        nowmajiang.setIcon(Constant.MAJIANGBEIJING);
        nowmajiang.addActionListener(new NewActionListener());
        list.add(nowmajiang);
        Collections.sort(list, rule);
        
        MajiangButton outmajiang = MajiangService.outMajiang(list);
        panel.removeAll();
        
        panel1.add(outmajiang);
        Collections.sort(list, rule);
        for (MajiangButton majiangButton2 : list)
        {
            panel.add(majiangButton2);
        }
        panel.repaint();
        panel1.repaint();
    }
    
    /**
     * 拿到当前麻将
     * @return [参数说明]
     * 
     * @return MajiangButton [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     */
    private MajiangButton getNowMajiang()
    {
        nowMajiang++;
        if (136 <= nowMajiang)
        {
            nowMajiang = nowMajiang - 136;
        }
        MajiangButton nowmajiang = majiangList.get(nowMajiang);
        nowmajiang.addActionListener(this);
        nowmajiang.setId(nowMajiang);
        return nowmajiang;
    }
    
    class NewActionListener implements ActionListener
    {


        public void actionPerformed(ActionEvent e)
        {
                               
        }
        
    }
    
    /**
     * 启动游戏main方法
     * @param args [参数说明]
     * 
     * @return void [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     */
    public static void main(String[] args)
    {
        ServiceGUI Servicegui = new ServiceGUI();
        Servicegui.init();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值