package zhajinhua;
import java.util.Random;
import java.util.Scanner;
import java.util.TreeSet;
public class StartGame {
public static void main(String[] args) {
Random ran = new Random();
int flag;//用于接收产生的庄家序号
Scanner con = new Scanner(System.in);
Player[] players;
Player[] copyofPlayers;
while(true){
//每次重新开始都要生成一幅牌
CardsOfPlayer.setCardsOfZJH(new CardsOfZJH());
String name;//用于接收输入的玩家名
System.out.println("输入玩家人数(2 - 6):");
int number = Integer.valueOf(con.nextLine());
if(number < 2 || number > 6){
System.out.println("提示:输入的玩家人数不正确!");
continue;
}
//生成玩家数组
players = new Player[number];
for(int i = 0;i < number;i ++){
System.out.println("输入第" + (i + 1) + "位玩家姓名:");
name = con.nextLine();
players[i] = new Player(name);
//打印下每个玩家的牌
System.out.println(players[i]);
}
copyofPlayers = players;//复制保留玩家数组
//随即产生庄家
flag = ran.nextInt(players.length);
players[flag].setZhuangjia();
//将所有玩家按操作顺序排好序。 双向链表或者数组。庄家 0 1 2 3 、、、定轮流规则(将庄家调为第一个)
if(flag != 0){
Player p = players[0];
players[0] = players[flag];
players[flag] = p;
}
//庄家蒙牌
System.out.println("庄家是:" + players[0].getName());
System.out.println("-------------------庄家蒙牌-------------------");
players[0].mengpai();
boolean b = true;
int c = 1;//为了用来区分是不是第一轮操作
while(b){//////////////////////////////////////////////存在一个问题 当庄家弃牌了 会有一个问题没有考虑到
//出庄家外各位玩家轮流选择操作 --跟牌、加注、弃牌、看牌、比牌、开牌。switch()
for(int i = c;i < players.length;i ++){
System.out.println(players[i].getName() + "的操作:");
//系统是否强制要求某玩家开牌判断
if(kaipai(players[i],players)){
b = false;break;
}
// if(players[i].isQipai()){
// continue;//弃牌的玩家已经被删除了不需要
// }else
if(players[i].isKanpai()){
caozuojiemian(players,i,0,1,1,1,1);//看了牌者的选择界面
}else{
caozuojiemian(players,i,1,1,1,1,1);//操作提示 需要判断是否看了牌 或者弃牌了 ////////////////////////////////////
}
}
c = 0;//下一轮循环从庄家开始。
}
System.out.println("第一轮游戏结束,打印所有玩家牌信息揭晓大家心中的疑问");
for(int i = 0;i < copyofPlayers.length;i ++){
copyofPlayers[i].showpai();
}
}
}
//计时读秒 //超时则调用弃权
public static void dumiao(){
}
//开牌 不管加注还是跟注之前都要判断是否必须开牌。
public static boolean kaipai(Player p,Player[] players){
//先判断是否看了牌
if((p.isKanpai() && (p.getCion() < 6 * Player.getGenzhuFlag())) || (!p.isKanpai() && (p.getCion() < 3 * Player.getGenzhuFlag())) || players.length == 2){
//满足以上条件则需要开牌,显示坚持下来的所有玩家牌信息 并判定赢家
TreeSet<CardsOfPlayer> set = new TreeSet<CardsOfPlayer>(new CardsOfPlayer());
for(int i = 0;i < players.length;i ++){
set.add(players[i].getCards());
}
System.out.println("以下输出的顺序是从小到大");
System.out.println(set);
set.last().getPlayer().setCion(set.last().getPlayer().getCion() + Player.getGuodi());
return true;
}else{
// System.out.println("不满足开牌要求");//测试用
return false;
}
}
// 比牌
public static void bipai(Player[] players,int i){
//也得判断是否看了牌然后更改锅底和自己的金额
if(players[i].isKanpai()){
players[i].setCion(players[i].getCion() - 2 * Player.getGenzhuFlag());Player.setGuodi(Player.getGuodi() + 2 * Player.getGenzhuFlag());
}else{
players[i].setCion(players[i].getCion() - Player.getGenzhuFlag());Player.setGuodi(Player.getGuodi() + Player.getGenzhuFlag());
}
//当剩下两个玩家时 可以调用开牌方法
if(players.length == 2){
kaipai(players[i],players);
}/////////////////////////////////////////////////////////////似乎没有运行
int [] biaohaoshuzu = new int[players.length - 1];
int biaohao =-1;
int k = 0;
System.out.println("你可以选择的比牌对象有:");
for(int j = 0;j < players.length;j ++){
if(players[j] == players[i]){
continue;
}else{
System.out.println(j + ":" + players[j].getName());
biaohaoshuzu[k ++] = j;
}
}
boolean bool = true;
//确定比牌对象的索引biaohao
while(bool){
System.out.println("输入你的选择标号");
Scanner con = new Scanner(System.in);
biaohao = con.nextInt();
for(int j = 0;j < biaohaoshuzu.length;j ++){
if(biaohao == biaohaoshuzu[j])
{
bool = false;
break;
}
}
}
//比较players[i]和players[biaohao]的牌的大小
if(players[i].getCards().compare(players[i].getCards(),players[biaohao].getCards()) < 0){
players[i].qipai(players,i);
}else{
players[biaohao].qipai(players,biaohao);
}
}
/**
* 当你选择看牌操作时你有第二次操作选择机会,这时你将不再用于看牌操作权限,当你输入的选择不在范围内时系统将给你重新选择的机会
* */
public static void caozuojiemian(Player[] players,int i,int a,int b,int c,int d,int e){//abcde用来标记各个选项有没有必要出现
System.out.println("---------------------------------操作选择-------------------------------");
if(a == 1){
System.out.println("-----------------------------1.======看牌-------------------------------");
}
if(b == 1){
System.out.println("-----------------------------2.======跟注-------------------------------");
}
if(c == 1){
System.out.println("-----------------------------3.======加注-------------------------------");
}
if(d == 1){
System.out.println("-----------------------------4.======比牌-------------------------------");
}
if(e == 1){
System.out.println("-----------------------------5.======弃牌-------------------------------");
}
System.out.println("---------------------------------操作选择-------------------------------");
Scanner con = new Scanner(System.in);
int number;
System.out.println("输入你的选择:");
if(players[i].isKanpai()){
while(true){
System.out.println("你看过牌只能选择2、3、4、5:");
number = con.nextInt();
if(number == 2 || number == 3 || number == 3 || number == 4 || number == 5){
break;
}else{
System.out.print("你的选择有误!");
}
}
}else{
number = con.nextInt();
}
//如果选择的是看牌的话可以重新选择其他的。
switch(number){
case 1:players[i].kanpai();caozuojiemian(players,i,0,1,1,1,1);break;
case 2:players[i].genzhu();break;
case 3:players[i].jiazhu();break;
case 4:bipai(players,i);break;
case 5:players[i].qipai(players,i);break;
default:System.out.println("你的选择不在范围内,请重新选择");caozuojiemian(players,i,a,b,c,d,e);
}
}
}
- 1
- 2
- 3
前往页