面向对象开发设计剪刀石头布:
游戏至少有两个对象(玩家,电脑)
编程的逻辑:即游戏规则(出拳,判断谁出谁赢)
因为出拳比较困难,这里我们把剪刀石头布分别对应换成1,2,3
(1)分析游戏需要有几个类
两个玩家——>两个类,玩家类,电脑类
判断类——>判断(根据游戏规则去判断输赢)
主函数——>main
(2)找出需要封装的内容
玩家类:(属性)姓名,出拳名称
(方法)出拳
电脑类:(属性)姓名,出拳名称
(方法)出拳
裁判:(属性)
(方法)判断
主函数:main函数
(3)找出不同类之间的继承关系
电脑类和玩家类——>继承同一个类
(4)多态
玩家类和电脑类转化成参与者类归纳,有继承和没有继承关系的类
主程序思想如下:
1、封装类时,私有化变量。
(1)所有变量做getter和setter方法
(2)当前类的无参和有参构造函数
(3)重写当前类的toString()方法
2、显示出界面,以及玩家选项
3、在判断类中,用数组来进行判断输赢。针对电脑和玩家的出拳,用差值来判断输赢。
4、实例化所有类
分区代码如下
电脑类
import java.util.Scanner;
public class Computer extends Joiner{
@Override
public void choice() {
this.setChoiceName((int)(Math.random()*3+1));
}
@Override
public void name_setting() {
super.name_setting();
String[] computer_names={"蜡笔小新","哆啦A梦"};
System.out.println("*******************");
System.out.println("1-----蜡笔小新");
System.out.println("2-----哆啦A梦");
System.out.println("*******************");
System.out.println("请选择对阵玩家代码;");
Scanner scanner = new Scanner(System.in);
System.out.println("注意:必须输入内容,然后再回车,不能是空格加回车,否则程序执行不下去");
try{
//把scanner的nextInt先接收一下
int tmp=scanner.nextInt();
this.setName(computer_names[tmp-1]);
}catch (Exception e){
}
}
}
玩家类
import java.util.Scanner;
public class Player extends Joiner{
@Override
public void choice() {
System.out.println("****请玩家选择出拳的代表数字*********");
System.out.println("1------剪刀");
System.out.println("2------石头");
System.out.println("3------布");
System.out.println("*********************************");
Scanner scanner = new Scanner(System.in);
try{
this.setChoiceName(scanner.nextInt());
}catch (Exception e){
this.setChoiceName((int) (Math.random()*3+1));
}
}
@Override
public void name_setting() {
System.out.println("请输入玩家名称");
Scanner scanner =new Scanner(System.in);
String line=scanner.nextLine();
if (!line.trim().equals("")){
this.setName(line);
}else {
super.name_setting();
}
}
}
判断类
public class Judge extends Joiner{
//裁判
public void juder_winner(Player player, Computer computer){
String[] arrs={"平局","赢","输"};
try{
System.out.println(arrs[sub_player]);
}catch (Exception e){
System.out.println("电脑"+arrs[Math.abs(sub_player)]);
}
System.out.println("双方出牌情况");
String[] player_choices={"剪刀","石头","布"};
System.out.println("玩家出拳:"+player_choices[player.getChoiceName()-1]);
System.out.println("电脑出拳:"+player_choices[computer.getChoiceName()-1]);
}
}
主函数
import java.util.Scanner;
public class MyMain {
public static void main(String[] args) {
Player player=new Player();
Computer computer=new Computer();
Judge judge =new Judge();
System.out.println("**************");
System.out.println(" 游戏,剪刀石头布");
System.out.println(" 作者:张三");
System.out.println("**************");
System.out.println("欢迎进入游戏,请输入玩家的名字");
System.out.println("输入回车后,游戏开始");
Scanner scanner = new Scanner(System.in);
scanner.nextLine();
System.out.println("游戏开始.......");
player.name_setting();
computer.name_setting();
player.choice();
computer.choice();
judge.juder_winner(player,computer);
}
}