java斗地主游戏项目源码

部分代码如下
Main.java

package com;
import java.awt.Color;
import java.awt.Container;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class Main extends JFrame implements ActionListener {
        public Container container = null;// 定义容器
        JMenuItem start, exit, about;// 定义菜单按钮
        JButton landlord[]=new JButton[2];//抢地主按钮
        JButton publishCard[]=new JButton[2];//出牌按钮
        int dizhuFlag;//地主标志
        int turn;
        JLabel dizhu; //地主图标
        List<Card> currentList[] =new ArrayList[3]; //  当前的出牌
        List<Card> playerList[] = new ArrayList[3]; // 定义3个玩家表
        List<Card> lordList;//地主牌
        Card card[] = new Card[56]; // 定义54张牌
        JTextField time[]=new JTextField[3]; //计时器
        Time t; //定时器(线程)
        boolean nextPlayer=false; //转换角色
        public Main(){

                Init();// 初始化
                SetMenu();// 创建菜单 按钮(抢地主,发牌,计时器)
                this.setVisible(true);
                CardInit();//发牌
                getLord(); //发完牌开始抢地主
                time[1].setVisible(true);
                //线程安全性,把非主线程的UI控制放到里面
                SwingUtilities.invokeLater(new NewTimer(this,10));

        }
        // 抢地主
        public void getLord(){
                //System.out.println(CardType.c0.toString());
                for(int i=0;i<2;i++)
                        landlord[i].setVisible(true);
        }
        //初始化牌
        // 发牌洗牌
        public void CardInit() {

                int count = 1;
                //初始化牌
                for (int i = 1; i <= 5; i++) {
                        for (int j = 1; j <= 13; j++) {
                                if ((i == 5) && (j > 2))
                                        break;
                                else {
                                        card[count] = new Card(this, i + "-" + j, false);
                                        card[count].setLocation(350, 50);
                                        container.add(card[count]);
                                        count++;
                                }
                        }
                }
                //打乱顺序
                for(int i=0;i<100;i++){
                        Random random=new Random();
                        int a=random.nextInt(54)+1;
                        int b=random.nextInt(54)+1;
                        Card k=card[a];
                        card[a]=card[b];
                        card[b]=k;
                }
                //开始发牌
                for(int i=0;i<3;i++)
                        playerList[i]=new ArrayList<Card>(); //玩家牌
                lordList=new ArrayList<Card>();//地主牌三张
                int t=0;
                for(int i=1;i<=54;i++)
                {
                        if(i>=52)//地主牌
                        {
                                Common.move(card[i], card[i].getLocation(),new Point(300+(i-52)*80,10));
                                lordList.add(card[i]);
                                continue;
                        }
                        switch ((t++)%3) {
                        case 0:
                                //左边玩家
                                Common.move(card[i], card[i].getLocation(),new Point(50,60+i*5));
                                playerList[0].add(card[i]);
                                break;
                        case 1:
                                //我
                                Common.move(card[i], card[i].getLocation(),new Point(180+i*7,450));
                                playerList[1].add(card[i]);
                                card[i].turnFront(); //显示正面
                                break;
                        case 2:
                                //右边玩家
                                Common.move(card[i], card[i].getLocation(),new Point(700,60+i*5));
                                playerList[2].add(card[i]);
                                break;
                        }
                        //card[i].turnFront(); //显示正面
                        container.setComponentZOrder(card[i], 0);
                }
                //发完牌排序,从大到小
                for(int i=0;i<3;i++)
                {
                        Common.order(playerList[i]);
                        Common.rePosition(this,playerList[i],i);//重新定位
                }
                dizhu=new JLabel(new ImageIcon("images/dizhu.gif"));
                dizhu.setVisible(false);
                dizhu.setSize(40, 40);
                container.add(dizhu);
        }

        // 初始化窗体
        public void Init() {

                this.setTitle("java单机斗地主");
                this.setSize(830, 620);
                setResizable(false);
                setLocationRelativeTo(getOwner()); // 屏幕居中
                container = this.getContentPane();
                container.setLayout(null);
                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                container.setBackground(new Color(0, 112, 26)); // 背景为绿色

        }

        // 创建菜单 功能按钮
        public void SetMenu() {
                JMenuBar jMenuBar = new JMenuBar();
                JMenu game = new JMenu("游戏");
                JMenu help = new JMenu("帮助");

                start = new JMenuItem("新游戏");
                exit = new JMenuItem("退出");
                about = new JMenuItem("关于");

                start.addActionListener(this);
                exit.addActionListener(this);
                about.addActionListener(this);

                game.add(start);
                game.add(exit);
                help.add(about);

                jMenuBar.add(game);
                jMenuBar.add(help);
                this.setJMenuBar(jMenuBar);

                landlord[0]=new JButton("抢地主");
                landlord[1]=new JButton("不     抢");
                publishCard[0]= new JButton("出牌");
                publishCard[1]= new JButton("不要");
                for(int i=0;i<2;i++)
                {
                        publishCard[i].setBounds(320+i*100, 400, 60, 20);
                        landlord[i].setBounds(320+i*100, 400,75,20);
                        container.add(landlord[i]);
                        landlord[i].addActionListener(this);
                        landlord[i].setVisible(false);
                        container.add(publishCard[i]);
                        publishCard[i].setVisible(false);
                        publishCard[i].addActionListener(this);
                }
                for(int i=0;i<3;i++){
                        time[i]=new JTextField("倒计时:");
                        time[i].setVisible(false);
                        container.add(time[i]);
                }
                time[0].setBounds(140, 230, 60, 20);
                time[1].setBounds(374, 360, 60, 20);
                time[2].setBounds(620, 230, 60, 20);

                for(int i=0;i<3;i++)
                {
                        currentList[i]=new ArrayList<Card>();
                }

        }

        @Override
        public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                if (e.getSource() == exit) {
                        this.dispose();
                }
                if (e.getSource() == about) {
                        JOptionPane.showMessageDialog(this, "哈哈");
                }
                if (e.getSource() == start) {
                        // this.restart();
                }
                if(e.getSource()==landlord[0])
                {
                        time[1].setText("抢地主");
                        t.isRun=false; //时钟终结
                }
                if(e.getSource()==landlord[1])
                {
                        time[1].setText("不抢");
                        t.isRun=false; //时钟终结
                }
                //如果是不要
                if(e.getSource()==publishCard[1])
                {
                        this.nextPlayer=true;
                        currentList[1].clear();
                        time[1].setText("不要");
                }
                //如果是出牌按钮
                if(e.getSource()==publishCard[0])
                {
                        List<Card> c=new ArrayList<Card>();
                        //点选出牌
                        for(int i=0;i<playerList[1].size();i++)
                        {
                                Card card=playerList[1].get(i);
                                if(card.clicked)
                                {
                                        c.add(card);
                                }
                        }
                        int flag=0;

                        //如果我主动出牌
                        if(time[0].getText().equals("不要")&&time[2].getText().equals("不要"))
                        {

                                if(Common.jugdeType(c)!=CardType.c0)
                                        flag=1;//表示可以出牌
                        }//如果我跟牌
                        else{

                                flag=Common.checkCards(c,currentList);
                        }
                        //判断是否符合出牌
                        if(flag==1)
                        {
                                currentList[1]=c;
                                playerList[1].removeAll(currentList[1]);//移除走的牌
                                //定位出牌
                                Point point=new Point();
                                point.x=(770/2)-(currentList[1].size()+1)*15/2;;
                                point.y=300;
                                for(int i=0,len=currentList[1].size();i<len;i++)
                                {
                                        Card card=currentList[1].get(i);
                                        Common.move(card, card.getLocation(), point);
                                        point.x+=15;
                                }
                                //抽完牌后重新整理牌
                                Common.rePosition(this, playerList[1], 1);
                                time[1].setVisible(false);
                                this.nextPlayer=true;
                        }

                }
        }

        public static void main(String args[]) {

                        new Main();

        }

}
class NewTimer implements Runnable{

