如果上班这样玩斗地主,老板应该不会骂你.....
Posted 谷哥的小弟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果上班这样玩斗地主,老板应该不会骂你.....相关的知识,希望对你有一定的参考价值。
版权声明
- 本文原创作者:谷哥的小弟
- 作者博客地址:http://blog.csdn.net/lfdfhl
摸鱼湿了脚
本来在工位上开开心心写代码。忽然,行政专员叫我去老板那里一趟。直觉告诉我:估计是犯事儿了。果然,不出所料;到了办公室老板把我劈头盖脸一顿批评:你们部门的实习生上班玩游戏斗地主,你没有看见么?工作怎么安排的?是不是每天都在浑水摸鱼?
等老板发泄完,我回到了办公室;刚好迎面碰到满怀歉意的实习生。看见童鞋耷拉的脑袋,有点生气又有点想笑。本想说点什么的;想了想又算了。谁又没有年轻过呢?我又何必过分地指责他呢?于是,拉着他到会议室简单地聊了聊。
“童鞋啊,上班玩游戏是不对的;就算你想摸鱼也不要明目张胆地在电脑上玩呀。”
“嗯,我下次不玩了”
“不,你可以玩。”
“真的?”
“你自己写个程序玩。既锻炼了编程,又消磨了时间。”
“不会啊。太难了。我都还没有毕业呢。”
“很难?”
“嗯”
“来我给你写一个瞅瞅”
斗地主游戏梳理
斗地主这个游戏大家已经非常熟悉了。故,在此扼要梳理游戏中的相关要素。
游戏规则
- 1、1副扑克牌
- 2、3位玩家
- 3、每位玩家17张牌
- 4、底牌3张
原理分析
在明白了规则之后,我们的重点就可以放在游戏的实现上了。
牌的表示
除了大王和小王以外,每张牌都由花色(比如:梅花、红桃等)和符号(比如:2、3、K、Q等)组成。所以,我们可以定义两个数组来表示花色和符号:
// 牌的花色
public String[] colorArray = { "♠", "♥", "♣", "♦" };
// 牌的符号
public String[] numberArray = { "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3", "2" };
如果我们将数组colorArray 和 数组numberArray 组合起来不就是可以表示整副扑克了么?
牌的存取
为了便于存储,我们可将每张牌与一个唯一的编号对应起来。思路有了,就需要考虑选择存储的工具了。此时,TreeMap是个非常不错的选择。
要点概述:
- 1、牌的序号从1开始
- 2、利用ArrayList集合存放每张牌所对应的序号
- 3、利用TreeMap集合存放每张牌
// 每张牌所对应的序号
public int cardSerialNumber = 1;
// 存放每张牌所对应的序号的ArrayList集合
public ArrayList<Integer> cardSerialNumberList = new ArrayList<Integer>();
// 存放每张牌的TreeMap集合
public TreeMap<Integer, String> cardTreeMap = new TreeMap<Integer, String>();
底牌的表示
类似地,我们留下3张底牌并且使用TreeSet集合存放它们。
// 底牌数
int remainCards = 3;
// 存放底牌的TreeSet集合
TreeSet<Integer> remainCardsTreeSet = new TreeSet<Integer>();
玩家的表示
3位玩家参与游戏,每位玩家持有17张扑克。所以,我们可以用TreeSet集合表示每位玩家持有的牌。
// 三位玩家
public TreeSet<Integer> player1CardsTreeSet = new TreeSet<Integer>();
public TreeSet<Integer> player2CardsTreeSet = new TreeSet<Integer>();
public TreeSet<Integer> player3CardsTreeSet = new TreeSet<Integer>();
斗地主游戏实现
OK,在梳理游戏中的相关要素之后,我们就可以动手开始编码了。
游戏准备
在正式开始游戏之前我们需要有一副牌,也就是说:需要把每张扑克放置于同一个集合中。
public void prepareCard() {
// 将大王所对应的序号存放至cardSerialNumberList
cardSerialNumberList.add(cardSerialNumber);
// 将大王存放至cardTreeMap
cardTreeMap.put(cardSerialNumber, "RED-JOCKER");
cardSerialNumber++;
// 将小王所对应的序号存放至cardSerialNumberList
cardSerialNumberList.add(cardSerialNumber);
// 将小王存放至cardTreeMap
cardTreeMap.put(cardSerialNumber, "BLACK-JOCKER");
cardSerialNumber++;
// 将除大小王以外的牌所对应的序号存放至cardSerialNumberList
// 将除大小王以外的牌存放至cardTreeMap
for (int i = 0; i < numberArray.length; i++) {
for (int j = 0; j < colorArray.length; j++) {
cardSerialNumberList.add(cardSerialNumber);
String card = colorArray[j] + numberArray[i];
cardTreeMap.put(cardSerialNumber, card);
cardSerialNumber++;
}
}
}
洗牌
扑克牌有了,在发牌之前我们需要先洗牌。在此,利用Collections.shuffle( )函数打乱cardSerialNumberList中原本的顺序。
public void shuffleCard() {
Collections.shuffle(cardSerialNumberList);
}
发牌
每个玩家轮流获得一张牌,最后剩余三张底牌。
public void dealCard() {
for (int i = 0; i < cardSerialNumberList.size(); i++) {
Integer serialNumber = cardSerialNumberList.get(i);
int index = i % remainCards;
if (i >= cardSerialNumberList.size() - remainCards) {
remainCardsTreeSet.add(serialNumber);
} else if (index == 0) {
player1CardsTreeSet.add(serialNumber);
} else if (index == 1) {
player2CardsTreeSet.add(serialNumber);
} else if (index == 2) {
player3CardsTreeSet.add(serialNumber);
}
}
}
看牌
发完牌之后,我们来看看各位玩家持有的牌。
public void showCard() {
System.out.println("玩家1所拿到的牌如下:");
for (Integer i : player1CardsTreeSet) {
System.out.print(cardTreeMap.get(i) + " ");
}
System.out.println();
System.out.println();
System.out.println("玩家2所拿到的牌如下:");
for (Integer i : player2CardsTreeSet) {
System.out.print(cardTreeMap.get(i) + " ");
}
System.out.println();
System.out.println();
System.out.println("玩家3所拿到的牌如下:");
for (Integer i : player3CardsTreeSet) {
System.out.print(cardTreeMap.get(i) + " ");
}
System.out.println();
System.out.println();
System.out.println("三张底牌如下:");
for (Integer i : remainCardsTreeSet) {
System.out.print(cardTreeMap.get(i) + " ");
}
}
测试
手里的牌和生活
给实习的童鞋讲完这个小Demo,我倒是想起来法外狂徒张三罗翔老师说过的话。
艾森豪威尔的母亲对他说:你在打牌的时候,即便你抓到一副最烂的牌,你也不能弃局。你也得把这个牌给干嘛呢?给打完。
我们很多时候是不是觉得我们抓的牌实在是太差了?但是,再差的牌你都应该打下去,有的时候我们惊奇的发现再差的牌有的时候最后还赢了,有没有这种可能呢?是有的。
如果在你的一生中遭遇到挫折,你有两种选择:一种选择是弃演;一种选择是把既定的剧本演好。
读到这些,感触颇多。牌是随机发的,我们改变不了的。我们能把握和改变的就是如何打好手里的牌。所以,年轻的童鞋们:不负时光,不负卿;不负春光,不负己;抓紧时间,努力让自己变得更好。
以上是关于如果上班这样玩斗地主,老板应该不会骂你.....的主要内容,如果未能解决你的问题,请参考以下文章