21点的基本知识

21点是世界上比较流行的扑克游戏项目

除掉大小王的一副扑克牌,共计52张牌

21点不区分花色,其中A----10均代表扑克牌本身的点数J Q K代表10点

区分庄家和闲家,其中闲家可以优先要牌 而庄家在与闲家点数一样大的情况下,庄家赢,当有一方点数超过21点则另一方自动获胜,庄家的点数如果正好是21点,那么庄家直接获胜,其他情况以点数大的获胜

流程设计:

人机对战模式!

1由用户输入选择作庄还是作闲,电脑自动成为另一方

2随机为双方发两张牌

3询问闲家是否要牌,一直到闲家不再要或者发生暴点为止

4询问庄家要牌,一直到庄家不再要或者暴点或者正好21点为止

5比较游戏输赢

6询问是否继续

7统计战果

技术问题:

1. 发牌的时候随机发取

2. 发牌出来还要判断是否本张牌已经发过了!如果已经发过了,那么就要重新随机发另外一张牌,要保证牌的唯一性

3. 当给电脑派牌的时候 要考虑AI的问题!让电脑的逻辑稍微模拟人的思维

主类:

import java.util.Scanner;public class CardTest {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int win = 0;int lose = 0;while (true) {System.out.println("请问做庄家1/闲家2?");int num = sc.nextInt();if (num == 1) {System.out.println("你选择做庄家");Ruler r = new Ruler();int n=r.play();if(n==0) { //庄家赢win++; }elselose++;} else if (num == 2) {System.out.println("你选择做闲家");Player p = new Player();int n= p.play();if(n==1) { //闲家赢win++;}elselose++;} else {System.out.println("输入错误,重新输入");}System.out.println("是否继续Y/N");if (sc.next().charAt(0) == 'Y')continue;else {System.out.println("游戏结束");System.out.println("赢:"+win);System.out.println("输:"+lose);break;}}}}

import java.util.Random;public class Card {int index = 0; // 发牌索引下标String[] card = { "红桃A", "红桃2", "红桃3", "红桃4", "红桃5", "红桃6", "红桃7", "红桃8","红桃9", "红桃10", "红桃J", "红桃Q", "红桃K", "黑桃A","黑桃2", "黑桃3", "黑桃4", "黑桃5", "黑桃6", "黑桃7", "黑桃8", "黑桃9", "黑桃10", "黑桃J", "黑桃Q", "黑桃K","梅花A", "梅花2", "梅花3","梅花4", "梅花5", "梅花6", "梅花7", "梅花8", "梅花9", "梅花10", "梅花J", "梅花Q", "梅花K", "方片A", "方片2", "方片3", "方片4", "方片5","方片6", "方片7", "方片8", "方片9", "方片10", "方片J", "方片Q", "方片K", };public void show() {for (int i = 0; i < 52; i++) {System.out.println(card[i]);}}// 洗牌,打乱牌的顺序public void cutcards() {int index=0;Random rand = new Random();for (int i = 0; i < 52; i++) {int n = rand.nextInt(52);String temp;temp = card[n];card[n] = card[51 - n];card[51 - n] = temp;}}// 发牌,按顺序发牌,从下标0开始public String deal() {String c = card[index];index++;return c;}}

public class JudgeNum {public int judgeString(String num) {String word= num.substring(2);if(word.equals("A")) {return  1;}else if(num.substring(2).equals("J")||num.substring(2).equals("Q")||num.substring(2).equals("K")||num.substring(2).equals("10")) {return 10;}else {int n=(int)num.substring(2).charAt(0)-48;return n;}}}

import java.util.Random;
import java.util.Scanner;public class Player {/** 选择做闲家先得牌 您选择: 闲家             发牌时间: 闲家:红桃K 方片3             庄家:黑桃6 梅花4*  闲家要牌时间:             闲家是否要牌(Y/N)?             Y            发牌:黑桃A* 闲家是否要牌(Y/N)?            Y 发牌:梅花5 闲家是否要牌(Y/N)?             N 闲家不再要牌:           闲家点数:19点            庄家要牌时间:             庄家要牌:梅花5* 庄家要牌:黑桃4           庄家不再要牌:          庄家点数19点 庄赢* * * */Scanner sc= new Scanner(System.in);public int play() {int playernum=0;int rulernum=0;String player1;String player2;String ruler1;String ruler2;JudgeNum judge = new JudgeNum();Card c = new Card();c.cutcards();player1 = c.deal();player2 = c.deal();System.out.println("发牌时间:");System.out.println("闲家:" + player1 + " " + player2);playernum=judge.judgeString(player1)+judge.judgeString(player2);ruler1 = c.deal();ruler2 = c.deal();System.out.println("庄家:" + ruler1 + " " + ruler2);rulernum=judge.judgeString(ruler1)+judge.judgeString(ruler2);System.out.println("闲家点数:"+playernum);System.out.println("庄家点数:"+rulernum);System.out.println("闲家要牌时间: " );//循环要牌阶段while(true) {System.out.println("闲家是否要牌(Y/N)? " );char w = sc.next().charAt(0);if(w=='Y') {System.out.println("闲家继续要牌");String player3=c.deal();System.out.println("闲家: "+player3 );playernum=playernum+judge.judgeString(player3);System.out.println("闲家点数:"+playernum);if(playernum>21){   System.out.println("闲家爆掉,庄家赢");return 0;}      }else if(w=='N') {System.out.println("闲家不再要牌,闲家点数:"+playernum);break;}}System.out.println("庄家要牌时间");while(true) {if(rulernum>=playernum) {System.out.println("庄家不再要牌,庄家赢");return 0;}else {System.out.println("庄家要牌时间:");String ruler3=c.deal();System.out.println("庄家:"+ruler3);rulernum=rulernum+judge.judgeString(ruler3);if(rulernum>21) {System.out.println("庄家点数"+rulernum);System.out.println("庄家爆掉,闲家赢");return 1;}else if(rulernum>=playernum) {System.out.println("庄家点数:"+rulernum+" 闲家点数:"+playernum);System.out.println("庄家赢");return 0;}}}}}

import java.util.Scanner;public class Ruler {// 选择做庄家/** 闲家先要牌* */Scanner sc = new Scanner(System.in);public int play() {int playernum = 0;int rulernum = 0;String player1;String player2;String ruler1;String ruler2;JudgeNum judge = new JudgeNum();Card c = new Card();c.cutcards();player1 = c.deal();player2 = c.deal();System.out.println("发牌时间:");System.out.println("闲家:" + player1 + " " + player2);playernum = judge.judgeString(player1) + judge.judgeString(player2);ruler1 = c.deal();ruler2 = c.deal();System.out.println("庄家:" + ruler1 + " " + ruler2);rulernum = judge.judgeString(ruler1) + judge.judgeString(ruler2);System.out.println("闲家点数:" + playernum);System.out.println("庄家点数:" + rulernum);System.out.println("闲家要牌时间:");while (true) {String player3;if (playernum <rulernum) {System.out.println("闲家要牌");player3 = c.deal();System.out.println("闲家:" + player3);playernum = playernum + judge.judgeString(player3);} else if (playernum > 21) {System.out.println("闲家点数:" + playernum);System.out.println("闲家爆掉,庄家赢");return 0;} else if (playernum >= 15) {System.out.println("闲家不再要牌");System.out.println("闲家点数" + playernum);break;}else {System.out.println("闲家要牌");String player4 = c.deal();System.out.println("闲家:" + player4);playernum=playernum+judge.judgeString(player4);if (playernum > 21) {System.out.println("闲家点数:" + playernum);System.out.println("闲家爆掉,庄家赢");return 0;}}}// 庄家要牌时间System.out.println("庄家要牌时间:");while (true) {System.out.println("庄家是否要牌(Y/N)");char w = sc.next().charAt(0);if (w == 'Y') {System.out.println("庄家继续要牌");String ruler3 = c.deal();System.out.println("庄家: " + ruler3);rulernum = rulernum + judge.judgeString(ruler3);System.out.println("庄家点数:" + rulernum);if (rulernum > 21) {System.out.println("庄家爆掉,闲家赢");return 1;}} else if (w == 'N') {System.out.println("庄家不再要牌,庄家点数:" + rulernum);break;}}if (rulernum >= playernum) {System.out.println("庄家赢");return 0;} else {System.out.println("闲家赢");return 1;}}}

转载于:https://www.cnblogs.com/myFavoriteBlog/p/7815683.html

21点游戏java实现相关推荐

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

    完整代码在最后面. 运行截图 ​​​​​​​ 首先,21点游戏的游戏需要,: 玩家和庄家两个数组(若是多个玩家则增加数组,并把原玩家代码进行复制粘贴,再修改一点点就好),并且游戏开局,先发庄家一张牌, ...

  2. 21点 小游戏 java代码_基于Java的21点扑克游戏的实现

    在上次写的比较牌点的扑克游戏上Java扑克游戏(多人多牌数比较游戏)的实现中,添加21点游戏规则,实现21点牌类游戏.具体实现步骤如下:[需要源代码的留QQ,大家一起探讨探讨哈,谢谢啦!] 抽象出规则 ...

  3. 用JAVA写的21点游戏(BlackJack)

    用JAVA写的21点游戏 此程序是大学期间Java课程的期末设计.扑克牌去除大小王共52张牌,有4种花色,每种花色有13张牌.有庄家和玩家,庄家有他的游戏规则,具体看游戏介绍. CardRank类:此 ...

  4. leetcode-292-Nim游戏(java|python)

    title: leetcode-292-Nim游戏(java|python) date: 2019-10-12 21:18:57 categories: leetcode tags: leetcode ...

  5. java实验2总结心得,打字小游戏JAVA实验总结及心得体会

    篇一:扫雷游戏实验报告 课程设计 班 级: 姓 名: 学 号: 指导教师: 成 绩: 电子与信息工程学院信息与通信工程系 目录 1.任务概述------------------------------ ...

  6. java小游戏-java小游戏-飞机大战

    java小游戏-java小游戏-飞机大战 1 窗口创建 2 背景图片添加 3 启动页面制作 4 启动页面点击事件 5 游戏物体父类的编写 6 背景的移动 7 双缓存的添加 8 背景图片的循环出现 9 ...

  7. java 猫 游戏,crazycat 围住神经猫-小游戏-Java源码 联合开发网 - pudn.com

    crazycat 所属分类:Java编程 开发工具:Java 文件大小:1373KB 下载次数:1 上传日期:2019-01-19 21:03:14 上 传 者:lynnhl 说明:  围住神经猫-小 ...

  8. java小游戏-java小游戏-黄金矿工

    java小游戏-java小游戏-黄金矿工 1 窗口绘制 2 绘制图片 3 红线绘制 4 红线摇摆 5 红线抓取 6 创建金块 7 双缓存技术 8 抓取判断 9 抓取返回 10 多个金块 11 Bug金 ...

  9. 斗地主游戏java底层实现

    斗地主游戏java底层实现 介绍 软件架构 使用说明 相关代码 写在最后 gitee地址 介绍 本文介绍了斗地主小游戏玩法规则,以及详细的java代码底层实现. 采用命令行模式,可实现3人斗地主,简单 ...

  10. 《LeetCode力扣练习》第55题 跳跃游戏 Java

    <LeetCode力扣练习>第55题 跳跃游戏 Java 一.资源 题目: 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 . 数组中的每个元素代表你在该位置可以跳跃的最大 ...

最新文章

  1. 【转】接口测试技术介绍
  2. php里面的log是什么文件夹,用PHP生成自己的LOG文件
  3. 为了可持续的测试自动化,透过表面看本质(译)
  4. 设计模式理解:工厂模式,抽象工厂,原型方法
  5. for循环与each遍历的跳出循环方式
  6. 算法-lowb三人组
  7. C语言小知识---为什么要使用指针
  8. 服务器上把计算机放桌面,远程服务器这么显示在电脑桌面
  9. 数据库SQL语言学习--上机练习3(插入 更新 删除)
  10. JavaScript编写计算器-《JavaScript王者归来》读书笔记1
  11. Unicode字符列表(超完整)
  12. 哪些Amazon erp是可以免费使用的?
  13. Couldn‘t find ffmpeg or avconv - defaulting to ffmpeg, but may not work
  14. 图解 React 的 diff 算法:核心就两个字 —— 复用
  15. Spring启动异常之ConflictingBeanDefinitionException: Annotation-specified bean name ‘XXXXXService‘
  16. codeforces949D Curfew
  17. 软件测试薪资标准,软件测试月薪过万需要具备哪些技能?
  18. 【谷歌浏览器打不开Axure解决办法~】
  19. Python编程:通过百度文字识别提取表格数据
  20. 在Ubuntu上玩《口袋妖怪·叶绿》

热门文章

  1. Python读取一个文件并删除换行输出到另外一个文件中
  2. Hadoop生态基础学习总结
  3. 网易云基于 Kubernetes 的深度定制化实践
  4. fio 磁盘IO性能测试
  5. SchoolTool:先进的学院管理和信息系统
  6. MantisBT 缺陷管理系统
  7. [译]反射(Reflection)和动态(dynamic)
  8. 华为ADSL路由设置
  9. java用户注册模块_用户注册登录模块设计方案报告.docx
  10. android 两个视频合并,手机如何合并视频片段 安卓手机多个视频合并成一个的方法...