请选择 进入手机版 | 继续访问电脑版
设为首页 收藏本站
开启辅助访问 切换到宽版

新浪微博登陆

只需一步, 快速开始

QQ登录

只需一步,快速开始

切换风格 立即注册 找回密码

Java教程网

查看: 58128|回复: 48

java斗地主

[复制链接]

新浪微博达人勋

911

积分

360

帖子

131

贡献

Rank: 4

积分
911

社区QQ达人最佳新人活跃会员热心会员灌水之王突出贡献

发表于 2014-9-6 14:57:18 | 显示全部楼层 |阅读模式
效果图
7.jpg


6.jpg

5.jpg


4.jpg


3.jpg


部分代码如下
Main.java
  1. package com;
  2. import java.awt.Color;
  3. import java.awt.Container;
  4. import java.awt.Point;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. import java.util.Random;
  10. import javax.swing.ImageIcon;
  11. import javax.swing.JButton;
  12. import javax.swing.JFrame;
  13. import javax.swing.JLabel;
  14. import javax.swing.JMenu;
  15. import javax.swing.JMenuBar;
  16. import javax.swing.JMenuItem;
  17. import javax.swing.JOptionPane;
  18. import javax.swing.JTextField;
  19. import javax.swing.SwingUtilities;
  20. public class Main extends JFrame implements ActionListener {
  21.         public Container container = null;// 定义容器
  22.         JMenuItem start, exit, about;// 定义菜单按钮
  23.         JButton landlord[]=new JButton[2];//抢地主按钮
  24.         JButton publishCard[]=new JButton[2];//出牌按钮
  25.         int dizhuFlag;//地主标志
  26.         int turn;
  27.         JLabel dizhu; //地主图标
  28.         List<Card> currentList[] =new ArrayList[3]; //  当前的出牌
  29.         List<Card> playerList[] = new ArrayList[3]; // 定义3个玩家表
  30.         List<Card> lordList;//地主牌
  31.         Card card[] = new Card[56]; // 定义54张牌
  32.         JTextField time[]=new JTextField[3]; //计时器
  33.         Time t; //定时器(线程)
  34.         boolean nextPlayer=false; //转换角色
  35.         public Main(){

  36.                 Init();// 初始化
  37.                 SetMenu();// 创建菜单 按钮(抢地主,发牌,计时器)
  38.                 this.setVisible(true);
  39.                 CardInit();//发牌
  40.                 getLord(); //发完牌开始抢地主
  41.                 time[1].setVisible(true);
  42.                 //线程安全性,把非主线程的UI控制放到里面
  43.                 SwingUtilities.invokeLater(new NewTimer(this,10));
  44.                
  45.         }
  46.         // 抢地主
  47.         public void getLord(){
  48.                 //System.out.println(CardType.c0.toString());
  49.                 for(int i=0;i<2;i++)
  50.                         landlord[i].setVisible(true);
  51.         }
  52.         //初始化牌
  53.         // 发牌洗牌
  54.         public void CardInit() {
  55.                
  56.                 int count = 1;
  57.                 //初始化牌
  58.                 for (int i = 1; i <= 5; i++) {
  59.                         for (int j = 1; j <= 13; j++) {
  60.                                 if ((i == 5) && (j > 2))
  61.                                         break;
  62.                                 else {
  63.                                         card[count] = new Card(this, i + "-" + j, false);
  64.                                         card[count].setLocation(350, 50);
  65.                                         container.add(card[count]);
  66.                                         count++;
  67.                                 }
  68.                         }
  69.                 }
  70.                 //打乱顺序
  71.                 for(int i=0;i<100;i++){
  72.                         Random random=new Random();
  73.                         int a=random.nextInt(54)+1;
  74.                         int b=random.nextInt(54)+1;
  75.                         Card k=card[a];
  76.                         card[a]=card[b];
  77.                         card[b]=k;
  78.                 }
  79.                 //开始发牌
  80.                 for(int i=0;i<3;i++)
  81.                         playerList[i]=new ArrayList<Card>(); //玩家牌
  82.                 lordList=new ArrayList<Card>();//地主牌三张
  83.                 int t=0;
  84.                 for(int i=1;i<=54;i++)
  85.                 {
  86.                         if(i>=52)//地主牌
  87.                         {
  88.                                 Common.move(card[i], card[i].getLocation(),new Point(300+(i-52)*80,10));
  89.                                 lordList.add(card[i]);
  90.                                 continue;
  91.                         }
  92.                         switch ((t++)%3) {
  93.                         case 0:
  94.                                 //左边玩家
  95.                                 Common.move(card[i], card[i].getLocation(),new Point(50,60+i*5));
  96.                                 playerList[0].add(card[i]);
  97.                                 break;
  98.                         case 1:
  99.                                 //我
  100.                                 Common.move(card[i], card[i].getLocation(),new Point(180+i*7,450));
  101.                                 playerList[1].add(card[i]);
  102.                                 card[i].turnFront(); //显示正面
  103.                                 break;
  104.                         case 2:
  105.                                 //右边玩家
  106.                                 Common.move(card[i], card[i].getLocation(),new Point(700,60+i*5));
  107.                                 playerList[2].add(card[i]);
  108.                                 break;
  109.                         }
  110.                         //card[i].turnFront(); //显示正面
  111.                         container.setComponentZOrder(card[i], 0);
  112.                 }
  113.                 //发完牌排序,从大到小
  114.                 for(int i=0;i<3;i++)
  115.                 {
  116.                         Common.order(playerList[i]);
  117.                         Common.rePosition(this,playerList[i],i);//重新定位
  118.                 }
  119.                 dizhu=new JLabel(new ImageIcon("images/dizhu.gif"));
  120.                 dizhu.setVisible(false);
  121.                 dizhu.setSize(40, 40);
  122.                 container.add(dizhu);
  123.         }

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

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

  134.         }

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

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

  143.                 start.addActionListener(this);
  144.                 exit.addActionListener(this);
  145.                 about.addActionListener(this);

  146.                 game.add(start);
  147.                 game.add(exit);
  148.                 help.add(about);

  149.                 jMenuBar.add(game);
  150.                 jMenuBar.add(help);
  151.                 this.setJMenuBar(jMenuBar);
  152.                
  153.                 landlord[0]=new JButton("抢地主");
  154.                 landlord[1]=new JButton("不     抢");
  155.                 publishCard[0]= new JButton("出牌");
  156.                 publishCard[1]= new JButton("不要");
  157.                 for(int i=0;i<2;i++)
  158.                 {
  159.                         publishCard[i].setBounds(320+i*100, 400, 60, 20);
  160.                         landlord[i].setBounds(320+i*100, 400,75,20);
  161.                         container.add(landlord[i]);
  162.                         landlord[i].addActionListener(this);
  163.                         landlord[i].setVisible(false);
  164.                         container.add(publishCard[i]);
  165.                         publishCard[i].setVisible(false);
  166.                         publishCard[i].addActionListener(this);
  167.                 }
  168.                 for(int i=0;i<3;i++){
  169.                         time[i]=new JTextField("倒计时:");
  170.                         time[i].setVisible(false);
  171.                         container.add(time[i]);
  172.                 }
  173.                 time[0].setBounds(140, 230, 60, 20);
  174.                 time[1].setBounds(374, 360, 60, 20);
  175.                 time[2].setBounds(620, 230, 60, 20);
  176.                
  177.                 for(int i=0;i<3;i++)
  178.                 {
  179.                         currentList[i]=new ArrayList<Card>();
  180.                 }
  181.                
  182.         }

  183.         @Override
  184.         public void actionPerformed(ActionEvent e) {
  185.                 // TODO Auto-generated method stub
  186.                 if (e.getSource() == exit) {
  187.                         this.dispose();
  188.                 }
  189.                 if (e.getSource() == about) {
  190.                         JOptionPane.showMessageDialog(this, "哈哈");
  191.                 }
  192.                 if (e.getSource() == start) {
  193.                         // this.restart();
  194.                 }
  195.                 if(e.getSource()==landlord[0])
  196.                 {
  197.                         time[1].setText("抢地主");
  198.                         t.isRun=false; //时钟终结
  199.                 }
  200.                 if(e.getSource()==landlord[1])
  201.                 {
  202.                         time[1].setText("不抢");
  203.                         t.isRun=false; //时钟终结
  204.                 }
  205.                 //如果是不要
  206.                 if(e.getSource()==publishCard[1])
  207.                 {
  208.                         this.nextPlayer=true;
  209.                         currentList[1].clear();
  210.                         time[1].setText("不要");
  211.                 }
  212.                 //如果是出牌按钮
  213.                 if(e.getSource()==publishCard[0])
  214.                 {
  215.                         List<Card> c=new ArrayList<Card>();
  216.                         //点选出牌
  217.                         for(int i=0;i<playerList[1].size();i++)
  218.                         {
  219.                                 Card card=playerList[1].get(i);
  220.                                 if(card.clicked)
  221.                                 {
  222.                                         c.add(card);
  223.                                 }
  224.                         }
  225.                         int flag=0;
  226.                         
  227.                         //如果我主动出牌
  228.                         if(time[0].getText().equals("不要")&&time[2].getText().equals("不要"))
  229.                         {
  230.                         
  231.                                 if(Common.jugdeType(c)!=CardType.c0)
  232.                                         flag=1;//表示可以出牌
  233.                         }//如果我跟牌
  234.                         else{
  235.                         
  236.                                 flag=Common.checkCards(c,currentList);
  237.                         }
  238.                         //判断是否符合出牌
  239.                         if(flag==1)
  240.                         {
  241.                                 currentList[1]=c;
  242.                                 playerList[1].removeAll(currentList[1]);//移除走的牌
  243.                                 //定位出牌
  244.                                 Point point=new Point();
  245.                                 point.x=(770/2)-(currentList[1].size()+1)*15/2;;
  246.                                 point.y=300;
  247.                                 for(int i=0,len=currentList[1].size();i<len;i++)
  248.                                 {
  249.                                         Card card=currentList[1].get(i);
  250.                                         Common.move(card, card.getLocation(), point);
  251.                                         point.x+=15;
  252.                                 }
  253.                                 //抽完牌后重新整理牌
  254.                                 Common.rePosition(this, playerList[1], 1);
  255.                                 time[1].setVisible(false);
  256.                                 this.nextPlayer=true;
  257.                         }

  258.                 }
  259.         }

  260.         public static void main(String args[]) {
  261.                
  262.                         new Main();
  263.                
  264.         }

  265. }
  266. class NewTimer implements Runnable{

  267.         Main main;
  268.         int i;
  269.         public NewTimer(Main m,int i){
  270.                 this.main=m;
  271.                 this.i=i;
  272.         }
  273.         @Override
  274.         public void run() {
  275.                 // TODO Auto-generated method stub
  276.                 main.t=new Time(main,10);//从10开始倒计时
  277.                 main.t.start();
  278.         }
  279.         
  280. }
复制代码
Time.java
  1. package com;

  2. import java.awt.Point;
  3. import java.util.ArrayList;
  4. import java.util.List;

  5. import javax.swing.JOptionPane;

  6. public class Time extends Thread {
  7.         Main main;
  8.         boolean isRun = true;
  9.         int i = 10;

  10.         public Time(Main m, int i) {
  11.                 this.main = m;
  12.                 this.i = i;
  13.         }

  14.         @Override
  15.         public void run() {

  16.                 while (i > -1 && isRun) {
  17.                         main.time[1].setText("倒计时:" + i--);
  18.                         second(1);// 等一秒
  19.                 }
  20.                 if (i == -1)// 正常终结,说明超时
  21.                         main.time[1].setText("不抢");
  22.                 main.landlord[0].setVisible(false);
  23.                 main.landlord[1].setVisible(false);
  24.                 for (Card card2 : main.playerList[1])
  25.                         card2.canClick = true;// 可被点击
  26.                 // 如果自己抢到地主
  27.                 if (main.time[1].getText().equals("抢地主")) {
  28.                         // 得到地主牌
  29.                         main.playerList[1].addAll(main.lordList);
  30.                         openlord(true);
  31.                         second(2);// 等待五秒
  32.                         Common.order(main.playerList[1]);
  33.                         Common.rePosition(main, main.playerList[1], 1);
  34.                         setlord(1);
  35.                 } else {
  36.                         // 电脑选地主
  37.                         if (Common.getScore(main.playerList[0]) < Common
  38.                                         .getScore(main.playerList[2])) {
  39.                                 main.time[2].setText("抢地主");
  40.                                 main.time[2].setVisible(true);
  41.                                 setlord(2);// 设定地主
  42.                                 openlord(true);
  43.                                 second(3);
  44.                                 main.playerList[2].addAll(main.lordList);
  45.                                 Common.order(main.playerList[2]);
  46.                                 Common.rePosition(main, main.playerList[2], 2);
  47.                                 openlord(false);

  48.                         } else {
  49.                                 main.time[0].setText("抢地主");
  50.                                 main.time[0].setVisible(true);
  51.                                 setlord(0);// 设定地主
  52.                                 openlord(true);
  53.                                 second(3);
  54.                                 main.playerList[0].addAll(main.lordList);
  55.                                 Common.order(main.playerList[0]);
  56.                                 Common.rePosition(main, main.playerList[0], 0);
  57.                                 //openlord(false);

  58.                         }
  59.                 }
  60.                 // 选完地主后 关闭地主按钮
  61.                 main.landlord[0].setVisible(false);
  62.                 main.landlord[1].setVisible(false);
  63.                 turnOn(false);
  64.                 for (int i = 0; i < 3; i++)
  65.                 {
  66.                         main.time[i].setText("不要");
  67.                         main.time[i].setVisible(false);
  68.                 }
  69.                 // 开始游戏 根据地主不同顺序不同
  70.                 main.turn=main.dizhuFlag;
  71.                 while (true) {
  72.                         
  73.                         if(main.turn==1) //我
  74.                         {
  75.                                 turnOn(true);// 出牌按钮 --我出牌
  76.                                 timeWait(30, 1);// 我自己的定时器
  77.                                 turnOn(false);//选完关闭
  78.                                 main.turn=(main.turn+1)%3;
  79.                                 if(win())//判断输赢
  80.                                         break;
  81.                         }
  82.                         if (main.turn==0)
  83.                         {
  84.                                 computer0();
  85.                                 main.turn=(main.turn+1)%3;
  86.                                 if(win())//判断输赢
  87.                                         break;
  88.                         }
  89.                         if(main.turn==2)
  90.                         {
  91.                                 computer2();
  92.                                 main.turn=(main.turn+1)%3;
  93.                                 if(win())//判断输赢
  94.                                         break;
  95.                         }
  96.                 }
  97.         }

  98.         // 等待i秒
  99.         public void second(int i) {
  100.                 try {
  101.                         Thread.sleep(i * 1000);
  102.                 } catch (InterruptedException e) {
  103.                         // TODO Auto-generated catch block
  104.                         e.printStackTrace();
  105.                 }
  106.         }

  107.         // 地主牌翻看
  108.         public void openlord(boolean is) {
  109.                 for (int i = 0; i < 3; i++) {
  110.                         if (is)
  111.                                 main.lordList.get(i).turnFront(); // 地主牌翻看
  112.                         else {
  113.                                 main.lordList.get(i).turnRear(); // 地主牌闭合
  114.                         }
  115.                         main.lordList.get(i).canClick = true;// 可被点击
  116.                 }
  117.         }

  118.         // 设定地主
  119.         public void setlord(int i) {
  120.                 Point point = new Point();
  121.                 if (i == 1)// 我是地主
  122.                 {
  123.                         point.x = 80;
  124.                         point.y = 430;
  125.                         main.dizhuFlag = 1;// 设定地主
  126.                 }
  127.                 if (i == 0) {
  128.                         point.x = 80;
  129.                         point.y = 20;
  130.                         main.dizhuFlag = 0;
  131.                 }
  132.                 if (i == 2) {
  133.                         point.x = 700;
  134.                         point.y = 20;
  135.                         main.dizhuFlag = 2;
  136.                 }
  137.                 main.dizhu.setLocation(point);
  138.                 main.dizhu.setVisible(true);
  139.         }

  140.         // 打开出牌按钮
  141.         public void turnOn(boolean flag) {
  142.                 main.publishCard[0].setVisible(flag);
  143.                 main.publishCard[1].setVisible(flag);
  144.         }

  145.         // 电脑0走牌(我代表1)
  146.         public void computer0() {
  147.                 timeWait(1, 0); // 定时
  148.                 ShowCard(0); // 出牌
  149.                
  150.         }

  151.         // 电脑2走牌(我代表1)
  152.         public void computer2() {
  153.                 timeWait(1, 2); // 定时
  154.                 ShowCard(2); // 出牌
  155.                
  156.         }

  157.         // 走牌
  158.         public void ShowCard(int role) {
  159.                 Model model = Common.getModel(main.playerList[role]);
  160.                 // 待走的牌
  161.                 List<String> list = new ArrayList();
  162.                 // 如果是主动出牌
  163.                 if (main.time[(role + 1) % 3].getText().equals("不要")
  164.                                 && main.time[(role + 2) % 3].getText().equals("不要")) {
  165.                         // 有单出单 (除开3带,飞机能带的单牌)
  166.                         if (model.a1.size() > (model.a111222.size() * 2 + model.a3.size())) {
  167.                                 list.add(model.a1.get(model.a1.size() - 1));
  168.                         }// 有对子出对子 (除开3带,飞机)
  169.                         else if (model.a2.size() > (model.a111222.size() * 2 + model.a3
  170.                                         .size())) {
  171.                                 list.add(model.a2.get(model.a2.size() - 1));
  172.                         }// 有顺子出顺子
  173.                         else if (model.a123.size() > 0) {
  174.                                 list.add(model.a123.get(model.a123.size() - 1));
  175.                         }// 有3带就出3带,没有就出光3
  176.                         else if (model.a3.size() > 0) {
  177.                                 // 3带单,且非关键时刻不能带王,2
  178.                                 if (model.a1.size() > 0) {
  179.                                         list.add(model.a1.get(model.a1.size() - 1));
  180.                                 }// 3带对
  181.                                 else if (model.a2.size() > 0) {
  182.                                         list.add(model.a2.get(model.a2.size() - 1));
  183.                                 }
  184.                                 list.add(model.a3.get(model.a3.size() - 1));
  185.                         }// 有双顺出双顺
  186.                         else if (model.a112233.size() > 0) {
  187.                                 list.add(model.a112233.get(model.a112233.size() - 1));
  188.                         }// 有飞机出飞机
  189.                         else if (model.a111222.size() > 0) {
  190.                                 String name[] = model.a111222.get(0).split(",");
  191.                                 // 带单
  192.                                 if (name.length / 3 <= model.a1.size()) {
  193.                                         list.add(model.a111222.get(model.a111222.size() - 1));
  194.                                         for (int i = 0; i < name.length / 3; i++)
  195.                                                 list.add(model.a1.get(i));
  196.                                 } else if (name.length / 3 <= model.a2.size())// 带双
  197.                                 {
  198.                                         list.add(model.a111222.get(model.a111222.size() - 1));
  199.                                         for (int i = 0; i < name.length / 3; i++)
  200.                                                 list.add(model.a2.get(i));
  201.                                 }
  202.                                 // 有炸弹出炸弹
  203.                         } else if (model.a4.size() > 0) {
  204.                                 // 4带2,1
  205.                                 int sizea1 = model.a1.size();
  206.                                 int sizea2 = model.a2.size();
  207.                                 if (sizea1 >= 2) {
  208.                                         list.add(model.a1.get(sizea1 - 1));
  209.                                         list.add(model.a1.get(sizea1 - 2));
  210.                                         list.add(model.a4.get(0));
  211.                                 
  212.                                 } else if (sizea2 >= 2) {
  213.                                         list.add(model.a2.get(sizea1 - 1));
  214.                                         list.add(model.a2.get(sizea1 - 2));
  215.                                         list.add(model.a4.get(0));
  216.                                        
  217.                                 } else {// 直接炸
  218.                                         list.add(model.a4.get(0));
  219.                                        
  220.                                 }

  221.                         }
  222.                 }// 如果是跟牌
  223.                 else {
  224.                         List<Card> player = main.currentList[(role + 2) % 3].size() > 0
  225.                                         ? main.currentList[(role + 2) % 3]
  226.                                         : main.currentList[(role + 1) % 3];
  227.                         
  228.                         CardType cType=Common.jugdeType(player);
  229.                         //如果是单牌
  230.                         if(cType==CardType.c1)
  231.                         {
  232.                                 AI_1(model.a1, player, list, role);
  233.                         }//如果是对子
  234.                         else if(cType==CardType.c2)
  235.                         {
  236.                                 AI_1(model.a2, player, list, role);
  237.                         }//3带
  238.                         else if(cType==CardType.c3)
  239.                         {
  240.                                 AI_1(model.a3, player, list, role);
  241.                         }//炸弹
  242.                         else if(cType==CardType.c4)
  243.                         {
  244.                                 AI_1(model.a4, player, list, role);
  245.                         }//如果是3带1
  246.                         else if(cType==CardType.c31){
  247.                                  //偏家 涉及到拆牌
  248.                                 //if((role+1)%3==main.dizhuFlag)
  249.                                         AI_2(model.a3, model.a1, player, list, role);
  250.                         }//如果是3带2
  251.                         else if(cType==CardType.c32){
  252.                                  //偏家
  253.                                 //if((role+1)%3==main.dizhuFlag)
  254.                                         AI_2(model.a3, model.a2, player, list, role);
  255.                         }//如果是4带11
  256.                         else if(cType==CardType.c411){
  257.                                         AI_5(model.a4, model.a1, player, list, role);
  258.                         }
  259.                         //如果是4带22
  260.                         else if(cType==CardType.c422){
  261.                                         AI_5(model.a4, model.a2, player, list, role);
  262.                         }
  263.                         //顺子
  264.                         else if(cType==CardType.c123){
  265.                                 AI_3(model.a123, player, list, role);
  266.                         }
  267.                         //双顺
  268.                         else if(cType==CardType.c1122){
  269.                                 AI_3(model.a112233, player, list, role);
  270.                         }
  271.                         //飞机带单
  272.                         else if(cType==CardType.c11122234){
  273.                                 AI_4(model.a111222,model.a1, player, list, role);
  274.                         }
  275.                         //飞机带对
  276.                         else if(cType==CardType.c1112223344){
  277.                                 AI_4(model.a111222,model.a2, player, list, role);
  278.                         }
  279.                         //炸弹
  280.                         if(list.size()==0)
  281.                         {
  282.                                 int len4=model.a4.size();
  283.                                 if(len4>0)
  284.                                         list.add(model.a4.get(len4-1));
  285.                         }
  286.                 }

  287.                 // 定位出牌
  288.                 main.currentList[role].clear();
  289.                 if (list.size() > 0) {
  290.                         Point point = new Point();
  291.                         if (role == 0)
  292.                                 point.x = 200;
  293.                         if (role == 2)
  294.                                 point.x = 550;
  295.                         point.y = (400 / 2) - (list.size() + 1) * 15 / 2;// 屏幕中部
  296.                         // 将name转换成Card
  297.                         for (int i = 0, len = list.size(); i < len; i++) {
  298.                                 List<Card> cards = getCardByName(main.playerList[role],
  299.                                                 list.get(i));
  300.                                 for (Card card : cards) {
  301.                                         Common.move(card, card.getLocation(), point);
  302.                                         point.y += 15;
  303.                                         main.currentList[role].add(card);
  304.                                         main.playerList[role].remove(card);
  305.                                 }
  306.                         }
  307.                         Common.rePosition(main, main.playerList[role], role);
  308.                 } else {
  309.                         main.time[role].setVisible(true);
  310.                         main.time[role].setText("不要");
  311.                 }
  312.                 for(Card card:main.currentList[role])
  313.                         card.turnFront();
  314.         }

  315.         // 按name获得Card,方便从Model取出
  316.         public List getCardByName(List<Card> list, String n) {
  317.                 String[] name = n.split(",");
  318.                 List cardsList = new ArrayList<Card>();
  319.                 int j = 0;
  320.                 for (int i = 0, len = list.size(); i < len; i++) {
  321.                         if (j < name.length && list.get(i).name.equals(name[j])) {
  322.                                 cardsList.add(list.get(i));
  323.                                 i = 0;
  324.                                 j++;
  325.                         }
  326.                 }
  327.                 return cardsList;
  328.         }
  329.         //顺子
  330.         public void AI_3(List<String> model,List<Card> player,List<String> list,int role){
  331.                
  332.                 for(int i=0,len=model.size();i<len;i++)
  333.                 {
  334.                         String []s=model.get(i).split(",");
  335.                         if(s.length==player.size()&&getValueInt(model.get(i))>Common.getValue(player.get(0)))
  336.                         {
  337.                                 list.add(model.get(i));
  338.                                 return;
  339.                         }
  340.                 }
  341.         }
  342.         //飞机带单,双
  343.         public void AI_4(List<String> model1,List<String> model2,List<Card> player,List<String> list,int role){
  344.                 //排序按重复数
  345.                 player=Common.getOrder2(player);
  346.                 int len1=model1.size();
  347.                 int len2=model2.size();
  348.                
  349.                 if(len1<1 || len2<1)
  350.                         return;
  351.                 for(int i=0;i<len1;i++){
  352.                         String []s=model1.get(i).split(",");
  353.                         String []s2=model2.get(0).split(",");
  354.                         if((s.length/3<=len2)&&(s.length*(3+s2.length)==player.size())&&getValueInt(model1.get(i))>Common.getValue(player.get(0)))
  355.                         {
  356.                                 list.add(model1.get(i));
  357.                                 for(int j=1;j<=s.length/3;j++)
  358.                                         list.add(model2.get(len2-j));
  359.                         }
  360.                 }
  361.         }
  362.         //4带1,2
  363.         public void AI_5(List<String> model1,List<String> model2,List<Card> player,List<String> list,int role){
  364.                 //排序按重复数
  365.                 player=Common.getOrder2(player);
  366.                 int len1=model1.size();
  367.                 int len2=model2.size();
  368.                
  369.                 if(len1<1 || len2<2)
  370.                         return;
  371.                 for(int i=0;i<len1;i++){
  372.                         if(getValueInt(model1.get(i))>Common.getValue(player.get(0)))
  373.                         {
  374.                                 list.add(model1.get(i));
  375.                                 for(int j=1;j<=2;j++)
  376.                                         list.add(model2.get(len2-j));
  377.                         }
  378.                 }
  379.         }
  380.         //单牌,对子,3个,4个,通用
  381.         public void AI_1(List<String> model,List<Card> player,List<String> list,int role){
  382.                 //顶家
  383.                 if((role+1)%3==main.dizhuFlag)
  384.                 {
  385.                         
  386.                         for(int i=0,len=model.size();i<len;i++)
  387.                         {
  388.                                 if(getValueInt(model.get(i))>Common.getValue(player.get(0)))
  389.                                 {
  390.                                         list.add(model.get(i));
  391.                                         break;
  392.                                 }
  393.                         }
  394.                 }else {//偏家
  395.                         
  396.                         for(int len=model.size(),i=len-1;i>=0;i--)
  397.                         {
  398.                                 if(getValueInt(model.get(i))>Common.getValue(player.get(0)))
  399.                                 {
  400.                                         list.add(model.get(i));
  401.                                         break;
  402.                                 }
  403.                         }
  404.                 }
  405.         }
  406.         //3带1,2,4带1,2
  407.         public void AI_2(List<String> model1,List<String> model2,List<Card> player,List<String> list,int role){
  408.                 //model1是主牌,model2是带牌,player是玩家出的牌,,list是准备回的牌
  409.                 //排序按重复数
  410.                 player=Common.getOrder2(player);
  411.                 int len1=model1.size();
  412.                 int len2=model2.size();
  413.                 //如果有王直接炸了
  414.                 if(len1>0&&model1.get(0).length()<10)
  415.                 {
  416.                         list.add(model1.get(0));
  417.                         System.out.println("王炸");
  418.                         return;
  419.                 }
  420.                 if(len1<1 || len2<1)
  421.                         return;
  422.                 for(int len=len1,i=len-1;i>=0;i--)
  423.                 {        
  424.                         if(getValueInt(model1.get(i))>Common.getValue(player.get(0)))
  425.                         {
  426.                                 list.add(model1.get(i));
  427.                                 break;
  428.                         }
  429.                 }
  430.                 list.add(model2.get(len2-1));
  431.                 if(list.size()<2)
  432.                         list.clear();
  433.         }
  434.         // 延时,模拟时钟
  435.         public void timeWait(int n, int player) {

  436.                 if (main.currentList[player].size() > 0)
  437.                         Common.hideCards(main.currentList[player]);
  438.                 if (player == 1)// 如果是我,10秒到后直接下一家出牌
  439.                 {
  440.                         int i = n;

  441.                         while (main.nextPlayer == false && i >= 0) {
  442.                                 // main.container.setComponentZOrder(main.time[player], 0);
  443.                                 main.time[player].setText("倒计时:" + i);
  444.                                 main.time[player].setVisible(true);
  445.                                 second(1);
  446.                                 i--;
  447.                         }
  448.                         if (i == -1) {
  449.                                 main.time[player].setText("超时");
  450.                         }
  451.                         main.nextPlayer = false;
  452.                 } else {
  453.                         for (int i = n; i >= 0; i--) {
  454.                                 second(1);
  455.                                 // main.container.setComponentZOrder(main.time[player], 0);
  456.                                 main.time[player].setText("倒计时:" + i);
  457.                                 main.time[player].setVisible(true);
  458.                         }
  459.                 }
  460.                 main.time[player].setVisible(false);
  461.         }
  462.         //通过name估值
  463.         public  int getValueInt(String n){
  464.                 String name[]=n.split(",");
  465.                 String s=name[0];
  466.                 int i=Integer.parseInt(s.substring(2, s.length()));
  467.                 if(s.substring(0, 1).equals("5"))
  468.                         i+=3;
  469.                 if(s.substring(2, s.length()).equals("1")||s.substring(2, s.length()).equals("2"))
  470.                         i+=13;
  471.                 return i;
  472.         }
  473.         //判断输赢
  474.         public boolean win(){
  475.                 for(int i=0;i<3;i++){
  476.                         if(main.playerList[i].size()==0)
  477.                         {
  478.                                 String s;
  479.                                 if(i==1)
  480.                                 {
  481.                                         s="恭喜你,胜利了!";
  482.                                 }else {
  483.                                         s="恭喜电脑"+i+",赢了! 你的智商有待提高哦";
  484.                                 }
  485.                                 JOptionPane.showMessageDialog(main, s);
  486.                                 return true;
  487.                         }
  488.                 }
  489.                 return false;
  490.         }
  491. }
复制代码
源码下载:
游客,如果您要查看本帖隐藏内容请回复




来自群组: java开发组

新浪微博达人勋

6673

积分

1651

帖子

1674

贡献

Rank: 8Rank: 8

积分
6673

社区QQ达人

发表于 2014-9-6 15:00:12 | 显示全部楼层
纯粹路过,没任何兴趣,仅仅是看在老用户份上回复一下

新浪微博达人勋

2306

积分

1069

帖子

247

贡献

Rank: 7Rank: 7Rank: 7

积分
2306

社区QQ达人最佳新人活跃会员热心会员宣传达人灌水之王优秀版主

发表于 2014-9-6 17:43:54 | 显示全部楼层
太棒了,感谢楼主漂亮~

新浪微博达人勋

3697

积分

1905

帖子

426

贡献

Rank: 7Rank: 7Rank: 7

积分
3697

社区QQ达人最佳新人活跃会员热心会员灌水之王优秀版主

发表于 2014-9-6 19:40:36 | 显示全部楼层
太棒了,感谢楼主太棒了,感谢楼主

新浪微博达人勋

6614

积分

1640

帖子

1658

贡献

Rank: 8Rank: 8

积分
6614
发表于 2014-9-7 03:20:07 | 显示全部楼层
撸过

新浪微博达人勋

