欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Eclipse+Java+Swing實(shí)現(xiàn)斗地主游戲(代碼)

 更新時(shí)間:2022年01月26日 16:30:13   作者:水堅(jiān)石青  
這篇文章主要介紹了Eclipse+Java+Swing實(shí)現(xiàn)斗地主游戲并附上詳細(xì)的代碼實(shí)現(xiàn),正在學(xué)習(xí)的你可以當(dāng)小練習(xí)練練,希望對(duì)你有所幫助

一、系統(tǒng)介紹

本系統(tǒng)實(shí)現(xiàn)撲克的分發(fā),搶地主,電腦自動(dòng)出牌等功能。

二、系統(tǒng)展示

1.撲克分發(fā)

2.搶地主

3.出牌

4.游戲勝利

三、系統(tǒng)實(shí)現(xiàn)

Card.java

package com.sjsq;

import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
/**
?*?
?* 撲克管理類(lèi)
?*?
?* @author shuijianshiqing
?*
?* @date 2020-09-09 20:41
?*
?*/
public class Card extends JLabel implements MouseListener {

?? ?Main main;// Main類(lèi)的引用
?? ?String name;// 圖片url名字
?? ?boolean up;// 是否正反面
?? ?boolean canClick = false;// 是否可被點(diǎn)擊
?? ?boolean clicked = false;// 是否點(diǎn)擊過(guò)

?? ?public Card(Main m, String name, boolean up) {
?? ??? ?this.main = m;
?? ??? ?this.name = name;
?? ??? ?this.up = up;
?? ??? ?if (this.up)
?? ??? ??? ?this.turnFront();
?? ??? ?else {
?? ??? ??? ?this.turnRear();
?? ??? ?}
?? ??? ?this.setSize(71, 96);
?? ??? ?this.setVisible(true);
?? ??? ?this.addMouseListener(this);
?? ?}

?? ?// 正面
?? ?public void turnFront() {
?? ??? ?this.setIcon(new ImageIcon("images/" + name + ".gif"));
?? ??? ?this.up = true;

?? ?}

?? ?// 反面
?? ?public void turnRear() {
?? ??? ?this.setIcon(new ImageIcon("images/rear.gif"));
?? ??? ?this.up = false;
?? ?}

?? ?@Override
?? ?public void mouseClicked(MouseEvent e) {
?? ??? ?if (canClick) {
?? ??? ??? ?Point from = this.getLocation();
?? ??? ??? ?int step; // 移動(dòng)的距離
?? ??? ??? ?if (clicked)
?? ??? ??? ??? ?step = -30;
?? ??? ??? ?else {
?? ??? ??? ??? ?step = 30;
?? ??? ??? ?}
?? ??? ??? ?clicked = !clicked; // 反向
?? ??? ??? ?// 當(dāng)被選中的時(shí)候,向前移動(dòng)一步/后退一步
?? ??? ??? ?Common.move(this, from, new Point(from.x, from.y - step), 10);
?? ??? ?}

?? ?}

?? ?public void mouseEntered(MouseEvent arg0) {
?? ?}

?? ?public void mouseExited(MouseEvent arg0) {
?? ?}

?? ?public void mousePressed(MouseEvent arg0) {
?? ?}

?? ?public void mouseReleased(MouseEvent arg0) {
?? ?}

}

CardType.java

package com.sjsq;

/**
?*?
?* 出牌類(lèi)型
?*?
?* @author shuijianshiqing
?*
?* @date 2020-09-09 20:44
?*
?*/
public enum CardType {
?? ?c1,//單牌。
?? ?c2,//對(duì)子。
?? ?c3,//3不帶。
?? ?c4,//炸彈。
?? ?c31,//3帶1。
?? ?c32,//3帶2。
?? ?c411,//4帶2個(gè)單,或者一對(duì)
?? ?c422,//4帶2對(duì)
?? ?c123,//連子。
?? ?c1122,//連隊(duì)。
?? ?c111222,//飛機(jī)。
?? ?c11122234,//飛機(jī)帶單排.
?? ?c1112223344,//飛機(jī)帶對(duì)子.
?? ?c0//不能出牌
}

Common.java

package com.sjsq;

