package thread;
import java.util.List;
import java.util.Random;
import javax.rmi.ssl.SslRMIClientSocketFactory;
import javax.swing.JOptionPane;
import model.Player;
import model.Poker;
import tools.Data;
import view.GameMainFrame;
public class FirstThread extends Thread {
GameMainFrame f;
public FirstThread(GameMainFrame f) {
this.f = f;
}
@Override
public void run() {
// **************************************发牌流程**********************************************************************************
f.gamePanel.yes.setVisible(false);
Data.isReplay = false;// 重置重新开始参数
int round = Data.reStart;//
if (Data.reStart != round) {// 重新开始被点击
return;
}
f.m_Restart.setEnabled(false);// 设置过程中不可以点击重新发牌
Data.list = Data.ranList(Data.addPoker());// 创建牌+洗牌
if (Data.reStart != round) {// 重新开始被点击
return;
}
// 3张底牌
for (int i = 51; i < 54; i++) {
Data.lessList.add(new Poker(Data.list.get(i).getTypes(), Data.list.get(i).getNums()));// 空指针
}
// 发牌
for (int i = 0; i < 17; i++) {
// 线程异常
try {
FirstThread.sleep(Data.speedTime1);// 休眠Data.spedTime1 。可变速
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (Data.reStart != round) {// 重新开始被点击
return;
}
Data.player1.getList().add(new Poker(Data.list.get(i).getTypes(), Data.list.get(i).getNums())); // 发牌给自己
Data.computer1.getList().add(new Poker(Data.list.get(i + 17).getTypes(), Data.list.get(i + 17).getNums())); // 发牌给电脑1
Data.computer2.getList().add(new Poker(Data.list.get(i + 34).getTypes(), Data.list.get(i + 34).getNums())); // 发派给电脑2
//
Data.setXY();// 设定手牌的坐标
// 玩家的名字出现(玩家的图片在GameMainPanel面板中随着手牌的出现一同出现)
f.gamePanel.player_name.setVisible(true);
f.gamePanel.com1_name.setVisible(true);
f.gamePanel.com2_name.setVisible(true);
}
// 手牌出现。开始从大学到小排序
Data.sortPai(Data.lessList);// 地主底牌排序
Data.sortPai(Data.player1.getList());// 玩家手排排序
Data.sortPai(Data.computer1.getList());// 玩家手排排序
Data.sortPai(Data.computer2.getList());// 玩家手排排序
Data.setXY();// 重新设定三方手牌+底牌的坐标
if (Data.reStart != round) {// 重新开始被点击
return;
}
f.m_Restart.setEnabled(true);// 发牌结束。重新发牌按钮可以点击
// **************************************叫地主流程**********************************************************************************
// 随机一方叫地主
Random ran = new Random();
int key = ran.nextInt(3);// 随机3个数用于判断随机一家开始叫地主
Data.computer1.setBaseScore(0);
Data.computer2.setBaseScore(0);
Data.player1.setBaseScore(0);
switch (key) {
case 0:// 玩家先开始叫地主
// 出现叫分按钮
f.gamePanel.btn_one.setVisible(true);
f.gamePanel.btn_two.setVisible(true);
f.gamePanel.btn_three.setVisible(true);
f.gamePanel.btn_wont.setVisible(true);
// 抢地主核心流程--方法的调用
chooseplayer();// 玩家叫地主
// if (Data.player1.getBaseScore() == 3) {// 玩家叫3分。直接结束叫分流程
// // 叫分结束。隐藏按钮
// f.gamePanel.btn_one.setVisible(false);
// f.gamePanel.btn_two.setVisible(false);
// f.gamePanel.btn_three.setVisible(false);
// f.gamePanel.btn_wont.setVisible(false);
// f.gamePanel.yes.setVisible(false);
// break;
// }
chooseCom1();// 电脑1抢地主
// if (Data.computer1.getBaseScore() == 3) {// 电脑1叫3分。直接结束叫分流程
// // 叫分结束。隐藏按钮
// f.gamePanel.btn_one.setVisible(false);
// f.gamePanel.btn_two.setVisible(false);
// f.gamePanel.btn_three.setVisible(false);
// f.gamePanel.btn_wont.setVisible(false);
// f.gamePanel.yes.setVisible(false);
// break;
// }
chooseCom3();// 电脑2抢地主(调用不显示显示玩家按钮的方法)
break;
case 1:// 电脑1先开始叫地主
// 抢地主核心流程--方法的调用
chooseCom1();// 电脑1叫地主
// if (Data.computer1.getBaseScore() == 3) {// 电脑1叫3分。直接结束叫分流程
// // 叫分结束。隐藏按钮
// f.gamePanel.btn_one.setVisible(false);
// f.gamePanel.btn_two.setVisible(false);
// f.gamePanel.btn_three.setVisible(false);
// f.gamePanel.btn_wont.setVisible(false);
// f.gamePanel.yes.setVisible(false);
// break;
// }
chooseCom2();//// 电脑2抢地主(调用显示玩家按钮的方法)
// if (Data.computer2.getBaseScore() == 3) {// 电脑2叫3分。直接结束叫分流程
// // 叫分结束。隐藏按钮
// f.gamePanel.btn_one.setVisible(false);
// f.gamePanel.btn_two.setVisible(false);
// f.gamePanel.btn_three.setVisible(false);
// f.gamePanel.btn_wont.setVisible(false);
// f.gamePanel.yes.setVisible(false);
// break;
// }
chooseplayer();// 玩家抢地主
break;
case 2:// 电脑2先开始叫地主
// 抢地主核心流程--方法的调用
chooseCom2();// 电脑2叫地主(调用显示玩家按钮的方法)
// if (Data.computer2.getBaseScore() == 3) {// 电脑2叫3分。直接结束叫分流程
// // 叫分结束。隐藏按钮
// f.gamePanel.btn_one.setVisible(false);
// f.gamePanel.btn_two.setVisible(false);
// f.gamePanel.btn_three.setVisible(false);
// f.gamePanel.btn_wont.setVisible(false);
// f.gamePanel.yes.setVisible(false);
// break;
// }
chooseplayer();// 玩家叫地主
// if (Data.player1.getBaseScore() == 3) {// 玩家叫3分。直接结束叫分流程
// // 叫分结束。隐藏按钮
// f.gamePanel.btn_one.setVisible(false);
// f.gamePanel.btn_two.setVisible(false);
// f.gamePanel.btn_three.setVisible(false);
// f.gamePanel.btn_wont.setVisible(false);
// f.gamePanel.yes.setVisible(false);
// break;
// }
chooseCom1();// 电脑1抢地主
break;
default:
break;
}
// 叫分结束。隐藏按钮
f.gamePanel.btn_one.setVisible(false);
f.gamePanel.btn_two.setVisible(false);
f.gamePanel.btn_three.setVisible(false);
f.gamePanel.btn_wont.setVisible(false);
if (Data.reStart != round) {// 重新开始被点击
return;
}
// 叫完地主后。设置三家叫的分数为各自底分
f.gamePanel.player_s.setText("底分" + Data.player1.getBaseScore());
f.gamePanel.com1_s.setText("底分" + Data.computer1.getBaseScore());
f.gamePanel.com2_s.setText("底分" + Data.computer2.getBaseScore());
// 底分出现在头像旁边
f.gamePanel.player_s.setVisible(true);
f.gamePanel.com1_s.setVisible(true);
f.gamePanel.com2_s.setVisible(true);
// 游戏总倍数 为三家倍数之和出现在游戏界面,底牌的上方
f.gamePanel.base_s.setText("本场倍数:"
+ (Data.computer2.getBaseScore() + Data.computer1.getBaseScore() + Data.player1.getBaseScore()));
f.gamePanel.base_s.setVisible(true);
// 叫分按钮全部消失
f.gamePanel.btn_three.setVisible(false);
f.gamePanel.btn_wont.setVisible(false);
f.gamePanel.btn_two.setVisible(false);
f.gamePanel.btn_one.setVisible(false);
// 判断三家叫的分数最大一方。设置为地主类型
if (Data.player1.getBaseScore() > Data.computer1.getBaseScore()
&& Data.player1.getBaseScore() > Data.computer2.getBaseScore()) {
Data.player1.setType(1);
}
if (Data.computer1.getBaseScore() > Data.computer2.getBaseScore()
&& Data.computer1.getBaseScore() > Data.player1.getBaseScore()) {
Data.computer1.setType(1);
}
if (Data.computer2.getBaseScore() > Data.computer1.getBaseScore()
&& Data.computer2.getBaseScore() > Data.player1.getBaseScore()) {
Data.computer2.setType(1);
}
// 如果三家全都不叫地主 则重新发牌 此时三家底分全部为0
if (Data.player1.getBaseScore() == 0 && Data.computer1.getBaseScore() == 0
&& Data.computer2.getBaseScore() == 0) {
Data.reStart(f);// 清空全部数据
JOptionPane.showMessageDialog(null, "无人叫地主,游戏重新开始!!!");
// 重新发牌
new FirstThread(f).start();
}
if (Data.reStart != round) {// 重新开始被点击
return;
}
// 遍历arr数组(arr数组装3个玩家)。判断地主的坐标
for (int i1 = 0; i1 < Data.arr