通过控制台实现的猜拳游戏(使用类的封装完成)

实现猜拳游戏的话需要的肯定是玩家类,还有就是游戏地点类,电脑人类

具体代码:

玩家类:

public class HumanPlayer {
    //出拳的信息
	public static final int MessageTypeFist = 1;
    //赢得比赛的信息
    public static final int MessageTypeWin = 2;
    //输了比赛的信息
    public static final int MessageTypeLose = 3;
	//属性:名称、分数、所出的拳、(角色的音效)、角色的对应台词
	private String name;
	private int score;
	private int fist;   //玩家出的拳是(剪刀、石头、布)
	//角色的个性化台词
	private String []fistWords = {   //猜拳的时候说的话
			"动感光波~biiubiubiu~",
		    "大象大象你的鼻子为什么这么长",
		    "必杀:露pp外星人~~",
		    "大姐姐你喜欢吃青椒?",
		    "胸部扁扁的欧巴桑,吃我一拳~"
	};
	private String []winWords = {   //猜拳胜利所说的话
		"还有谁",
		"猜拳,有点意思~",
		"~~~超神~~~~",
		"全军出击~~~",
		"吃着火锅唱着歌,然后你就输了~~"
	};
    private String []loseWords = {	
    	"通往成功的道路总在施工中~",
    	"等到潮水退去,就知道谁在裸泳了~~",
    	"夏天就是不好,穷的时候我连西北风都没得喝。。。。",
    	"将来我死了,把QQ捐给希望工程,让孩子们一上来就能使用皇冠QQ~~",
    	"众人皆醉我独醒,举世皆浊我独清"
    };
    
    //方法:
    public void sendMessage(int msgType)
    {
    	int index = (int)(Math.random()*1000)%5; //随机产生0-4的随机数字
    	String message = null;   //需要打印的消息
    	switch(msgType) {
    	case MessageTypeFist:
    		message = fistWords[index];
    		break;
    	case MessageTypeWin:
    		message = winWords[index];
    		break;
    	case MessageTypeLose:
    		message = loseWords[index];
    		break;
    	}
    	System.out.println(message);
    }
    public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getScore() {
		return score;
	}
	public void setScore(int score) {
		this.score = score;
	}
	public int getFist() {
		return fist;
	}
	public void setFist(int fist) {
		this.fist = fist;
	}
}

电脑人类:

public class ComputerPlayer {
	public static final int MessageTypeFist = 1;
    //赢得比赛的信息
    public static final int MessageTypeWin = 2;
    //输了比赛的信息
    public static final int MessageTypeLose = 3;
	//属性:名称、分数、所出的拳、(角色的音效)、角色的对应台词
	private String name;
	private int score;
	private int fist;   //玩家出的拳是(剪刀、石头、布)
	//角色的个性化台词
	private String []fistWords = {   //猜拳的时候说的话
			"平a",
		    "我是鲁班七号",
		    "哈哈或",
		    "我是外星人?",
		    "小样儿!~"
	};
	private String []winWords = {   //猜拳胜利所说的话
		"还有谁",
		"猜拳,有点意思~",
		"~~~超神~~~~",
		"全军出击~~~",
		"吃着火锅唱着歌,然后你就输了~~"
	};
    private String []loseWords = {	
    	"通往成功的道路总在施工中~",
    	"等到潮水退去,就知道谁在裸泳了~~",
    	"夏天就是不好,穷的时候我连西北风都没得喝。。。。",
    	"将来我死了,把QQ捐给希望工程,让孩子们一上来就能使用皇冠QQ~~",
    	"众人皆醉我独醒,举世皆浊我独清"
    };
    
    //方法:
    public void sendMessage(int msgType)
    {
    	int index = (int)(Math.random()*1000)%5; //随机产生0-4的随机数字
    	String message = null;   //需要打印的消息
    	switch(msgType) {
    	case MessageTypeFist:
    		message = fistWords[index];
    		break;
    	case MessageTypeWin:
    		message = winWords[index];
    		break;
    	case MessageTypeLose:
    		message = loseWords[index];
    		break;
    	}
    	System.out.println(message);
    }
    public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getScore() {
		return score;
	}
	public void setScore(int score) {
		this.score = score;
	}
	public int getFist() {
		//电脑的出拳实际上是生成1-3的随机数字
		fist = (int)(Math.random()*3+1);
		return fist;
	}

}

游戏场景类:

import java.util.*;
public class GameRoom {
//属性:记分牌、道具、参与游戏的玩家、房间号、房间名称、房间的密码。。。。
	  private HumanPlayer player1 = null;
	  private ComputerPlayer player2 = null;
	  private String roomName;  //房间名称
	  private String roomPass;   //房间密码
	
