Java扑克牌游戏规则说明,Java入门第三季:简易扑克牌游戏

游戏玩法

创建一副扑克牌,除大小王

登录两名玩家

随机洗牌 (打乱扑克牌的顺序)

发牌 (游戏开始,每名玩家发两张)

比较:先比点数,点数相等,再比花色(黑桃>红桃>梅花>方片)

分析

通过玩法,我们可以知道我们需要一个扑克牌集合来存放扑克牌,需要一个玩家集合来存放玩家,难点就在于扑克牌的比较,这个可以通过扑克牌这个对象实现Comparable接口,并重写compareTo()方法,自己定义默认的比较规则来解决这个难点。

代码

Card.java

import java.util.ArrayList;

import java.util.List;

/**

* 扑克牌类

* @author 杨萌 coder_sprout@163.com

*

*/

public class Card implements Comparable {

// 扑克牌花色

public String color;

// 扑克牌点数

public String point;

public Card() {

}

public Card(String color, String point) {

this.color = color;

this.point = point;

}

/**

* 重写compareTo()方法,根据自己的规则

*/

@Override

public int compareTo(Card o) {

if (this.point == o.point) {

if (this.color.equals("黑桃")) {

return 1;

} else if (this.color.equals("红桃")) {

if (o.color.equals("黑桃")) {

return -1;

} else {

return 1;

}

} else if (this.color.equals("梅花")) {

if (o.color.equals("黑桃") || o.color.equals("红桃")) {

return -1;

} else {

return 1;

}

} else {

return -1;

}

} else {

if (this.point.equals("A")) {

return 1;

} else if (this.point.equals("K")) {

if (o.point.equals("A")) {

return -1;

} else {

return 1;

}

} else if (this.point.equals("Q")) {

if (o.point.equals("A") || o.point.equals("K")) {

return -1;

} else {

return 1;

}

} else if (this.point.equals("J")) {

if (o.point.equals("A") || o.point.equals("K") || o.point.equals("Q")) {

return -1;

} else {

return 1;

}

} else if (this.point.equals("10")) {

if (o.point.equals("A") || o.point.equals("K") || o.point.equals("Q") || o.point.equals("J")) {

return -1;

} else {

return 1;

}

} else {

return this.point.compareTo(o.point);

}

}

}

}

Player.java

/**

* 玩家类

* @author 杨萌 coder_sprout@163.com

*

*/

public class Player {

// 玩家id

public int id;

// 玩家姓名

public String name;

public List cards;

public Player(){

}

public Player(int id, String name){

this.id = id;

this.name = name;

this.cards = new ArrayList();

}

}

GameDemo.java

import java.util.ArrayList;

import java.util.Collection;

import java.util.Collections;

import java.util.List;

import java.util.Scanner;

/**

* 简易扑克牌游戏: 1.创建一副扑克牌,除大小王 2.登录两名玩家 3.随机洗牌 4.发牌 5.比较:先比点数,点数想等,再比花色

*

* @author 杨萌 coder_sprout@163.com

*

*/

