题目:用面向对象编程的思想,设计一个猜拳游戏,完成人机猜拳互动游戏的开发。
题目要求:
1)选取对战角色
2)猜拳
3)记录分数
基本思想:
1)创建一个Npc1类,类中有设定人物的编号属性,人物属性,分数属性。
2)创建一个Player1类,类中有玩家人名属性,玩家分数属性,
3)创建一个content方法,输入相应的拳的序号,返回相应的拳;
4)创建一个checked方法,将电脑随机产生的序号和我们从键盘呢输入的序号作比较,判断输赢,返回结果;
5)调用checked方法,将返回值在switch里面分别作比较,输出相应的结果;
各部分主要代码:
Npc1类代码:
class Npc1 {
int number;//Npc1的编号
String name;//Npc1的名字
int score;//记录Npc1的分数
public Npc1(){
}
public int getNumber() {
return number;//调用此方法获取Npc编号
}
public void setNumber(int number) {
this.number = number;//给Npc设置编号
}
public String getName() {
return name;//调用此方法获取选手选择电脑的随机人物名
}
public void setName(String name) {
this.name = name;//给Npc名字赋值
}
public int getScore() {
return score;//调用此方法获取目前得分
}
public void addScore() {
this.score++;//调用此方法,电脑分数加1
}
public int ran(){//调用此方法可以获取电脑随机出的什么拳
Random random=new Random();
int number=(random.nextInt(3)+1);//随机产生(1、2、3)三个数字
return number;//返回随机产生的数字
}
}
Player1类:
class Player1 {
String name;//选手的名字
int score;//选手的分数
public Player1(){//无参构造方法
}
public Player1(String name,int score){//这是有参构造方法
this.name=name;
this.score=score;
}
public String getName() {
return name;//调用此方法获取选手的名字
}
public void setName(String name) {
this.name = name;//调用此方法给选手名字赋值
}
public int getScore() {
return score;//调用此方法获取选手目前得分
}
public void addScore() {
this.score++;//调用此方法,选手分数就加1
}
public int guess(){//调用此方法可以获取选手要出什么拳
Scanner scanner=new Scanner(System.in);
int number=scanner.nextInt();//选手从键盘获取要出的拳的对应的数字
return number;//返回从键盘输入的数字
}
}
content方法:
public static String content(int num){
switch (num){
case 1:return "剪刀";
case 2:return "石头";
case 3:return "布";
}
return null;
}
checked方法:
//规定0表示平局 1表示npc赢了 2表示玩家赢了
public static int checked(int random,int guess){
switch(random){
case 1:
switch(guess){
case 1:return 0;
case 2:return 2;
case 3:return 1;
}
case 2:
switch(guess){
case 1:return 1;
case 2:return 0;
case 3:return 2;
}
case 3:
switch (guess){
case 1:return 2;
case 2:return 1;
case 3:return 0;
}
}
return -1;
}
全部代码:
package homework09.homework0901;
import java.util.Random;
import java.util.Scanner;
//猜拳小游戏
public class Demo01 {
public static void main(String[] args) {
System.out.println("*************************************");
System.out.println("**************猜拳,开始***************");
System.out.println("*************************************");
System.out.println("出拳规则:1、剪刀 2、石头 3、布");
System.out.println("请选择对方角色:(1、孙膑 2、孙权 3、孙尚香)");
Npc1 npc1=new Npc1();//实例化对象
Player1 player1=new Player1();
Scanner scanner = new Scanner(System.in);
int number=scanner.nextInt();//从键盘输入一个数字,对应一个电脑人物
switch(number){
case 1:
npc1.setNumber(1);
npc1.setName("孙膑");
break;
case 2:
npc1.setNumber(2);
npc1.setName("孙权");
break;
case 3:
npc1.setNumber(3);
npc1.setName("孙尚香");
break;
}
System.out.println("请输入你的名字:");
String name=scanner.next();//从键盘输入一个名字
player1.setName(name);//把名字值传递给setName方法,方便后期调用
System.out.println(player1.getName()+" VS "+npc1.getName()+" 对战 ");
System.out.println("要开始吗?(y/n)");//对局提示
int count=0;//统计对战局数
while(true){
String str=scanner.next();//从键盘输入一个字符
if(str.equals("y")) {//判断字符是否等于y
count++;//对局次数加1
System.out.println("请出拳:1、剪刀 2、石头 3、布(输入相应的数字)");
int guess= player1.guess();
System.out.println("你出拳为:"+content(guess));
int ran=npc1.ran();
System.out.println(npc1.getName()+"出拳为:"+content(ran));
int result=checked(ran,guess);
switch (result){
case 0:
break;
case 1:
npc1.addScore();
System.out.println("你输了,真是太笨了");
break;
case 2:
player1.addScore();
System.out.println("你赢了,真棒!");
break;
}
System.out.println("是否要开始下一轮?(y/n)");
}else{
System.out.println("--------------------------------------");
System.out.println(player1.getName()+" VS "+npc1.getName());
System.out.println("对战次数:"+count);
System.out.println();
System.out.println("姓名"+"\t\t\t"+"得分");
System.out.println(player1.getName()+"\t\t\t"+player1.getScore());
System.out.println(npc1.getName()+"\t\t\t"+npc1.getScore());
if(player1.getScore()<npc1.getScore()){
System.out.println("结果:呵呵,笨笨,下次加油啊!");
}else if(player1.getScore()==npc1.getScore()){
System.out.println("结果:你和"+npc1.getName()+"平局");
}
else{
System.out.println("结果:恭喜你真棒!");
}
break;
}
}
}
//规定0表示平局 1表示npc赢了 2表示玩家赢了
public static int checked(int random,int guess){
switch(random){
case 1:
switch(guess){
case 1:return 0;
case 2:return 2;
case 3:return 1;
}
case 2:
switch(guess){
case 1:return 1;
case 2:return 0;
case 3:return 2;
}
case 3:
switch (guess){
case 1:return 2;
case 2:return 1;
case 3:return 0;
}
}
return -1;
}
public static String content(int num){
switch (num){
case 1:return "剪刀";
case 2:return "石头";
case 3:return "布";
}
return null;
}
}
class Npc1 {
int number;//Npc1的编号
String name;//Npc1的名字
int score;//记录Npc1的分数
public Npc1(){
}
public int getNumber() {
return number;//调用此方法获取Npc1编号
}
public void setNumber(int number) {
this.number = number;//给Npc1设置编号
}
public String getName() {
return name;//调用此方法获取玩家选择电脑人物的随机人物名
}
public void setName(String name) {
this.name = name;//给Npc1名字赋值
}
public int getScore() {
return score;//调用此方法获取电脑人物目前得分
}
public void addScore() {
this.score++;//调用此方法,电脑人物分数加1
}
public int ran(){//调用此方法可以获取电脑人物随机出的什么拳
Random random=new Random();
int number=(random.nextInt(3)+1);//随机产生(1、2、3)三个数字
return number;//返回随机产生的数字
}
}
class Player1 {
String name;//玩家的名字
int score;//玩家的分数
public Player1(){//无参构造方法
}
public Player1(String name,int score){//这是有参构造方法
this.name=name;
this.score=score;
}
public String getName() {
return name;//调用此方法获取玩家的名字
}
public void setName(String name) {
this.name = name;//调用此方法给玩家名字赋值
}
public int getScore() {
return score;//调用此方法获取玩家目前得分
}
public void addScore() {
this.score++;//调用此方法,玩家分数就加1
}
public int guess(){//调用此方法可以获取玩家要出什么拳
Scanner scanner=new Scanner(System.in);
int number=scanner.nextInt();//玩家从键盘获取要出的拳的对应的数字
return number;//返回从键盘输入的数字
}
}
结果展示: