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();
        }

}

Time.java

package com;

import java.awt.Point;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

public class Time extends Thread {
        Main main;
        boolean isRun = true;
        int i = 10;

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

        @Override
        public void run() {

                while (i > -1 && isRun) {
                        main.time[1].setText("倒计时:" + i--);
                        second(1);// 等一秒
                }
                if (i == -1)// 正常终结,说明超时
                        main.time[1].setText("不抢");
                main.landlord[0].setVisible(false);
                main.landlord[1].setVisible(false);
                for (Card card2 : main.playerList[1])
                        card2.canClick = true;// 可被点击
                // 如果自己抢到地主
                if (main.time[1].getText().equals("抢地主")) {
                        // 得到地主牌
                        main.playerList[1].addAll(main.lordList);
                        openlord(true);
                        second(2);// 等待五秒
                        Common.order(main.playerList[1]);
                        Common.rePosition(main, main.playerList[1], 1);
                        setlord(1);
                } else {
                        // 电脑选地主
                        if (Common.getScore(main.playerList[0]) < Common
                                        .getScore(main.playerList[2])) {
                                main.time[2].setText("抢地主");
                                main.time[2].setVisible(true);
                                setlord(2);// 设定地主
                                openlord(true);
                                second(3);
                                main.playerList[2].addAll(main.lordList);
                                Common.order(main.playerList[2]);
                                Common.rePosition(main, main.playerList[2], 2);
                                openlord(false);

                        } else {
                                main.time[0].setText("抢地主");
                                main.time[0].setVisible(true);
                                setlord(0);// 设定地主
                                openlord(true);
                                second(3);
                                main.playerList[0].addAll(main.lordList);
                                Common.order(main.playerList[0]);
                                Common.rePosition(main, main.playerList[0], 0);
                                //openlord(false);

                        }
                }
                // 选完地主后 关闭地主按钮
                main.landlord[0].setVisible(false);
                main.landlord[1].setVisible(false);
                turnOn(false);
                for (int i = 0; i < 3; i++)
                {
                        main.time[i].setText("不要");
                        main.time[i].setVisible(false);
                }
                // 开始游戏 根据地主不同顺序不同
                main.turn=main.dizhuFlag;
                while (true) {

                        if(main.turn==1) //我
                        {
                                turnOn(true);// 出牌按钮 --我出牌
                                timeWait(30, 1);// 我自己的定时器
                                turnOn(false);//选完关闭
                                main.turn=(main.turn+1)%3;
                                if(win())//判断输赢
                                        break;
                        }
                        if (main.turn==0)
                        {
                                computer0();
                                main.turn=(main.turn+1)%3;
                                if(win())//判断输赢
                                        break;
                        }
                        if(main.turn==2)
                        {
                                computer2();
                                main.turn=(main.turn+1)%3;
                                if(win())//判断输赢
                                        break;
                        }
                }
        }

        // 等待i秒
        public void second(int i) {
                try {
                        Thread.sleep(i * 1000);
                } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }

        // 地主牌翻看
        public void openlord(boolean is) {
                for (int i = 0; i < 3; i++) {
                        if (is)
                                main.lordList.get(i).turnFront(); // 地主牌翻看
                        else {
                                main.lordList.get(i).turnRear(); // 地主牌闭合
                        }
                        main.lordList.get(i).canClick = true;// 可被点击
                }
        }

        // 设定地主
        public void setlord(int i) {
                Point point = new Point();
                if (i == 1)// 我是地主
                {
                        point.x = 80;
                        point.y = 430;
                        main.dizhuFlag = 1;// 设定地主
                }
                if (i == 0) {
                        point.x = 80;
                        point.y = 20;
                        main.dizhuFlag = 0;
                }
                if (i == 2) {
                        point.x = 700;
                        point.y = 20;
                        main.dizhuFlag = 2;
                }
                main.dizhu.setLocation(point);
                main.dizhu.setVisible(true);
        }

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

        // 电脑0走牌(我代表1)
        public void computer0() {
                timeWait(1, 0); // 定时
                ShowCard(0); // 出牌

        }

        // 电脑2走牌(我代表1)
        public void computer2() {
                timeWait(1, 2); // 定时
                ShowCard(2); // 出牌

        }

        // 走牌
        public void ShowCard(int role) {
                Model model = Common.getModel(main.playerList[role]);
                // 待走的牌
                List<String> list = new ArrayList();
                // 如果是主动出牌
                if (main.time[(role + 1) % 3].getText().equals("不要")
                                && main.time[(role + 2) % 3].getText().equals("不要")) {
                        // 有单出单 (除开3带,飞机能带的单牌)
                        if (model.a1.size() > (model.a111222.size() * 2 + model.a3.size())) {
                                list.add(model.a1.get(model.a1.size() - 1));
                        }// 有对子出对子 (除开3带,飞机)
                        else if (model.a2.size() > (model.a111222.size() * 2 + model.a3
                                        .size())) {
                                list.add(model.a2.get(model.a2.size() - 1));
                        }// 有顺子出顺子
                        else if (model.a123.size() > 0) {
                                list.add(model.a123.get(model.a123.size() - 1));
                        }// 有3带就出3带,没有就出光3
                        else if (model.a3.size() > 0) {
                                // 3带单,且非关键时刻不能带王,2
                                if (model.a1.size() > 0) {
                                        list.add(model.a1.get(model.a1.size() - 1));
                                }// 3带对
                                else if (model.a2.size() > 0) {
                                        list.add(model.a2.get(model.a2.size() - 1));
                                }
                                list.add(model.a3.get(model.a3.size() - 1));
                        }// 有双顺出双顺
                        else if (model.a112233.size() > 0) {
                                list.add(model.a112233.get(model.a112233.size() - 1));
                        }// 有飞机出飞机
                        else if (model.a111222.size() > 0) {
                                String name[] = model.a111222.get(0).split(",");
                                // 带单
                                if (name.length / 3 <= model.a1.size()) {
                                        list.add(model.a111222.get(model.a111222.size() - 1));
                                        for (int i = 0; i < name.length / 3; i++)
                                                list.add(model.a1.get(i));
                                } else if (name.length / 3 <= model.a2.size())// 带双
                                {
                                        list.add(model.a111222.get(model.a111222.size() - 1));
                                        for (int i = 0; i < name.length / 3; i++)
                                                list.add(model.a2.get(i));
                                }
                                // 有炸弹出炸弹
                        } else if (model.a4.size() > 0) {
                                // 4带2,1
                                int sizea1 = model.a1.size();
                                int sizea2 = model.a2.size();
                                if (sizea1 >= 2) {
                                        list.add(model.a1.get(sizea1 - 1));
                                        list.add(model.a1.get(sizea1 - 2));
                                        list.add(model.a4.get(0));

                                } else if (sizea2 >= 2) {
                                        list.add(model.a2.get(sizea1 - 1));
                                        list.add(model.a2.get(sizea1 - 2));
                                        list.add(model.a4.get(0));

                                } else {// 直接炸
                                        list.add(model.a4.get(0));

                                }

                        }
                }// 如果是跟牌
                else {
                        List<Card> player = main.currentList[(role + 2) % 3].size() > 0
                                        ? main.currentList[(role + 2) % 3]
                                        : main.currentList[(role + 1) % 3];

                        CardType cType=Common.jugdeType(player);
                        //如果是单牌
                        if(cType==CardType.c1)
                        {
                                AI_1(model.a1, player, list, role);
                        }//如果是对子
                        else if(cType==CardType.c2)
                        {
                                AI_1(model.a2, player, list, role);
                        }//3带
                        else if(cType==CardType.c3)
                        {
                                AI_1(model.a3, player, list, role);
                        }//炸弹
                        else if(cType==CardType.c4)
                        {
                                AI_1(model.a4, player, list, role);
                        }//如果是3带1
                        else if(cType==CardType.c31){
                                 //偏家 涉及到拆牌
                                //if((role+1)%3==main.dizhuFlag)
                                        AI_2(model.a3, model.a1, player, list, role);
                        }//如果是3带2
                        else if(cType==CardType.c32){
                                 //偏家
                                //if((role+1)%3==main.dizhuFlag)
                                        AI_2(model.a3, model.a2, player, list, role);
                        }//如果是4带11
                        else if(cType==CardType.c411){
                                        AI_5(model.a4, model.a1, player, list, role);
                        }
                        //如果是4带22
                        else if(cType==CardType.c422){
                                        AI_5(model.a4, model.a2, player, list, role);
                        }
                        //顺子
                        else if(cType==CardType.c123){
                                AI_3(model.a123, player, list, role);
                        }
                        //双顺
                        else if(cType==CardType.c1122){
                                AI_3(model.a112233, player, list, role);
                        }
                        //飞机带单
                        else if(cType==CardType.c11122234){
                                AI_4(model.a111222,model.a1, player, list, role);
                        }
                        //飞机带对
                        else if(cType==CardType.c1112223344){
                                AI_4(model.a111222,model.a2, player, list, role);
                        }
                        //炸弹
                        if(list.size()==0)
                        {
                                int len4=model.a4.size();
                                if(len4>0)
                                        list.add(model.a4.get(len4-1));
                        }
                }

                // 定位出牌
                main.currentList[role].clear();
                if (list.size() > 0) {
                        Point point = new Point();
                        if (role == 0)
                                point.x = 200;
                        if (role == 2)
                                point.x = 550;
                        point.y = (400 / 2) - (list.size() + 1) * 15 / 2;// 屏幕中部
                        // 将name转换成Card
                        for (int i = 0, len = list.size(); i < len; i++) {
                                List<Card> cards = getCardByName(main.playerList[role],
                                                list.get(i));
                                for (Card card : cards) {
                                        Common.move(card, card.getLocation(), point);
                                        point.y += 15;
                                        main.currentList[role].add(card);
                                        main.playerList[role].remove(card);
                                }
                        }
                        Common.rePosition(main, main.playerList[role], role);
                } else {
                        main.time[role].setVisible(true);
                        main.time[role].setText("不要");
                }
                for(Card card:main.currentList[role])
                        card.turnFront();
        }