        Main main;
        int i;
        public NewTimer(Main m,int i){
                this.main=m;
                this.i=i;
        }
        @Override
        public void run() {
                // TODO Auto-generated method stub
                main.t=new Time(main,10);//从10开始倒计时
                main.t.start();
        }

}

效果图
<ignore_js_op>

<ignore_js_op>

<ignore_js_op>

<ignore_js_op>

详细说明:http://java.662p.com/thread-1542-1-1.html

时间: 2024-11-08 23:47:10

java斗地主游戏项目源码的相关文章

java企业站源码 响应式 兼容手机平板PC 主流SSM 框架 freemaker 静态引擎

java 企业网站源码 前后台都有 静态模版引擎, 代码生成器大大提高开发效率 前台: 支持三套模版, 可以在后台切换 点击:获取地址   QQ 313596790 官网 http://www.fhadmin.org/ 系统介绍: 1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的html,所以访问速度快,轻便,对服务器负担小 3.网站前端采用主流的响应式布局,同一页面同时支持PC.平板.手机(三合一)浏览器访问 4

java 企业网站源码 后台 springmvc SSM 前台 静态化 代码生成器

java 企业网站源码 前后台都有 静态模版引擎, 代码生成器大大提高开发效率 点击:获取地址 QQ 313596790 系统介绍: 1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的html,所以访问速度快,轻便,对服务器负担小 3.网站前端采用主流的相应式布局,支持PC.平板.手机浏览器访问 4.springmvc +spring4.2.5+ mybaits3.3  SSM 普通java web(非maven) 

java企业网站源码,模版,有前后台,springmvcSSM,freemaker

java 企业网站源码 前后台都有 静态模版引擎, 代码生成器大大提高开发效率 点击:获取地址 QQ 313596790 系统介绍: 1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的html,所以访问速度快,轻便,对服务器负担小 3.网站前端采用主流的相应式布局,支持PC.平板.手机浏览器访问 4.springmvc +spring4.2.5+ mybaits3.3  SSM 普通java web(非maven) 

java 企业网站源码模版 有前后台 springmvc SSM 生成静态化

java 企业网站源码 前后台都有 静态模版引擎, 代码生成器大大提高开发效率 点击:获取地址 QQ 313596790 系统介绍: 1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的html,所以访问速度快,轻便,对服务器负担小 3.网站前端采用主流的相应式布局,支持PC.平板.手机浏览器访问 4.springmvc +spring4.2.5+ mybaits3.3  SSM 普通java web(非maven) 

如何查看JDK以及JAVA框架的源码

如何查看JDK以及JAVA框架的源码 设置步骤如下: 1.点 “window”-> "Preferences" -> "Java" -> "Installed JRES" 2.此时"Installed JRES"右边是列表窗格,列出了系统中的 JRE 环境,选择你的JRE,然后点边上的 "Edit...", 会出现一个窗口(Edit JRE) 3.选中rt.jar文件的这一项:“c:\pr

java.io.BufferedOutputStream 源码分析

BufferedOutputStream  是一个带缓冲区到输出流,通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统. 俩个成员变量,一个是存储数据的内部缓冲区,一个是缓冲区中的有效字节数. /** * The internal buffer where data is stored. */ protected byte buf[]; /** * The number of valid bytes in the buffer. This value

很值得学习的java 画图板源码

很值得学习的java 画图板源码下载地址:http://download.csdn.net/source/2371150 package minidrawpad; import java.awt.*; import java.awt.event.*; import java.io.InputStreamReader; import java.io.Reader; import javax.swing.*; // 主界面类 public class DrawPad extends JFrame i

java企业站源码 响应式 兼容手机平板PC 主流SSM框架 freemaker 静态引擎

java 企业网站源码 前后台都有 静态模版引擎, 代码生成器大大提高开发效率 前台: 支持三套模版, 可以在后台切换 系统介绍: 1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的html,所以访问速度快,轻便,对服务器负担小 3.网站前端采用主流的响应式布局,同一页面同时支持PC.平板.手机(三合一)浏览器访问 4.springmvc +spring4.3.7+ mybaits3.3  SSM 普通java we

Java split方法源码分析

Java split方法源码分析 1 public String[] split(CharSequence input [, int limit]) { 2 int index = 0; // 指针 3 boolean matchLimited = limit > 0; // 是否限制匹配个数 4 ArrayList<String> matchList = new ArrayList<String>(); // 匹配结果队列 5 Matcher m = matcher(inp