这是之前学习java时关于面向对象的一个实验,对面向对象思想的掌握有一定的帮助,刚好整理到了,就写出来。
要显示出底牌;以及同一轮中,当一张牌已经被发给第一个人时,再发牌给下一个人这张牌不可以再出现。
首先考虑一个斗地主游戏中有什么对象,我认为斗地主中应该会有玩家,还有牌,另外还需要一个发牌的人,我比较懒,觉得玩家负责玩就好了,发牌,洗牌这种事就不自己动手了。所以分为Player,Dealer,Poker,另外还有一个主类,这里命名为Game。
直接看代码吧,代码中会有注释。
JDKSE-1.8
eclipse2017
当时用的是JDK1.8版本,后来因为Android改用1.7版本了,相应的eclipse也不一样了。现在我又想把1.7卸了,下载1.8,但是不舍得动手,看看哪个节点能逼得我动手吧。
首先看一下Poker类,可以看成就是一副扑克牌,那么扑克牌有什么,一副扑克牌当然有54张牌啦。本来花色是可以用图形显示的,但是因为我的eclipse没有设置好,所以花色会出现乱码,不过其他小伙伴还是可以试一下的。
package deal;
public class Poker {
String[] numbers= {"3","4","5","6","7","8","9","10","J","Q","K","A","2"}; //点数
String[] colors= {"黑桃","红桃","方块","梅花"}; //花色
String[] cards=new String[54];
int[] array=new int[54]; //编号
void setCards(String numbers[],String colors[],int array[])
{
for(int i=0;i
然后看看Dealer类,把这个类看成一个洗牌的人,那么首先他需要有一副牌,然后需要洗牌,发牌,所以具有3个方法。注意:我这里的洗牌不是把牌数组给打乱,当然数组有打乱以及排序的功能,但是当时我还没有学到这里,所以用到的知识都是最简单的知识,希望能帮助到入门的人。我洗牌的过程其实是给了每张牌一个编号,从1到54,然后把这个编号打乱,再通过编号来取牌。数组中就是用另一个数组存储每张牌的下标,然后打乱这个数组,再通过这个下标数组来取牌,就像我发牌时不从第一个开始发,而是随机从牌中间抽一张发一样。
package deal;
import java.util.*;
public class Dealer {
int[] hand=new int[3];
void shuffleCard(int array[]) //洗牌
{
int temp=0;
int rd1,rd2;
for(int i=0;i
下面就是玩家类了,这里只给玩家两个方法,就是排序还有显示自己的牌。牌发下来了,当然是先把牌排好了。所以玩家得到的牌应该只有17张,共3个玩家,还剩3张牌作为底牌。说一下,排序算法有很多,这里采用的是冒泡排序法,更多方法可以看一下这篇文章排序算法
package deal;
public class Player {
int[] card=new int[17];
void sortCards(int card[]) //将牌排序
{
int temp;
for(int i=0;icard[j+1])
{
temp=card[j];
card[j]=card[j+1];
card[j+1]=temp;
}
}
}
void showCards(int card[],String cards[])
//将牌展示出来
{
for(int i=0;i
最后看一下主类,看在斗地主游戏中是怎么发牌的。
package deal;
public class Game {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Poker pk=new Poker(); //实例化一个Poker对象
Player pl1,pl2,pl3; //实例化3个Player对象
pl1=new Player();
pl2=new Player();
pl3=new Player();
Dealer de=new Dealer(); //实例化一个Dealer对象
pk.setCards(pk.numbers, pk.colors,pk.array);
//拿出一副扑克牌
de.shuffleCard(pk.array); //发牌人洗牌
de.sendCards(pk.array, pl1.card, pl2.card, pl3.card); //发牌人发牌
pl1.sortCards(pl1.card); //玩家1将牌排序
pl2.sortCards(pl2.card); //玩家2将牌排序
pl3.sortCards(pl3.card); //玩家3将牌排序
System.out.println("\n玩家1的牌是:");
pl1.showCards(pl1.card, pk.cards);
System.out.println("\n玩家2的牌是:");
pl2.showCards(pl2.card, pk.cards);
System.out.println("\n玩家3的牌是:");
pl3.showCards(pl3.card, pk.cards);
System.out.println("\n底牌是:");
de.showHand(de.hand, pk.cards);
}
}