6689

积分

1652

帖子

1679

贡献

Rank: 8Rank: 8

积分
6689
发表于 2014-10-3 12:59:30 | 显示全部楼层
佩服佩服!

新浪微博达人勋

7245

积分

1829

帖子

1783

贡献

Rank: 8Rank: 8

积分
7245

社区QQ达人最佳新人活跃会员热心会员

发表于 2014-12-31 12:18:17 | 显示全部楼层
垃圾内容,路过为证。

新浪微博达人勋

13

积分

2

帖子

2

贡献

Rank: 1

积分
13

社区QQ达人

发表于 2015-2-6 13:50:48 | 显示全部楼层
多谢楼主了

新浪微博达人勋

13

积分

2

帖子

2

贡献

Rank: 1

积分
13

社区QQ达人

发表于 2015-2-26 16:01:59 | 显示全部楼层
太棒了,感谢楼主

新浪微博达人勋

9

积分

1

帖子

1

贡献

Rank: 1

积分
9

社区QQ达人

发表于 2015-3-30 00:33:22 | 显示全部楼层
太棒了,感谢楼主
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋|手机版|Archiver|Java教程网    

GMT+8, 2020-10-30 06:36 , Processed in 0.356254 second(s), 43 queries .

Powered by Discuz X3.2

© 2001-2013 JAVA教程网

快速回复 返回顶部 返回列表