	  public GameRoom(String roomName,String roomPass)
	  {
		  if(!("ly".equals(roomName)&&"123456".equals(roomPass))) {
			  System.out.println("游戏房间密码错误,强制退出");
			  return;
		  }
		  this.setRoomName(roomName);
		  initGame();
		  startGame();
		  endGame();
	  }
//方法:开始游戏、初始化游戏、显示菜单、选择人物、判断输赢(可以放在裁判类)
	public void initGame() {  
		//1.实例化游戏玩家对象
		player1 = new HumanPlayer();
		player2 = new ComputerPlayer();
		//2.初始化预习的其他属性
		//如:游戏中的花花草草等
		for(int i = 0;i<40;i++) {
			System.out.print("*");
			try {
				Thread.sleep(50);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		System.out.println();
	}
	
	public void startGame() {
		showMenu();
		choiceRole();
		gaming();
	}
	//游戏循环
	private void gaming() {
		while(true){
		//双方出拳
		System.out.print(player1.getName()+"请出拳:");
		Scanner input = new Scanner(System.in);
		int number;
		number = input.nextInt();
		if(number>0&&number<4) {
		player1.setFist(number);
		int fist1 = player1.getFist();
		player2.getFist();
		int fist2 = player2.getFist();
		//判断输赢
		int reslut = judge(fist1,fist2);
		//如果返回-1玩家1胜利,如果返回0打平,如果返回1玩家2胜利
		//打印结果
		if(reslut == -1)
		{
			System.out.println(player1.getName()+"胜利");
			player1.sendMessage(HumanPlayer.MessageTypeWin);
			player2.sendMessage(ComputerPlayer.MessageTypeLose);
		}else if(reslut == 0)
		{
			System.out.println("平局");
			player1.sendMessage(HumanPlayer.MessageTypeFist);
			player2.sendMessage(HumanPlayer.MessageTypeFist);
		}else if(reslut == 1)
		{
			System.out.println(player2.getName()+"胜利");
			player1.sendMessage(HumanPlayer.MessageTypeLose);
			player2.sendMessage(HumanPlayer.MessageTypeWin);
		}
		System.out.println("是否继续游戏?");
		String answer = new Scanner(System.in).next();
		if("no".equals(answer)){   //这里判断是否继续游戏,输入除了no以外的则继续
			break;
		}
		}
		else
		{
			System.out.println("出拳违反规则,请重新输入");
		//	number = input.nextInt();
		}
		}
	}
	
	public void showMenu() {
		System.out.println("游戏加载成功!");
		System.out.println("欢迎进入"+roomName+"游戏房间");
		System.out.println("出拳规则:1-石头;2-剪刀;3-布");
	}
	
	public void choiceRole() {
		System.out.println("对方角色:1-风间;2-妮妮;3-正南;4-阿呆。。");
        System.out.println("请选择:");
        int choice;
        choice= new Scanner(System.in).nextInt();
        if(choice>0&&choice<=4)
        {
        String[] nameArray = {"风间","妮妮","正南","阿呆"};
	    player2.setName(nameArray[choice-1]);
	    player1.setName("野原新之助");
	    System.out.println(player1.getName()+"VS."+player2.getName());
        }
        else
        {
        	System.out.println("输入错误,请重新输入");
        //	choice = new Scanner(System.in).nextInt();
        }
	}
	
	public int judge(int fist1,int fist2) {
		if(fist1 == fist2)
			return 0;
		if(fist1 == 1&& fist2 ==3 ||fist1 == 2&& fist1 ==1 || fist1 ==3&& fist2 ==2)
		{
			//玩家1的分数+1,玩家2的分数-1
			player1.setScore(player1.getScore()+1);
		    player2.setScore(player2.getScore()-1);
			return -1; //玩家1胜利
		}
		//玩家2胜利
		player1.setScore(player1.getScore()-1);
	    player2.setScore(player2.getScore()+1);
		return 1;
	}
	
	public void endGame() {
		System.out.println(player1.getName()+"\t"+player2.getName());
		System.out.println(player1.getScore()+"\t"+player2.getScore());
		System.out.println("游戏已经结束,欢迎继续游戏");
	}
	
	public String getRoomName() {
		return roomName;
	}
	public void setRoomName(String roomName) {
		this.roomName = roomName;
	}
	public String getRoomPass() {
		return roomPass;
	}
	public void setRoomPass(String roomPass) {
		this.roomPass = roomPass;
	}
	  
	  
	  
}

测试类:

public class TestGame {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        new GameRoom("ly","123456");
	}

}

结果:


玩家类和电脑人类相似,个人感觉java是非常强大的,自己对类的封装这里理解也不深,之后会将web版本有动图的做出来会放上来。

猜你喜欢

转载自blog.csdn.net/lytwy123/article/details/81669755