        // 按name获得Card,方便从Model取出
        public List getCardByName(List<Card> list, String n) {
                String[] name = n.split(",");
                List cardsList = new ArrayList<Card>();
                int j = 0;
                for (int i = 0, len = list.size(); i < len; i++) {
                        if (j < name.length && list.get(i).name.equals(name[j])) {
                                cardsList.add(list.get(i));
                                i = 0;
                                j++;
                        }
                }
                return cardsList;
        }
        //顺子
        public void AI_3(List<String> model,List<Card> player,List<String> list,int role){

                for(int i=0,len=model.size();i<len;i++)
                {
                        String []s=model.get(i).split(",");
                        if(s.length==player.size()&&getValueInt(model.get(i))>Common.getValue(player.get(0)))
                        {
                                list.add(model.get(i));
                                return;
                        }
                }
        }
        //飞机带单,双
        public void AI_4(List<String> model1,List<String> model2,List<Card> player,List<String> list,int role){
                //排序按重复数
                player=Common.getOrder2(player);
                int len1=model1.size();
                int len2=model2.size();

                if(len1<1 || len2<1)
                        return;
                for(int i=0;i<len1;i++){
                        String []s=model1.get(i).split(",");
                        String []s2=model2.get(0).split(",");
                        if((s.length/3<=len2)&&(s.length*(3+s2.length)==player.size())&&getValueInt(model1.get(i))>Common.getValue(player.get(0)))
                        {
                                list.add(model1.get(i));
                                for(int j=1;j<=s.length/3;j++)
                                        list.add(model2.get(len2-j));
                        }
                }
        }
        //4带1,2
        public void AI_5(List<String> model1,List<String> model2,List<Card> player,List<String> list,int role){
                //排序按重复数
                player=Common.getOrder2(player);
                int len1=model1.size();
                int len2=model2.size();

                if(len1<1 || len2<2)
                        return;
                for(int i=0;i<len1;i++){
                        if(getValueInt(model1.get(i))>Common.getValue(player.get(0)))
                        {
                                list.add(model1.get(i));
                                for(int j=1;j<=2;j++)
                                        list.add(model2.get(len2-j));
                        }
                }
        }
        //单牌,对子,3个,4个,通用
        public void AI_1(List<String> model,List<Card> player,List<String> list,int role){
                //顶家
                if((role+1)%3==main.dizhuFlag)
                {

                        for(int i=0,len=model.size();i<len;i++)
                        {
                                if(getValueInt(model.get(i))>Common.getValue(player.get(0)))
                                {
                                        list.add(model.get(i));
                                        break;
                                }
                        }
                }else {//偏家

                        for(int len=model.size(),i=len-1;i>=0;i--)
                        {
                                if(getValueInt(model.get(i))>Common.getValue(player.get(0)))
                                {
                                        list.add(model.get(i));
                                        break;
                                }
                        }
                }
        }
        //3带1,2,4带1,2
        public void AI_2(List<String> model1,List<String> model2,List<Card> player,List<String> list,int role){
                //model1是主牌,model2是带牌,player是玩家出的牌,,list是准备回的牌
                //排序按重复数
                player=Common.getOrder2(player);
                int len1=model1.size();
                int len2=model2.size();
                //如果有王直接炸了
                if(len1>0&&model1.get(0).length()<10)
                {
                        list.add(model1.get(0));
                        System.out.println("王炸");
                        return;
                }
                if(len1<1 || len2<1)
                        return;
                for(int len=len1,i=len-1;i>=0;i--)
                {
                        if(getValueInt(model1.get(i))>Common.getValue(player.get(0)))
                        {
                                list.add(model1.get(i));
                                break;
                        }
                }
                list.add(model2.get(len2-1));
                if(list.size()<2)
                        list.clear();
        }
        // 延时,模拟时钟
        public void timeWait(int n, int player) {

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

                        while (main.nextPlayer == false && i >= 0) {
                                // main.container.setComponentZOrder(main.time[player], 0);
                                main.time[player].setText("倒计时:" + i);
                                main.time[player].setVisible(true);
                                second(1);
                                i--;
                        }
                        if (i == -1) {
                                main.time[player].setText("超时");
                        }
                        main.nextPlayer = false;
                } else {
                        for (int i = n; i >= 0; i--) {
                                second(1);
                                // main.container.setComponentZOrder(main.time[player], 0);
                                main.time[player].setText("倒计时:" + i);
                                main.time[player].setVisible(true);
                        }
                }
                main.time[player].setVisible(false);
        }
        //通过name估值
        public  int getValueInt(String n){
                String name[]=n.split(",");
                String s=name[0];
                int i=Integer.parseInt(s.substring(2, s.length()));
                if(s.substring(0, 1).equals("5"))
                        i+=3;
                if(s.substring(2, s.length()).equals("1")||s.substring(2, s.length()).equals("2"))
                        i+=13;
                return i;
        }
        //判断输赢
        public boolean win(){
                for(int i=0;i<3;i++){
                        if(main.playerList[i].size()==0)
                        {
                                String s;
                                if(i==1)
                                {
                                        s="恭喜你,胜利了!";
                                }else {
                                        s="恭喜电脑"+i+",赢了! 你的智商有待提高哦";
                                }
                                JOptionPane.showMessageDialog(main, s);
                                return true;
                        }
                }
                return false;
        }
}

