为了账号安全,请及时绑定邮箱和手机立即绑定

写了一下午,代码上传了,请大家指点一二

个人写的时候有个问题一直没法解决,请大家指点下 Scannaer的那个。读取字符串老是读取到 输入法里的拼音 。而读取非拼音的字符就正常,写汉字时他的光标不会自动跳下去。很是费解。

package Puke1;

//绝世高手的对决
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Test {
    public List<Puke> cpuke; // 全牌的集合
    public List<player> players; // 玩家集合

    public Test() {
        this.cpuke = new ArrayList<Puke>();
        this.players = new ArrayList<player>();
    }

    public static void main(String[] args) {     
        Test t = new Test();
        t.cpoke(); // 创建扑克
        t.xpuke(); // 洗牌
        t.cJwan(); // 创建玩家
        t.fPai(); // 发牌和比较牌

    }

    // 创建牌
    public void cpoke() {
        System.out.println("----------创建扑克中---------");
        for (int i = 0; i < 4; i++) {
            for (int m = 0; m < 14; m++) {
                Puke p = new Puke(i, m + 1);
                cpuke.add(p);
            }
        }
        for (int i = 0; i < cpuke.size(); i++) {

            System.out.print("[" + cpuke.get(i).huase + cpuke.get(i).num + "]");
        }
        System.out.println("\n" + "----------创建完毕----------");
    }

    // 洗牌
    public void xpuke() {
        System.out.println("----------开始洗牌----------");
        Collections.shuffle(cpuke);
        for (int i = 0; i < cpuke.size(); i++) {
            // System.out.print("[" + cpuke.get(i).huase + cpuke.get(i).num +
            // "]"); //洗牌后的牌打印
        }
        System.out.println("\n");
    }

    // 创建玩家
    public void cJwan() {
        while (true) {
            try {
                System.out.println("请输入第一位玩家的ID:");
                Scanner input = new Scanner(System.in);
                int t1 = input.nextInt();
                System.out.println("请输入第一位玩家的姓名:");
                String t2 = input.next();
                player p = new player(t1, t2);
                players.add(p);
                break;
            } catch (Exception e) {
                System.out.println("请输入整形数据类型的ID:");
            }
        }

        while (true) {
            try {
                Scanner input = new Scanner(System.in);
                System.out.println("请输入第二位玩家的ID:");
                int t1 = input.nextInt();
                System.out.println("请输入第二位玩家的姓名:");
                String t2 = input.next();
                player p = new player(t1, t2);
                players.add(p);
                break;
            } catch (Exception e) {
                System.out.println("请输入整形数据类型的ID:");
            }
        }

        System.out.println("欢迎玩家:" + players.get(0).name);
        System.out.println("欢迎玩家:" + players.get(1).name);
    }

    // 发牌且比较
    public void fPai() {
        players.get(0).sPai.add(cpuke.get(0));
        players.get(1).sPai.add(cpuke.get(1));
        players.get(0).sPai.add(cpuke.get(2));
        players.get(1).sPai.add(cpuke.get(3));
        System.out.println("发牌结束~");
        System.out.println("开始游戏:");
        int a = 0;
        int b = 0;
        if (players.get(0).sPai.get(0).numy > players.get(0).sPai.get(1).numy) {
            System.out.println("玩家:" + players.get(0).name + "最大的手牌为;"
                    + players.get(0).sPai.get(0).huase
                    + players.get(0).sPai.get(0).num);
        } else {
            System.out.println("玩家:" + players.get(0).name + "最大的手牌为;"
                    + players.get(0).sPai.get(1).huase
                    + players.get(0).sPai.get(1).num);
            a = 1;
        }
        if (players.get(1).sPai.get(0).numy > players.get(1).sPai.get(1).numy) {
            System.out.println("玩家:" + players.get(1).name + "最大的手牌为;"
                    + players.get(1).sPai.get(0).huase
                    + players.get(1).sPai.get(0).num);
        } else {
            System.out.println("玩家:" + players.get(1).name + "最大的手牌为;"
                    + players.get(1).sPai.get(1).huase
                    + players.get(1).sPai.get(1).num);
            b = 1;
        }
        if (players.get(0).sPai.get(a).numy > players.get(1).sPai.get(b).numy) {
            System.out.println(players.get(0).name + "获胜,你可真牛b啊");
        } else if (players.get(0).sPai.get(a).numy == players.get(1).sPai
                .get(b).numy) {
            if (players.get(0).sPai.get(a).huaseint > players.get(1).sPai
                    .get(b).huaseint) {
                System.out.println(players.get(0).name + "获胜,你可真牛b啊");
            }
        } else {
            System.out.println(players.get(1).name + "获胜,你可真牛b啊");
        }
        System.out.println("玩家各自的手牌:");                                            
        System.out.print(players.get(0).name + ":"
                + players.get(0).sPai.get(0).huase
                + players.get(0).sPai.get(0).num);
        System.out.println(players.get(0).sPai.get(1).huase
                + players.get(0).sPai.get(1).num);
        System.out.print(players.get(1).name + "."
                + players.get(1).sPai.get(0).huase
                + players.get(1).sPai.get(0).num);
        System.out.println(players.get(1).sPai.get(1).huase
                + players.get(1).sPai.get(1).num);
    }
}
package Puke1;
//扑克类
public class Puke {
    public String huase;   
    public String num;        
    public int numy;
    public int huaseint;
    public Puke(int a,int b){
        this.numy=b;
        this.huaseint=huaseint;
        switch(a){
        case 0:this.huase="红桃";
        break;
        case 1:this.huase="方片";
        break;
        case 2:this.huase="梅花";
        break;
        case 3:this.huase="黑桃";
        break;
        }
        switch(b){
        case 11:this.num="J";
        break;
        case 12:this.num="Q";
        break;
        case 13:this.num="K";
        break;
        case 14:this.num="A";
        break;
        default:
            this.num=Integer.toString(b);
        
        }
    
    }
}
package Puke1;
//玩家类
import java.util.ArrayList;
import java.util.List;

