玩家
package com.pukeyouxi;
import java.util.ArrayList;
import java.util.List;
public class Player {
private int id;
private String name;
private List<Puke>playerPuke;
public Player(){
this.playerPuke=new ArrayList<Puke>();
this.id=id;
this.name=name;
}
public Player(int id,String name){
this.id=id;
this.name=name;
//这里实例化是因为构造方法中如果同时传入id,name就会被playerPuke接收
this.playerPuke=new ArrayList<Puke>();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Puke> getPlayerPuke() {
return playerPuke;
}
public void setPlayerPuke(List<Puke> playerPuke) {
this.playerPuke = playerPuke;
}
}
扑克牌
package com.pukeyouxi;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Puke implements Comparable<Puke> {
private String color;
private String number;
private static List<String>colors=Arrays.asList("方片", "梅花", "红桃", "黑桃");
private static List<String>numbers=Arrays.asList("2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q",
"k", "A");
//这里我也已经尝试了在方法内一个个添加,但不知道怎么搞的下边CompareTo方法出现了错误,空指针错误,有比较懂得告诉下原因,谢谢
public Puke(String color,String number){
this.color=color;
this.number=number;
}
public Puke() {
this.colors=new ArrayList<String>();
this.numbers=new ArrayList<String>();
// TODO 自动生成的构造函数存根
}
public String getColor() {
return color;
}
public String getNumber() {
return number;
}
public static List<Puke> testPuke(){
//创建了扑克牌
System.out.println("----------------创建扑克牌----------------");
List<Puke> puker=new ArrayList<Puke>();
for(int i=0;i<52;i++){
String cm=null;
String dd=null;
int cm1=i%13;//余数
cm=numbers.get(cm1);
int cm2=i%4;
dd=colors.get(cm2);
Puke temp=new Puke(dd,cm);
puker.add(temp);
}
System.out.println("----------------创建扑克牌成功!----------------");
System.out.println(puker.toString());
return puker;
}
@Override
public String toString() {
return "" + color + "" + number + "";
}
@Override
public int compareTo(Puke o) {
//这理运用了比较索引位置,因为不重复所以且已经按照大小排列了,这样比较索引
if(numbers.indexOf(this.number)==numbers.indexOf(o.number)){
return Integer.valueOf(colors.indexOf(this.color)).compareTo
(Integer.valueOf(colors.indexOf(o.color)));
}else{
return Integer.valueOf(numbers.indexOf(this.number)).compareTo
(Integer.valueOf(numbers.indexOf(o.number)));
}
// TODO 自动生成的方法存根
}
}
main函数
package com.pukeyouxi;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Scanner;
import java.util.Set;
import java.util.Map.Entry;
public class Game {
private List<Puke> pukeCun;
//创建玩家我用的Map,这样容易保证不重复
private Map<Integer,Player>player;
private List<Puke>washPuke;
//接收map中value值id,name并写入List的ly,方便下面比较
private List<Player> ly;
//写入
private Scanner console;
public Game(){
pukeCun=Puke.testPuke();
this.player=new HashMap<Integer ,Player>();
washPuke=new ArrayList<Puke>();
this.ly=new ArrayList<Player>();
console = new Scanner(System.in);
}
public Map<Integer,Player> playerNum(){
System.out.println("----------------创建玩家----------------");
int i=0;
//这里只是单纯的跟老师要求的两个人玩,循环两次
while(i<2){
Integer id=0;
System.out.println("请输入第"+(i+1)+"位玩家的id和姓名:");
System.out.println("输入id:");
try{
id=console.nextInt();
}
catch(Exception e){
System.out.println("输入错误,请输入整型!");
//注释掉的是打印错误信息
//e.printStackTrace();
//下面是自己弄了好久,一直死循环,看到别人这样的
console.next();
continue;
}
Player pl=player.get(id);
//map中通过键,看对应value值是否为空,为空则加上
if(pl==null){
System.out.println("输入姓名:");
String name=console.next();
Player er=new Player(id,name);
//添加玩家信息,map用put方法
player.put(id, er);
i++;
}else{
System.out.println("该id已经被占用,请从新输入!");
continue;
}
//下面是总循环第一次不循环下面,输入第两次后循环下面
if(i>1){
Set<Integer>keySet=player.keySet();
for(Integer sr:keySet){
Player py=player.get(sr);
if(py!=null){
System.out.println("--------欢迎玩家:"+py.getName());
}
}
}
}
return player;
}
public void washPuke(){
System.out.println("----------------开始洗牌----------------");
int i=0;
while(i<52){
Random om=new Random();
//随机产生一个数字
int on=om.nextInt(52);
Puke c= pukeCun.get(on);
//下面是判断是否重复,也可以用Collections.shuffle()方法
if(!washPuke.contains(c)){
washPuke.add(c);
}else{
continue;
}
i++;
}
System.out.println("----------------洗牌结束----------------");
}
public void takePuke(){
System.out.println("----------------开始发牌----------------");
Set<Entry<Integer,Player>> entrySet=player.entrySet();
//在这里用entry返回键值对
for(Entry<Integer,Player> entry:entrySet){
//键值对获得value值,并获得id,在这是包装类自动转换int
int d=entry.getValue().getId();
//键值对获得value值,并获得name
String n=entry.getValue().getName();
//新创建了List的玩家信息
Player ar=new Player(d,n);
//添加
ly.add(ar);
}
//因为两个人,每人人两张牌
for(int i=0;i<4;i++){
//获取洗牌后的牌
Puke puk= washPuke.get(i);
//玩家谁
System.out.println("-----玩家"+ly.get(i%2).getName()+"--拿牌");
//添加玩家*的扑克牌列表
ly.get(i%2).getPlayerPuke().add(puk);
}
System.out.println("----------------发牌结束!----------------");
System.out.println("----------------开始游戏!----------------");
int bj=0;
//两个人
for(int i=0;i<2;i++){
//比较的是玩家*的手牌
Collections.sort(ly.get(i).getPlayerPuke());
//最大的牌就是根据排序规则最后一个,也就是第二张牌,如果牌数较多可以赋值第一张 牌最大,遍历比较,大的再次赋值
System.out.println("玩家:"+ly.get(i).getName()+"最大手牌为:"+ly.get(i).getPlayerPuke().get(1).getColor()+
ly.get(i).getPlayerPuke().get(1).getNumber() );
}
//比较第二张牌,
if(ly.get(0).getPlayerPuke().get(1).compareTo(ly.get(1).getPlayerPuke().get(1))>0){
System.out.println("----------------玩家:"+ly.get(0).getName()+"获胜!----------------");
}else{
System.out.println("----------------玩家:"+ly.get(1).getName()+"获胜!----------------");
}
System.out.println("玩家各自的手牌为:");
for(int i=0;i<2;i++){
System.out.println(ly.get(i).getName()+":"+ly.get(i).getPlayerPuke().toString());
}
}
public static void main(String[] args) {
Game me=new Game();
me.washPuke();
me.playerNum();
me.takePuke();
}
}