package com;
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("倒计时:" + 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);
main.publishCard[1].setEnabled(false);
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) // 我
{
// 如果我主动出牌关闭不要按钮
if (main.time[0].getText().equals("不要")
&& main.time[2].getText().equals("不要"))
main.publishCard[1].setEnabled(false);
else {
main.publishCard[1].setEnabled(true);
}
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) {
int orders[] = new int[] { 4, 3, 2, 1, 5 };
Model model = Common.getModel(main.playerList[role], orders);
// 待走的牌
List<String> list = new ArrayList();
// 如果是主动出牌
if (main.time[(role + 1) % 3].getText().equals("不要")
&& main.time[(role + 2) % 3].getText().equals("不要")) {
// 有顺子出顺子
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));
}
}// 有单出单 (除开3带,飞机能带的单牌)
else 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.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 {
//如果队友牌大则不出
if(role!=main.dizhuFlag)
{
int f=0;
if(main.time[main.dizhuFlag].getText().equals("不要"))
{
f=1;
}//如果我的下家是地主,且我的上家出的比较大了
if((role+1)%3==main.dizhuFlag)
{
if((Common.jugdeType(main.currentList[(role+2)%3])!=CardType.c1||
Common.jugdeType(main.currentList[(role+2)%3])!=CardType.c2)
&&main.currentList[main.dizhuFlag].size()<1)
f=1;
if(main.currentList[(role+2)%3].size()>0&&Common.getValue(main.currentList[(role+2)%3].get(0))>13)
f=1;
}
if(f==1){
main.time[role].setVisible(true);
main.time[role].setText("不要");
return;
}
}
// 拆牌打
int can = 0;
if (role == main.dizhuFlag)// 如果自己是地主
{// 当对手牌小于5张的时候炸
if (main.playerList[(role + 1) % 3].size() <= 5
|| main.playerList[(role + 2) % 3].size() <= 5)
can = 1;
} else {// 当地主牌小于5张的时候炸
if (main.playerList[main.dizhuFlag].size() <= 5)
can = 1;
}
// 如果can=1就要拆牌model得重新来
List<Card> player;
if(main.time[(role + 2) % 3].getText().equals("不要"))
player=main.currentList[(role + 1) % 3];
else
player= main.currentList[(role + 2) % 3];
CardType cType = Common.jugdeType(player);
// 如果是单牌
if (cType == CardType.c1) {
if (can == 1)
model = Common.getModel(main.playerList[role], new int[] {
1, 4, 3, 2, 5 });
AI_1(model.a1, player, list, role);
}// 如果是对子
else if
- 1
- 2
- 3
- 4
前往页