public class GameDemo {

// 保存扑克牌的集合

private List cards = new ArrayList();

// 保存玩家的集合

private List players = new ArrayList();

private Scanner scanner;

public GameDemo() {

scanner = new Scanner(System.in);

}

// 创建扑克牌

private void createCard() {

System.out.println("---------创建扑克牌---------");

for (int i = 0; i < 4; i++) {

for (int j = 2; j <= 14; j++) {

switch (i) {

case 0:

Card card = new Card("黑桃", setCardPoint(j));

cards.add(card);

break;

case 1:

Card card2 = new Card("红桃", setCardPoint(j));

cards.add(card2);

break;

case 2:

Card card3 = new Card("梅花", setCardPoint(j));

cards.add(card3);

break;

case 3:

Card card4 = new Card("方片", setCardPoint(j));

cards.add(card4);

break;

}

}

}

System.out.println("---------扑克牌创建成功---------");

}

// 遍历扑克牌

private void lookCardByForEach() {

for (Card card : cards) {

System.out.print(card.color + card.point + " ");

}

}

private String setCardPoint(int j) {

String point = null;

if (j <= 10) {

point = j + "";

} else {

switch (j) {

case 11:

point = "J";

break;

case 12:

point = "Q";

break;

case 13:

point = "K";

break;

case 14:

point = "A";

break;

}

}

return point;

}

// 洗牌

private void shuffle() {

System.out.println();

System.out.println("---------开始洗牌---------");

// 随机打乱list顺序

Collections.shuffle(cards);

System.out.println("---------洗牌结束---------");

}

// 创建玩家

private void createPlayer() {

System.out.println("---------创建玩家---------");

for (int i = 0; i < 2; i++) {

System.out.println("请输入第" + (i + 1) + "位玩家的ID和姓名:");

System.out.println("输入ID:");

int id = 0;

while(true){

try{

/**

* nextInt方法在发生异常后,不再接受用户输入的任何数据,而是徘徊在异常区域,如果外部使用死循环,从而导致死循环发生。

* 使用trim()方法是以防万一的写法,为了降低错误的发生率,以免手误多打空格

*/

id = Integer.parseInt(scanner.nextLine().trim());;

break;

}catch (NumberFormatException e) {

System.out.println("请输入整数类型的ID!");

System.out.println("重新输入ID:");

continue;

}

}

System.out.println("输入姓名:");

String name = scanner.nextLine();

Player player = new Player(id, name);

players.add(player);

}

System.out.println("----欢迎玩家:" + players.get(0).name);

System.out.println("----欢迎玩家:" + players.get(1).name);

}

// 开始发牌

private void getCard() {

System.out.println("---------开始发牌---------");

System.out.println("----玩家:" + players.get(0).name + "-拿牌");

players.get(0).cards.add(cards.get(0));

System.out.println("----玩家:" + players.get(1).name + "-拿牌");

players.get(1).cards.add(cards.get(1));

System.out.println("----玩家:" + players.get(0).name + "-拿牌");

players.get(0).cards.add(cards.get(2));

System.out.println("----玩家:" + players.get(1).name + "-拿牌");

players.get(1).cards.add(cards.get(3));

System.out.println("---------发牌结束---------");

}

// 游戏开始

private void gameStart() {

System.out.println("---------开始游戏---------");

Collections.sort(players.get(0).cards);

System.out.println("玩家:" + players.get(0).name + "最大的手牌为: " + players.get(0).cards.get(1).color

+ players.get(0).cards.get(1).point);

Collections.sort(players.get(1).cards);

System.out.println("玩家:" + players.get(1).name + "最大的手牌为: " + players.get(1).cards.get(1).color

+ players.get(1).cards.get(1).point);

List gameCards = new ArrayList();

gameCards.addAll(players.get(0).cards);

gameCards.addAll(players.get(1).cards);

Collections.sort(gameCards);

if (players.get(0).cards.contains(gameCards.get(gameCards.size() - 1))) {

System.out.println("---------玩家:" + players.get(0).name + "获胜---------");

} else {

System.out.println("---------玩家:" + players.get(1).name + "获胜---------");

}

}

// 查看玩家手牌

private void lookPlayerCard() {

System.out.println("---------玩家各自的手牌为:---------");

String player1Card1 = players.get(0).cards.get(0).color + players.get(0).cards.get(0).point;

String player1Card2 = players.get(0).cards.get(1).color + players.get(0).cards.get(1).point;

System.out.println(players.get(0).name + ":[" + player1Card1 + "," + player1Card2 + "]");

String player2Card1 = players.get(1).cards.get(0).color + players.get(1).cards.get(0).point;

String player2Card2 = players.get(1).cards.get(1).color + players.get(1).cards.get(1).point;

System.out.println(players.get(1).name + ":[" + player2Card1 + "," + player2Card2 + "]");

}

public static void main(String[] args) {

while (true) {

GameDemo gd = new GameDemo();

gd.createCard();

gd.lookCardByForEach();

gd.shuffle();

gd.lookCardByForEach();

gd.createPlayer();

gd.getCard();

gd.gameStart();

gd.lookPlayerCard();

System.out.println();

System.out.println();

System.out.println();

System.out.println("---------是否继续游戏?---------");

System.out.println("----1.继续游戏-----0.退出游戏----");

if (gd.scanner.next().equals("1")) {

continue;

} else {

break;

}

}

System.out.println("---------游戏结束!---------");

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值