java之21点游戏(只包含一个玩家和一个庄家,是否抓牌,没有黑杰克)

完整代码在最后面.

运行截图

​​​​​​​

 

首先,21点游戏的游戏需要,:

玩家和庄家两个数组(若是多个玩家则增加数组,并把原玩家代码进行复制粘贴,再修改一点点就好),并且游戏开局,先发庄家一张牌,玩家两张牌,10,J,Q,K全部看做10,但是依旧要输出JQK.

开头以及庄家拿牌代码段:

        int[] banker=new int[10];//庄家
        int[] player=new int[10];//玩家
        banker[0]=(int) (Math.random()*12+1);//1~K为1~13点
        switch (banker[0]) {//把JQK的点输出文字
            case 11:
                System.out.println("庄家拿到的牌为:J");
                break;
            case 12:
                System.out.println("庄家拿到的牌为:Q");
                break;
            case 13:
                System.out.println("庄家拿到的牌为:K");
                break;
            default:
                System.out.println("庄家拿到的牌为:" + banker[0]);
        }
        if(banker[0]>10){//数组只记录JQK本身的值为10
            banker[0]=10;
        }

玩家拿牌代码段:

        for (int j = 0; j < 2; j++) {
            player[j]=(int) (Math.random()*12+1);//玩家获取两张牌
            switch (player[j]) {//同理前面
                case 11:
                    System.out.println("玩家拿到的牌为:J");
                    break;
                case 12:
                    System.out.println("玩家拿到的牌为:Q");
                    break;
                case 13:
                    System.out.println("玩家拿到的牌为:K");
                    break;
                default:
                    System.out.println("玩家拿到的牌为:" + player[j]);
            }
            if (player[j] > 10) {//JQK转为数组里面的10
                player[j] = 10;
            }
        }

 设置一个选择值choose,来判断玩家是否选择拿牌.

并且a记录玩家数组从数组第三个元素开始记录,

以及final判断玩家拿牌过程中是否直接爆掉或者直接21点,免去后续的代码运行,

Can判断前面是否因为1加10后爆掉的给个机会减10,后面的不再需要,两个一也只加了一次10

        int choose;//判断玩家是否拿牌
        int a=2,Final=0;//a是数组下标,Final判断是否已经爆掉或者21点
        int I=player[0]+player[1];//总点数
        int Can=1;//参数是否因为1已经减过一次10
        do {//用do...while是最好的,因为要直接先问玩家是否拿牌,而for和while循环要先判断一个条件
            Scanner scanner = new Scanner(System.in);
            System.out.println("玩家是否继续拿牌");
            choose = scanner.nextInt();//判断玩家是否拿牌
            if(choose==1) {//判断玩家是否拿牌
                player[a] = (int) (Math.random() * 12 + 1);
                switch (player[a]) {
                    case 11:
                        System.out.println("玩家拿到的牌为:J");
                        break;
                    case 12:
                        System.out.println("玩家拿到的牌为:Q");
                        break;
                    case 13:
                        System.out.println("玩家拿到的牌为:K");
                        break;
                    default:
                        System.out.println("玩家拿到的牌为:" + player[a]);
                }
                if (player[a] > 10) {
                    player[a] = 10;
                }
                I += player[a];
            }
            if (I == 21 || (player[a] == 1 && I == 11)||(player[0]==1&&player[1]==10)|| 
                (player[0]==10&&player[1]==1)) {
                //判断是否已经21点,比如第一和第二张牌是1和10就不拿牌到这里判断(或许能移到前面)
                System.out.println("玩家获胜");
                Final = 1;//Final判断是否已经爆掉或者21点
                I=21;
                break;
            } else if (I > 21) {
                for (int i = 0; i < banker[i]&&Can==1; i++) {
                //判断大于21的时候数组里面是否有1 
                    if(banker[i]==1){
                        I-=10;
                        Can=0;//如果有就总值减10,修改Can参数
                        break;
                    }
                }
                if (Can == 1) {
                    Final = 1;//Final判断是否已经爆掉或者21点
                    System.out.println("庄家获胜");
                    break;
                }
            } else if (Can==1&&(player[0]==1 || player[1]==1 ||player[a] == 1 )&& I < 11)
                 //不可能一开始就爆了,所以在后面判断新获得的牌是否为1且总值小于11
                {
                I += 10;
            }
            a++;
        }while (choose == 1 && a < 10);//不拿牌就不继续下去
        System.out.println("玩家的点数和为:"+I);

