简易扑克游戏(Java入门第三季,集合框架综合实例),自己所写,功能全部实现,命令异常也有,也用了这一章节的主要知识,可能有些程序的条理有些地方不是特别清晰,其实是可以把一些杂乱的流程创建方法的
扑克类——Card
//扑克类
public class Card implements Comparable<Card>{
private String huase;//扑克花色
private String number;//扑克数字
//花色和数字两个字符串数组,用来表示前面的元素小,后面的元素大
private String[] huaseArray={ "方片", "梅花", "红桃", "黑桃" };
private String[] numberArray={ "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" };
//构造器
public Card(String huase,String number){
this.huase=huase;
this.number=number;
}
public String getHuase() {
return huase;
}
public void setHuase(String huase) {
this.huase = huase;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
//用来定义List的排序标准
@Override
public int compareTo(Card o)
{
Integer huase1=0,huase2=0;
Integer number1=0,number2=0;
int result=0;
//将牌的数字和花色按huaseArray数组、numberArray数组大小顺序,转变为一个数字,这个数字可以用来比较大小
for(int i=0;i<4;i++)
{
if(this.getHuase().equals(huaseArray[i]))
huase1=i;
}
for(int i=0;i<4;i++)
{
if(o.getHuase().equals(huaseArray[i]))
huase2=i;
}
for(int i=0;i<13;i++){
if(this.getNumber().equals(numberArray[i]))
number1=i;
}
for(int i=0;i<13;i++){
if(o.getNumber().equals(numberArray[i]))
number2=i;
}
if(number1.compareTo(number2)!=0)//如果数字不相等
{
//以下注释中可用来检查number1是否大于或小于number2
// if(number1.compareTo(number2)>0)
// System.out.println(number1+"大于"+number2);
// else
// System.out.println(number1+"小于"+number2);
result=number1.compareTo(number2);
}
else if(number1.compareTo(number2)==0)//如果数字相等
{
// if(huase1.compareTo(huase2)>0)
// System.out.println(this.getHuase()+"大于"+o.getHuase());
// else
// System.out.println(this.getHuase()+"小于"+o.getHuase());
result=huase1.compareTo(huase2);
}
return result;
}
//覆盖原有toString方法,返回"花色数字"字符串,如"红桃A"
@Override
public String toString() {
return ""+huase+number;
}
}
玩家类——Player
import java.util.ArrayList;
import java.util.List;
//玩家类
public class Player {
private int ID;//玩家ID
private String name;//玩家姓名
private List<Card> shoupai=new ArrayList<Card>();//玩家手牌List
//构造器
public Player(int iD, String name) {
this.ID = iD;
this.name = name;
this.shoupai = new ArrayList();
}
public Player(){
super();
}
public int getID() {
return ID;
}
public void setID(int iD) {
ID = iD;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Card> getShoupai() {
return shoupai;
}
public void setShoupai(List<Card> shoupai) {
this.shoupai = shoupai;
}
}
自定义命令异常—— CommandException
//自定义命令异常
public class CommandException extends Exception {
public CommandException(){
}
public CommandException(String message){
super(message);
}
}
Test类
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class Test {
//创建52张扑克牌
public Card[] createCard(){
Card[] cards=new Card[52];
String[] huase={ "方片", "梅花", "红桃", "黑桃" };
String[] number={ "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" };
System.out.println(huase[0]);
for(int i=0; i<52; i++)
{
cards[i]=new Card(huase[i/13],number[i%13]);}
return cards;
}
//遍历输出扑克牌
public void printCard(Card[] cards){
System.out.print("为:[");
for (Card card : cards) {
System.out.print(card.toString()+"-");
}
System.out.println("]");
}
//洗牌
public void xiPai(Card[] cards) {
Random rd = new Random();
for (int i = 0; i < 52; i++) {
int newNum = rd.nextInt(52);
Card tmp = cards[newNum];
cards[newNum] = cards[i];
cards[i] = tmp;
}
}
/**
* 输入ID,姓名并检查是否异常
* @param args
*/
public static Player input() throws CommandException{
Scanner console=new Scanner(System.in);
Player player = null;
try{
System.out.println("输入ID:");
int ID=console.nextInt();
System.out.println("输入姓名:");
String name=console.next();
player=new Player(ID,name);
return player;
}catch(Exception e){
throw new CommandException("输入有误!");
}
}
//主函数
public static void main(String[] args) {
Test t=new Test();
List<Card> maxShoupai=new ArrayList<Card>();//用来存之后两位玩家的各自最大牌,再用来比较最大
Card[] newcards=t.createCard();//创建52张扑克牌赋给newcards数组
Player[] player=new Player[2];//初始化2玩家数组
System.out.println("----------创建扑克牌----------");
System.out.println("---------扑克牌创建成功!----------");
t.printCard(newcards);//遍历输出
System.out.println();
System.out.println("-----------开始洗牌-----------");
System.out.println("-----------洗牌结束!-----------");
t.xiPai(newcards);//洗牌,原来newcards数组里次序变乱,但数组依然是newcards
t.printCard(newcards);//遍历输出
System.out.println();
System.out.println("-----------创建玩家-----------");
//两次循环输入两个玩家的信息
for(int i=0;i<2;i++){
//如果输入异常,即每一个玩家输入有误,玩家内数据无则一直循环输入
while(true){
System.out.println("请输入第"+(i+1)+"位玩家的ID和姓名:");
try {
player[i]=input();//调用输入方法
} catch (CommandException e) {
System.out.println(e.getMessage());
}
if(player[i].getName()!=null)//第i+1个玩家内名字不为空,即没有输入命令异常,则退出循环
break;
}
}
for(int i=0;i<2;i++){
System.out.println("----欢迎玩家:"+player[i].getName());
}
System.out.println("-----------开始发牌…-----------");
//显示两个玩家依次拿牌
for(int i=0;i<4;i++){
if(i%2==0){
System.out.println("----玩家"+player[0].getName()+"-拿牌");
player[0].getShoupai().add(newcards[i]);
}
else{
System.out.println("----玩家"+player[1].getName()+"-拿牌");
player[1].getShoupai().add(newcards[i]);
}
}
System.out.println("----------发牌结束!----------");
System.out.println("----------游戏开始…----------");
Collections.sort(player[0].getShoupai());//对玩家1手牌进行排序,是升序,小的在前
Collections.sort(player[1].getShoupai());//对玩家2手牌进行排序,是升序,小的在前
System.out.println("玩家:"+player[0].getName()+"最大的手牌为 :"+player[0].getShoupai().get(1));//输出玩家1最大牌
System.out.println("玩家:"+player[1].getName()+"最大的手牌为 :"+player[1].getShoupai().get(1));//输出玩家2最大牌
maxShoupai.add(0, player[0].getShoupai().get(1));//将玩家1的最大手牌添加到比较卡组
maxShoupai.add(0, player[1].getShoupai().get(1));//将玩家2的最大手牌添加到比较卡组
Collections.sort(maxShoupai);//对比较卡组进行排序,是升序,小的在前
System.out.println("最大牌是:"+maxShoupai.get(1));//输出最大牌
//遍历看最大牌是否跟某一个玩家的最大牌是同一张
for(int i=0;i<2;i++){
if(maxShoupai.get(1).equals(player[i].getShoupai().get(1)))
System.out.println("--------玩家:"+player[i].getName()+"获胜!----------");
}
System.out.println("玩家各自的手牌为:");
for(int i=0;i<2;i++){
//输出玩家各自手牌
System.out.println(""+player[i].getName()+"["+player[i].getShoupai().get(0).toString()+","+player[i].getShoupai().get(1).toString()+"]");
}
}
}
点击查看更多内容
1人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