java卡组_简易扑克游戏(Java入门第三季,集合框架综合实例)

简易扑克游戏(Java入门第三季,集合框架综合实例),自己所写,功能全部实现,命令异常也有,也用了这一章节的主要知识,可能有些程序的条理有些地方不是特别清晰,其实是可以把一些杂乱的流程创建方法的

扑克类——Card

//扑克类

public class Card implements Comparable{

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 shoupai=new ArrayList();//玩家手牌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 getShoupai() {

return shoupai;

}

public void setShoupai(List 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 maxShoupai=new ArrayList();//用来存之后两位玩家的各自最大牌,再用来比较最大

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()+"]");

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值