java 斗地主_java斗地主

packagecom;importjava.awt.Point;importjava.util.ArrayList;importjava.util.List;importjavax.swing.JOptionPane;public class Time extendsThread {

Main main;boolean isRun = true;int i = 10;public Time(Main m, inti) {this.main =m;this.i =i;

}

@Overridepublic voidrun() {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])

.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(inti) {try{

Thread.sleep(i* 1000);

}catch(InterruptedException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}//地主牌翻看

public void openlord(booleanis) {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(inti) {

Point point= newPoint();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(booleanflag) {

main.publishCard[0].setVisible(flag);

main.publishCard[1].setVisible(flag);

}//电脑0走牌(我代表1)

public voidcomputer0() {

timeWait(1, 0); //定时

ShowCard(0); //出牌

}//电脑2走牌(我代表1)

public voidcomputer2() {

timeWait(1, 2); //定时

ShowCard(2); //出牌

}//走牌

public void ShowCard(introle) {

Model model=Common.getModel(main.playerList[role]);//待走的牌

List list = newArrayList();//如果是主动出牌

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 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= newPoint();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 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(Listlist, String n) {

String[] name= n.split(",");

List cardsList= new ArrayList();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++;

}

}returncardsList;

}//顺子

public void AI_3(List model,List player,List list,introle){for(int i=0,len=model.size();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 model1,List model2,List player,List list,introle){//排序按重复数

player=Common.getOrder2(player);int len1=model1.size();int len2=model2.size();if(len1<1 || len2<1)return;for(int i=0;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 model1,List model2,List player,List list,introle){//排序按重复数

player=Common.getOrder2(player);int len1=model1.size();int len2=model2.size();if(len1<1 || len2<2)return;for(int i=0;iCommon.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 model,List player,List list,introle){//顶家

if((role+1)%3==main.dizhuFlag)

{for(int i=0,len=model.size();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 model1,List model2,List player,List list,introle){//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, intplayer) {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 intgetValueInt(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;returni;

}//判断输赢

public booleanwin(){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;

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值