实例介绍
【实例简介】
【实例截图】
【核心代码】
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.awt.event.KeyEvent; 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.JPanel; 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(300 (i*20), 50); container.add(card[count]); count ; } } } //打乱顺序 for(int i=0;i<200;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,16),t); lordList.add(card[i]); continue; } switch ((t )%3) { case 0: //左边玩家 Common.move(card[i], card[i].getLocation(),new Point(50,60 i*5),t); playerList[0].add(card[i]); card[i].turnFront(); //显示正面 break; case 1: //我 Common.move(card[i], card[i].getLocation(),new Point(180 i*7,450),t); playerList[1].add(card[i]); card[i].turnFront(); //显示正面 break; case 2: //右边玩家 Common.move(card[i], card[i].getLocation(),new Point(700,60 i*5),t); playerList[2].add(card[i]); card[i].turnFront(); //显示正面 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("斗地主游戏---陈悦馨"); 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>(); } } //点击鼠标事件 public void actionPerformed(ActionEvent e) { if (e.getSource() == exit) { this.dispose(); } if (e.getSource() == about) { JOptionPane.showMessageDialog(this, "QQ361106306,小柒"); } 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);//把点中的牌放入新集合 } } /** 给点选的牌排序 */ /*for(int i=0;i<c.size();i ){ System.out.println("点选的牌是:" c.get(i).name); }*/ 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=310; for(int i=0,len=currentList[1].size();i<len;i ) { Card card=currentList[1].get(i); Common.move(card, card.getLocation(), point,10); point.x =15; } //抽完牌后重新整理牌 Common.rePosition(this, playerList[1], 1); time[1].setVisible(false); this.nextPlayer=true; } } } private void restart() { System.out.println("重新开始"); /* for(int i=0;i<3;i ){ currentList[i]=null; } for(int i=0;i<3;i ){ playerList[i]=null; } lordList=null; for(int i=0;i<card.length;i ){ card[i]=null; } nextPlayer=false;*/ // this.CardInit();//发牌 } 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,12);//从10开始倒计时 main.t.start(); } }
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论