本文转载于:java教程网

时间: 2024-10-08 03:29:16

java斗地主的相关文章

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;

java 斗地主

代码: package com.oracle.demo02; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; public class DouDiZhu { //斗地主(发牌) public static void main(String[] args) { //定义扑克牌Map HashMap<Integer, String> pooker=new HashMap<I

java 18 - 12 模拟斗地主洗牌、发牌,并对发的牌进行排序

1 /* 2 模拟斗地主的发牌功能(发牌完毕后发到手上的牌是有顺序的) 3 分析: 4 A:创建一个HashMap集合 5 B:创建一个ArrayList集合 6 C:创建两个字符串,一个是花色,一个是牌的数字 (发牌得有一盒牌) 7 为了方便以后的排序,创建这两个字符串的时候,按照大小顺序排列(斗地主中的大小顺序) 8 大小王除外 9 D:把这两个字符串放进HashMap集合中(拼接一起 花色+牌号) 同时给每个放进去牌进行编码0--52并存储 10 同时也给ArrayList集合中存储编码,

Java集合练习:斗地主游戏

这是一个模拟斗地主的小游戏,最后看到的牌型是经过排序的,具体代码和解释如下: package cn.poker_test; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.TreeSet; /* * 模拟斗地主小游戏 * * 思路: * A:创建一个HashMap集合 * B:创建一个ArrayList集合 * C:创建花色数组和点数数组 *

java之实例斗地主(集合)

public class CollectionTest { /**  * 玩斗地主的三个步骤:  * A 买牌  * B 洗牌  * C 发牌  * D 看底牌  */ public static void main(String[] args) { String[] color={"黑桃","红桃","梅花","方块"};  String[] numbers={"A","2",&quo

Java学习笔记34(集合框架八:综合案例:模拟斗地主的洗牌发牌)

规则: 1.54张扑克牌,有花色 2.顺序打乱,一人一张依次发牌,一人17张,留三张作为底牌 3.看牌:按大小王2A....43的序排列打印 示例: package demo; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; public class DouDiZhu { public static void main(String[] args) { // 创建Map集合,键

通过Java实现斗地主

功能:洗牌,发牌,对玩家手中的牌排序,看牌 package demo06; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; /** * * @author Administrator * 实现模拟斗地主的功能 * 1.组合牌 * 2.洗牌 * 3.发牌 * 4.看牌 */ public class DouDiZhu { public static void main(Strin

JAVA面向对象编程课程设计——网络版单机斗地主

一.团队介绍 成员姓名 任务分配 成员课程设计博客链接 兰泽祥(组长) 数据库,斗地主规则的实现,人机自动出牌的算法,实体类的设计 吴修恩 JSP界面的设计,前后端数据的交互,servlet设计,动态更新界面 二.项目GIT地址 fight_against_landlords 三.项目git提交记录截图 四.项目功能架构图.主要功能流程图 五.面向对象设计类图 1.CardGames类图 2.CardGame类图 3.Card类图 4.UserUserInformation类图 5.User类图

Java基础之如何解决斗地主问题

    难的是逻辑的分析,把逻辑转化成代码是一种能力,这种能力需要多练习总结.     多多指教,共同进步. 问题: 要求实现斗地主游戏发牌过程,打印三个玩家的牌和底牌.在不看底牌的情况下,统计出三个玩家的炸弹数: S(small)代表小王,B(big)代表大王 ----------------------------------------------------------------------------------------------------------------------