实验目的:完成人机猜拳互动游戏的开发
阶段一:实验——分析业务,创建用户类
1.分析业务,抽象出类、类的特征和行为
2.创建出用户类
阶段二:实验——创建出计算机类
创建计算机类Computer。实现计算机出拳
产生一个1—3的随机数,模拟计算机的出拳结果
阶段三:实验——创建游戏类,选择对战对手
1.创建游戏类Game
2.编写游戏类的初始化方法initial()
3.编写游戏类的开始游戏方法startGame()
阶段四:实验——实现一局对战
分别调用用户类和计算机类的出拳方法showFist(),接受返回值并比较,给出胜负结果
阶段五:实验——实现循环对战,并累计得分
实现循环对战,并且累加赢家的得分
阶段六:实验——显示对战结果
游戏结束后,显示对战结果
编写showResult()方法,比较二者的得分情况,给出对战结果
阶段七:实验——完善游戏类的startGame()
输入并保存用户姓名,游戏结束后显示双方的各自得分
代码实现
User.java
import java.util.Scanner;
public class User {
String[] name; //姓名
int score; //积分
public User(){
name = new String[3];
this.name[0]="匿名";
this.name[1]="小羊";
this.name[2]="修勾";
}
public int showFist(){ //出拳
boolean flag=true;
int userFist=0;
Scanner scanner =new Scanner(System.in);
System.out.println("请出拳(1:剪刀 2:石头 3:布):");
while(flag){
userFist = scanner.nextInt();
switch (userFist) {
case 1:
System.out.println("你出拳:剪刀");
flag =false;
break;
case 2:
System.out.println("你出拳:石头");
flag =false;
break;
case 3:
System.out.println("你出拳:布");
flag =false;
break;
default:
System.out.println("发生了一个意料之外的错误");
System.out.println("请出拳(1:剪刀 2:石头 3:布):");
}
}
return userFist;
}
}
Computer.java
import java.util.Random;
public class Computer {
String[] name;
int score;
public Computer(){
name = new String[3];
this.name[0]="刘备";
this.name[1]="孙权";
this.name[2]="曹操";
}
public int showFist(String comname){ //出拳
Random random =new Random();
int comFist;
comFist = random.nextInt(3) + 1;
switch (comFist) {
case 1:
System.out.println(comname+"出拳:剪刀");
break;
case 2:
System.out.println(comname+"电脑出拳:石头");
break;
case 3:
System.out.println(comname+"电脑出拳:布");
break;
default:
System.out.println("发生了一个意料之外的错误");
}
return comFist;
}
}
Game.java
import java.util.Scanner;
public class Game {
User user;
Computer computer;
int count; //对战次数
String cname=null; //选择对战电脑名
String pname=null; // 己方出战名
void initial(){
//初始化对象
user= new User();
computer = new Computer();
user.score=0; //初始积分为零
computer.score=0;
count =0; // 初始对战次数为零
}
void startGame(){
System.out.println("--------------------欢迎进入游戏世界----------------");
System.out.println();
System.out.println();
System.out.println(" *********************************** ");
System.out.println(" *** 猜拳开始 ** ");
System.out.println(" *********************************** ");
System.out.println();
System.out.println("出拳规则为: 1.剪刀 2.石头 3.布");
System.out.println();
Scanner scanner =new Scanner(System.in);
boolean flag = true;
System.out.println("请选择己方出战角色(1:"+user.name[0]+" 2:"+user.name[1]+"3:"+user.name[2]+"):");
while(flag){
int username = scanner.nextInt();
switch (username) {
case 1:
System.out.println("你选择了匿名对战");
pname=user.name[0];
flag = false;
break;
case 2:
System.out.println("你选择了小羊对战");
pname=user.name[1];
flag = false;
break;
case 3:
System.out.println("你选择了修勾对战");
pname=user.name[2];
flag = false;
break;
default:
System.out.println("输入错误,请重新选择");
System.out.println("请选择己方出战角色(1:"+user.name[0]+" 2:"+user.name[1]+"3:"+user.name[2]+"):");
}
}
System.out.println("请选择对方角色(1:刘备 2:孙权 3:曹操):");
flag=true;
while(flag){
int comname = scanner.nextInt();
switch (comname) {
case 1:
System.out.println("你选择了刘备对战");
cname=computer.name[0];
flag = false;
break;
case 2:
System.out.println("你选择了孙权对战");
cname=computer.name[1];
flag = false;
break;
case 3:
System.out.println("你选择了曹操对战");
cname=computer.name[2];
flag = false;
break;
default:
System.out.println("输入错误,请重新选择");
System.out.println("请选择对方角色(1:刘备 2:孙权 3:曹操):");
}
}
// 开始对战
//判断是否开始
System.out.println("要开始吗?(y/n):");
flag = true;
boolean start_flag=false; // 是否开始标记
while(flag){
String start = scanner.next();
if(start.equals("y")){
start_flag= true;
System.out.println("游戏开始");
break;
}else if(start.equals("n")){
System.out.println("游戏结束");
start_flag=false;
break;
}else{
System.out.println("输入错误,请重新输入");
System.out.println("要开始吗?(y/n):");
}
}
//开始出拳
int perFist; //人出拳
int comFist; //电脑出拳
while(start_flag){
perFist= user.showFist();
comFist= computer.showFist(cname);
// 裁决
if((perFist == 1 && comFist == 1) ||
(perFist == 2 && comFist == 2) ||
(perFist == 3 && comFist == 3)){
System.out.println("结果:和局,真衰!嘿嘿,等着瞧吧");//平局
}else if((perFist == 1 && comFist == 3) ||
(perFist == 2 && comFist == 1) ||
(perFist == 3 && comFist == 2)){
System.out.println("结果:^_^,你输了,真笨");
computer.score++;//记录电脑赢的分数
}else{
System.out.println("结果:恭喜,你赢了!");//用户赢了
user.score++;//记录用户赢的分数
}
count++;//对战次数加一
System.out.println("是否进入下一轮(y/n)");
flag = true;
while(flag){
String start = scanner.next();
if(start.equals("y")){
start_flag= true;
break;
}else if(start.equals("n")){
start_flag=false;
break;
}else{
System.out.println("输入错误,请重新输入");
System.out.println("是否进入下一轮(y/n)");
}
}
}
showResult(); //显示结果
}
void showResult(){//显示对战结果
System.out.println("------------------------------------------------");
System.out.println(cname+"\tVS\t"+pname);
System.out.println("对战次数:"+count);
System.out.println();
System.out.println("姓名"+"\t"+"积分");
System.out.println(pname+"\t"+user.score);
System.out.println(cname+"\t"+computer.score);
if(user.score>computer.score){
System.out.println("结果:恭喜恭喜!");
}else{
System.out.println("呵呵,笨笨,下次加油啊");
}
System.out.println("-------------------------------------------------");
}
}
TestGame.java
public class TestGame {
public static void main(String[] args) {
Game game = new Game();
game.initial();
game.startGame();
}
}
写在结尾
- 未认真测试,不知是否有未知bug。
- 输入对战姓名未实现
- 变量名杂乱,尽量做了备注
- 仅做参考