设置庄家的总值,并且依照玩家一样设置参数,和玩家的主题代码差不多

        int O=banker[0];//O是庄家的总值
        int M=0;//一个参数M
        int can=1;//参数can判断是否减过1次10
        for(int j=1;O<=I&&Final==0&&can==1;j++) {//如果前面已经出了结果则不再运行
            banker[j] = (int) (Math.random() * 12 + 1);
            switch (banker[j]) {
                case 11:
                    System.out.println("庄家拿到的牌为:J");
                    break;
                case 12:
                    System.out.println("庄家拿到的牌为:Q");
                    break;
                case 13:
                    System.out.println("庄家拿到的牌为:K");
                    break;
                default:
                    System.out.println("庄家拿到的牌为:" + banker[j]);
            }
            if (banker[j] > 10) {
                banker[j] = 10;
            }
            O += banker[j];
            if (can==1&&(banker[0]==1 || banker[1]==1 ||banker[j] == 1 )&& O < 11) {
                //can没被改过才允许加10
                O += 10;
            }
            if(O>21){
                for (int i = 0; i < banker.length&&can==1; i++) {//遍历是否有1,且没修改can
                    if(banker[i]==1){
                        O-=10;
                        can=0;
                        break;
                    }
                }
            }
            if (O>21&&can == 1) {
                //如果can没有被修改且大于21则玩家获胜,这个时候已经减过10了,庄家也爆了
                System.out.println("庄家的点数为:"+O);
                System.out.println("玩家获胜");
                M=1;
            }
        }
        if(Final==0&&M==0) {
            //如果最后没有Final过且M也没有修改过庄家获胜,这个时候就是庄家的点大于玩家的点且不爆
            System.out.println("庄家的点数为:"+O);
            System.out.println("庄家获胜");
        }

总代码:

package Test.game21dian;

import java.util.Arrays;
import java.util.Scanner;

