模拟实现人机对战的猜拳游戏
需求:
定义Person玩家类,属性:name和score,行为:键盘录入出拳;
Computer类,属性:name和score,行为:随机数方式出拳。
定义游戏类MoraGame,创建person对象和computer对象,
封装方法分别为对象name属性赋予玩家角色名称;
封装方法可以实现对战游戏,通过提示是否继续游戏终止游戏。
封装方法显示最终的对战结果。
定义Test测试类,测试游戏。
Person类:
import java.util.Scanner;
//创建一个人类
public class Person extends GameUser{
//定义一个变量,存储玩家输入的选择
int a;
public Person(){}
//定义玩家出拳的方法
public void input(){
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的选择:0、石头 1、剪刀 2、布 3、退出游戏");
a = sc.nextInt();
}
}
Computer类:
import java.util.Random;
//创建一个电脑类
public class Computer extends GameUser {
//定义一个变量存储电脑随机产生的选项
int b;
public Computer(){}
//电脑出拳的方法
public void ran(){
//随机产生一个数字
Random r = new Random();
b = r.nextInt(3);
}
}
MoraGame:
import java.util.Random;
public class MoraGame {
//实例化人类和电脑类
Person p = new Person();
Computer c = new Computer();
Random r = new Random();
//随机产生玩家和电脑名字的方法
public void gName(){
String[] name = {"张三","李四","王五","赵六","傻逼","二货"};
int a = r.nextInt(4);
int b = r.nextInt(4);
//从数组中随机抽取名字赋个玩家和电脑
p.setScore(100);
c.setScore(100);
//名字不能相同,当名字相同时,电脑选择下一个名字
if(a!=b){
p.setName(name[a]);
c.setName(name[b]);
}else {
p.setName(name[a]);
c.setName(name[b+1]);
}
}
//游戏执行的方法
//游戏在此方法中执行
public void play(){
String[] game={"石头","剪刀","布"};
//定义死循环,让游戏可以一直运行下去
while (true){
//调用玩家出拳方法
p.input();
//判断游戏是否结束
if(p.a==3||p.getScore()==0||c.getScore()==0){
System.out.println("游戏结束!");
break;
}
//调用电脑出拳方法
c.ran();
//打印玩家的名字和分数
System.out.println("玩家:"+p.getName()+",分数"+p.getScore());
//判断玩家出拳是否合理,选择只有0-2;3是结束游戏,除此之外的选择都是不合理
if(p.a<=2){
//如果合理,打印玩家的选择
System.out.println("出 "+game[p.a]);
}else {
System.out.println("你的输入有误!");
//如果玩家时输入不合理,重新调用此方法重新进入游戏诚信输入
play();
}
//打印电脑的名字和分数
System.out.println("电脑:"+c.getName()+",分数"+c.getScore());
//打印电脑随机产生的选择
System.out.println("出 "+game[c.b]);
//调用游戏判断输赢方法
result();
}
}
//判断游戏输赢方法
public void result(){
//判断电脑胜利的规则
if((p.a==0&&c.b==2)||(p.a==1&&c.b==0)||(p.a==2&&c.b==1)){
System.out.println("电脑胜利");
//电脑胜利,电脑的分数加一,玩家的分数减一
p.setScore(p.getScore()-1);
c.setScore(c.getScore()+1);
}else if((p.a==0&&c.b==0)||(p.a==1&&c.b==1)||(p.a==2&&c.b==2)){//判断平局的规则
System.out.println("平局");
}else {//除了以上的可能,剩下的就是玩家胜利
System.out.println(p.getName()+"胜利");
p.setScore(p.getScore()+1);
c.setScore(c.getScore()-1);
}
}
}
主类:
public class Test {
//主类
public static void main(String[] args) {
//实例化MoraGame对象
MoraGame m = new MoraGame();
//调用给名字的方法
m.gName();
//调用进行游戏的方法
m.play();
}
}
运行结果: