Java入门第三季—简易扑克牌游戏
程序员文章站
2024-02-26 18:49:16
...
一,Java入门第三季—简易扑克牌游戏
-
创建一副扑克牌
- 四种花色:黑桃,红桃,梅花,方片
- 十三种点数:2-10,J,Q,K,A,不包含大小王
-
创建两名玩家
- 有ID,姓名,手牌(为玩家拥有的扑克牌集合)
-
洗牌
- 将牌的顺序打乱
-
发牌
- 从第一张开始发牌
- 按照一人一张的方式
-
游戏
- 比较玩家手中的扑克牌
- 先比较出自己手中最大的牌
- 再互相比较,点数大的获胜
- 点数相同,比较花色
这里我的花色最大是黑桃,然后是红桃,梅花,方片
二,
1,下面public void pokerComp() 中写的不够简洁,感觉还能改进,不过现在脑子知识不足,并且有点混乱,不够熟悉没改出来
2,创建玩家ID没有用try...catch,防止输入字符时出错
Test.java
package com.scy.poker;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
import java.util.Set;
/**
* 花色顺序:黑桃,红桃,梅花,方片
* 十三种点数:2——10,J,Q,K,A,不考虑大小王
* @author scy
*
*/
public class Test {
//用于存放扑克的List,poker1按顺序存储,poker2存放洗牌之后的
public List poker1= new ArrayList();
public List poker2 =new ArrayList();;
//存放玩家的List
public static List player=new ArrayList();;
Scanner sc=new Scanner(System.in);
//定义两个数组用来存放,花色,字母(数字),用来添加进poker1中
String[] suit= new String[]{"黑桃","红桃","梅花","方片"};
String[] num1= new String[]{"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
//创建扑克
public void createPoker() {
System.out.println("----------------创建扑克牌...----------------");
int s=0;
//
for(int j=0;j<4;j++) {
for(int i=0;i<13;i++) {
//将编号,花色,数字 添加进去
Poker p=new Poker(s++,suit[j],num1[i]);
poker1.add(p);
}
}
System.out.println("----------------扑克牌创建成功!-------------");
}
//输出按顺序排列的扑克
public void testSys() {
System.out.println("为以下:");
for(int i=0;i<52;i++) {
//每13个换一行
if(i%13==0&&i!=0) {
System.out.println();
}
//用get(),,并输出
Poker po= (Poker) poker1.get(i);
System.out.print(po.suits+po.num+" ");
}
System.out.println("\n");
}
//洗牌
public void washPoker() {
System.out.println("------------------开始洗牌...----------------");
//定义随机数
Random random=new Random();
//从第一张牌,循环到最后一张
for(int i=0;i<52;i++) {
//用随机来获取某个随机的位置,将该位置的数,添加到poker2中
int ran= random.nextInt(52);
Poker po=(Poker) poker1.get(ran);
//if,,contains()判断此随机数是否已经放进poker2中
if(poker2.contains(po)) {
i--;
continue;
}
poker2.add(po);
}
System.out.println("------------------洗牌结束...----------------");
}
//创建两名玩家
public void createPlayer() {
System.out.println("------------------创建玩家...----------------");
for(int i=0;i<2;i++) {
System.out.println("请输入第"+(i+1)+"位玩家的ID和姓名:");
//
System.out.println("输入ID:");
int id=sc.nextInt();
//
System.out.println("输入姓名:");
String name=sc.next();
//
Player p=new Player(id,name);
//
player.add(p);
}
}
//开始发牌
public void startPlay() {
for(Object p:player) {
Player po=(Player) p;
System.out.println("欢迎玩家:"+po.name);
}
//
System.out.println("------------------开始发牌...----------------");
for(int i=0;i<4;i=i+2) {
Poker po1= (Poker) poker2.get(i);
Poker po2= (Poker) poker2.get(i+1);
//给1号玩家1,3位置的牌
Player p1=(Player) player.get(0);
System.out.println("玩家:"+p1.name+"拿牌");
p1.pok.add(po1);
//给2号玩家2,4位置的牌
Player p2=(Player) player.get(1);
System.out.println("玩家:"+p2.name+"拿牌");
p2.pok.add(po2);
}
System.out.println("------------------发牌结束...----------------");
}
/**
* 比较两个玩家牌的大小
* 先比数字大小
* 如果数字相同比较花色,花色大小我定义为,,大小从黑桃开始依此减小(黑桃,红桃,梅花,方片)
*/
public void pokerComp() {
System.out.println("------------------开始游戏...----------------");
//用两个pok1,pok2分别 放两个玩家最大的牌
Poker pok1=new Poker();
Poker pok2=new Poker();
//用max1,max2放最大牌的数字,在num1中位置
int max1,max2;
//将num1数组,变成List
List list=new ArrayList(Arrays.asList(num1));
//找玩家1手里的最大牌
Player p1=(Player) player.get(0);
Poker po11=(Poker) p1.pok.get(0);
Poker po12=(Poker) p1.pok.get(1);
int pos1=list.indexOf(po11.num);
int pos2=list.indexOf(po12.num);
if(pos1>pos2) {
pok1=po11;
max1=pos1;
System.out.println("玩家:"+p1.name+"最大的手牌为:"+po11.suits+po11.num);
}else if(pos1<pos2){
pok1=po12;
max1=pos2;
System.out.println("玩家:"+p1.name+"最大的手牌为:"+po12.suits+po12.num);
}else {
if(po11.id>po12.id) {
pok1=po12;
max1=pos2;
System.out.println("玩家:"+p1.name+"最大的手牌为:"+po12.suits+po12.num);
}else {
pok1=po11;
max1=pos2;
System.out.println("玩家:"+p1.name+"最大的手牌为:"+po11.suits+po11.num);
}
}
//找玩家2手里的最大牌
Player p2=(Player) player.get(1);
Poker po21=(Poker) p2.pok.get(0);
Poker po22=(Poker) p2.pok.get(1);
int pos3=list.indexOf(po21.num);
int pos4=list.indexOf(po22.num);
if(pos3>pos4) {
pok2=po21;
max2=pos3;
System.out.println("玩家:"+p2.name+"最大的手牌为:"+po21.suits+po21.num);
}else if(pos3<pos4){
pok2=po22;
max2=pos4;
System.out.println("玩家:"+p2.name+"最大的手牌为:"+po22.suits+po22.num);
}else {
if(po21.id>po22.id) {
pok2=po22;
max2=pos4;
System.out.println("玩家:"+p2.name+"最大的手牌为:"+po22.suits+po22.num);
}else {
pok2=po21;
max2=pos4;
System.out.println("玩家:"+p2.name+"最大的手牌为:"+po21.suits+po21.num);
}
}
//玩家1,2,比较手里的最大牌,找出最大的,输出该玩家名字
if(max2>max1) {
System.out.println("------------------玩家:"+p2.name+"获胜----------------");
}else if(max2<max1) {
System.out.println("------------------玩家:"+p1.name+"获胜----------------");
}
else {//数字相等时,通过花色比大小,用序号来比较,花色大的序号小
if(pok1.id>pok2.id) {
System.out.println("------------------玩家:"+p2.name+"获胜----------------");
}else {
System.out.println("------------------玩家:"+p1.name+"获胜----------------");
}
}
}
//
public static void main(String[] args) {
Test te=new Test();
//创建扑克
te.createPoker();
te.testSys();
//洗牌
te.washPoker();
//创建2个玩家
te.createPlayer();
//开始游戏
te.startPlay();
//比较那位玩家拥有的牌最大
te.pokerComp();
//输出2名玩家手里拥有的牌
for(int i=0;i<2;i++) {
Player b=(Player) player.get(i);
System.out.print(b.name+":");
for(Poker p:b.pok) {
System.out.print(p.suits+p.num+" ");
}
System.out.println();
}
}
}
Player.java
package com.scy.poker;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
public class Player {
public String name;//姓名
public int id;//编号
public List<Poker> pok; //玩家的牌
public Player(int id,String name) {
this.id=id;
this.name=name;
this.pok=new ArrayList<Poker>();
}
}
Poker.java
package com.scy.poker;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Poker implements Comparable<Poker>{
public int id; //序号
public String suits;//花色
public String num; //数字(字母)
public Poker(int id,String suits, String num) {
this.id=id;
this.suits=suits;
this.num=num;
}
public Poker() {
}
public boolean contains(String suits2) {
// TODO Auto-generated method stub
return false;
}
//@Override
public int compareTo(Poker o) {
// TODO Auto-generated method stub
return this.num.compareTo(o.num);
}
}
三,运行结果
下一篇: ExtJS MVC 案例实践(一)