石头剪刀布游戏人类玩家:
/**
* 石头剪刀布游戏人类玩家
* @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");
}
}