(续)
本篇手记续我的上一篇手记《简易扑克游戏(续)—— 炸金花(上)》链接描述
主类GameStart
/**
* Java简易扑克游戏--炸金花
* 1. 创建扑克牌组包括4种花色和13种大小
* 2. 随后进行随机洗牌
* 3. 创建两名玩家,其中一名为“电脑玩家”,另一名为游戏玩家“您”
* 4. 从洗牌后的扑克牌的第一张开始,发给每个玩家,按照一人一张的方式,每人发三张
* 5. 游戏规则为:(可以自行百度“炸金花的游戏规则”)
* 开发日期:2017.05.15
* 开发者:慕容1444579
*/
package com.lsjt_2;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class GameStart
{
String[] color = {"","","",""};//创建一副牌(52张)
String[] number = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
Scanner input = new Scanner(System.in);
List<Poker> pokerList = new ArrayList<Poker>();
List<Player> playerList = new ArrayList<Player>();
public static void main(String[] args)
{
System.out.println("- - - - - - - - - - - -\nJava简易扑克游戏(林氏集团出品)\n");
System.out.println("-----欢迎进入”炸金花“游戏-----");
GameStart gs = new GameStart();
gs.setPayer(); //创建玩家
gs.initializeCard(); //初始化牌库
gs.shuffleCard(); //洗牌
gs.getCard(); //发牌(拿到手牌)
gs.compare(); //比较大小,判定胜负
gs.showCard(); //展示玩家手牌
System.out.println("\n--------游戏结束--------");
}
//比较大小,判定胜负
private void compare()
{
System.out.println("---------获胜方---------");
ComparePoker comparehPoker = new ComparePoker();
List<Poker> hPoker1 = new ArrayList<Poker>();
List<Poker> hPoker2 = new ArrayList<Poker>();
//获取玩家1的第一张手牌
hPoker1.add(0, playerList.get(0).handCards.get(0));
//获取玩家1的第二张手牌
hPoker1.add(1, playerList.get(0).handCards.get(1));
//获取玩家1的第三张手牌
hPoker1.add(2, playerList.get(0).handCards.get(2));
//获取玩家2的第一张手牌
hPoker2.add(0, playerList.get(1).handCards.get(0));
//获取玩家2的第二张手牌
hPoker2.add(1, playerList.get(1).handCards.get(1));
//获取玩家2的第三张手牌
hPoker2.add(2, playerList.get(1).handCards.get(2));
//取出每张牌的位置
int numbers1_1 = SearchIndex(number, hPoker1.get(0).numbers);
int numbers1_2 = SearchIndex(number, hPoker1.get(1).numbers);
int numbers1_3 = SearchIndex(number, hPoker1.get(2).numbers);
int numbers2_1 = SearchIndex(number, hPoker2.get(0).numbers);
int numbers2_2 = SearchIndex(number, hPoker2.get(1).numbers);
int numbers2_3 = SearchIndex(number, hPoker2.get(2).numbers);
//取出每张牌的花色
String colors1_1 = hPoker1.get(0).colors;
String colors1_2 = hPoker1.get(1).colors;
String colors1_3 = hPoker1.get(2).colors;
String colors2_1 = hPoker2.get(0).colors;
String colors2_2 = hPoker2.get(1).colors;
String colors2_3 = hPoker2.get(2).colors;
//判断手牌是不是顺子·
boolean b1 = comparehPoker.sort_3n(numbers1_1, numbers1_2, numbers1_3);
boolean b2 = comparehPoker.sort_3n(numbers2_1, numbers2_2, numbers2_3);
//先确定玩家各自手牌是哪种类型,分6种牌型分别进行比较手牌的大小
//5.对子
if(numbers1_1==numbers1_2 || numbers1_1==numbers1_3 || numbers1_2==numbers1_3)
{
//1.豹子
if(numbers1_1==numbers1_2 && numbers1_1==numbers1_3)//玩家1是豹子
{
if(numbers2_1==numbers2_2 && numbers2_1==numbers2_3)//玩家2也是豹子
{
int ab1 = comparehPoker.compareCN(hPoker1.get(0), hPoker2.get(0));
if(ab1>0)//玩家1赢了
{
System.out.println(playerList.get(0).name + "获胜!");
System.out.println( "玩家1:--> 豹子");
System.out.println( "玩家2:--> 豹子");
}
else//玩家2赢了
{
System.out.println(playerList.get(1).name + "获胜!");
System.out.println( "玩家1:--> 豹子");
System.out.println( "玩家2:--> 豹子");
}
}
else//玩家2不是豹子
{
//玩家1赢了
System.out.println(playerList.get(0).name + "获胜!");
System.out.println( "玩家1:--> 豹子");
}
}//玩家2也是对子
else if(numbers2_1==numbers2_2 || numbers2_1==numbers2_3 || numbers2_2==numbers2_3)
{
if(numbers2_1==numbers2_2 && numbers2_1==numbers2_3)//玩家2是豹子
{
//玩家2赢了
System.out.println(playerList.get(1).name + "获胜!");
System.out.println( "玩家1:--> 对子");
System.out.println( "玩家2:--> 豹子");
}
else//玩家2也是对子
{
//取出玩家1的最大手牌的数字
int max_h1 = 0 ;
int a = comparehPoker.compareCN(hPoker1.get(0), hPoker1.get(1));
int b = comparehPoker.compareCN(hPoker1.get(0), hPoker1.get(2));
int c = comparehPoker.compareCN(hPoker1.get(2), hPoker1.get(1));
if(a>=0 && b>=0)//第一张牌最大
max_h1 = 0;
else if(a<=0 && c<=0)//第二张牌最大
max_h1 = 1;
else//第三张牌最大
max_h1 = 2;
//取出玩家2的最大手牌的数字
int max_h2 = 0 ;
int e = comparehPoker.compareCN(hPoker2.get(0), hPoker2.get(1));
int f = comparehPoker.compareCN(hPoker2.get(0), hPoker2.get(2));
int h = comparehPoker.compareCN(hPoker2.get(2), hPoker2.get(1));
if(e>=0 && f>=0)//第一张牌最大
max_h2 = 0;
else if(e<=0 && h<=0)//第二张牌最大
max_h2 = 1;
else//第三张牌最大
max_h2 = 2;
//比较玩家最大的牌(数字及花色)
int ab1 = comparehPoker.compare(hPoker1.get(max_h1), hPoker2.get(max_h2));
if(ab1>0)//玩家1赢了
{
System.out.println(playerList.get(0).name + "获胜!");
System.out.println( "玩家1:--> 对子");
System.out.println( "玩家2:--> 对子");
}
else//玩家2赢了
{
System.out.println(playerList.get(1).name + "获胜!");
System.out.println( "玩家1:--> 对子");
System.out.println( "玩家2:--> 对子");
}
}
}
else if(b2 && colors2_1!=colors2_2)//玩家2是顺子
{
//玩家2赢了
System.out.println(playerList.get(1).name + "获胜!");
System.out.println( "玩家1:--> 对子");
System.out.println( "玩家2:--> 顺子");
}
else if(colors2_1==colors2_2 && colors2_1==colors2_3)//玩家2是金花
{
if(b2)//玩家2是顺金
{
//玩家2赢了
System.out.println(playerList.get(1).name + "获胜!");
System.out.println( "玩家1:--> 对子");
System.out.println( "玩家2:--> 顺金");
}
else
{
//玩家2赢了
System.out.println(playerList.get(1).name + "获胜!");
System.out.println( "玩家1:--> 对子");
System.out.println( "玩家2:--> 金花");
}
}
else if(numbers2_1==numbers2_2 && numbers2_1==numbers2_3)//玩家2是豹子
{
//玩家2赢了
System.out.println(playerList.get(1).name + "获胜!");
System.out.println( "玩家1:--> 对子");
System.out.println( "玩家2:--> 豹子");
}
else//玩家1赢了
{
System.out.println(playerList.get(0).name + "获胜!");
System.out.println( "玩家1:--> 对子");
System.out.println( "玩家2:--> 单牌");
}
}
//2.顺金
else if(colors1_1==colors1_2 && colors1_1==colors1_3 && b1)//玩家1是顺金
{
if(colors2_1==colors2_2 && colors2_1==colors2_3 && b2)//玩家2也是顺金
{
//取出玩家1的最大手牌的数字
int max_h1 = 0 ;
int a = comparehPoker.compareCN(hPoker1.get(0), hPoker1.get(1));
int b = comparehPoker.compareCN(hPoker1.get(0), hPoker1.get(2));
int c = comparehPoker.compareCN(hPoker1.get(2), hPoker1.get(1));
if(a>=0 && b>=0)//第一张牌最大
max_h1 = 0;
else if(a<=0 && c<=0)//第二张牌最大
max_h1 = 1;
else//第三张牌最大
max_h1 = 2;
//取出玩家2的最大手牌的数字
int max_h2 = 0 ;
int e = comparehPoker.compareCN(hPoker2.get(0), hPoker2.get(1));
int f = comparehPoker.compareCN(hPoker2.get(0), hPoker2.get(2));
int h = comparehPoker.compareCN(hPoker2.get(2), hPoker2.get(1));
if(e>=0 && f>=0)//第一张牌最大
max_h2 = 0;
else if(e<=0 && h<=0)//第二张牌最大
max_h2 = 1;
else//第三张牌最大
max_h2 = 2;
//比较玩家最大的牌(数字及花色)
int ab1 = comparehPoker.compare(hPoker1.get(max_h1), hPoker2.get(max_h2));
if(ab1>0)//玩家1赢了
{
System.out.println(playerList.get(0).name + "获胜!");
System.out.println( "玩家1:--> 顺金");
System.out.println( "玩家2:--> 顺金");
}
else//玩家2赢了
{
//玩家2赢了
System.out.println(playerList.get(1).name + "获胜!");
System.out.println( "玩家1:--> 顺金");
System.out.println( "玩家2:--> 顺金");
}
}
else if(numbers2_1==numbers2_2 && numbers2_1==numbers2_3)//玩家2是豹子
{
//玩家2赢了
System.out.println(playerList.get(1).name + "获胜!");
System.out.println( "玩家1:--> 顺金");
System.out.println( "玩家2:--> 豹子");
}
else//玩家1赢了
{
System.out.println(playerList.get(0).name + "获胜!");
System.out.println( "玩家1:--> 顺金");
}
}
//3.金花
else if(colors1_1==colors1_2 && colors1_1==colors1_3)//玩家1是金花
{
if(colors2_1==colors2_2 && colors2_1==colors2_3)//玩家2也是金花
{
//取出玩家1的最大手牌的数字
int max_h1 = 0 ;
int a = comparehPoker.compareCN(hPoker1.get(0), hPoker1.get(1));
int b = comparehPoker.compareCN(hPoker1.get(0), hPoker1.get(2));
int c = comparehPoker.compareCN(hPoker1.get(2), hPoker1.get(1));
if(a>=0 && b>=0)//第一张牌最大
max_h1 = 0;
else if(a<=0 && c<=0)//第二张牌最大
max_h1 = 1;
else//第三张牌最大
max_h1 = 2;
//取出玩家2的最大手牌的数字
int max_h2 = 0 ;
int e = comparehPoker.compareCN(hPoker2.get(0), hPoker2.get(1));
int f = comparehPoker.compareCN(hPoker2.get(0), hPoker2.get(2));
int h = comparehPoker.compareCN(hPoker2.get(2), hPoker2.get(1));
if(e>=0 && f>=0)//第一张牌最大
max_h2 = 0;
else if(e<=0 && h<=0)//第二张牌最大
max_h2 = 1;
else//第三张牌最大
max_h2 = 2;
//比较玩家最大的牌(数字及花色)
int ab1 = comparehPoker.compare(hPoker1.get(max_h1), hPoker2.get(max_h2));
if(ab1>0)//玩家1赢了
{
System.out.println(playerList.get(0).name + "获胜!");
System.out.println( "玩家1:--> 金花");
System.out.println( "玩家2:--> 金花");
}
else//玩家2赢了
{
System.out.println(playerList.get(0).name + "获胜!");
System.out.println( "玩家1:--> 金花");
System.out.println( "玩家2:--> 金花");
}
}
else if(colors2_1==colors2_2 && colors2_1==colors2_3 && b2)//玩家2是顺金
{
//玩家2赢了
System.out.println(playerList.get(1).name + "获胜!");
System.out.println( "玩家1:--> 金花");
System.out.println( "玩家2:--> 顺金");
}//玩家2是对子或豹子
else if(numbers2_1==numbers2_2 || numbers2_1==numbers2_3 || numbers2_2==numbers2_3)
{
if(numbers2_1==numbers2_2 && numbers2_1==numbers2_3)//玩家2是豹子
{
//玩家2赢了
System.out.println(playerList.get(1).name + "获胜!");
System.out.println( "玩家1:--> 金花");
System.out.println( "玩家2:--> 豹子");
}
else//玩家2是对子
{
//玩家1赢了
System.out.println(playerList.get(0).name + "获胜!");
System.out.println( "玩家1:--> 金花");
System.out.println( "玩家2:--> 对子");
}
}
else if(b2 && colors2_1!=colors2_2)//玩家2是顺子
{
//玩家1赢了
System.out.println(playerList.get(0).name + "获胜!");
System.out.println( "玩家1:--> 金花");
System.out.println( "玩家2:--> 顺子");
}
else//玩家1赢了
{
System.out.println(playerList.get(0).name + "获胜!");
System.out.println( "玩家1:--> 金花");
System.out.println( "玩家2:--> 单牌");
}
}
//4.顺子
else if(b1 && colors1_1!=colors1_2)//玩家1是顺子
{
if(b2 && colors2_1!=colors2_2)//玩家2也是顺子
{
//取出玩家1的最大手牌的数字
int max_h1 = 0 ;
int a = comparehPoker.compareCN(hPoker1.get(0), hPoker1.get(1));
int b = comparehPoker.compareCN(hPoker1.get(0), hPoker1.get(2));
int c = comparehPoker.compareCN(hPoker1.get(2), hPoker1.get(1));
if(a>=0 && b>=0)//第一张牌最大
max_h1 = 0;
else if(a<=0 && c<=0)//第二张牌最大
max_h1 = 1;
else//第三张牌最大
max_h1 = 2;
//取出玩家2的最大手牌的数字
int max_h2 = 0 ;
int e = comparehPoker.compareCN(hPoker2.get(0), hPoker2.get(1));
int f = comparehPoker.compareCN(hPoker2.get(0), hPoker2.get(2));
int h = comparehPoker.compareCN(hPoker2.get(2), hPoker2.get(1));
if(e>=0 && f>=0)//第一张牌最大
max_h2 = 0;
else if(e<=0 && h<=0)//第二张牌最大
max_h2 = 1;
else//第三张牌最大
max_h2 = 2;
//比较玩家最大的牌(数字及花色)
int ab1 = comparehPoker.compare(hPoker1.get(max_h1), hPoker2.get(max_h2));
if(ab1>0)//玩家1赢了
{
System.out.println(playerList.get(0).name + "获胜!");
System.out.println( "玩家1:--> 顺子");
System.out.println( "玩家2:--> 顺子");
}
else//玩家2赢了
{
System.out.println(playerList.get(1).name + "获胜!");
System.out.println( "玩家1:--> 顺子");
System.out.println( "玩家2:--> 顺子");
}
}
else if(colors2_1==colors2_2 && colors2_1==colors2_3)//玩家2是金花
{
//玩家2赢了
System.out.println(playerList.get(1).name + "获胜!");
System.out.println( "玩家1:--> 顺子");
System.out.println( "玩家2:--> 金花");
}
else if(colors2_1==colors2_2 && colors2_1==colors2_3 && b2)//玩家2是顺金
{
//玩家2赢了
System.out.println(playerList.get(1).name + "获胜!");
System.out.println( "玩家1:--> 顺子");
System.out.println( "玩家2:--> 顺金");
}//玩家2是对子或豹子
else if(numbers2_1==numbers2_2 || numbers2_1==numbers2_3 || numbers2_2==numbers2_3)
{
if(numbers2_1==numbers2_2 && numbers2_1==numbers2_3)//玩家2是豹子
{
//玩家2赢了
System.out.println(playerList.get(1).name + "获胜!");
System.out.println( "玩家1:--> 顺子");
System.out.println( "玩家2:--> 豹子");
}
else//玩家2是对子
{
//玩家2赢了
System.out.println(playerList.get(1).name + "获胜!");
System.out.println( "玩家1:--> 顺子");
System.out.println( "玩家2:--> 对子");
}
}
else//玩家1赢了
{
System.out.println(playerList.get(0).name + "获胜!");
System.out.println( "玩家1:--> 顺子");
System.out.println( "玩家2:--> 单牌");
}
}
//6.单牌
else//玩家1是单牌
{
//玩家2是对子或豹子
if(numbers2_1==numbers2_2 || numbers2_1==numbers2_3 || numbers2_2==numbers2_3)
{
if(numbers2_1==numbers2_2 && numbers2_1==numbers2_3)//玩家2是豹子
{
//玩家2赢了
System.out.println(playerList.get(1).name + "获胜!");
System.out.println( "玩家1:--> 单牌");
System.out.println( "玩家2:--> 豹子");
}
else//玩家2是对子
{
//玩家2赢了
System.out.println(playerList.get(1).name + "获胜!");
System.out.println( "玩家1:--> 单牌");
System.out.println( "玩家2:--> 对子");
}
}
else if(b2 && colors2_1!=colors2_2)//玩家2是顺子
{
//玩家2赢了
System.out.println(playerList.get(1).name + "获胜!");
System.out.println( "玩家1:--> 单牌");
System.out.println( "玩家2:--> 顺子");
}
else if(colors2_1==colors2_2 && colors2_1==colors2_3)//玩家2是金花
{
//玩家2赢了
System.out.println(playerList.get(1).name + "获胜!");
System.out.println( "玩家1:--> 单牌");
System.out.println( "玩家2:--> 金花");
}
else if(colors2_1==colors2_2 && colors2_1==colors2_3 && b2)//玩家2是顺金
{
//玩家2赢了
System.out.println(playerList.get(1).name + "获胜!");
System.out.println( "玩家1:--> 单牌");
System.out.println( "玩家2:--> 顺金");
}
else// 玩家2也是单牌
{
// 取出玩家1的最大手牌的数字
int max_h1 = 0;
int a = comparehPoker.compareCN(hPoker1.get(0), hPoker1.get(1));
int b = comparehPoker.compareCN(hPoker1.get(0), hPoker1.get(2));
int c = comparehPoker.compareCN(hPoker1.get(2), hPoker1.get(1));
if (a >= 0 && b >= 0)// 第一张牌最大
max_h1 = 0;
else if (a <= 0 && c <= 0)// 第二张牌最大
max_h1 = 1;
else// 第三张牌最大
max_h1 = 2;
// 取出玩家2的最大手牌的数字
int max_h2 = 0;
int e = comparehPoker.compareCN(hPoker2.get(0), hPoker2.get(1));
int f = comparehPoker.compareCN(hPoker2.get(0), hPoker2.get(2));
int h = comparehPoker.compareCN(hPoker2.get(2), hPoker2.get(1));
if (e >= 0 && f >= 0)// 第一张牌最大
max_h2 = 0;
else if (e <= 0 && h <= 0)// 第二张牌最大
max_h2 = 1;
else// 第三张牌最大
max_h2 = 2;
// 比较玩家最大的牌(数字)
int ab1 = comparehPoker.compareCN(hPoker1.get(max_h1), hPoker2.get(max_h2));
if (ab1 > 0)// 玩家1赢了
{
System.out.println(playerList.get(0).name + "获胜!");
System.out.println( "玩家1:--> 单牌");
System.out.println( "玩家2:--> 单牌");
}
else if(ab1<0)// 玩家2赢了
{
System.out.println(playerList.get(1).name + "获胜!");
System.out.println( "玩家1:--> 单牌");
System.out.println( "玩家2:--> 单牌");
}
else//最大的单牌数字相等,继续比较第二张
{
//取出玩家1第二大的手牌
int mid_h1 = 0;
if (a >= 0 && b >= 0)// 第一张牌最大
{
if (b >= 0 && c <= 0)// 第三张牌最小
mid_h1 = 1;
else if(a >= 0 && c >= 0)// 第二张牌最小
mid_h1 = 2;
}
else if(a <= 0 && c <= 0)// 第二张牌最大
{
if (b >= 0 && c <= 0)// 第三张牌最小
mid_h1 = 0;
else if(a <= 0 && b <= 0)// 第一张牌最小
mid_h1 = 2;
}
else if(c >= 0 && b <= 0)// 第三张牌最大
{
if(a >= 0 && c >= 0)// 第二张牌最小
mid_h1 = 0;
else if(a <= 0 && b <= 0)// 第一张牌最小
mid_h1 = 1;
}
//取出玩家2第二大的手牌
int mid_h2 = 0;
if (e >= 0 && f >= 0)// 第一张牌最大
{
if (f >= 0 && h <= 0)// 第三张牌最小
mid_h2 = 1;
else if(e >= 0 && h >= 0)// 第二张牌最小
mid_h2 = 2;
}
else if(e <= 0 && h <= 0)// 第二张牌最大
{
if (f >= 0 && h <= 0)// 第三张牌最小
mid_h2 = 0;
else if(e <= 0 && f <= 0)// 第一张牌最小
mid_h2 = 2;
}
else if(h >= 0 && f <= 0)// 第三张牌最大
{
if(e >= 0 && h >= 0)// 第二张牌最小
mid_h2 = 0;
else if(e <= 0 && f <= 0)// 第一张牌最小
mid_h2 = 1;
}
// 比较玩家第二大的牌(数字)
int ab2 = comparehPoker.compareCN(hPoker1.get(mid_h1), hPoker2.get(mid_h2));
if (ab2 > 0)// 玩家1赢了
{
System.out.println(playerList.get(0).name + "获胜!");
System.out.println( "玩家1:--> 单牌");
System.out.println( "玩家2:--> 单牌");
}
else if(ab2<0)// 玩家2赢了
{
System.out.println(playerList.get(1).name + "获胜!");
System.out.println( "玩家1:--> 单牌");
System.out.println( "玩家2:--> 单牌");
}
else//第二大的单牌数字相等,继续比较第三张
{
//取出玩家1最小的手牌
int min_h1 = 0;
if (b >= 0 && c <= 0)// 第三张牌最小
min_h1 = 2;
else if(a >= 0 && c >= 0)// 第二张牌最小
min_h1 = 1;
else if(a <= 0 && b <= 0)// 第一张牌最小
min_h1 = 0;
//取出玩家2最小的手牌
int min_h2 = 0;
if (f >= 0 && h <= 0)// 第三张牌最小
min_h2 = 2;
else if(e >= 0 && h >= 0)// 第二张牌最小
min_h2 = 1;
else if(e <= 0 && f <= 0)// 第一张牌最小
min_h2 = 0;
// 比较玩家最小的手牌(数字)
int ab3 = comparehPoker.compareCN(hPoker1.get(min_h1), hPoker2.get(min_h2));
if (ab3 > 0)// 玩家1赢了
{
System.out.println(playerList.get(0).name + "获胜!");
System.out.println( "玩家1:--> 单牌");
System.out.println( "玩家2:--> 单牌");
}
else if(ab3<0)// 玩家2赢了
{
System.out.println(playerList.get(1).name + "获胜!");
System.out.println( "玩家1:--> 单牌");
System.out.println( "玩家2:--> 单牌");
}
else//玩家三张单牌数字大小一样
{
// 比较玩家最大的牌的花色
int ab1_1 = comparehPoker.compare(hPoker1.get(max_h1), hPoker2.get(max_h2));
if (ab1_1 > 0)// 玩家1赢了
{
System.out.println(playerList.get(0).name + "获胜!");
System.out.println( "玩家1:--> 单牌");
System.out.println( "玩家2:--> 单牌");
}
else if(ab1_1<0)// 玩家2赢了
{
System.out.println(playerList.get(1).name + "获胜!");
System.out.println( "玩家1:--> 单牌");
System.out.println( "玩家2:--> 单牌");
}
}
}
}
}
}
}
}
因篇幅限制,故分为上中下三篇发布,下篇请参见我的手记《简易扑克游戏(续)—— 炸金花(下)》
点击查看更多内容
1人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