这个小游戏是我在消化吸收了一些慕友的代码的基础上写出的,写它的主要目的是为了巩固一下基础知识。
主游戏类
package com.lt.puke;
/**
* 主游戏类,主要负责输出交互信息并调用其它方法
* @author 李韬
*创作时间:2017.7.25
*简易扑克牌游戏
*游戏介绍:
*1. 创建一副扑克牌,不考虑大小王
2. 创建两名玩家,玩家至少要有ID、姓名、手牌等属性,手牌为扑克牌的集合
3. 洗牌,将之前创建的扑克牌顺序打乱(说明是有序的)
4. 发牌,将洗牌之后的扑克牌集合,从第一张开始,发给两名玩家,按照一人一张的方式,每人发两张
5. 开始游戏,比大小,取两人各自的点数最大的牌进行比较,点数大的赢,若大小相同比花色(黑红梅方)
*
*/
public class MainGame {
FunRea lt = new FunRea();//将FunRea类作为MainGame类的一个属性,以便实现方法的调用
public static void main(String[] args) {
// TODO 自动生成的方法存根
System.out.println("---------简易扑克游戏(by Java)@李韬");
System.out.println("----------欢迎进入游戏------------");
MainGame LT = new MainGame();
LT.lt.CrePuKe();//创建扑克牌
LT.lt.CrePlayer();//创建玩家
LT.lt.XiPai();//洗牌
LT.lt.FaPai();//发牌
LT.lt.Compare();//比较大小
LT.lt.ShowCard();//展示手牌
System.out.println("-----游戏结束----Game Over-------");
}
}
功能实现类
package com.lt.puke;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
/**
* 功能实现类
* 实现了创建牌、初始化牌、发牌、洗牌、比大小、展示牌等功能
* @author 李韬
*
*/
public class FunRea {
String[] HuaSe = {"黑桃","红桃","梅花","方块"};//创建一副牌(52张)
String[] Pai = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
Scanner input1 = new Scanner(System.in);
Scanner input2 = new Scanner(System.in);
List<PuKe> PuKeList = new ArrayList<PuKe>();
List<Player> PlayerList = new ArrayList<Player>();
public FunRea(){//构造器
}
public void CrePlayer(){//创建玩家
for(int i=1;i<=2;i++){
System.out.println("请输入第"+i+"个玩家的ID(整数): ");
int ID = 0;
//捕捉玩家ID类型输入错误
try{
ID =Integer.parseInt(input1.next());
}catch(Exception e)
{ System.out.println(e.getMessage());
i--; //重新开始循环
continue;
}
for(int j = i;j <= 2; j++){
System.out.println("请输入第"+i+"个玩家的姓名: ");
String name = input2.next();
//判断玩家是否输入姓名,如未输入,则提醒玩家输入
if(name==null){
System.out.println("您未输入玩家姓名,");
j--;//重新开始循环
continue;
}else{
System.out.println("欢迎第"+i+"个玩家"+name+"加入游戏");
PlayerList.add(new Player(ID,name));
break;
}
}
}
System.out.println("--------游戏玩家创建成功--------");
}
public void CrePuKe(){//创建扑克
System.out.println("--------开始创建扑克牌---------");
for(int i = 0;i<4;i++){
for(int j = 0;j<13;j++){
PuKeList.add(new PuKe(HuaSe[i],Pai[j]));//将创建的扑克牌加入牌库中
}
}
int n = 0 ;
for(PuKe PuKe: PuKeList) { //将创建的牌依次打印出来
System.out.print(PuKe.HuaSe+PuKe.Pai+" ");
if(n%13 == 0) {
System.out.println();
}
n++;
}
System.out.println("---------扑克牌创建完毕--------");
}
public void XiPai(){//洗牌
System.out.println("-----------开始洗牌----------");
Collections.shuffle(PuKeList);//List 调用shuffle实现类实现随机排序
System.out.println("-----------洗牌完毕----------");
}
public void FaPai(){//发牌
System.out.println("----------开始发牌-----------");
System.out.println("玩家"+PlayerList.get(0).name+"拿牌...");
PlayerList.get(0).handCards.add(PuKeList.get(0));
System.out.println("玩家"+PlayerList.get(1).name+"拿牌...");
PlayerList.get(1).handCards.add(PuKeList.get(1));
System.out.println("玩家"+PlayerList.get(0).name+"拿牌...");
PlayerList.get(0).handCards.add(PuKeList.get(2));
System.out.println("玩家"+PlayerList.get(1).name+"拿牌...");
PlayerList.get(1).handCards.add(PuKeList.get(3));
System.out.println("--------发牌结束-----------");
}
public void Compare(){//比较大小
System.out.println("---------获胜方---------");
ComparePuKe comparePuKe = new ComparePuKe();
List<PuKe> PuKe1 = new ArrayList<PuKe>();
List<PuKe> PuKe2 = new ArrayList<PuKe>();
//获取玩家1的第一张手牌
PuKe1.add(0, PlayerList.get(0).handCards.get(0));
//获取玩家1的第二张手牌
PuKe1.add(1, PlayerList.get(0).handCards.get(1));
//获取玩家2的第一张手牌
PuKe2.add(0, PlayerList.get(1).handCards.get(0));
//获取玩家2的第二张手牌
PuKe2.add(1, PlayerList.get(1).handCards.get(1));
//调用方法比较大小,先确定玩家各自手牌中较大的一张
PuKe a = comparePuKe.compareTest(PuKe1.get(0), PuKe1.get(1));
PuKe b = comparePuKe.compareTest(PuKe2.get(0), PuKe2.get(1));
int c = comparePuKe.compare(a, b);
if(c > 0){//玩家1赢了
System.out.println("玩家"+ PlayerList.get(0).name + "获胜!");
}else{//玩家2赢了
System.out.println("玩家"+ PlayerList.get(1).name + "获胜!");
}
}
public void ShowCard(){//展示
System.out.println("--------开始展示玩家手牌--------");
for(Player player : PlayerList){
System.out.println("玩家"+player.name+"的手牌为: ");
for(PuKe puke : player.handCards){
System.out.println(puke.HuaSe + puke.Pai);
}
System.out.println();
}
}
}
玩家类
package com.lt.puke;
import java.util.ArrayList;
import java.util.List;
/**
* 创建玩家类,添加ID和姓名属性
* @author 李韬
*
*/
public class Player {
public int playerID;
public String name;
List<PuKe> handCards = new ArrayList<PuKe>();
public Player(int playerID,String name){
this.playerID = playerID;
this.name = name;
}
}
扑克类
package com.lt.puke;
/**
* 创建扑克牌类,添加花色和牌属性
* @author 李韬
*
*/
public class PuKe {
public String HuaSe;
public String Pai;
public PuKe(String HuaSe,String Pai){
this.HuaSe = HuaSe;
this.Pai = Pai;
}
public PuKe(){
}
}
比较类
package com.lt.puke;
import java.util.Comparator;
/**
* 比较方法类,接入Comparator接口实现compare方法
* @author 李韬
*
*/
public class ComparePuKe implements Comparator<PuKe> {
String[] HuaSe = {"黑桃","红桃","梅花","方块"};
String[] Pai = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};//提前将大小排序,届时只需比较数组下标,方便比较大小
public int compare(PuKe pk1, PuKe pk2){
int p1 = 0, p2 = 0,flog = 0;//flag为判断大小标志的返回值
for(int i=0; i<Pai.length; i++) {
if(pk1.Pai == Pai[i])
p1 = i;
if(pk2.Pai == Pai[i])
p2 = i;
}
if(p1 > p2) //比较大小
flog = 1;
else if(p1 < p2)
flog = -1;
else if(p1 == p2){ //数字相等时
int k1 = 0, k2 = 0;
for(int j=0; j<HuaSe.length; j++){
if(pk1.HuaSe == HuaSe[j])
k1 = j ;
if(pk2.HuaSe == HuaSe[j])
k2 = j ;
}
if(k1 > k2)//比较花色
flog = -1;
else
flog = 1;
}
return flog;
}
public PuKe compareTest(PuKe pk3,PuKe pk4){//返回大的扑克牌
int p1 = 0, p2 = 0;
PuKe flog = new PuKe();//flag为判断大小标志的返回值
for(int i=0; i<Pai.length; i++) {
if(pk3.Pai == Pai[i])
p1 = i;
if(pk4.Pai == Pai[i])
p2 = i;
}
if(p1 > p2) //比较大小
flog = pk3;
else if(p1 < p2)
flog = pk4;
else if(p1 == p2){ //数字相等时
int k1 = 0, k2 = 0;
for(int j=0; j<HuaSe.length; j++){
if(pk3.HuaSe == HuaSe[j])
k1 = j ;
if(pk4.HuaSe == HuaSe[j])
k2 = j ;
}
if(k1 > k2)//比较花色
flog = pk4;
else
flog = pk3;
}
return flog;
}
}
刚开始学Java,有些东西还不太熟练,难免会有些错误,希望广大慕友批评指正。
热门评论
你那个发牌赋值有误,
楼主,我学过一边,遇见这种问题还是不知道怎么解决,你是怎么做到的..
楼主现在工资一个月多少钱?我是刚开始学java不久,学的不是很好,不知道要学多深,才能找到工作,要是能写出这样的笑程序,好找工作?