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++;
}
else
lose++;
} else if (num == 2) {
System.out.println("你选择做闲家");
Player p = new Player();
int n= p.play();
if(n==1) {
//闲家赢
win++; }
else
lose++;
} 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;
} } }

21点游戏java实现的更多相关文章

  1. JavaScript中纯JS写21点游戏

    // 21点游戏 分为人机对战和人人对战 // 玩家每次抽一张牌 牌的点数为1-10点随机数 谁更接近21点谁就获胜 let readline = require("readline-syn ...

  2. 生命游戏 Java

    本程序由四个类组成:其中Init_data,用于初始化各个活细胞的状态judge_state,用于判断下一代的细胞状态,并进行更新.set_color,用于给GUI界面中各个细胞涂色set_frame ...

  3. Java 学习(21):Java 实例

    Java 实例 本章节我们将为大家介绍 Java 常用的实例,通过实例学习我们可以更快的掌握 Java 的应用. Java 环境设置实例 //HelloWorld.java 文件 public cla ...

  4. 实用---生命游戏 Java

    本程序由四个类组成: 其中Init_data,用于初始化各个活细胞的状态judge_state,用于判断下一代的细胞状态,并进行更新.set_color,用于给GUI界面中各个细胞涂色set_fram ...

  5. 最新 盛趣游戏java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.盛趣游戏等10家互联网公司的校招Offer,因为某些自身原因最终选择了盛趣游戏.6.7月主要是做系统复习.项目复盘.Leet ...

  6. 俄罗斯方块游戏 --- java

    俄罗斯方块游戏 如有疑问请查看:http://zh.wikipedia.org/zh-tw/%E4%BF%84%E7%BD%97%E6%96%AF%E6%96%B9%E5%9D%97 更多疑问请参考: ...

  7. 猜字游戏java

    一.实践目的 1.掌握基本输入输出. 2.掌握方法定义与调用,理解参数传递方式. 3.掌握数组的声明.定义与初始化,数组的处理. 4.掌握数组作为方法参数和返回值. 二.实践要求 利用方法.数组.基本 ...

  8. 人机猜拳游戏Java

    作业要求: 我的代码: package day20181119;/** * 猜拳游戏 * @author Administrator * @version1.0 */import java.util. ...

  9. 算法笔记_179:历届试题 数字游戏(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 栋栋正在和同学们玩一个数字游戏. 游戏的规则是这样的:栋栋和同学们一共n个人围坐在一圈.栋栋首先说出数字1.接下来,坐在栋栋左手边的同学要 ...

随机推荐

  1. 【JDK】JDK7与JDK8环境共存与切换:先安装jdk7,配置好环境变量后再安装jdk8

    1.先安装JDK7 下载jdk-7u79-windows-i586.exe,安装后配置好环境变量JAVA_HOME,CLASSPATH,PATH java -version javac 指令都正常 2 ...

  2. Python第三方库matplotlib(2D绘图库)入门与进阶

    Matplotlib 一 简介: 二 相关文档: 三 入门与进阶案例 1- 简单图形绘制 2- figure的简单使用 3- 设置坐标轴 4- 设置legend图例 5- 添加注解和绘制点以及在图形上 ...

  3. perl模拟登录(1)

    use WWW::Mechanize; my $ua = WWW::Mechanize->new(); $ua->post('http://localhost/dvwa/DVWA-mast ...

  4. mysql执行load_fle返回NULL的解决方法

    mysql 版本: 5.7.18 问题: 在执行mysql 函数load_file时,该函数将加载指定文件的内容,存储至相应字段.如: SELECT LOAD_FILE("D:\aa.txt ...

  5. ms17010利用失败解决一则

    没有反弹得到session并且提示如下: [-] 10.0.131.2:445 - Service failed to start, ERROR_CODE: 216 换了一个payload set p ...

  6. [Leetcode Week14]Maximum Binary Tree

    Maximum Binary Tree 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/maximum-binary-tree/description/ ...

  7. GCC在C语言中内嵌汇编 asm __volatile__ 【转】

    转自:http://blog.csdn.net/pbymw8iwm/article/details/8227839 在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达 ...

  8. 项目评审ppt的纲要

    1.prd不能模糊,产品的问题全部明确 2.收益在哪里 3.设计体现业务4.怎样保证数据的前后协作5.异常如何处理6.技术解决的痛点7.对外部依赖8.性能指标预期(响应时间)9.

  9. 实验室项目.md

    1 嵌入式操作系统 为什么要用嵌入式操作系统 普通的单片机编程:程序(软件)--单片机硬件: 嵌入式操作系统开发:程序(软件)--操作系统--嵌入式硬件(包括单片机等); 我们平时普通所学的单片机编程 ...

  10. HTML5 一篇就够的中文教程

    HTML5 是近十年来 Web 开发标准最巨大的飞跃.HTML5 并非仅仅用来表示 Web 内容,它将 Web 带入一个成熟的应用平台,在 HTML5 平台上,视频.音频.图象.动画,以及同电脑的交互 ...