package com.newpoker1;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Random;
import java.util.Scanner;
import java.util.Set;
public class Poker{
//接收卡牌花
List<String> pokerFlower;
//pokerWay泛型的List作用于比较扑克
List<pokerWay> pokerway;
//收集玩家ID
List<String> IDID;
//创建Map,作用于收集玩家ID与姓名
Map<String,Pokeridname>pokeridname;
//初始化集合
public Poker(){
this.pokerFlower=new ArrayList<String>();
this.pokerway=new ArrayList<pokerWay>();
this.pokeridname=new HashMap<String,Pokeridname>();
this.IDID=new ArrayList<String>();
}
public void poker1(){
String [] pokerflower={"方块","梅花","红桃","黑桃"};
String [] pokerspot={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
String poker;
for (int i = 0; i < 13; i++) {
for (int j = 0; j < 4; j++) {
//pokerspot每执行一次pokerflower要执行4次 且每次执行都要配合pokerspot合并再传入pokerFlower中
poker=pokerflower[j]+pokerspot[i];
pokerFlower.add(poker);
}
}System.out.print("-----【正在获取扑克牌】-----\n-----【成功获取扑克牌】-----\n"+pokerFlower+"\n");
//创建一个次数为卡牌的长度的for
for (int i = 0; i < 52; i++) {
//new 一个pokerWay泛型对象并传入i和pokerFlower.get(i)
pokerWay po=new pokerWay(i,pokerFlower.get(i));
//添加循环所获得的数字和字符串
pokerway.add(i, po);
//System.out.println(pokerway.get(i).pokername);
}
Collections.sort(pokerway);
}
/**
- 使用Map创建玩家信息
*/
public void poker2(){
//创建Scanner对象获取玩家ID与昵称
for (int i = 0; i < 2;) {
//捕获输入ID是否为整形的异常如果不是则抛出异常
try{
Scanner scan=new Scanner(System.in);
System.out.println("请输入您的ID:");
Integer ID=scan.nextInt();
String id=Integer.toString(ID);
Pokeridname p=pokeridname.get(id);
if(p==null){
//收集Pokeridname为空的的ID不为空则不收集
IDID.add(id);
System.out.println("请输入您的昵称:");
String name=scan.next();
//new一个Pokeridname对象并传进去
Pokeridname po=new Pokeridname(id,name);
//添加Key值的id和Value值的po
pokeridname.put(id, po);
i++;
}else{
System.out.println("您输入的ID已存在,请重新输入!!!");
continue;
}
}catch(Exception e){
System.out.println("输入有误,请输入整型数字ID!!!");
continue;
}
}
System.out.println("=========================");
//用Entry循环遍历并输出
Set<Entry<String,Pokeridname>>entrySet=pokeridname.entrySet();
for (Entry<String, Pokeridname> entry : entrySet) {
System.out.println("-----欢迎玩家-"+entry.getValue().name);
}
System.out.println("=========================");
}
public void Pokerrandom(){
List<Integer>randomList=new ArrayList<Integer>();
//获取整形数字每次获取如果获取的整数大于现有数则替换掉当前的整数
Integer game1=0;
Integer game2=0;
Random random=new Random();
Integer ran;System.out.println("\n----------【正在洗牌】----------\n----------【洗牌完成】----------\n----------【开始发牌】----------\n");
for (int i = 0; i < 52;i++) {
do{
ran=random.nextInt(52);
}while(randomList.contains(ran));
randomList.add(ran);
//玩家1
if((i==0)||(i==2)){ //用IDID来获取玩家的昵称, 并输出玩家所获取的牌
System.out.println("-----玩家“"+pokeridname.get(IDID.get(0)).name+"”拿牌: "+pokerway.get(ran).pokername);
//每次获取如果获取的整数大于game1的数则替换掉当前的整数
if(pokerway.get(ran).id>game1){
//然后用gane1获取最后获得的最大整数,因为每次获得如果大于就会被替换掉如果小于就不会
game1=pokerway.get(ran).id;
}
}
//玩家2
if((i==1)||(i==3)){
System.out.println("-----玩家“"+pokeridname.get(IDID.get(1)).name+"”拿牌: "+pokerway.get(ran).pokername);
if(pokerway.get(ran).id>game2){
game2=pokerway.get(ran).id;
}
}
}
//输出双方最后最大的扑克牌,并进行比较如果玩家1大于玩家2则玩家1赢否则玩家2赢
System.out.println("\n----------【发牌结束】----------\n"+pokeridname.get(IDID.get(0)).name+"最大的手牌为 : "
+pokerway.get(game1).pokername+"\n"+pokeridname.get(IDID.get(1)).name+"最大的手牌为 : "+pokerway.get(game2).pokername+"\n--------------------------------");
if(pokerway.get(game1).id>pokerway.get(game2).id){
System.out.println("=====恭喜玩家“"+pokeridname.get(IDID.get(0)).name+"”获得胜利=====\n========【奖励沙子一粒】========\n----------【游戏结束】----------");
}else{
System.out.println("=====恭喜玩家“"+pokeridname.get(IDID.get(1)).name+"”获得胜利=====\n========【奖励沙子一粒】========\n----------【游戏结束】----------");
}
}
//调用方法
public static void main(String [] args) {
Poker p=new Poker();
p.poker1();
p.poker2();
p.Pokerrandom();
}
}
另外还有两个方法一个是扑克一个是玩家里面都有一个id name和扑克的pokerid pokername 我就不传上去了 这个实现功能而且不会有什么出错.
共同学习,写下你的评论
评论加载中...
作者其他优质文章