public class game21 {
    public static void main(String[] args) {
        int[] banker=new int[10];
        int[] player=new int[10];
        banker[0]=(int) (Math.random()*12+1);
        switch (banker[0]) {
            case 11:
                System.out.println("庄家拿到的牌为:J");
                break;
            case 12:
                System.out.println("庄家拿到的牌为:Q");
                break;
            case 13:
                System.out.println("庄家拿到的牌为:K");
                break;
            default:
                System.out.println("庄家拿到的牌为:" + banker[0]);
        }
        if(banker[0]>10){
            banker[0]=10;
        }
        for (int j = 0; j < 2; j++) {
            player[j]=(int) (Math.random()*12+1);
            switch (player[j]) {
                case 11:
                    System.out.println("玩家拿到的牌为:J");
                    break;
                case 12:
                    System.out.println("玩家拿到的牌为:Q");
                    break;
                case 13:
                    System.out.println("玩家拿到的牌为:K");
                    break;
                default:
                    System.out.println("玩家拿到的牌为:" + player[j]);
            }
            if (player[j] > 10) {
                player[j] = 10;
            }
        }
        int choose;
        int a=2,Final=0;
        int I=player[0]+player[1];
        int Can=1;
        do {
            Scanner scanner = new Scanner(System.in);
            System.out.println("玩家是否继续拿牌");
            choose = scanner.nextInt();
            if(choose==1) {
                player[a] = (int) (Math.random() * 12 + 1);
                switch (player[a]) {
                    case 11:
                        System.out.println("玩家拿到的牌为:J");
                        break;
                    case 12:
                        System.out.println("玩家拿到的牌为:Q");
                        break;
                    case 13:
                        System.out.println("玩家拿到的牌为:K");
                        break;
                    default:
                        System.out.println("玩家拿到的牌为:" + player[a]);
                }
                if (player[a] > 10) {
                    player[a] = 10;
                }
                I += player[a];
            }
            if (I == 21 || (player[a] == 1 && I == 11)||(player[0]==1&&player[1]==10)||(player[0]==10&&player[1]==1)) {
                System.out.println("玩家获胜");
                Final = 1;
                I=21;
                break;
            } else if (I > 21) {
                for (int i = 0; i < banker[i]&&Can==1; i++) {
                    if(banker[i]==1){
                        I-=10;
                        Can=0;
                        break;
                    }
                }
                if (Can == 1) {
                    Final = 1;
                    System.out.println("庄家获胜");
                    break;
                }
            } else if (Can==1&&(player[0]==1 || player[1]==1 ||player[a] == 1 )&& I < 11) {
                I += 10;
            }
            a++;
        }while (choose == 1 && a < 10);
        System.out.println("玩家的点数和为:"+I);
        int O=banker[0];
        int M=0;
        int can=1;
        for(int j=1;O<=I&&Final==0&&can==1;j++) {
            banker[j] = (int) (Math.random() * 12 + 1);
            switch (banker[j]) {
                case 11:
                    System.out.println("庄家拿到的牌为:J");
                    break;
                case 12:
                    System.out.println("庄家拿到的牌为:Q");
                    break;
                case 13:
                    System.out.println("庄家拿到的牌为:K");
                    break;
                default:
                    System.out.println("庄家拿到的牌为:" + banker[j]);
            }
            if (banker[j] > 10) {
                banker[j] = 10;
            }
            O += banker[j];
            if (can==1&&(banker[0]==1 || banker[1]==1 ||banker[j] == 1 )&& O < 11) {
                O += 10;
            }
            if(O>21){
                for (int i = 0; i < banker.length && can==1; i++) {
                    if(banker[i]==1){
                        O-=10;
                        can=0;
                        break;
                    }
                }
            }
            if (O>21&&can == 1) {
                System.out.println("庄家的点数为:"+O);
                System.out.println("玩家获胜");
                M=1;
            }
        }
        if(Final==0&&M==0) {
            System.out.println("庄家的点数为:"+O);
            System.out.println("庄家获胜");
        }
    }

}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我来为您设计一个关于21游戏的课程设计,包括简介、教学目标、教学内容和教学过程,并附上Java代码。 ### 一、简介 21游戏,又称黑杰克,是一种非常经典的纸牌游戏玩家需要通过抽牌的方式,让自己的牌数尽量接近21,但不能超过21。其中,A牌可以看成1或11,J、Q、K牌都算10,其他牌按照牌面数算。 本课程设计将通过Java语言,让学生掌握基本的编程思想和语法,并实现一个简单的21游戏。 ### 二、教学目标 1.掌握Java语言的基本语法和编程思想。 2.理解21游戏的规则和流程。 3.能够使用Java实现一个简单的21游戏。 ### 三、教学内容 1.Java语言基础知识:变量、数据类型、运算符、流程控制等。 2.21游戏的规则和流程。 3.Java编程实践:如何使用Java实现一个简单的21游戏。 ### 四、教学过程 #### 第一步:介绍21游戏 1.简要介绍21游戏的规则和流程。 2.让学生理解21游戏的玩法和胜负条件。 #### 第二步:讲解Java语言基础知识 1.变量和数据类型:让学生了解变量的定义和使用方法,以及Java语言中的数据类型。 2.运算符:讲解Java语言中的算术运算符、关系运算符、逻辑运算符等。 3.流程控制:讲解Java语言中的if语句、while循环等流程控制语句。 #### 第三步:实现21游戏 1.让学生了解21游戏的流程和规则,包括发牌、抽牌、计分等。 2.让学生设计21游戏的程序逻辑,包括生成牌、计算得分、判断胜负等。 3.让学生使用Java语言实现21游戏的程序代码。 下面是一个简单的21游戏Java代码,仅供参考: ```java import java.util.Scanner; public class BlackJack { public static void main(String[] args) { Scanner input = new Scanner(System.in); int playerScore = 0; // 玩家得分 int dealerScore = 0; // 庄家得分 // 初始状态,玩家庄家各发两张牌 for (int i = 0; i < 2; i++) { playerScore += drawCard(); dealerScore += drawCard(); } // 玩家开始抽牌 while (true) { System.out.println("你的得分是:" + playerScore); // 判断是否爆掉 if (playerScore > 21) { System.out.println("你爆了,游戏结束!"); break; } // 询问玩家是否继续抽牌 System.out.print("是否抽牌?(Y/N) "); String choice = input.nextLine(); if (choice.equalsIgnoreCase("Y")) { playerScore += drawCard(); } else if (choice.equalsIgnoreCase("N")) { break; } } // 庄家开始抽牌 while (dealerScore < 17) { System.out.println("庄家得分是:" + dealerScore); dealerScore += drawCard(); } // 判断输赢 if (dealerScore > 21) { System.out.println("庄家爆了,你赢了!"); } else if (playerScore > dealerScore) { System.out.println("你的得分是:" + playerScore); System.out.println("庄家的得分是:" + dealerScore); System.out.println("你赢了!"); } else if (playerScore == dealerScore) { System.out.println("你的得分是:" + playerScore); System.out.println("庄家的得分是:" + dealerScore); System.out.println("平局!"); } else { System.out.println("你的得分是:" + playerScore); System.out.println("庄家的得分是:" + dealerScore); System.out.println("你输了!"); } } // 抽一张牌,返回牌的数 public static int drawCard() { int[] cards = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10}; int index = (int) (Math.random() * cards.length); return cards[index]; } } ``` #### 第四步:练习和作业 1.让学生自己修改21游戏的规则,如改变牌的数、增加玩家庄家的牌数等。 2.让学生实现其他纸牌游戏的程序代码,如斗地主、扑克牌等。 ### 五、总结 通过本课程设计,学生能够掌握Java语言的基本语法和编程思想,并实现一个简单的21游戏。同时,学生还能够了解纸牌游戏的规则和流程,提高编程能力和逻辑思维能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雲昙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值