package com.immoc.poker_game;
/**
*创建扑克牌类
*纸牌类包含:1.属性: 花色、点数
*/
public class Cards {
public String suit;//纸牌花色
public String points;//纸牌点数
/*
* 在构造器中初始化属性
*/
public Cards(String suit,String points){
super();
this.suit = suit;
this.points = points;
}
public String getSuit() {
return suit;
}
public String getPoints() {
return points;
}
}
package com.immoc.poker_game;
import java.util.ArrayList;
import java.util.List;
/**
* 创建玩家类
* 玩家类包含: 1.属性:玩家昵称 2.集合:保存玩家的手牌
* 注意:玩家手牌cards为游戏通过发牌后到达玩家手中的牌,不可重复
*/
public class Player {
public String playerName;//玩家昵称
public List<Cards> cards; //玩家手牌
/*
* 在构造器中初始化属性
*/
public Player(String playerName){
this.playerName = playerName;
}
}
package com.immoc.poker_game;
import java.util.Comparator;
/**
* 比较规则类
*/
public class Compara implements Comparator<Cards>{
public int compare(Cards arg0, Cards arg1) {
String suit = "方块 梅花 红桃 黑桃";
String points = "2 3 4 5 6 7 8 9 10 J Q K A";
//先比较点数
int result = points.indexOf(arg0.getPoints()) - points.indexOf(arg1.getPoints());
if(result < 0){
return -1;
}else if(result > 0){
return 1;
}else{//若点数相等,则比较花色
int result2 = suit.indexOf(arg0.getSuit()) - suit.indexOf(arg1.getSuit());
if(result2 > 0){
return 1;
}else if(result2 < 0){
return -1;
}else{
return 0;
}
}
}
}
package com.immoc.poker_game;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
/**
* 运行游戏类
*/
public class GameBegin {
private static Scanner console = new Scanner(System.in); //接收从键盘输入的数据
private Random random = new Random(); //产生随机数
private List<Cards> cardsList = new ArrayList<Cards>(); //一副扑克牌(所有扑克牌集合)
private static Player playA;
private static Player playB;
public static void main(String[] args) {
GameBegin gb = new GameBegin();
gb.createCardsList();
System.out.println("----------游戏开始!-----------");
System.out.println("玩家A您好,请输入您的游戏昵称:");
String nameA = console.next();
playA = gb.getPlayer(nameA);
System.out.println("玩家B您好,请输入您的游戏昵称:");
String nameB = console.next();
playB = gb.getPlayer(nameB);
gb.lastTEST();
}
/**
* 创建扑克牌
*/
public List<Cards> createCardsList(){
String[] suit = {"方块","梅花 ","红桃","黑桃"};
String[] points = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
for(String temp:suit){
for(int i = 0;i < points.length;i++){
Cards card = new Cards(temp, points[i]);
cardsList.add(card);
}
}
mixCardsList(); //洗牌
return cardsList;
}
/**
* 洗牌
* Collections.shuffle()方法的作用是打乱集合中的元素
*/
public void mixCardsList(){
Collections.shuffle(cardsList);
}
/**
* 创建玩家
*/
public Player getPlayer(String playerName){
//通过有参构造器创建玩家对象
Player play = new Player(playerName);
for(int i = 0;i < 2;i++){ //手牌总数:2张
/*
* 玩家拿牌
* 总的纸牌集合cardsList通过get()方法获取getRandomSuit()方法中产生的随机点数
* 玩家对象play通过玩家手牌集合cards调用add()方法将取得的随机点数添加进玩家手牌集合cards中
*/
play.cards.add(cardsList.get(getRandomSuit())); //玩家拿牌
}
System.out.println(play);
outputPlayerCards(play);
return play;
}
/**
* 发牌 -- 产生随机点数
*/
public int getRandomSuit(){
int k;
k = random.nextInt(51); //产生一个随机点数。52张牌,52个元素,共51个索引
return k;
}
/**
* 显示玩家拿到的牌
*/
public void outputPlayerCards(Player play){
System.out.println("您获得的手牌为:");
for(Cards card:play.cards){
System.out.println(card.getSuit()+""+card.getPoints()+" ");
}
Collections.sort(play.cards, new Compara());
System.out.println("您手中的最大的手牌为:"+play.cards.get(1).getSuit()+play.cards.get(1).getPoints());
}
/**
* 得到两个玩家中最大的牌,分出胜负
*/
public void lastTEST(){
List<Cards> lastCards = new ArrayList<Cards>(); //保存两个玩家最大的手牌
lastCards.add(playA.cards.get(1));
lastCards.add(playB.cards.get(1));
//对两个玩家最大的手牌进行排序比较
Collections.sort(lastCards, new Compara());
System.out.println("最大手牌:"+lastCards.get(1).getSuit()+lastCards.get(1).getPoints());
if(lastCards.get(1).getSuit().equals(playA.cards.get(1).getSuit()) &&
lastCards.get(1).getPoints().equals(playA.cards.get(1).getPoints()) ){
System.out.println(playA.playerName+"胜利!");
}else{
System.out.println(playB.playerName+"胜利!");
}
}
}
其中
playA = gb.getPlayer(nameA);
和
play.cards.add(cardsList.get(getRandomSuit())); //玩家拿牌
两行代码出现空指针异常,我找来找去反复五六遍也没找到哪里错了。。。呜呜呜呜。。。。
目前本人还是一名java小白,求各位大神帮助啊!!这写代码大部分是参考一位名叫Bazingaea的博主写的...,可是他的能正常实现,我的却出现异常了....