import java.awt.Point;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
?*?
?* 各類(lèi)判斷函數(shù)
?*?
?* @author shuijianshiqing
?*
?* @date 2020-09-09 20:52
?*
?*/
public class Common {

?? ?// 判斷牌型
?? ?public static CardType jugdeType(List<Card> list) {
?? ??? ?// 因?yàn)橹芭判蜻^(guò)所以比較好判斷
?? ??? ?int len = list.size();
?? ??? ?// 單牌,對(duì)子,3不帶,4個(gè)一樣炸彈
?? ??? ?if (len <= 4) { // 如果第一個(gè)和最后個(gè)相同,說(shuō)明全部相同
?? ??? ??? ?if (list.size() > 0 && Common.getValue(list.get(0)) == Common.getValue(list.get(len - 1))) {
?? ??? ??? ??? ?switch (len) {
?? ??? ??? ??? ?case 1:
?? ??? ??? ??? ??? ?return CardType.c1;
?? ??? ??? ??? ?case 2:
?? ??? ??? ??? ??? ?return CardType.c2;
?? ??? ??? ??? ?case 3:
?? ??? ??? ??? ??? ?return CardType.c3;
?? ??? ??? ??? ?case 4:
?? ??? ??? ??? ??? ?return CardType.c4;
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ??? ?// 雙王,炸彈
?? ??? ??? ?if (len == 2 && Common.getColor(list.get(1)) == 5 && Common.getColor(list.get(0)) == 5)
?? ??? ??? ??? ?return CardType.c4;
?? ??? ??? ?// 當(dāng)?shù)谝粋€(gè)和最后個(gè)不同時(shí),3帶1
?? ??? ??? ?if (len == 4 && ((Common.getValue(list.get(0)) == Common.getValue(list.get(len - 2)))
?? ??? ??? ??? ??? ?|| Common.getValue(list.get(1)) == Common.getValue(list.get(len - 1))))
?? ??? ??? ??? ?return CardType.c31;
?? ??? ??? ?else {
?? ??? ??? ??? ?return CardType.c0;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?// 當(dāng)5張以上時(shí),連字,3帶2,飛機(jī),2順,4帶2等等
?? ??? ?if (len >= 5) {// 現(xiàn)在按相同數(shù)字最大出現(xiàn)次數(shù)
?? ??? ??? ?Card_index card_index = new Card_index();
?? ??? ??? ?for (int i = 0; i < 4; i++)
?? ??? ??? ??? ?card_index.a[i] = new ArrayList<Integer>();
?? ??? ??? ?// 求出各種數(shù)字出現(xiàn)頻率
?? ??? ??? ?Common.getMax(card_index, list); // a[0,1,2,3]分別表示重復(fù)1,2,3,4次的牌
?? ??? ??? ?// 3帶2 -----必含重復(fù)3次的牌
?? ??? ??? ?if (card_index.a[2].size() == 1 && card_index.a[1].size() == 1 && len == 5)
?? ??? ??? ??? ?return CardType.c32;
?? ??? ??? ?// 4帶2(單,雙)
?? ??? ??? ?if (card_index.a[3].size() == 1 && len == 6)
?? ??? ??? ??? ?return CardType.c411;
?? ??? ??? ?// 4帶2對(duì)
?? ??? ??? ?if (card_index.a[3].size() == 1 && card_index.a[1].size() == 2 && len == 8)
?? ??? ??? ??? ?return CardType.c422;
?? ??? ??? ?// 順子,保證不存在王
?? ??? ??? ?if ((Common.getColor(list.get(0)) != 5) && (card_index.a[0].size() == len)
?? ??? ??? ??? ??? ?&& (Common.getValue(list.get(0)) - Common.getValue(list.get(len - 1)) == len - 1))
?? ??? ??? ??? ?return CardType.c123;
?? ??? ??? ?// 連隊(duì)
?? ??? ??? ?if (card_index.a[1].size() == len / 2 && len % 2 == 0 && len / 2 >= 3
?? ??? ??? ??? ??? ?&& (Common.getValue(list.get(0)) - Common.getValue(list.get(len - 1)) == (len / 2 - 1)))
?? ??? ??? ??? ?return CardType.c1122;
?? ??? ??? ?// 飛機(jī)
?? ??? ??? ?if (card_index.a[2].size() == len / 3 && (len % 3 == 0)
?? ??? ??? ??? ??? ?&& (Common.getValue(list.get(0)) - Common.getValue(list.get(len - 1)) == (len / 3 - 1)))
?? ??? ??? ??? ?return CardType.c111222;
?? ??? ??? ?// 飛機(jī)帶n單,n/2對(duì)
?? ??? ??? ?if (card_index.a[2].size() == len / 4 && ((Integer) (card_index.a[2].get(len / 4 - 1))
?? ??? ??? ??? ??? ?- (Integer) (card_index.a[2].get(0)) == len / 4 - 1))
?? ??? ??? ??? ?return CardType.c11122234;

?? ??? ??? ?// 飛機(jī)帶n雙
?? ??? ??? ?if (card_index.a[2].size() == len / 5 && card_index.a[2].size() == len / 5
?? ??? ??? ??? ??? ?&& ((Integer) (card_index.a[2].get(len / 5 - 1)) - (Integer) (card_index.a[2].get(0)) == len / 5
?? ??? ??? ??? ??? ??? ??? ?- 1))
?? ??? ??? ??? ?return CardType.c1112223344;

?? ??? ?}
?? ??? ?return CardType.c0;
?? ?}

?? ?// 移動(dòng)效果的函數(shù),用于發(fā)牌
?? ?public static void move(Card card, Point from, Point to, int t) {
?? ??? ?if (to.x != from.x) {
?? ??? ??? ?double k = (1.0) * (to.y - from.y) / (to.x - from.x);
?? ??? ??? ?double b = to.y - to.x * k;
?? ??? ??? ?int flag = 0;// 判斷向左還是向右移動(dòng)步幅
?? ??? ??? ?if (from.x < to.x) {

?? ??? ??? ??? ?if (t % 3 == 2) {
?? ??? ??? ??? ??? ?flag = 3;
?? ??? ??? ??? ?} else {
?? ??? ??? ??? ??? ?flag = 10;
?? ??? ??? ??? ?}
?? ??? ??? ?} else {
?? ??? ??? ??? ?if (t % 3 == 2) {
?? ??? ??? ??? ??? ?flag = -3;
?? ??? ??? ??? ?} else {
?? ??? ??? ??? ??? ?flag = -10;
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ??? ?for (int i = from.x; Math.abs(i - to.x) > 20; i += flag) {
?? ??? ??? ??? ?double y = k * i + b;// 這里主要用的數(shù)學(xué)中的線性函數(shù)
?? ??? ??? ??? ?System.out.println(y + "=" + k + "*" + i + "+" + b);
?? ??? ??? ??? ?card.setLocation(i, (int) y);

?? ??? ??? ??? ?try {
?? ??? ??? ??? ??? ?Thread.sleep(20); // 延遲,可自己設(shè)置
?? ??? ??? ??? ?} catch (InterruptedException e) {
?? ??? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ??? ?// 位置校準(zhǔn)
?? ??? ?card.setLocation(to);
?? ?}

?? ?// 對(duì)list排序
?? ?public static void order(List<Card> list) {

?? ??? ?Collections.sort(list, new Comparator<Card>() {

?? ??? ??? ?public int compare(Card o1, Card o2) {

?? ??? ??? ??? ?// TODO Auto-generated method stub
?? ??? ??? ??? ?int a1 = Integer.parseInt(o1.name.substring(0, 1));// 花色

?? ??? ??? ??? ?int a2 = Integer.parseInt(o2.name.substring(0, 1));
?? ??? ??? ??? ?int b1 = Integer.parseInt(o1.name.substring(2, o1.name.length()));// 數(shù)值
?? ??? ??? ??? ?int b2 = Integer.parseInt(o2.name.substring(2, o2.name.length()));
?? ??? ??? ??? ?int flag = 0;
?? ??? ??? ??? ?// 如果是王的話
?? ??? ??? ??? ?if (a1 == 5)
?? ??? ??? ??? ??? ?b1 += 100;
?? ??? ??? ??? ?if (a1 == 5 && b1 == 1)
?? ??? ??? ??? ??? ?b1 += 50;

?? ??? ??? ??? ?if (a2 == 5)
?? ??? ??? ??? ??? ?b2 += 100;
?? ??? ??? ??? ?if (a2 == 5 && b2 == 1)
?? ??? ??? ??? ??? ?b2 += 50;
?? ??? ??? ??? ?// 如果是A或者2
?? ??? ??? ??? ?if (b1 == 1)
?? ??? ??? ??? ??? ?b1 += 20;
?? ??? ??? ??? ?if (b2 == 1)
?? ??? ??? ??? ??? ?b2 += 20;
?? ??? ??? ??? ?if (b1 == 2)
?? ??? ??? ??? ??? ?b1 += 30;
?? ??? ??? ??? ?if (b2 == 2)
?? ??? ??? ??? ??? ?b2 += 30;
?? ??? ??? ??? ?flag = b2 - b1;
?? ??? ??? ??? ?if (flag == 0) {

?? ??? ??? ??? ??? ?return a2 - a1;
?? ??? ??? ??? ?} else {

?? ??? ??? ??? ??? ?return flag;
?? ??? ??? ??? ?}

?? ??? ??? ?}
?? ??? ?});

?? ?}

?? ?// 重新定位 flag代表電腦1 ,2 或者是我
?? ?public static void rePosition(Main m, List<Card> list, int flag) {
?? ??? ?Point p = new Point();
?? ??? ?if (flag == 0) {
?? ??? ??? ?p.x = 50;
?? ??? ??? ?p.y = (450 / 2) - (list.size() + 1) * 15 / 2;
?? ??? ?}
?? ??? ?if (flag == 1) {// 我的排序 _y=450 width=830
?? ??? ??? ?p.x = (800 / 2) - (list.size() + 1) * 21 / 2;
?? ??? ??? ?p.y = 450;
?? ??? ?}
?? ??? ?if (flag == 2) {
?? ??? ??? ?p.x = 700;
?? ??? ??? ?p.y = (450 / 2) - (list.size() + 1) * 15 / 2;
?? ??? ?}
?? ??? ?int len = list.size();
?? ??? ?for (int i = 0; i < len; i++) {
?? ??? ??? ?Card card = list.get(i);
?? ??? ??? ?Common.move(card, card.getLocation(), p, 10);
?? ??? ??? ?m.container.setComponentZOrder(card, 0);
?? ??? ??? ?if (flag == 1)
?? ??? ??? ??? ?p.x += 21;
?? ??? ??? ?else
?? ??? ??? ??? ?p.y += 15;

?? ??? ?}
?? ?}

?? ?// 地主牌權(quán)值,看是否搶地主
?? ?public static int getScore(List<Card> list) {
?? ??? ?int count = 0;
?? ??? ?for (int i = 0, len = list.size(); i < len; i++) {
?? ??? ??? ?Card card = list.get(i);
?? ??? ??? ?if (card.name.substring(0, 1).equals("5")) {
?? ??? ??? ??? ?// System.out.println(card.name.substring(0, 1));
?? ??? ??? ??? ?count += 5;
?? ??? ??? ?}
?? ??? ??? ?if (card.name.substring(2, card.name.length()).equals("2")) {
?? ??? ??? ??? ?// System.out.println(2);
?? ??? ??? ??? ?count += 2;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?return count;

?? ?}

?? ?// 返回花色
?? ?public static int getColor(Card card) {
?? ??? ?return Integer.parseInt(card.name.substring(0, 1));
?? ?}

?? ?// 返回值
?? ?public static int getValue(Card card) {
?? ??? ?int i = Integer.parseInt(card.name.substring(2, card.name.length()));
?? ??? ?if (card.name.substring(2, card.name.length()).equals("2"))
?? ??? ??? ?i += 13;
?? ??? ?if (card.name.substring(2, card.name.length()).equals("1"))
?? ??? ??? ?i += 13;
?? ??? ?if (Common.getColor(card) == 5)
?? ??? ??? ?i += 2;// 是王
?? ??? ?return i;
?? ?}

?? ?// 得到最大相同數(shù)
?? ?public static void getMax(Card_index card_index, List<Card> list) {
?? ??? ?int count[] = new int[14];// 1-13各算一種,王算第14種
?? ??? ?for (int i = 0; i < 14; i++)
?? ??? ??? ?count[i] = 0;
?? ??? ?for (int i = 0; i < list.size(); i++) {
?? ??? ??? ?if (Common.getColor(list.get(i)) == 5)
?? ??? ??? ??? ?count[13]++;
?? ??? ??? ?else
?? ??? ??? ??? ?count[Common.getValue(list.get(i)) - 1]++;
?? ??? ?}
?? ??? ?for (int i = 0; i < 14; i++) {
?? ??? ??? ?switch (count[i]) {
?? ??? ??? ?case 1:
?? ??? ??? ??? ?card_index.a[0].add(i + 1);
?? ??? ??? ??? ?break;
?? ??? ??? ?case 2:
?? ??? ??? ??? ?card_index.a[1].add(i + 1);
?? ??? ??? ??? ?break;
?? ??? ??? ?case 3:
?? ??? ??? ??? ?card_index.a[2].add(i + 1);
?? ??? ??? ??? ?break;
?? ??? ??? ?case 4:
?? ??? ??? ??? ?card_index.a[3].add(i + 1);
?? ??? ??? ??? ?break;
?? ??? ??? ?}
?? ??? ?}
?? ?}

?? ?// 拆牌
?? ?public static Model getModel(List<Card> list) {
?? ??? ?// 先復(fù)制一個(gè)list
?? ??? ?List<Card> list2 = new ArrayList<Card>(list);
?? ??? ?Model model = new Model();
?? ??? ?// ------先拆炸彈
?? ??? ?Common.getBoomb(list2, model); // ok
?? ??? ?// ------拆3帶
?? ??? ?Common.getThree(list2, model);
?? ??? ?// 拆飛機(jī)
?? ??? ?Common.getPlane(list2, model);
?? ??? ?// ------拆對(duì)子
?? ??? ?Common.getTwo(list2, model);
?? ??? ?// 拆連隊(duì)
?? ??? ?Common.getTwoTwo(list2, model);
?? ??? ?// 拆順子
?? ??? ?Common.get123(list2, model);
?? ??? ?// 拆單
?? ??? ?Common.getSingle(list2, model);
?? ??? ?return model;
?? ?}

?? ?// 拆連子
?? ?public static void get123(List<Card> list, Model model) {
?? ??? ?List<Card> del = new ArrayList<Card>();// 要?jiǎng)h除的Cards
?? ??? ?if (list.size() > 0 && (Common.getValue(list.get(0)) < 7 || Common.getValue(list.get(list.size() - 1)) > 10))
?? ??? ??? ?return;
?? ??? ?if (list.size() < 5)
?? ??? ??? ?return;
?? ??? ?for (int i = 0, len = list.size(); i < len; i++) {
?? ??? ??? ?int k = i;
?? ??? ??? ?for (int j = i; j < len; j++) {
?? ??? ??? ??? ?if (Common.getValue(list.get(i)) - Common.getValue(list.get(j)) == j - i) {
?? ??? ??? ??? ??? ?k = j;
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ??? ?if (k - i >= 4) {
?? ??? ??? ??? ?String s = "";
?? ??? ??? ??? ?for (int j = i; j < k; j++) {
?? ??? ??? ??? ??? ?s += list.get(j).name + ",";
?? ??? ??? ??? ??? ?del.add(list.get(j));
?? ??? ??? ??? ?}
?? ??? ??? ??? ?s += list.get(k).name;
?? ??? ??? ??? ?del.add(list.get(k));
?? ??? ??? ??? ?model.a123.add(s);
?? ??? ??? ??? ?i = k;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?list.removeAll(del);
?? ?}

?? ?// 拆雙順
?? ?public static void getTwoTwo(List<Card> list, Model model) {
?? ??? ?List<String> del = new ArrayList<String>();// 要?jiǎng)h除的Cards
?? ??? ?// 從model里面的對(duì)子找
?? ??? ?List<String> l = model.a2;
?? ??? ?if (l.size() < 3)
?? ??? ??? ?return;
?? ??? ?Integer s[] = new Integer[l.size()];
?? ??? ?for (int i = 0, len = l.size(); i < len; i++) {
?? ??? ??? ?String[] name = l.get(i).split(",");
?? ??? ??? ?s[i] = Integer.parseInt(name[0].substring(2, name[0].length()));
?? ??? ?}
?? ??? ?// s0,1,2,3,4 13,9,8,7,6
?? ??? ?for (int i = 0, len = l.size(); i < len; i++) {
?? ??? ??? ?int k = i;
?? ??? ??? ?for (int j = i; j < len; j++) {
?? ??? ??? ??? ?if (s[i] - s[j] == j - i)
?? ??? ??? ??? ??? ?k = j;
?? ??? ??? ?}
?? ??? ??? ?if (k - i >= 2)// k=4 i=1
?? ??? ??? ?{// 說(shuō)明從i到k是連隊(duì)
?? ??? ??? ??? ?String ss = "";
?? ??? ??? ??? ?for (int j = i; j < k; j++) {
?? ??? ??? ??? ??? ?ss += l.get(j) + ",";
?? ??? ??? ??? ??? ?del.add(l.get(j));
?? ??? ??? ??? ?}
?? ??? ??? ??? ?ss += l.get(k);
?? ??? ??? ??? ?model.a112233.add(ss);
?? ??? ??? ??? ?del.add(l.get(k));
?? ??? ??? ??? ?i = k;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?l.removeAll(del);
?? ?}

?? ?// 拆飛機(jī)
?? ?public static void getPlane(List<Card> list, Model model) {
?? ??? ?List<String> del = new ArrayList<String>();// 要?jiǎng)h除的Cards
?? ??? ?// 從model里面的3帶找
?? ??? ?List<String> l = model.a3;
?? ??? ?if (l.size() < 2)
?? ??? ??? ?return;
?? ??? ?Integer s[] = new Integer[l.size()];
?? ??? ?for (int i = 0, len = l.size(); i < len; i++) {
?? ??? ??? ?String[] name = l.get(i).split(",");
?? ??? ??? ?s[i] = Integer.parseInt(name[0].substring(2, name[0].length()));
?? ??? ?}
?? ??? ?for (int i = 0, len = l.size(); i < len; i++) {
?? ??? ??? ?int k = i;
?? ??? ??? ?for (int j = i; j < len; j++) {
?? ??? ??? ??? ?if (s[i] - s[j] == j - i)
?? ??? ??? ??? ??? ?k = j;
?? ??? ??? ?}
?? ??? ??? ?if (k != i) {// 說(shuō)明從i到k是飛機(jī)
?? ??? ??? ??? ?String ss = "";
?? ??? ??? ??? ?for (int j = i; j < k; j++) {
?? ??? ??? ??? ??? ?ss += l.get(j) + ",";
?? ??? ??? ??? ??? ?del.add(l.get(j));
?? ??? ??? ??? ?}
?? ??? ??? ??? ?ss += l.get(k);
?? ??? ??? ??? ?model.a111222.add(ss);
?? ??? ??? ??? ?del.add(l.get(k));
?? ??? ??? ??? ?i = k;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?l.removeAll(del);
?? ?}

?? ?// 拆炸彈
?? ?public static void getBoomb(List<Card> list, Model model) {
?? ??? ?List<Card> del = new ArrayList<Card>();// 要?jiǎng)h除的Cards
?? ??? ?// 王炸
?? ??? ?if (list.size() >= 2 && Common.getColor(list.get(0)) == 5 && Common.getColor(list.get(1)) == 5) {
?? ??? ??? ?model.a4.add(list.get(0).name + "," + list.get(1).name); // 按名字加入
?? ??? ??? ?del.add(list.get(0));
?? ??? ??? ?del.add(list.get(1));
?? ??? ?}
?? ??? ?// 如果王不構(gòu)成炸彈咋先拆單
?? ??? ?if (Common.getColor(list.get(0)) == 5 && Common.getColor(list.get(1)) != 5) {
?? ??? ??? ?del.add(list.get(0));
?? ??? ??? ?model.a1.add(list.get(0).name);
?? ??? ?}
?? ??? ?list.removeAll(del);
?? ??? ?// 一般的炸彈
?? ??? ?for (int i = 0, len = list.size(); i < len; i++) {
?? ??? ??? ?if (i + 3 < len && Common.getValue(list.get(i)) == Common.getValue(list.get(i + 3))) {
?? ??? ??? ??? ?String s = list.get(i).name + ",";
?? ??? ??? ??? ?s += list.get(i + 1).name + ",";
?? ??? ??? ??? ?s += list.get(i + 2).name + ",";
?? ??? ??? ??? ?s += list.get(i + 3).name;
?? ??? ??? ??? ?model.a4.add(s);
?? ??? ??? ??? ?for (int j = i; j <= i + 3; j++)
?? ??? ??? ??? ??? ?del.add(list.get(j));
?? ??? ??? ??? ?i = i + 3;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?list.removeAll(del);
?? ?}

?? ?// 拆3帶
?? ?public static void getThree(List<Card> list, Model model) {
?? ??? ?List<Card> del = new ArrayList<Card>();// 要?jiǎng)h除的Cards
?? ??? ?// 連續(xù)3張相同
?? ??? ?for (int i = 0, len = list.size(); i < len; i++) {
?? ??? ??? ?if (i + 2 < len && Common.getValue(list.get(i)) == Common.getValue(list.get(i + 2))) {
?? ??? ??? ??? ?String s = list.get(i).name + ",";
?? ??? ??? ??? ?s += list.get(i + 1).name + ",";
?? ??? ??? ??? ?s += list.get(i + 2).name;
?? ??? ??? ??? ?model.a3.add(s);
?? ??? ??? ??? ?for (int j = i; j <= i + 2; j++)
?? ??? ??? ??? ??? ?del.add(list.get(j));
?? ??? ??? ??? ?i = i + 2;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?list.removeAll(del);
?? ?}

?? ?// 拆對(duì)子
?? ?public static void getTwo(List<Card> list, Model model) {
?? ??? ?List<Card> del = new ArrayList<Card>();// 要?jiǎng)h除的Cards
?? ??? ?// 連續(xù)2張相同
?? ??? ?for (int i = 0, len = list.size(); i < len; i++) {
?? ??? ??? ?if (i + 1 < len && Common.getValue(list.get(i)) == Common.getValue(list.get(i + 1))) {
?? ??? ??? ??? ?String s = list.get(i).name + ",";
?? ??? ??? ??? ?s += list.get(i + 1).name;
?? ??? ??? ??? ?model.a2.add(s);
?? ??? ??? ??? ?for (int j = i; j <= i + 1; j++)
?? ??? ??? ??? ??? ?del.add(list.get(j));
?? ??? ??? ??? ?i = i + 1;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?list.removeAll(del);
?? ?}

?? ?// 拆單牌
?? ?public static void getSingle(List<Card> list, Model model) {
?? ??? ?List<Card> del = new ArrayList<Card>();// 要?jiǎng)h除的Cards
?? ??? ?// 1
?? ??? ?for (int i = 0, len = list.size(); i < len; i++) {
?? ??? ??? ?model.a1.add(list.get(i).name);
?? ??? ??? ?del.add(list.get(i));
?? ??? ?}
?? ??? ?list.removeAll(del);
?? ?}

?? ?// 隱藏之前出過(guò)的牌
?? ?public static void hideCards(List<Card> list) {
?? ??? ?for (int i = 0, len = list.size(); i < len; i++) {
?? ??? ??? ?list.get(i).setVisible(false);
?? ??? ?}
?? ?}

?? ?// 檢查牌的是否能出
?? ?public static int checkCards(List<Card> c, List<Card>[] current) {
?? ??? ?// 找出當(dāng)前最大的牌是哪個(gè)電腦出的,c是點(diǎn)選的牌
?? ??? ?List<Card> currentlist = (current[0].size() > 0) ? current[0] : current[2];
?? ??? ?CardType cType = Common.jugdeType(c);
?? ??? ?// 如果張數(shù)不同直接過(guò)濾
?? ??? ?if (cType != CardType.c4 && c.size() != currentlist.size())
?? ??? ??? ?return 0;
?? ??? ?// 比較我的出牌類(lèi)型
?? ??? ?if (Common.jugdeType(c) != Common.jugdeType(currentlist)) {

?? ??? ??? ?return 0;
?? ??? ?}
?? ??? ?// 比較出的牌是否要大
?? ??? ?// 王炸彈
?? ??? ?if (cType == CardType.c4) {
?? ??? ??? ?if (c.size() == 2)
?? ??? ??? ??? ?return 1;
?? ??? ??? ?if (currentlist.size() == 2)
?? ??? ??? ??? ?return 0;
?? ??? ?}
?? ??? ?// 單牌,對(duì)子,3帶,4炸彈
?? ??? ?if (cType == CardType.c1 || cType == CardType.c2 || cType == CardType.c3 || cType == CardType.c4) {
?? ??? ??? ?if (Common.getValue(c.get(0)) <= Common.getValue(currentlist.get(0))) {
?? ??? ??? ??? ?return 0;
?? ??? ??? ?} else {
?? ??? ??? ??? ?return 1;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?// 順子,連隊(duì),飛機(jī)裸
?? ??? ?if (cType == CardType.c123 || cType == CardType.c1122 || cType == CardType.c111222) {
?? ??? ??? ?if (Common.getValue(c.get(0)) <= Common.getValue(currentlist.get(0)))
?? ??? ??? ??? ?return 0;
?? ??? ??? ?else
?? ??? ??? ??? ?return 1;
?? ??? ?}
?? ??? ?// 按重復(fù)多少排序
?? ??? ?// 3帶1,3帶2 ,飛機(jī)帶單,雙,4帶1,2,只需比較第一個(gè)就行,獨(dú)一無(wú)二的
?? ??? ?if (cType == CardType.c31 || cType == CardType.c32 || cType == CardType.c411 || cType == CardType.c422
?? ??? ??? ??? ?|| cType == CardType.c11122234 || cType == CardType.c1112223344) {
?? ??? ??? ?List<Card> a1 = Common.getOrder2(c); // 我出的牌
?? ??? ??? ?List<Card> a2 = Common.getOrder2(currentlist);// 當(dāng)前最大牌
?? ??? ??? ?if (Common.getValue(a1.get(0)) < Common.getValue(a2.get(0)))
?? ??? ??? ??? ?return 0;
?? ??? ?}
?? ??? ?return 1;
?? ?}

?? ?// 按照重復(fù)次數(shù)排序
?? ?public static List getOrder2(List<Card> list) {
?? ??? ?List<Card> list2 = new ArrayList<Card>(list);
?? ??? ?List<Card> list3 = new ArrayList<Card>();
?? ??? ?// List<Integer> list4=new ArrayList<Integer>();
?? ??? ?int len = list2.size();
?? ??? ?int a[] = new int[20];// 記錄數(shù)
?? ??? ?for (int i = 0; i < 20; i++)
?? ??? ??? ?a[i] = 0;
?? ??? ?for (int i = 0; i < len; i++) {
?? ??? ??? ?a[Common.getValue(list2.get(i))]++;
?? ??? ?}
?? ??? ?int max = 0;
?? ??? ?for (int i = 0; i < 20; i++) {
?? ??? ??? ?max = 0;
?? ??? ??? ?for (int j = 19; j >= 0; j--) {
?? ??? ??? ??? ?if (a[j] > a[max])
?? ??? ??? ??? ??? ?max = j;
?? ??? ??? ?}

?? ??? ??? ?for (int k = 0; k < len; k++) {
?? ??? ??? ??? ?if (Common.getValue(list2.get(k)) == max) {
?? ??? ??? ??? ??? ?list3.add(list2.get(k));
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ??? ?list2.remove(list3);
?? ??? ??? ?a[max] = 0;
?? ??? ?}
?? ??? ?return list3;
?? ?}
}

class Card_index {
?? ?List a[] = new ArrayList[4];// 單張
}

Model.java

package com.sjsq;

import java.util.ArrayList;
import java.util.List;

/**
?*?
?* 撲克類(lèi)型List類(lèi)
?*?
?* @author shuijianshiqing
?*
?* @date 2020-09-09 20:47
?*
?*/
public class Model {
?? ?//一組牌
?? ?int value; //權(quán)值
?? ?int num;// 手?jǐn)?shù) (幾次能夠走完,沒(méi)有擋的情況下)
?? ?List<String> a1=new ArrayList<String>(); //單張
?? ?List<String> a2=new ArrayList<String>(); //對(duì)子
?? ?List<String> a3=new ArrayList<String>(); //3帶
?? ?List<String> a123=new ArrayList<String>(); //連子
?? ?List<String> a112233=new ArrayList<String>(); //連牌
?? ?List<String> a111222=new ArrayList<String>(); //飛機(jī)
?? ?List<String> a4=new ArrayList<String>(); //炸彈
}

NewSwing.java

package com.sjsq;

import javax.swing.SwingUtilities;

public class NewSwing {
?? ?
}

Time.java
package com.sjsq;

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

import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

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("倒計(jì)時(shí):" + i--);
?? ??? ??? ?second(1);// 等一秒
?? ??? ?}
?? ??? ?if (i == -1)// 正常終結(jié),說(shuō)明超時(shí)
?? ??? ??? ?main.time[1].setText("不搶");

?? ??? ?main.landlord[0].setVisible(false);
?? ??? ?main.landlord[1].setVisible(false);
?? ??? ?for (Card card2 : main.playerList[1])
?? ??? ??? ?card2.canClick = true;// 可被點(diǎn)擊
?? ??? ?// 如果自己搶到地主
?? ??? ?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);// 設(shè)定地主
?? ??? ??? ??? ?openlord(true);// 把地主牌翻開(kāi)
?? ??? ??? ??? ?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);// 設(shè)定地主
?? ??? ??? ??? ?openlord(true);
?? ??? ??? ??? ?second(3);
?? ??? ??? ??? ?main.playerList[0].addAll(main.lordList);
?? ??? ??? ??? ?Common.order(main.playerList[0]);
?? ??? ??? ??? ?Common.rePosition(main, main.playerList[0], 0);
?? ??? ??? ??? ?// openlord(false);

?? ??? ??? ?}
?? ??? ?}
?? ??? ?// 選完地主后 關(guān)閉地主按鈕
?? ??? ?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);
?? ??? ?}
?? ??? ?// 開(kāi)始游戲 根據(jù)地主不同順序不同
?? ??? ?main.turn = main.dizhuFlag;
?? ??? ?while (true) {

?? ??? ??? ?if (main.turn == 1) // 我
?? ??? ??? ?{
?? ??? ??? ??? ?turnOn(true);// 出牌按鈕 --我出牌
?? ??? ??? ??? ?timeWait(30, 1);// 我自己的定時(shí)器
?? ??? ??? ??? ?System.out.println("我出牌");
?? ??? ??? ??? ?turnOn(false);// 選完關(guān)閉
?? ??? ??? ??? ?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;// 可被點(diǎn)擊
?? ??? ?}
?? ?}

?? ?// 設(shè)定地主
?? ?public void setlord(int i) {
?? ??? ?Point point = new Point();
?? ??? ?if (i == 1)// 我是地主
?? ??? ?{
?? ??? ??? ?point.x = 80;
?? ??? ??? ?point.y = 430;
?? ??? ??? ?main.dizhuFlag = 1;// 設(shè)定地主
?? ??? ?}
?? ??? ?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);
?? ?}

?? ?// 打開(kāi)出牌按鈕
?? ?public void turnOn(boolean flag) {
?? ??? ?main.publishCard[0].setVisible(flag);
?? ??? ?main.publishCard[1].setVisible(flag);
?? ?}

?? ?// 電腦0走牌(我代表1)
?? ?public void computer0() {
?? ??? ?timeWait(3, 0); // 定時(shí)
?? ??? ?ShowCard(0); // 出牌

?? ?}

?? ?// 電腦2走牌(我代表1)
?? ?public void computer2() {
?? ??? ?timeWait(3, 2); // 定時(shí)
?? ??? ?ShowCard(2); // 出牌

?? ?}

?? ?// 走牌
?? ?public void ShowCard(int role) {
?? ??? ?Model model = Common.getModel(main.playerList[role]);
?? ??? ?// 待走的牌
?? ??? ?List<String> list = new ArrayList<String>();
?? ??? ?// 如果是主動(dòng)出牌
?? ??? ?if (main.time[(role + 1) % 3].getText().equals("不要") && main.time[(role + 2) % 3].getText().equals("不要")) {
?? ??? ??? ?// 有單出單 (除開(kāi)3帶,飛機(jī)能帶的單牌)
?? ??? ??? ?if (model.a1.size() > (model.a111222.size() * 2 + model.a3.size())) {
?? ??? ??? ??? ?list.add(model.a1.get(model.a1.size() - 1));
?? ??? ??? ?} // 有對(duì)子出對(duì)子 (除開(kāi)3帶,飛機(jī))
?? ??? ??? ?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帶,沒(méi)有就出光3
?? ??? ??? ?else if (model.a3.size() > 0) {
?? ??? ??? ??? ?// 3帶單,且非關(guān)鍵時(shí)刻不能帶王,2
?? ??? ??? ??? ?if (model.a1.size() > 0) {
?? ??? ??? ??? ??? ?list.add(model.a1.get(model.a1.size() - 1));
?? ??? ??? ??? ?} // 3帶對(duì)
?? ??? ??? ??? ?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));
?? ??? ??? ?} // 有飛機(jī)出飛機(jī)
?? ??? ??? ?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];// 當(dāng)前出的牌

?? ??? ??? ?CardType cType = Common.jugdeType(player);// 桌面別人出的牌
?? ??? ??? ?// 如果是單牌
?? ??? ??? ?if (cType == CardType.c1) {
?? ??? ??? ??? ?AI_1(model.a1, player, list, role);
?? ??? ??? ?} // 如果是對(duì)子
?? ??? ??? ?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);
?? ??? ??? ?}
?? ??? ??? ?// 飛機(jī)帶單
?? ??? ??? ?else if (cType == CardType.c11122234) {
?? ??? ??? ??? ?AI_4(model.a111222, model.a1, player, list, role);
?? ??? ??? ?}
?? ??? ??? ?// 飛機(jī)帶對(duì)
?? ??? ??? ?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轉(zhuǎn)換成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, 10);
?? ??? ??? ??? ??? ?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<Card> getCardByName(List<Card> list, String n) {
?? ??? ?String[] name = n.split(",");
?? ??? ?List<Card> 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;
?? ??? ??? ?}
?? ??? ?}
?? ?}

?? ?// 飛機(jī)帶單,雙
?? ?public void AI_4(List<String> model1, List<String> model2, List<Card> player, List<String> list, int role) {
?? ??? ?// 排序按重復(fù)數(shù)
?? ??? ?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) {
?? ??? ?// 排序按重復(fù)數(shù)
?? ??? ?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));
?? ??? ??? ?}
?? ??? ?}
?? ?}

?? ?// 單牌,對(duì)子,3個(gè),4個(gè),通用
?? ?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是準(zhǔn)備回的牌
?? ??? ?// 排序按重復(fù)數(shù)
?? ??? ?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();
?? ?}

?? ?// 延時(shí),模擬時(shí)鐘
?? ?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("倒計(jì)時(shí):" + i);
?? ??? ??? ??? ?main.time[player].setVisible(true);
?? ??? ??? ??? ?second(1);
?? ??? ??? ??? ?i--;
?? ??? ??? ?}
?? ??? ??? ?if (i == -1) {
?? ??? ??? ??? ?main.time[player].setText("超時(shí)");
?? ??? ??? ?}
?? ??? ??? ?main.nextPlayer = false;
?? ??? ?} else {
?? ??? ??? ?for (int i = n; i >= 0; i--) {
?? ??? ??? ??? ?second(1);
?? ??? ??? ??? ?// main.container.setComponentZOrder(main.time[player], 0);
?? ??? ??? ??? ?main.time[player].setText("倒計(jì)時(shí):" + i);
?? ??? ??? ??? ?main.time[player].setVisible(true);
?? ??? ??? ?}
?? ??? ?}
?? ??? ?main.time[player].setVisible(false);
?? ?}

?? ?// 通過(guò)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;
?? ?}
}

到此這篇關(guān)于Eclipse+Java+Swing實(shí)現(xiàn)斗地主游戲(代碼)的文章就介紹到這了,更多相關(guān)Eclipse+Java+Swing實(shí)現(xiàn)斗地主游戲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Elasticsearch如何把一個(gè)索引變?yōu)橹蛔x

    詳解Elasticsearch如何把一個(gè)索引變?yōu)橹蛔x

    這篇文章主要為大家介紹了詳解Elasticsearch如何把一個(gè)索引變?yōu)橹蛔x示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Springboot整合Redis實(shí)現(xiàn)超賣(mài)問(wèn)題還原和流程分析(分布式鎖)

    Springboot整合Redis實(shí)現(xiàn)超賣(mài)問(wèn)題還原和流程分析(分布式鎖)

    最近在研究超賣(mài)的項(xiàng)目,寫(xiě)一段簡(jiǎn)單正常的超賣(mài)邏輯代碼,多個(gè)用戶同時(shí)操作同一段數(shù)據(jù)出現(xiàn)問(wèn)題,糾結(jié)該如何處理呢?下面小編給大家?guī)?lái)了Springboot整合Redis實(shí)現(xiàn)超賣(mài)問(wèn)題還原和流程分析,感興趣的朋友一起看看吧
    2021-10-10
  • SpringCloud?Stream?整合RabbitMQ的基本步驟

    SpringCloud?Stream?整合RabbitMQ的基本步驟

    這篇文章主要介紹了SpringCloud?Stream?整合RabbitMQ的基本步驟,從項(xiàng)目介紹到生產(chǎn)者結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • Java 入門(mén)圖形用戶界面設(shè)計(jì)之事件處理上

    Java 入門(mén)圖形用戶界面設(shè)計(jì)之事件處理上

    圖形界面(簡(jiǎn)稱(chēng)GUI)是指采用圖形方式顯示的計(jì)算機(jī)操作用戶界面。與早期計(jì)算機(jī)使用的命令行界面相比,圖形界面對(duì)于用戶來(lái)說(shuō)在視覺(jué)上更易于接受,本篇精講Java語(yǔ)言中關(guān)于圖形用戶界面的事件處理
    2022-02-02
  • Java String類(lèi)的性質(zhì)與比較

    Java String類(lèi)的性質(zhì)與比較

    字符串廣泛應(yīng)用 在 Java 編程中,在 Java 中字符串屬于對(duì)象,Java 提供了 String 類(lèi)來(lái)創(chuàng)建和操作字符串,本文將為你帶來(lái)詳細(xì)介紹,感興趣的朋友繼續(xù)往下看吧
    2021-10-10
  • JUnit5常用注解的使用

    JUnit5常用注解的使用

    注解是JUnit的標(biāo)志性技術(shù),本文就來(lái)對(duì)它的20個(gè)注解,以及元注解和組合注解進(jìn)行學(xué)習(xí),感興趣的可以了解一下
    2021-07-07
  • springboot調(diào)用HTML文件注意事項(xiàng)及說(shuō)明

    springboot調(diào)用HTML文件注意事項(xiàng)及說(shuō)明

    這篇文章主要介紹了springboot調(diào)用HTML文件注意事項(xiàng)及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 實(shí)例講解Java的MyBatis框架對(duì)MySQL中數(shù)據(jù)的關(guān)聯(lián)查詢

    實(shí)例講解Java的MyBatis框架對(duì)MySQL中數(shù)據(jù)的關(guān)聯(lián)查詢

    這里我們來(lái)以實(shí)例講解Java的MyBatis框架對(duì)MySQL中數(shù)據(jù)的關(guān)聯(lián)查詢,包括一對(duì)多、多對(duì)一的關(guān)聯(lián)查詢以及自身關(guān)聯(lián)映射的方法等,需要的朋友可以參考下
    2016-06-06
  • Collections工具類(lèi)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Collections工具類(lèi)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Collections工具類(lèi)提供了大量針對(duì)Collection/Map的操作。這篇文章主要介紹了Collections工具類(lèi)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理,需要的朋友可以參考下
    2017-04-04
  • 詳解Java的JDBC API的存儲(chǔ)過(guò)程與SQL轉(zhuǎn)義語(yǔ)法的使用

    詳解Java的JDBC API的存儲(chǔ)過(guò)程與SQL轉(zhuǎn)義語(yǔ)法的使用

    這篇文章主要介紹了詳解Java的JDBC API的存儲(chǔ)過(guò)程與SQL轉(zhuǎn)義語(yǔ)法的使用,JDBC是Java用于連接使用各種數(shù)據(jù)庫(kù)的API,需要的朋友可以參考下
    2015-12-12

最新評(píng)論