小项目2——猜拳游戏

石头剪刀布游戏人类玩家:

/**
 * 石头剪刀布游戏人类玩家
 * @author 棣哩哩
 * @date 2018年11月13日 下午7:10:10
 * @remarks TODO
 */
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 = {
		"动感光波",
		"大象大象你的鼻子为什么这么长",
		"必杀技:露PP",
		"大姐姐你喜欢吃青椒么",
		"欧巴桑,吃我一拳"
	};
	
	private String[] winWords = {
		"excellent",
		"nice",
		"hello",
		"hi",
		"You had me at hello"
	};
	
	private String[] loseWords = {
			"sad",
			"worse",
			"bad",
			"bye",
			"piss off"
		};
	//方法:设置和得到名称、分数、(播放音效)、设置个性化台词、出拳

	public String getName() {
		return name;
	}

	/** 
	 * 根据传入的消息类型,随机打印对应类型的消息
	 * @param msgType 对应HumanPlayer类中定义的静态常量
	 */
	public void sendMessage(int msgType){
		//生成一个0-4之间的随机数字
		int index = ((int)(Math.random() * 1000)) % 5;
		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 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;
	}

}

石头剪刀布游戏电脑玩家:

/**
 * 石头剪刀布游戏电脑玩家
 * @author 棣哩哩
 * @date 2018年11月13日 下午7:10:10
 * @remarks TODO
 */
public class ComPlayer {
	/** 静态常量:出拳的信息*/
	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 = {
		"三三两两",
		"你的心事",
		"悠悠晃晃",
		"停在我心上",
		"一艘小船"
	};
	
	private String[] winWords = {
		"bravo",
		"fantastic",
		"amazing",
		"welldone",
		"call me by your name"
	};
	
	private String[] loseWords = {
			"pity",
			"grieve",
			"console",
			"see you",
			"next"
		};
	//方法:设置和得到名称、分数、(播放音效)、设置个性化台词、出拳

	public String getName() {
		return name;
	}

	/** 
	 * 根据传入的消息类型,随机打印对应类型的消息
	 * @param msgType 对应HumanPlayer类中定义的静态常量
	 */
	public void sendMessage(int msgType){
		//生成一个0-4之间的随机数字
		int index = ((int)(Math.random() * 1000)) % 5;
		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 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() * 30000) % 3 + 1;
		return fist;
	}

//	public void setFist(int fist) {
//		this.fist = fist;
//	}

}

游戏房间

import java.util.Scanner;

/**
 * 游戏房间
 * @author 棣哩哩
 * @date 2018年11月13日 下午8:11:48
 * @remarks TODO
 */
public class GameRoom {
	//属性:记分牌、道具、参与游戏的玩家、房间号、房间名称、房间密码
	//private String weapon;
	private HumanPlayer player1 = null;
	private ComPlayer player2 = null;
	/** 房间ID*/
	private int roomID;
	/** 房间名称*/
	private String roomName;
	/** 房间密码*/
	private String roomPass;
	
	public GameRoom(String roomName, String roomPass){
		if(!("棣哩哩的游戏盒子".equals(roomName) && "123".equals(roomPass))){
			System.out.println("房间密码错误,游戏强制退出");
			return;
		}
		this.setRoomName(roomName);
		initGame();
		startGame();
		endName();
	}
	
	//方法:开始游戏、初始化游戏、显示菜单、选择人物、判断输赢(可以定义在裁判类中)
	public void initGame(){
		//1.实例化游戏玩家对象
		player1 = new HumanPlayer();
		player2 = new ComPlayer();
		//2.初始化游戏其他属性
		for (int i = 0; i < 30; i++) {
			System.out.print("*");
			try {
				Thread.sleep(50);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		System.out.println("\n游戏加载成功!");
	}
	
	public void startGame(){
		showMenu();
		choiceRole();
		gaming();
		//打印结果
	}
	
	/** 游戏大循环*/
	private void gaming() {
		while(true){
			//双方出拳
			System.out.print(player1.getName() + "请出拳:");
			//player1.setFist(new Scanner(System.in).nextInt());
			Scanner input = new Scanner(System.in);//省略判断
			player1.setFist(input.nextInt());
			int fist1 = player1.getFist();
			player2.getFist();
			int fist2 = player2.getFist();
			//判断输赢
			int result = judge(fist1, fist2);
			//如果返回-1,玩家1胜利;返回0,打平;返回1,玩家2胜利
			if(result == -1){
				System.out.println("【吉永老师】:" + player1.getName() + "胜利!");
				player1.sendMessage(HumanPlayer.MessageTypeWin);
				player2.sendMessage(ComPlayer.MessageTypeLose);
			}else if(result == 0){
				System.out.println("【吉永老师】:平局");
				player1.sendMessage(HumanPlayer.MessageTypeFist);
				player2.sendMessage(ComPlayer.MessageTypeFist);
			}else{
				System.out.println("【吉永老师】:" + player2.getName() + "胜利!");
				player2.sendMessage(ComPlayer.MessageTypeWin);
				player1.sendMessage(HumanPlayer.MessageTypeLose);
			}
			System.out.print("是否继续游戏?");
			String answer = new Scanner(System.in).next();
			if(!("y".equalsIgnoreCase(answer))){
				break;
			}
		}
	}
	
	public void showMenu(){
		System.out.println("欢迎进入 《" + roomName +  "》 游戏房间");
		System.out.println("出拳规则:1-剪刀;2-石头;3-布");
	}
	
	public void choiceRole(){
		System.out.println("对方角色:1-风间;2-妮妮;3-正南;4-阿呆");
		System.out.print("请选择:");
		int choice = new Scanner(System.in).nextInt();
		String[] nameArray = {"风间", "妮妮", "正南", "阿呆"};
		//省略对用户输入的验证
		player2.setName(nameArray[choice - 1]);
		player1.setName("野原新之助");
		System.out.println(player1.getName() + "vs." + player2.getName());
	}
	
	public int judge(int fist1, int fist2){
		if(fist1 == fist2) return 0;//平局
		if(fist1 == 1 && fist2 == 3 || fist1 == 2 && fist2 == 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 endName(){
		System.out.println("游戏结束,欢迎再来");
		System.out.println(player1.getName() + "\t" + player2.getName());
		System.out.println(player1.getScore() + "\t" + player2.getScore());
	}
	
	public int getRoomID() {
		return roomID;
	}
	public void setRoomID(int roomID) {
		this.roomID = roomID;
	}
	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 TestMain {
	public static void main(String[] args) {
//		HumanPlayer player1 = new HumanPlayer();
//		player1.sendMessage(HumanPlayer.MessageTypeWin);
		new GameRoom("棣哩哩的游戏盒子", "123");
	}

}

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值