剪刀石头布猜拳小游戏的简单实现

Humanplayer.java

package javaDemo1;

/**
 * 
 * 人类玩家类
 * 
 * @author Monster丶ZF @version1.8
 * @data 2019年5月3日
 * @remakeTODO
 */
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 = {
			"动感光波biubiubiu~~~", 
			"大象你鼻子为什么这么长",
			"必杀:露PP外星人", 
			"大姐姐你喜欢吃青椒吗", 
			"胸部扁扁的欧巴桑,吃我一拳" };

	private String[] winWords = { 
			"还有谁~~", 
			"猜拳,有点意思~~~", 
			"~~超~~~神~~", 
			"全军出击~~~!!", 
			"吃着火锅唱着歌,然后你就输了" };

	private String[] loseWords = {
			"通往成功的路总在施工中~~",
			"等到潮水退去,就知道谁在裸泳了。。。",
			"夏天就是不好,穷的时候我连西北风都没得喝。。。",
			"将来我死了,把QQ捐给希望工程。让孩子们一上来就能用到太阳的QQ", 
			"众人皆醉我独醒,举世皆浊我独清。。。" };
	// 方法:设置和得到名称、分数、(播放音效)、说个性化台词、出拳
	/**
	 * 根据传入的消息类型,随机打印对应类型的信息
	 * @param msgType 对应HumanPlayer类中定义的静态常量
	 */
   public String sendMessage(int msgType){
	   //生成一个0-4之间的随机数字
	   int index =((int)(Math.random()*1001)) % 5;
	   String message = null ; //要打印的消息
	   switch (msgType) {   
	case MessageTypeFist:
		message = fistWords[index];
		break;
		
	case MessageTypeWin:
		message = winWords[index];
		break;
	case MessageTypeLose:
		message = loseWords[index];
		break;
	}
	   return message;
	 // 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;
	}

}

Complayer.java

package javaDemo1;

/**
 * 
 * 电脑玩家类
 * 
 * @author Monster丶ZF @version1.8
 * @data 2019年5月3日
 * @remakeTODO
 */
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 = { 
			"字曾经曰过:“Y挺的LJYOYO,一板砖呼死你Y的!!”", 
			"真相只有一个,你已经死了!", 
			"在这一刻 " + name + "被灵魂附体,他不是一个人!!!", 
			"抽,是生活的一种艺术:找抽,是一种生活态度", 
			"“刚和我朋友下棋,他把我帅吃了。”“你想表达什么?”“我帅死了”" };

	private String[] loseWords = {
			"我有一天我修成正果,把你们这些妖孽全部收了",
			"人生最大的悲哀是青春不在了,青春痘却还在。",
			"别逼我,再逼我我就装死给你看",
			"再牛逼百度咋搜不到你呢?再牛逼你能憋住尿吗?", 
			"我和超人的唯一区别是:我把内裤穿在了里面"
			};
	// 方法:设置和得到名称、分数、(播放音效)、说个性化台词、出拳
	/**
	 * 根据传入的消息类型,随机打印对应类型的信息
	 * @param msgType 对应HumanPlayer类中定义的静态常量
	 */
   public String sendMessage(int msgType){
	   //生成一个0-4之间的随机数字
	   int index =((int)(Math.random()*1001)) % 5;
	   String message = null ; //要打印的消息
	   switch (msgType) {   
	case MessageTypeFist:
		message = fistWords[index];
		break;
		
	case MessageTypeWin:
		message = winWords[index];
		break;
	case MessageTypeLose:
		message = loseWords[index];
		break;
	}
	   return message;
	  //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() * 100)) % 3 + 1;
		return fist;
	}
      //机器人的setFist(int fist)不需要有
//	public void setFist(int fist) {
//		this.fist = fist;
//	}

}

GameRoom.java

package javaDemo1;

import java.lang.Thread.State;
import java.util.Scanner;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 
 * 游戏房间
 * 
 * @author Monster丶ZF @version1.8
 * @data 2019年5月3日
 * @remakeTODO
 */
public class GameRoom {
	// 属性:记分牌(暂时不实现,)、道具(暂时不实现,)、参与游戏的玩家、房间号、房间名称、房间密码。。。
	// private String weapon;
	private HumanPlayer player1 = null;
	private ComPlayer player2 = null;
	/** 房间id */
	private long roomId;
	/** 房间名称 */
	private String roomName;
	/** 房间密码 */
	private String roomPass;
	
	public GameRoom(String roomName,String roomPass){//可以把所有的代码都可以封装在游戏的房间里边就是这个构造方法里
		
		this.setRoomName(roomName);
		initGame();
		startFGame();
		endGame();
	}

	// 方法:开始游戏、初始化游戏、显示菜单(也可以另外搞一个类实现)、选择人物,判断输赢(可以定义在裁判类中)
	public void initGame(){
		//1.实例化游戏玩家对象
		//2.选择角色
		player1 = new HumanPlayer();
		player2 = new ComPlayer();
		//3.初始化游戏其他属性
		//如:游戏中的花花草草等
		for (int i = 0; i < 40; i++) {
			System.out.print("*"); //休眠50毫秒
			try {
				Thread.sleep(50);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			
		}
		System.out.println("游戏加载成功!");
	}
	
	public void startFGame(){
		showMenu();
		choiceRole();
		gaming();	
		//打印结果
	}
     /**
      * 游戏的大循环
      */
	private void gaming() {
		while(true){
			//双方出拳
			System.out.println(player1.getName() + "请出拳:");
			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() + "比较牛逼,获胜!");
				System.out.println(player1.getName() + ":" + player1.sendMessage(HumanPlayer.MessageTypeWin) );
				System.out.println(player2.getName() + ":" + player2.sendMessage(HumanPlayer.MessageTypeLose) );
				//player1.sendMessage(HumanPlayer.MessageTypeWin);
				//player2.sendMessage(ComPlayer.MessageTypeLose);
			}else if(result == 0){
				System.out.println("【啊邦学长】:还行~~还行~~ 平手!" );
				System.out.println(player1.getName() + ":" + player1.sendMessage(HumanPlayer.MessageTypeFist) );
				System.out.println(player2.getName() + ":" + player2.sendMessage(HumanPlayer.MessageTypeFist) );
				
				//player1.sendMessage(HumanPlayer.MessageTypeFist);
				//player2.sendMessage(ComPlayer.MessageTypeFist);
			}else{
				System.out.println("【啊邦学长】:" + player2.getName() + "比较牛逼,获胜!");
				System.out.println(player2.getName() + ":" + player2.sendMessage(HumanPlayer.MessageTypeWin) );
				System.out.println(player1.getName() + ":" + player1.sendMessage(HumanPlayer.MessageTypeLose) );
				
				//player2.sendMessage(ComPlayer.MessageTypeWin);
				//player1.sendMessage(HumanPlayer.MessageTypeLose);
			}
			System.out.println("是否继续游戏?y/n");
			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-啊毛;5-啊甘;6-啊苏。。。");
		System.out.println("请选择和哪个啊猜拳:");
		int choice = new Scanner(System.in).nextInt();
		String[] nameArray = {"啊包","啊超","啊农","啊毛","啊甘","啊苏"};
		//省略对用户输入的验证
		player2.setName(nameArray[choice - 1]);
		player1.setName("啊吴");
		System.out.println(player1.getName() + "VS." + player2.getName());
	}
    /**
     * 如果返回-1表示玩家1获胜;返回0,平手;返回1,玩家2获胜
     * @param fist1
     * @param fist2
     * @return
     */
	public int judge(int fist1,int fist2){ 
		if(fist1 == fist2)
			return 0;//平局
		if(fist1 == 1 && fist2 == 2 || fist1 == 2 && fist2 == 3 || fist1 == 3 && fist2 == 1 ){
			//玩家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 long getRoomId() {
		return roomId;
	}
	
	public void setRoomId(long 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;
	}
}

TestMain.java

package javaDemo1;

import java.util.Scanner;

public class TsetMain {

	public static void main(String[] args) {
//		HumanPlayer player = new HumanPlayer();
//		player.sendMessage(HumanPlayer.MessageTypeWin);
		System.out.println("请输入房间名称和房间密码:");
		String roomName = new Scanner(System.in).next();
		String roomPass = new Scanner(System.in).next();
		if(!("啊吴猜拳".equals(roomName) && "110".equals(roomPass))){
			System.err.println("房间名或房间密码错误,游戏强制退出!");
			return;
		}else{
			System.out.println("恭喜登录成功!游戏正在加载.......");
		}
		new GameRoom(roomName,roomPass);

	}

}

程序还有一些bug,缺少范围的判断,可以自己补上
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值