一、游戏规则如下:
1.创建一副扑克牌,包括2-10,J,Q,K,A.四种花色黑红梅方。无大小王
2.创建两名玩家,有ID,姓名,手牌等属性,手牌为扑克牌的集合3.洗牌。将之前创建的扑克牌打乱顺序
4.发牌。洗牌之后的扑克牌集合,从第一张开始,发给两名玩家,按照一人一张的方式,每人两张
5.游戏,比较两名玩家手中的扑克牌,规则为:取两人各自手中点数最大的牌进行比较,点数大的赢;
若两人各自的点数最大的牌相等,则再按花色比较。
二、思路
1.创建Player、Card、Game、CardDemo类
三、代码
package com.csdn.tim;
/*
*主类
*/
public class CardDemo {
public static void main(String[] args){
Game game = new Game();
game.cardCreat();
game.playerCreat();
game.cardShuffle();
game.cardDeal();
game.result();
}
}
package com.csdn.tim;
import java.util.ArrayList;
import java.util.List;
/*
* 玩家类
*/
public class Player {
/*
* 属性
*/
private String name;
private int id;
//用于储存玩家手牌
List<Card> cardList;
/*
* 构造器初始化玩家
*/
public Player(String name,int id){
this.setId(id);
this.setName(name);
cardList = new ArrayList<Card>();
}
@Override
public String toString() {
return "玩家" + id + name;
}
/*
* 封装
*/
protected String getName() {
return name;
}
protected void setName(String name) {
this.name = name;
}
protected int getId() {
return id;
}
protected void setId(int id) {
this.id = id;
}
}
package com.csdn.tim;
/*
* 扑克牌类
*/
public class Card {
/*
* 属性
*/
private String color;
private String number;
/*
* 构造器中初始化card属性
*/
public Card(String number,String color){
this.setColor(color);
this.setNumber(number);
}
/*
* 重写toString方法,输出一副扑克牌信息
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return color + number;
}
protected String getColor() {
return color;
}
protected void setColor(String color) {
this.color = color;
}
protected String getNumber() {
return number;
}
protected void setNumber(String number) {
this.number = number;
}
}
package com.csdn.tim;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Game{
/*
* 全局变量
* 创建两个数组,用于存放扑克牌的花色和数字。
* 声明扑克牌和玩家对象List,创建一个Scanner对象
*/
String[] colors = {"方块","梅花","红桃","黑桃"};
String[] numbers = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
List<Card> cardList;
List<Player> playerList;
Scanner console = new Scanner(System.in);
/*
*在构造器中初始化玩家和扑克牌的List
*/
public Game(){
cardList = new ArrayList<Card>();
playerList = new ArrayList<Player>();
}
/*
* 创建一副扑克牌的方法
*/
public void cardCreat(){
//创建一个数组,用于盛装52张扑克牌
Card[] cards = new Card[52];
int k = 0;
/*
* for循环产生52张扑克牌,并添加至cardList中,然后打印输出
*/
for(int i = 0;i < colors.length;i++){
for(int j = 0;j < numbers.length;j ++){
String color = colors[i];
String number = numbers[j];
cards[k] = new Card(number,color);
k++;
}
}
cardList.addAll(Arrays.asList(cards));
System.out.println("-------------创建扑克牌成功!-------------");
for(Card cds : cards){
System.out.print(cds + " ");
}
System.out.println();
}
/*
*创建两名玩家的方法
*/
public void playerCreat(){
/*
* 创建两名玩家,并将其添加至playerList中,并打印输出
*/
for(int i = 0;i < 2;i ++){
System.out.println("请输入玩家" + (i+1) + "ID:");
int id;
while(true){
try{
id = scanInt();
break;
}catch(Exception e){
System.out.println(e.getMessage());
continue;
}
}
System.out.println("请输入玩家" + (i+1) + "姓名:");
String name = console.next();
Player player = new Player(name,id);
if(!playerList.contains(player)){
playerList.add(player);
}
System.out.println("创建玩家成功:");
for(Player players : playerList){
System.out.println(players);
}
}
console.close();
}
/*
*出现异常的方法
*/
public int scanInt() throws Exception{
try{
int in = console.nextInt();
return in;
}catch(Exception e){
console = new Scanner(System.in);
throw new Exception("输入异常,请输入整数类型的ID");
}
}
/*
* 洗牌
*/
public void cardShuffle(){
System.out.println("-------------开始洗牌-------------");
Collections.shuffle(cardList);
}
/*
* 发牌
*/
public void cardDeal(){
/*
* if判断保证玩家的List不为空
*/
if(playerList != null){
System.out.println("-------------开始发牌-------------");
int j = 0;
/*
* for循环给玩家的cardSet属性赋值,也就是产生两位玩家两张手牌,循环打印输出两位玩家的手牌
*/
for(int i = 0; i < 2;i ++){
playerList.get(0).cardList.add(cardList.get(j));
System.out.println("玩家" + playerList.get(0).getName() + "拿牌:"
+ cardList.get(j).getColor() + cardList.get(j).getNumber());
j++;
playerList.get(1).cardList.add(cardList.get(j));
System.out.println("玩家" + playerList.get(1).getName() + "拿牌:"
+ cardList.get(j).getColor() + cardList.get(j).getNumber());
j++;
}
for(int i = 0;i < 2; i++){
System.out.println("玩家" + playerList.get(i).getName() + "的手牌为");
for(Card pc : playerList.get(i).cardList){
System.out.println(pc);
}
}
}
}
/*
* 比较两张牌的大小的方法,传入两个参数x,y,类型为Crad型
*/
public int compare(Card x,Card y){
int value1 = 0,value2 = 0;//两张牌的面值0-12
int color1 = 0,color2 = 0;//两张牌的花色0-3
/*
* 依次取得两张手牌的面值和花色,进行比较。并返回int值
* 返回1则x大,返回2则y大
*/
for(int i = 0;i < 13;i ++){
if(x.getNumber().equals(numbers[i]))
value1 = i;
}
for(int i = 0;i < 4;i ++){
if(x.getColor().equals(colors[i]))
color1 = i;
}
for(int i = 0;i < 13;i ++){
if(y.getNumber().equals(numbers[i]))
value2 = i;
}
for(int i = 0;i < 4;i ++){
if(y.getColor().equals(colors[i]))
color2 = i;
}
if(value1 > value2){
return 1;
}else if(value1 < value2){
return 2;
}else{
if(color1 > color2){
return 1;
}else{
return 2;
}
}
}
/*
* 判断结果
*/
public void result(){
int result = 0;
Card card1,card2;//用于存放两张手牌
Card max1,max2;//用于存放两玩家最大手牌
//判断玩家一最大手牌
card1 = playerList.get(0).cardList.get(0);
card2 = playerList.get(0).cardList.get(1);
result = compare(card1,card2);
if(result == 1){
System.out.println("玩家一最大的手牌是" + card1.getColor() + card1.getNumber());
max1 = card1;
}else{
System.out.println("玩家一最大的手牌是" + card2.getColor() + card2.getNumber());
max1 = card2;
}
//判断玩家二最大手牌
card1 = playerList.get(1).cardList.get(0);
card2 = playerList.get(1).cardList.get(1);
result = compare(card1,card2);
if(result == 1){
System.out.println("玩家一最大的手牌是" + card1.getColor() + card1.getNumber());
max2 = card1;
}else{
System.out.println("玩家一最大的手牌是" + card2.getColor() + card2.getNumber());
max2 = card2;
}
//判断两玩家最大手牌的大小
result = compare(max1,max2);
if(result == 1)
System.out.println("玩家" + playerList.get(0).getName() + "胜");
if(result == 2)
System.out.println("玩家" + playerList.get(1).getName() + "胜");
}
}