当前位置:首页 » 《随便一记》 » 正文

13、Java——“21点”扑克游戏系统(变量+循环)

24 人参与  2022年10月19日 08:10  分类 : 《随便一记》  评论

点击全文阅读


✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。

?个人主页:乐趣国学的博客

?个人信条:不迁怒,不贰过。小知识,大智慧。

?当前专栏:Java案例分享专栏

✨特色专栏:国学周更-心性养成之路

?本文内容:Java——“21点”扑克游戏系统(变量+循环)

更多内容点击?

                       Java——对象和类案例代码详解

目录

⛳️ 一、项目需求

⛳️ 二、代码实现

⛳️ 三、效果展示


⛳️ 一、项目需求

    编写“21点”的扑克游戏(每个需求用一个测试类来完成测试)

    需求一: 计算机随机地向用户发5张牌,如果牌的总点数小於或等於21点,则用户赢;超过21点则计算机赢。

        注意类的没有参数的构造器随机产生一张牌,并且不会重复发牌。类模仿真实牌局的行为,可以用getValue方法从一副牌中重复抽取牌。

        你的程序应该:

        抽取一张牌;

        向用户显示这张牌;

        显示到目前为止已发牌的总点数

    需求二: 为使程序更象真实的牌局,用户应该能与计算机互动玩牌。修改刚才的程序,计算机仍然抽取5张牌,不超过21点的是赢家,如果双方都不超过21点,则双方都不算赢,你的程序应该能准确地报告结果。

        程序应该:

        为用户和计算机抽牌;

        向用户显示牌;

        分别显示用户和计算机的当前总点数;

        为使游戏更加有趣,每抽一张新牌时都要显示牌和总点数

    需求三: 修改程序使用户可以选择是否抽牌,而规定计算机必须抽5张牌或直到牌的总点数大於等於21

    需求四: 修改程序使得用户可以一直玩下去,并分别累计用户和计算机赢的牌局数。

⛳️ 二、代码实现

1、提供默认引用类Card类,代码如下:

