【Java】斗地主和斗牛游戏

2.斗地主升级版

========

增加了对牌的排序和地主牌的加入,后续可能会增加玩牌的功能

2.1原理:


斗地主升级版的原理就是,创建HashMap用来后续键找值,然后创建ArrayList

集合(创建其他集合也是可以的)ArrayList集合的作用是用来存储和HashMap

对应的键值,通过两个for进行组合每产生一个就将键值加一,产生不同的键值,

所对应的牌是唯一,  这样为后续排列打下了坚实的前提,然后再创建TreeSet集

合(TreeSet集合可以进行自然排序),然后将ArrayList集合中的元素(其实就是

一些数子,这些数字是HashMap中的键值),分配到三个人上,里面的已经被

TreeSet排序完成,调用方法是通过HashMap将每个人的键值来得到对应的牌。

import java.util.*;

public class PokerPuls {

public static void main(String[] args) {

//定义HashMap集合

HashMap<Integer,String> hm=new HashMap<Integer, String>();

//定义ArrayList集合用来存储编号

ArrayList array=new ArrayList();

//定义花色和底数数组

String []colors={“♣”,“♥”,“♠”,“♦”};

String[] numbers = { “3”, “4”, “5”, “6”, “7”, “8”, “9”, “10”, “J”, “Q”, “K”, “A”,“2”};

int index=0;

//注意需要将数字for在外头,否则是按花色排序的

for (String number:numbers){

for (String color:colors){

hm.put(index, color+number);

array.add(index);

index++;

}

}

hm.put(index, “小🃏”);

array.add(index);

index++;

hm.put(index, “大🃏”);

array.add(index);

int count=1;

while(true){

System.out.println(“第"+count+++"局斗地主”);

//洗牌

Collections.shuffle(array);

//创建四个牌位分别用来存储三个玩家和三张底牌,因要排序所以用TreeSet集合

TreeSet play1=new TreeSet();

TreeSet play2=new TreeSet();

TreeSet play3=new TreeSet();

TreeSet play4=new TreeSet();

for (int i=0;i<array.size();i++){

Integer index1 = array.get(i);

if(i>=array.size()-3){

play4.add(index1);

}else if (i%3==0){

play1.add(index1);

}else if (i%3==1){

play2.add(index1);

}else if (i%3==2){

play3.add(index1);

}

}

Scanner sc=new Scanner(System.in);

System.out.print(“第一位玩家:”);

String name1=sc.nextLine();

System.out.print(“第二位玩家:”);

String name2=sc.nextLine();

System.out.print(“第三位玩家:”);

String name3=sc.nextLine();

lookerPoker(“1号:”+name1, play1,hm);

lookerPoker(“2号:”+name2, play2,hm);

lookerPoker(“3号:”+name3, play3,hm );

lookerPoker(“底牌”, play4,hm);

int i=0; int num=0;

while(true){

System.out.print(“几号是地主:”);

num=sc.nextInt();

switch(num){

case 1:{i++;

play1.addAll(play4);break;

}

case 2:{i++;

play2.addAll(play4);break;

}

case 3:{i++;

play3.addAll(play4);break;

}

default:{

System.out.println(“输入有误,重新输入”);break;

}

}

lookerPoker(“1号:”+name1, play1,hm);

lookerPoker(“2号:”+name2, play2,hm);

lookerPoker(“3号:”+name3, play3,hm );

if (i!=0){

break;

}

System.out.println(“-------游戏结束-------”);

} } }

//定义遍历方法,并通过存储的index1的键来获取对应的值

public static void lookerPoker(String name,TreeSet ts,HashMap<Integer,String> hm){

System.out.print(name+“的牌:”);

for (Integer key:ts){

String value=hm.get(key);

System.out.print(value+" ");

}

System.out.println();

}

2.2运行结果:


3.斗牛游戏:

=======

import java.util.*;

public class PokerPlay {

public static void main(String[] args) {

//定义一个ArrayList集合用来存放排盒

//分别用来给玩家和庄家的两副牌

ArrayList array = new ArrayList();

ArrayList array1 = new ArrayList();

//定义花色、点数数组

String[] color = {“♣”, “♦”, “♠”, “♥”};

String[] numbers = {“2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”, “10”, “J”, “Q”, “K”, “A”};

//封装组合成牌放入集合中

for (String s1 : color) {

for (String s2 : numbers) {

array.add(s1 + s2);

}

}

//定义庄家的牌盒

String[] color1 = {“♣”, “♦”, “♠”, “♥”};

String[] number1 = {“10”, “J”, “Q”, “K”,};

for (String s1 : color1) {

for (String s2 : number1) {

array1.add(s1 + s2);

}

}

int count = 1;//定义局数

while (true) {

int sum1 = 0, sum2 = 0, sum3 = 0; int sum4 = 0, sum5 = 0;

//打乱牌的顺序

Collections.shuffle(array);

Collections.shuffle(array1);

//定义五个牌位

ArrayList poker1 = new ArrayList();

ArrayList poker2 = new ArrayList();

ArrayList poker3 = new ArrayList();

ArrayList poker4 = new ArrayList();

ArrayList poker5 = new ArrayList();

// 为了防止玩家崩溃,随机数给庄家无敌牌或普通牌

Random r=new Random();

int 换位=r.nextInt(100);

//给庄家的无敌牌

for (int i=0;i<array1.size();i++){

String s1 = array1.get(i);

if(sum5<5&&换位<50){

poker5.add(s1);

sum5++;

}

}

for (int i = 0; i < array.size(); i++) {

String poker = array.get(i);//得到每张牌

if (sum1++ < 5) {

poker1.add(poker);

} else if (sum2++ < 5) {

poker2.add(poker);

} else if (sum3++ < 5) {

poker3.add(poker);

} else if (sum4++< 5) {

poker4.add(poker);

}//使庄家的牌正常,可以设置多少一个轮回

else if (sum5++<5) {

poker5.add(poker);

}

}

System.out.println(“第" + (count++) + "局斗牛游戏开始:”);

Scanner sc = new Scanner(System.in);

System.out.print(“庄家:”);

String play5 = sc.nextLine();

System.out.print(“第一位玩家:”);

String play1 = sc.nextLine();

System.out.print(“第二位玩家:”);

String play2 = sc.nextLine();

System.out.print(“第三位玩家:”);

String play3 = sc.nextLine();

System.out.print(“第四位玩家:”);

String play4 = sc.nextLine();

System.out.println(“-------买定离手--------”);

lookPoker(“庄家”+play5, poker5);

lookPoker(“玩家”+play1, poker1);

lookPoker(“玩家”+play2, poker2);

lookPoker(“玩家”+play3, poker3);

lookPoker(“玩家”+play4, poker4);

System.out.println(“-------游戏结束--------”);

}

}

//定义一个看牌的动作

public static void lookPoker(String name, ArrayList arrayList){

//遍历牌

System.out.print(name + “的牌:”);

for (String poker : arrayList) {

System.out.print(" " + poker);

}

System.out.println();

}}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

Kafka实战笔记

关于这份笔记,为了不影响大家的阅读体验,我只能在文章中展示部分的章节内容和核心截图

image.png

  • Kafka入门
  • 为什么选择Kafka
  • Karka的安装、管理和配置

image.png

  • Kafka的集群
  • 第一个Kafka程序
  • image.png

afka的生产者

image.png

  • Kafka的消费者
  • 深入理解Kafka
  • 可靠的数据传递

image.png

image.png

  • Spring和Kalka的整合
  • Sprinboot和Kafka的整合
  • Kafka实战之削峰填谷
  • 数据管道和流式处理(了解即可)

image.png

  • Kafka实战之削峰填谷

image.png

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
6eQ5iP-1713526058393)]

  • Kafka的消费者
  • 深入理解Kafka
  • 可靠的数据传递

[外链图片转存中…(img-v6AFNDmx-1713526058395)]

[外链图片转存中…(img-wjob3T8T-1713526058397)]

  • Spring和Kalka的整合
  • Sprinboot和Kafka的整合
  • Kafka实战之削峰填谷
  • 数据管道和流式处理(了解即可)

[外链图片转存中…(img-6yPLRL4A-1713526058398)]

  • Kafka实战之削峰填谷

[外链图片转存中…(img-tT7JOErl-1713526058400)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 24
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值