Player.java
import java.util.ArrayList;
import java.util.List;
public class Player<Card> {
public int id;//ID
public String name;//名字
public List<Card>cards;//手牌
public Player(int id, String name){
this.id = id;
this.name = name;
this.cards = new ArrayList<Card>();
}
public String size() {
// TODO 自动生成的方法存根
return null;
}
}
Puke.java
public class Puke implements Comparable<Puke> {
public String color;//牌的花色
public String num;//牌的点数
public Puke (String color,String num){
this.color = color;//牌的花色
this.num = num ;//牌的点数
}
/*
* 定义扑克牌的规则
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
public int compareTo(Puke o) {
if (this.num == o.num)
{
if (this.color.equals("黑桃"))
{
return 1;
}
else if (this.color.equals("红桃"))
{
if (o.color.equals("黑桃"))
{ return -1;
}
else {
return 1;
}
}
else if (this.color.equals("梅花"))
{
if (o.color.equals("黑桃") || o.color.equals("红桃"))
{
return -1; }
else
{
return 1;
}
}
else
{
return -1;
}
}
else
{
if (this.num.equals("A"))
{
return 1;
}
else if (this.num.equals("K"))
{
if (o.num.equals("A"))
{
return -1;
}
else
{
return 1;
}
}
else if (this.num.equals("Q"))
{
if (o.num.equals("A") || o.num.equals("K"))
{
return -1;
}
else
{
return 1;
}
}
else if (this.num.equals("J"))
{
if (o.num.equals("A") || o.num.equals("K") || o.num.equals("Q"))
{
return -1;
}
else { return 1;
}
}
else if (this.num.equals("10"))
{
if (o.num.equals("A") || o.num.equals("K") ||
o.num.equals("Q") || o.num.equals("J"))
{
return -1;
}
else
{
return 1;
}
}
else
{
return this.num.compareTo(o.num);
}
}
}
}
PlayGames.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
/*
* 扑克牌游戏:
* 1、创建一副扑克牌,除去大小王
* 2、登录两位玩家
* 3、随机洗牌
* 4、顺序发牌
* 5、先比较点数,再比较花色 黑桃>红桃>梅花>方片
*
*/
public class PlayGames {
public List<Puke>allpuke;
public void playgames(){
this.allpuke = new ArrayList<Puke>();
}
List<String> allpukes=new ArrayList<String>();
public List<Player>players = new ArrayList<Player>();
/*
* 创建一副扑克牌
*/
public void porke(){
{
System.out.println("创建扑克牌");
allpukes.add("方片A");
allpukes.add("梅花A");
allpukes.add("红桃A");
allpukes.add("黑桃A");
for(int i=2;i<11;i++)
{
allpukes.add("方片"+i);
allpukes.add("梅花"+i);
allpukes.add("红桃"+i);
allpukes.add("黑桃"+i);
}
allpukes.add("方片J");
allpukes.add("梅花J");
allpukes.add("红桃J");
allpukes.add("黑桃J");
allpukes.add("方片Q");
allpukes.add("梅花Q");
allpukes.add("红桃Q");
allpukes.add("黑桃Q");
allpukes.add("方片K");
allpukes.add("梅花K");
allpukes.add("红桃K");
allpukes.add("黑桃K");
String str=allpukes.toString();
System.out.println("---------扑克牌创建成功:--------\n"+str);
}
}
/*
* 打乱顺序
*/
public void shuffle(){
System.out.println("---------开始洗牌--------");
//随机打乱顺序用List方法
Collections.shuffle(allpukes);
System.out.println("---------洗牌结束----------");
}
/*
* 创建玩家ID 和玩家姓名
*/
public void PutPlayers(){
System.out.println("---------创建玩家---------");
for (int i = 1; i < 3; i++)
{
System.out.println("请输入第" + (i) + "位玩家的ID和姓名:");
System.out.println("输入ID:");
int id = 0; ;
Scanner scanner = new Scanner(System.in);
while(true)
{
try{
id = Integer.parseInt(scanner.nextLine().trim());;
break;
}
catch (NumberFormatException e)
{
System.out.println("请输入整数类型的ID!");
System.out.println("重新输入ID:"); continue; }
}
System.out.println("输入姓名:");
String name = scanner.nextLine();
Player player = new Player(id, name);
players.add(player);
}
System.out.println("----欢迎玩家:" + players.get(0).name);
System.out.println("----欢迎玩家:" + players.get(1).name);
}
/*
* 开始发牌
*/
public void dealCard(){
System.out.println("---------开始发牌--------");
System.out.println("---------玩家"+players.get(0).name+"拿牌-----");
players.get(0).cards.add(allpukes.get(0));
System.out.println("---------玩家"+players.get(1).name+"拿牌-----");
players.get(1).cards.add(allpukes.get(1));
System.out.println("---------玩家"+players.get(0).name+"拿牌-----");
players.get(0).cards.add(allpukes.get(2));
System.out.println("---------玩家"+players.get(1).name+"拿牌-----");
players.get(1).cards.add(allpukes.get(3));
System.out.println("--------发牌结束--------");
}
/*
* 开始游戏
*/
@SuppressWarnings("unchecked")
public void starGame(){
System.out.println("------开始游戏--------");
Collections.sort(players.get(0).cards);
String maxCard= players.get(0).cards.get(1).toString();
System.out.println("玩家:"+players.get(0).name+"最大的手牌是:"+maxCard);
Collections.sort(players.get(1).cards);
String maxCard1= players.get(1).cards.get(1).toString();
System.out.println("玩家:"+players.get(0).name+"最大的手牌是:"+maxCard1);
List<Puke>gameCard = new ArrayList<Puke>();
gameCard.addAll(players.get(0).cards);
gameCard.addAll(players.get(1).cards);
Collections.sort(gameCard);
if(players.get(0).cards.contains(gameCard.get(gameCard.size()-1))){
System.out.println("-------玩家"+players.get(0).name+"赢了--------");
}else
{
System.out.println("-------玩家"+players.get(1).name+"赢了--------");
}
}
/*
* 查看玩家的牌
*/
public void checkplayerCard(){
System.out.println("-------------各位玩家的牌是-----------------");
Collections.sort(players.get(0).cards);
String playerCard1= players.get(0).cards.toString();
System.out.println("玩家"+players.get(0).name+"的牌是"+players.get(0).cards);
Collections.sort(players.get(1).cards);
String playerCard2= players.get(1).cards.toString();
System.out.println("玩家"+players.get(1).name+"的牌是"+players.get(1).cards);
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
System.out.println("-------欢迎来到扑克牌王国----------");
System.out.println("-------------是否要开始游戏----------");
System.out.println("-------------是请按:1 --- 否请按:0-------");
Scanner scanner= new Scanner(System.in);
int a = scanner.nextInt();
if(a == 1){
while(true){
PlayGames pl = new PlayGames();
pl.porke();
//pl.foreachPuke();
pl.shuffle();
pl.PutPlayers();
pl.dealCard();
System.out.println("-------是否开始出牌--是请按:1------");
int b = scanner.nextInt();
if(b == 1)
pl.starGame();
pl.checkplayerCard();
System.out.println("--------是否要继续游戏---------");
System.out.println("------继续请按:1-----退出请按:0------");
int c = scanner.nextInt();
if(c == 1){
continue;
}
else{
break;
}
}
System.out.println("---------感谢您的参与---------");
}
else{
System.out.println("----------欢迎下次再来!-----------------");
}
}
}
看完第三季,对于很多方法的实践用法不怎么懂,一开始确实无从动手,然后回看了视频里面的讲解,和参照自己敲的代码,再加上参照了一下其他人的代码最后完成了这个扑克牌游戏,希望能给大家作为参考! 大家一起努力,共同进步!
热门评论
compareto算法好像有点问题?
还有显示玩家的最大手牌时 玩家的名字好像也有问题
compareto算法写的有问题导致梅花j比黑桃6小
貌似 题目要求是:先按点数大小比较,点数相同再按花色比较的~~