Java~实现简单的扑克牌,洗牌,发牌,玩捉⿁游戏(讲解详
细,代码齐全)
⽬录
⾸先⼀副扑克牌是54张,这⾥我们去掉⼤⼩王,也就是52张扑克牌
有♣,♠,♥,◆,四种花⾊,每种花⾊对应1到13张
⼀.扑克牌的定义
1.牌的定义
我们定义⼀个Card类,来表⽰⼀张扑克牌,上⾯有花⾊suit和牌的值rank。
这⾥我重写了toString⽅法,⽅便我们打印每⼀张牌
这⾥我还重写了equals⽅法,如果判断两张牌是否相同,会⽤到
注意:如果没有重写equals⽅法,那么⽐较的就是两个Card是不是同⼀个对象,⽽不是花⾊和数值是否相同了,达不到我们想要的效果
/**
* Created with IntelliJ IDEA.
* User: 13498
* Date: 2021/12/10
* Time: 20:07
* Description: No Description
*/
public class Card {
String suit; //花⾊
int rank; //⼤⼩
public Card(String suit, int rank) {
this.suit = suit;
this.rank = rank;
}
@Override
public boolean equals(Object obj) {
if (obj == null){
return false;
}
if (!(obj instanceof Card)){
return false;
}
Card card = (Card)obj;
return this.suit.equals(card.suit) && this.rank == card.rank;
}
@Override
public String toString() {
return String.format("[%s %d]",suit,rank); //注意⼀下这种输出⽅式
}
}
2.玩家的定义
除了牌本⾝,我们还要对玩家进⾏定义,所以我们这⾥定义了⼀个Player类来表⽰玩家,每⼀个玩家都有⼿牌,我们⽤⼀个Card类型的顺序表来保存,注意这⾥的顺序表后⾯new了,也就是初始化了,这个不能少,不然后⾯还要专门为每个玩家的⼿牌初始化,会⽐较⿇烦;同时,玩家还有⼀个姓名。
import java.util.ArrayList;
import java.util.List;
/**
* Created with IntelliJ IDEA.
* User: 13498
* Date: 2021/12/10
* Time: 20:24
* Description: No Description
*/
public class Player {
String name;
List<Card> cards = new ArrayList<>();
public Player(String name) {
this.name = name;
}
}
⼆.扑克牌的操作(初始化,洗牌,发牌等)
注:这⾥对每个功能及其实现⽅法进⾏讲解,后⾯有全部代码
1.初始化
初始化完成后,打印牌库中的牌是这样
initialiseCards(cards); //初始化52张⼿牌
对应⽅法的代码
public static void initialiseCards(List<Card> cards){
for (String s : new String[]{"♣","♠","♥","◆"}){
for (int i = 1; i <= 13 ; i++) {
cards.add(new Card(s,i));
}
}
}
这⾥使⽤了⼀个for each循环,⼤家也可以⽤两个for循环,效果是⼀样的
2.洗牌
我们可以对牌库⾥⾯的牌洗牌
和前⾯的不⼀样,牌库中牌的顺序被完全打乱
washCards(cards);//洗牌
对应⽅法的代码
public static void washCards(List<Card> cards) {
Random random = new Random();
for (int i = 0; i < cards.size(); i++) {
int toExchange = Int(cards.size());
Card tempCard = (i);
cards.set((toExchange));
cards.set(toExchange,tempCard);
}
}
使⽤了random类,遍历整个cards顺序表,对于每个元素,不⼤于元素个数下标的随机数,让这个随机下标对应的元素与当前元素进⾏交换,从⽽实现洗牌的效果
3.发牌
⽐如我们有四个玩家,我们让他们依次抓牌,抓完后,可以查看他们的⼿牌
sendCardsToPlayers(players,cards); //将⼿牌分别发给不同的玩家,每⼈13张
printPlayersCards(players); //依次打印所有玩家⼿中的⼿牌
对应⽅法的代码
public static void sendCardsToPlayers(List<Player> players, List<Card> cards) {
for (Player player : players) {
for (int i = 0; i < 13; i++) {
Card card = ve(0);
player.cards.add(card);
}
}
}
public static void printPlayersCards(List<Player> players) {
for (Player player : players) {
System.out.printf("玩家[%s]的⼿牌是:",player.name);
System.out.println(player.cards);
}
}
三.初始化,洗牌,发牌代码(全)
初始化,洗牌,发牌的全部代码,本⼈亲测能正常运⾏,注意这个类的类名是Main类,同时前⾯的Card类和Player类也要建好
简单说,⼀个包下⾯要有这三个类才⾏,Card类和Player类的代码在最前⾯⽂章开头给了
剩下的就是下⾯的Main类
import java.util.*;
public class Main {
public static void main(String[] args) {
List<Card> cards = new ArrayList<>();
List<Player> players = new ArrayList<>();
players.add(new Player("Zebra"));
players.add(new Player("Pig"));
players.add(new Player("Dog"));
players.add(new Player("You"));
initialiseCards(cards); //初始化52张⼿牌
printCards(cards); //每⾏13张打印牌库中的牌
washCards(cards);//洗牌
printCards(cards); //每⾏13张打印牌库中的牌
sendCardsToPlayers(players,cards); //将⼿牌分别发给不同的玩家,每⼈13张 printPlayersCards(players); //依次打印所有玩家⼿中的⼿牌
}
public static void initialiseCards(List<Card> cards){
for (String s : new String[]{"♣","♠","♥","◆"}){
for (int i = 1; i <= 13 ; i++) {
cards.add(new Card(s,i));
}
}
}
private static void printCards(List<Card> cards) {
for (int i = 0; i < cards.size(); i++) {
System.out.(i)+",");
if ((i+1)%13 == 0){
System.out.println("");
}
}
}
public static void washCards(List<Card> cards) {
Random random = new Random();
for (int i = 0; i < cards.size(); i++) {
int toExchange = Int(cards.size());
Card tempCard = (i);
cards.set((toExchange));
cards.set(toExchange,tempCard);
}
}
public static void sendCardsToPlayers(List<Player> players, List<Card> cards) { for (Player player : players) {
for (int i = 0; i < 13; i++) {
Card card = ve(0);
nextint()方法player.cards.add(card);
}
}
}
public static void printPlayersCards(List<Player> players) {
for (Player player : players) {
System.out.printf("玩家[%s]的⼿牌是:",player.name);
System.out.println(player.cards);
}
}
}
四.捉⿁游戏
下⾯我们来实现⼀个捉⿁游戏吧,游戏规则:
* Description: 捉⿁:
* A-5 20张牌,去掉⼀张A
* 五个⼈依次抓牌,直到把所有的牌都抓光。抓牌期间,⼀旦出现两张牌点数相同(凑成⼀对⼦了)就可以扔掉* 正式游戏:
* ⼀个回合⼀个回合进⾏:
* 每个⼈(甲)抽取下家(⼄)的⼀张随机⼿牌:
* 1.如果⼄的⼿牌被抽完了。则⼄退出游戏
* 2.甲检查⼿中有没有凑成⼀-对,抽成了,还是把- -对扔掉,如果扔掉- -对后⼿牌没有了,甲也退出
* 只到只剩⼀个⼈。抓到⿁了
新建⼀个GameCatchGhost类,记得要在刚刚那个有Card和Player的包下⾯建哦
游戏效果:
代码:亲测能正常运⾏
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论