package cn.bdqn.demo04 ;/** * Represents a playing card * @author Roger Garside/John Mariani * @version Last Rewritten: 16th Sept 1997 */import java.util.* ;public class Card    {    // Card Class Variables    private static boolean initialised = false ;    private static Random rand = new Random() ;    private static boolean[][] dealt = new boolean[4][13] ;    private static int noDealt ;    // Card Instance Variables    /*     * the suit of the card (0 to 3)     */    private int suit ;    /*     * the value of the card (0 to 12)     */    private int value ;    // Card Class Constants    /**    * Constant - Spades    */    public static final int SPADES = 0 ;    /**    * Constant - Hearts    */    public static final int HEARTS = 1 ;    /**    * Constant - Clubs    */    public static final int CLUBS = 2 ;    /**    * Constant - Diamonds    */    public static final int DIAMONDS = 3 ;    // Card Constructor Methods    /**     * Creates an instance of the Card class with random values     * (if all have been dealt, then starts again)     */    public Card(){        if (noDealt == 52)            {    System.err.println("all 52 cards dealt") ;            initialised = false ;            }if (!initialised)    {    for (int i = 0 ; i < 4 ; i++)        for (int j = 0 ; j < 13 ; j++)    dealt[i][j] = false ;    initialised = true ;    noDealt = 0 ;    }int s, v ;do    {    s = (int) (Math.abs(rand.nextInt()) % 4) ;    v = (int) (Math.abs(rand.nextInt()) % 13) ;    }        while (dealt[s][v]) ;dealt[s][v]  = true ;        suit = s ;value = v ;        noDealt++ ;} // end of constructor method    /**     * Creates an instance of the Card class with specified values     * (if all have been dealt, then starts again)     * @param s suit of the card     * @param v value of the card     */    public Card(int s, int v){        if (noDealt == 52)            {    System.err.println("all 52 cards dealt") ;            initialised = false ;            }if (!initialised)    {    for (int i = 0 ; i < 4 ; i++)        for (int j = 0 ; j < 13 ; j++)    dealt[i][j] = false ;    initialised = true ;    noDealt = 0 ;    }        if ((s < 0) || (s > 3))            {            System.out.println("invalid suit") ;            System.exit(1) ;            }        if ((v < 0) || (v > 12))            {            System.out.println("invalid value") ;            System.exit(1) ;            }        if (dealt[s][v]) ;            {            System.out.println("card already used") ;            System.exit(1) ;            }dealt[s][v]  = true ;        suit = s ;value = v ;        noDealt++ ;} // end of constructor method    // Card Instance Methods - Selectors    /**     * returns the suit attribute of the card     * @return the suit attribute of the card     */    public int getSuit(){return suit ;} // end of method getSuit    /**     * returns the suit attribute of the card as a string     * @return the suit attribute of the card as a string     */    public String getSuitString(){switch (suit)    {    case SPADES :return "Spades" ;    case HEARTS :return "Hearts" ;    case CLUBS :return "Clubs" ;    case DIAMONDS :return "Diamonds" ;            default :return "Unknown" ;            }} //end of method getSuitString    /**     * returns the value attribute of the card     * @return the value attribute of the card     */    public int getValue(){return value ;} // end of class getValue    /**     * returns the value attribute of the card as a string     * @return the value attribute of the card as a string     */    public String getValueString(){switch (value)    {    case 0 :return "Ace" ;    case 1 :return "two" ;    case 2 :return "three" ;    case 3 :return "four" ;    case 4 :return "five" ;    case 5 :return "six" ;    case 6 :return "seven" ;    case 7 :return "eight" ;    case 8 :return "nine" ;    case 9 :return "ten" ;    case 10 :return "Jack" ;    case 11 :return "Queen" ;    case 12 :return "King" ;    default :return "Unknown" ;            }} //end of method getValueString    // Other Card Methods    /**     * Resets the deck of cards to all undealt     */    public void restart(){for (int i = 0 ; i < 4 ; i++)    for (int j = 0 ; j < 13 ; j++)dealt[i][j] = false ;        noDealt = 0 ;        } // end of method restart    /**     * return a string representing the card     * @return details of the card ('value of suit')     */    public String toString()        {        return getValueString() + " of " + getSuitString() ;        } // end of method toString    /* public void setSuit(int s){// s should be in the range 0 to 3if ((s < 0) || (s > 3)) suit = 0;else suit = s;} // end of method setSuit    public void setValue(int v){// value should be in the range 0 to 12if ((v < 0) || (v > 12)) value = 0;else value = v;} // end of method setValue */    } // end of class card

2、需求一代码实现如下:

package cn.bdqn.demo04;public class CardTest1 {public static void main(String[] args) {System.out.println("欢迎来到“21点”的扑克游戏!");int num=0;int sum=0;for (int i = 1; i <= 5; i++) {Card card=new Card();num=card.getValue()+1;System.out.println("第"+i+"张牌为:"+num);        sum+=num;}    System.out.println("现在的总点数为:"+sum);        if(sum>21) {System.out.println("很遗憾,计算机赢,再接再厉!");}        else  System.out.println("恭喜你,玩家赢!");}}

3、需求二代码实现如下:

package cn.bdqn.demo04;public class CardTest2 {public static void main(String[] args) {System.out.println("欢迎来到“21点”的扑克游戏!");int num = 0;int sum1 = 0;int sum2 = 0;// 为计算机抽牌System.out.println("计算机抽牌:");for (int i = 1; i <= 5; i++) {Card card = new Card();num = card.getValue() + 1;System.out.println("第" + i + "张牌为:" + num);sum1 += num;}System.out.println("计算机的总点数为:" + sum1);// 为用户抽牌System.out.println("用户抽牌:");for (int i = 1; i <= 5; i++) {Card card = new Card();num = card.getValue() + 1;System.out.println("第" + i + "张牌为:" + num);sum2 += num;}System.out.println("用户的总点数为:" + sum2);//判断if(sum1<=21&&sum2>21){System.out.println("很遗憾,计算机赢,再接再厉!");}else if(sum1<=21&&sum2<=21){System.out.println("很遗憾,双方都不算赢!");}else if(sum1>21&&sum2<=21){System.out.println("恭喜玩家赢!");}else{System.out.println("很遗憾,双方都超过21点!");}}}

4、需求三代码实现如下:

package cn.bdqn.demo04;import java.util.Scanner;public class CardTest3 {public static void main(String[] args) {//键盘输入Scanner sc=new Scanner(System.in);System.out.println("欢迎来到“21点”的扑克游戏!");int num = 0;int sum1 = 0;int sum2 = 0;// 为计算机抽牌System.out.println("计算机抽牌:");for (int i = 1; i <= 5; i++) {Card card = new Card();num = card.getValue() + 1;System.out.println("第" + i + "张牌为:" + num);sum1 += num;if(sum1>21){break;}}System.out.println("计算机的总点数为:" + sum1);// 为用户抽牌System.out.println("请您输入1(抽牌)/0(不抽牌)选择是否抽牌:");int isNum=sc.nextInt();if(isNum==0){System.out.println("您选择了不抽牌,游戏结束!");}else if(isNum==1){System.out.println("用户抽牌:");for (int i = 1; i <= 5; i++) {Card card = new Card();num = card.getValue() + 1;System.out.println("第" + i + "张牌为:" + num);sum2 += num;}System.out.println("用户的总点数为:" + sum2);//判断if(sum1<=21&&sum2>21){System.out.println("很遗憾,计算机赢,再接再厉!");}else if(sum1<=21&&sum2<=21){System.out.println("很遗憾,双方都不算赢!");}else if(sum1>21&&sum2<=21){System.out.println("恭喜玩家赢!");}else{System.out.println("很遗憾,双方都超过21点!");}}else{System.out.println("选择错误,游戏结束!");}}}

5、需求四代码实现如下:

package cn.bdqn.demo04;import java.util.Scanner;public class CardTest4 {public static void main(String[] args) {// 键盘输入Scanner sc = new Scanner(System.in);System.out.println("欢迎来到“21点”的扑克游戏!");// 默认初始值boolean flag = true;// 循环初始值int zeroNum = -1;// 用户赢牌总局数int userNums = 0;// 计算机赢牌总局数int comNums = 0;do {int num = 0;int sum1 = 0;int sum2 = 0;// 为计算机抽牌System.out.println("计算机抽牌:");for (int i = 1; i <= 5; i++) {Card card = new Card();num = card.getValue() + 1;System.out.println("第" + i + "张牌为:" + num);sum1 += num;if (sum1 > 21) {break;}}System.out.println("计算机的总点数为:" + sum1);// 为用户抽牌boolean isChou = false;System.out.println("请您输入1(抽牌)/0(不抽牌)选择是否抽牌:");int isNum = sc.nextInt();if (isNum == 0) {System.out.println("您选择了不抽牌,游戏结束!");break;} else if (isNum == 1) {System.out.println("用户抽牌:");for (int i = 1; i <= 5; i++) {Card card = new Card();num = card.getValue() + 1;System.out.println("第" + i + "张牌为:" + num);sum2 += num;}System.out.println("用户的总点数为:" + sum2);// 判断if (sum1 <= 21 && sum2 > 21) {userNums++;System.out.println("计算机赢,总牌局数为:" + userNums);} else if (sum1 <= 21 && sum2 <= 21) {System.out.println("很遗憾,双方都不算赢!");} else if (sum1 > 21 && sum2 <= 21) {comNums++;System.out.println("用户赢,总牌局数为:" + comNums);} else {System.out.println("很遗憾,双方都超过21点!");}} else {System.out.println("选择错误,游戏结束!");break;}if (flag) {System.out.println("输入0返回游戏:");zeroNum = sc.nextInt();} else {break;}} while (zeroNum == 0);}}

⛳️ 三、效果展示

1、需求一效果展示

2、需求二效果展示

3、需求三效果展示

4、需求四效果展示

       码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识,请关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。


点击全文阅读


本文链接:http://zhangshiyu.com/post/45342.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1