public class player {
    public int id;
    public String name;
    public List <Puke>sPai;
    public player(int id,String name){
        this.id=id;
        this.name=name;
        this.sPai=new ArrayList <Puke>();
    }

}

比较方法做的不是很好。求更好的方法。

正在回答

我之前也做了,下面是我做的源代码,可以参考参考

package com;

public class Puke {

	private String color;
	private String number;
	private int size;
	private int colorSize;
	
	public Puke(){
		
	}
	public Puke(String color,String number){
		this.color = color;
		this.number = number;
	}
	
	public int getSize(){
		if(number=="J"){
			size = 11;
		}
		else if(number=="Q"){
			size = 12;
		}
		else if(number=="K"){
			size = 13;
		}
		else if(number=="A"){
			size = 14;
		}
		else{
			size = Integer.parseInt(number);
		}
		return size;
	}
	public int getColorSize(){
		if(color=="黑桃"){
			colorSize = 4;
		}
		else if(color=="红桃"){
			colorSize = 3;
		}
		else if(color=="梅花"){
			colorSize = 2;
		}
		else if(color=="方块"){
			colorSize = 1;
		}
		return colorSize;
	}
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
	public String getNumber() {
		return number;
	}
	public void setNumber(String number) {
		this.number = number;
	}
	public String toString(){
		return color+number;
	}
	
}
package com;

import java.util.ArrayList;

public class Player {

	private int id;
	private String name;
	private ArrayList<Puke> handsPuke;
	private Puke maxPuke;
	
	public Player(){
	}
	public Player(int id,String name){
		handsPuke = new ArrayList<Puke>();
		this.id = id;
		this.name = name;
	}
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public ArrayList<Puke> getHandsPuke() {
		return handsPuke;
	}
	public void setHandsPuke(Puke puke) {
		this.handsPuke.add(puke);
	}
	public Puke getMaxPuke() {		
		maxPuke = new Puke("方块","2");
		for(int i = 0;i<handsPuke.size();i++){
			if(handsPuke.get(i).getSize()>maxPuke.getSize()){
				maxPuke = handsPuke.get(i);
			}
		}
		return maxPuke;
	}
	public void setMaxPuke(Puke maxPuke) {
		this.maxPuke = maxPuke;
	}
}
package com;

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class util {
	private String[] color={"黑桃","红桃","梅花","方块"};
	private String[] number={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
	
	private ArrayList<Puke> pukes;
	private ArrayList<Player> players;
	
	//创建一副扑克牌
	public void createPuke(){
		System.out.println("-------------------创建一副扑克牌---------------------");
		pukes = new ArrayList<Puke>();
		for(int i = 0;i<color.length;i++){
			for(int j=0;j<number.length;j++){
				Puke puke = new Puke(color[i],number[j]);
				pukes.add(puke);
			}
			
		}
		for(Puke puke:pukes){
			System.out.print(puke.toString()+" ");
		}
		System.out.println();
		System.out.println("----------------------创建完毕-----------------------");
	}
	public void createPlayer(){
		players = new ArrayList<Player>();
		System.out.println("---------------------创建玩家------------------------");
		Scanner s = new Scanner(System.in);
		int id=0;
		String name="";
		for(int i = 0;i<2;i++){
			System.out.println("请输入玩家"+(i+1)+"的id和姓名:");
			System.out.println("请输入id");
			try{	
				id = s.nextInt();
				System.out.println("请输入姓名");
			}catch(Exception e){
				System.out.println("请输入整数类型的id");
				this.createPlayer();
			}
			name=s.next();
			players.add(new Player(id,name));
		}
		for (Player player:players) {
            System.out.println("-----欢迎玩家:"+player.getName());
        }
	}
	public void washPuke(){
		 System.out.println("---------开始洗牌------------");
	     for (int i = 0; i < pukes.size(); i++) {
	          Random random = new Random();
	          int j = random.nextInt(pukes.size());
	          Puke temp = pukes.get(i);    //用一个变量保存 i位置的一张扑克
	          pukes.set(i, pukes.get(j));  //用j位置(随机长生)的扑克替换i位置的扑克
	          pukes.set(j, temp);  //j位置的扑克就替换成原来i位置的扑克
	    }
	   System.out.println("---------洗牌结束!-----------");
	}
	public void getPuke(){
		System.out.println("---------------开始发牌--------------------");
		int n=0;
		for(int i = 0;i<2;i++){
			for(Player player:players){
				player.setHandsPuke(pukes.get(n++));
				System.out.println("-----玩家"+player.getName()+"拿牌-----");
			}
		}
		System.out.println("---------------发牌结束---------------------");
	}
	
	public void startGame(){
		System.out.println("---------------开始游戏---------------------");
		for(Player player:players){
			System.out.println("---玩家"+player.getName()+"最大的手牌为:"+player.getMaxPuke().toString());
		}
		Player winPlayer = comparePlayer(players.get(0),players.get(1));
		if(winPlayer != null){
			System.out.println("-----玩家"+winPlayer.getName()+"获胜---------");
		}
		else{
			System.out.println("平手");
		}
		for(Player player:players){
			System.out.print("-----玩家"+player.getName()+"的手牌为:");
			for(Puke puke:player.getHandsPuke()){
				System.out.print(puke.toString()+" ");
			}
			System.out.println();
		}
	}
	/*
	public Puke getPlayerMaxPuke(Player player){
		Puke maxPuke = new Puke("方块","2");
		ArrayList<Puke> handsPuke = player.getHandsPuke();
		for(int i = 0;i<handsPuke.size();i++){
			if(handsPuke.get(i).getSize()>maxPuke.getSize()){
				maxPuke = handsPuke.get(i);
			}
		}
		return maxPuke;
	}*/
	public Player comparePlayer(Player player1,Player player2){
		if(player1.getMaxPuke().getSize() > player2.getMaxPuke().getSize()){
			return player1;
		}
		else if(player1.getMaxPuke().getSize() < player2.getMaxPuke().getSize()){
			return player2;
		}
		else{
			if(player1.getMaxPuke().getColorSize() > player2.getMaxPuke().getColorSize()){
				return player1;
			}
			else if(player1.getMaxPuke().getColorSize() < player2.getMaxPuke().getColorSize()){
				return player2;
			}else{
				return null;
			}
		}
			
	}
}
package com;

public class game {

	public static void main(String[] args) {
		util pukeGame = new util();
		pukeGame.createPuke();
		pukeGame.createPlayer();
		pukeGame.washPuke();
		pukeGame.getPuke();
		pukeGame.startGame();
	}

}


0 回复 有任何疑惑可以回复我~
#1

持恒 提问者

谢谢分享,细细看过了。循环洗牌的想法很好啊,没Collections.shuffle()我还真想不到这办法。 不过我还是那个疑问Scanner实例next()老是读取到拼音。就是打汉字的时候
2015-06-04 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

写了一下午,代码上传了,请大家指点一二

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信