简单扑克游戏

本文记录了一次Java编程练习,创建了一个扑克游戏Demo。通过思考、实现和试玩,作者学习了map遍历、Comparable接口的使用以及代码组织技巧。此外,还分享了关于Java enum的用法和代码编辑器的快捷键心得。
摘要由CSDN通过智能技术生成

记一次Java小练习: 扑克游戏Demo

最近发现慕课网挺不错,在学知识的同时还能够实践编写程序.

0.问题描述

慕课视频课程里有这样一个小作业,内容如下:

1.创建一副扑克牌, 不包括大小王
2.创建两名玩家, 玩家有ID,姓名,手牌(扑克牌集合)等属性
3.洗牌: 打乱扑克牌顺序
4.发牌: 每个玩家发两张牌
5.比输赢
规则为:两个人分别取自己最大的手牌,然后在比较这两张牌,牌大的玩家获胜.

关于牌的大小顺序,点数有小到大2,3,...,Q,K,A.先比较点数大小,点数大的是大牌.
若点数相等,在按花色比大小: 黑桃>红桃>草花>方片
举例: 红桃A > 黑桃Q, 原因是A的点数比Q大
      草花3 > 方片3, 原因是两者点数一样, 但草花>方片

1.开始Thinking

这里边,可以这样子:

1. 每一张扑克牌看作一个类,索性叫它Poker类吧,有点数和花色属性
2. 一副扑克牌就是一个泛型集合,集合元素是Poker类
3. 每一个玩家都有ID,姓名等属性,因此来一个Player类
4. 洗牌: 给每一张扑克牌一个编号,编号就像这样: 1, 2, ..., 52  只需要打乱这52个编号就ok啦
5. 比较牌的大小,我们可以让Poker类实现Comparable接口,重写compareTo()方法

2.代码Implementation

好了,废话少说.
Poker类:

enum Suit {
    SPADE,HEART, DIAMOND, CLUB;
}
public class Poker implements Comparable<Poker> {
   
    int index;
    int point;
    Suit suit;
    String name;

    Poker(int index) {
        this.index = index;
        calcSuit();
        calcPoint();
        calcName();
    }

    Poker(Suit suit, int point) {
        this.suit = suit;
        this.point = point;
        calcIndex();
        calcName();
    }

    void setIndex(int index) {
        this.index = index;
        calcSuit();
        calcPoint();
        calcName();
    }

    void calcSuit() {
        switch ((this.index - 1)/13) {
        case 0:
            this.suit = Suit.SPADE;
            break;
        case 1:
            this.suit = Suit.HEART;
            break;
        case 2:
            this.suit = Suit.DIAMOND;
            break;
        case 3:
            this.suit = Suit.CLUB;
            break;
        }
    }

    void calcPoint() {
        this.point = index % 13;
        // 如果index % 13 = 0, 要将point设置为13
        if (this.point == 0) this.point = 13;
    }

    void calcIndex() {
        if (suit == Suit.SPADE) {
            this.index = point;
        } else if (suit == Suit.HEART) {
            this.index = 13 + point;
        } else if (suit == Suit.DIAMOND) {
            this.index = 26 + point;
        } else if (suit == Suit.CLUB) {
            this.index = 39 + point;
        }
    }

    void calcName() {
        StringBuilder string = new StringBuilder();
        switch (
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值