思路:建立三个类。(为简化设计过程,剪刀、石头、布在代码内部分别用1,2,3表示)
1,Computer类
用来表示电脑的姓名(即用户手动选择的对手) 和出拳,姓名是用户在可选项中选择的对手,出拳则是利用Math类的随机数Random()方法随机产生。
getName(),返回值为 用户选择的对手,并且输出。
select(),返回值为 1、2、3。分别代码剪刀、石头、布。
2, Person类
用来表示用户的姓名 和出拳 ,姓名是用户手动输入自己的姓名,出拳是手动输入剪刀、石头或布。
getName(),返回值为用户输入的怎么的名字,并且输出。
select(),返回值为1、2、3。分别代码剪刀、石头、布。
3, Morra类
用来写游戏规则和运行代码(main),本文在这里面写了5个方法。
view(),没有返回值,用来表示初始界面,其实可以把这块代码写在start()里面,但是为了看代码方便把它单独拿出来作为一个方法了。
start(),没有返回值,用来表示每局的过程。
processContinue(),没有返回值,用来表示每局游戏结束之后是否继续下一局。
processEnd(),没有返回值,用来表示游戏结束时游戏的最终结果,打印输出。
result(),没有返回值,用来计算每局的结果并输出。
以下为实际运行代码:
Computer 类(Computer.java)
package day12_review;
import java.util.Scanner;
public class Computer {
String name;
int score;
public String getName() {
System.out.println("选择你的对手:");
System.out.println("1,张文迪"
+ "\n2,钟添盛"
+ "\n3,曹培");
Scanner can=new Scanner(System.in);
String a=can.next();
switch(a){
case "1":
System.out.println("你的对手是张文迪!");
name="张文迪";
break;
case "2":
name="钟添盛";
System.out.println("你的对手是钟添盛!");
break;
case "3":
name="曹培";
System.out.println("你的对手是曹培!");
break;
default :
System.out.println("输入错误,请重新选择:");
getName();
}
return name;
}
/* 1,剪刀
* 2,石头
* 3,布
*/
public int select() {
int a=(int)(Math.random()*3)+1;
if(a==1){
System.out.println("电脑出剪刀!");
return 1;
}
if(a==2){
System.out.println("电脑出石头!");
return 2;
}
if(a==3){
System.out.println("电脑出布!");
return 3;
}
return 0;
}
}
Person 类(Person.java)
package day12_review;
import java.util.Scanner;
public class Person {
String name;
int score;
int winCount ;
int closeCount;
int drawCount;
/* 1,剪刀
* 2,石头
* 3,布
*/
public String getName() {
System.out.println("输入你的名字:");
Scanner can=new Scanner(System.in);
name=can.next();
return name;
}
public int select() {
while(true){
Scanner can=new Scanner(System.in);
String s=can.next();
if(s.equals("剪刀")){
System.out.println("你出了剪刀!");
return 1;
}
else if(s.equals("石头")){
System.out.println("你出了石头!");
return 2;
}
else if(s.equals("布")){
System.out.println("你出了布!");
return 3;
}
else{
System.out.println("别闹,好好出拳→_→");
System.out.println("请重新输入:");
}
}
}
}
Morra类(Morra.java)
package day12_review;
import java.util.Scanner;
public class Morra {
Person p=new Person();
Computer c=new Computer();
int count ;
public static void main(String[] args) {
Morra m=new Morra();
m.start();
}
// 初始界面
private void view() {
System.out.println("**********************");
System.out.println(" *******猜拳游戏*******");
System.out.println(" *******开始********");
}
// 运行
private void start() {
view();
c.name=c.getName();
p.name=p.getName();
System.out.println(p.name+" VS "+c.name);
while(true){
System.out.println("要开始吗?(y/n)");
System.out.println("*********************");
Scanner can=new Scanner(System.in);
String s=can.next();
if(s.equalsIgnoreCase("y")){
System.out.println("请出拳:(剪刀,石头,布)");
int a=p.select();//用户出拳
int a2=c.select();//电脑出拳
result(a,a2);
processContinue();
break;
}
else if(s.equalsIgnoreCase("n")){
System.out.println("拒绝开始,已退出!");
break;
}
else{
System.out.println("选择错误!请重新选择!");
}
}
}
// 判断游戏是否继续
private void processContinue() {
System.out.println("是否开始下一局:(y/n)");
Scanner can=new Scanner(System.in);
String s=can.next();
if(s.equalsIgnoreCase("y")){
System.out.println("请出拳:(剪刀,石头,布)");
int a1=p.select();//用户出拳
int a2=c.select();//电脑出拳
result(a1,a2);
processContinue();
}
else if(s.equalsIgnoreCase("n")){
processEnd();
}
else{
System.out.println("输入错误,请重新输入:");
processContinue();
}
}
// 游戏结束,输出游戏结果
private void processEnd() {
System.out.println("\n已退出!游戏结果如下:");
System.out.println("*********************");
System.out.println(p.name +" VS "+c.name);
System.out.println("*********************");
System.out.println("挑战次数:"+count);
System.out.println("胜局:"+p.winCount);
System.out.println("输局:"+p.closeCount);
System.out.println("平局:"+p.drawCount);
System.out.println("*********************");
System.out.println("姓名\t分数");
System.out.println(p.name +"\t"+p.score);
System.out.println(c.name +"\t"+c.score);
System.out.println("*********************");
if(p.score>c.score)
System.out.println("你赢了!这么六么?");
else if(p.score<c.score)
System.out.println("你输了!呵呵~");
else
System.out.println("你跟电脑平局!so so 啦~");
}
// 判断输赢,并对输赢平局数和总对局数进行处理
private void result(int a1, int a2) {
if(a1==a2){
System.out.println("这一局是平局!均不计分!");
count++;
p.drawCount++;
}
if((a1==1 && a2==2) ||
(a1==2 && a2==3) ||
(a1==3 && a2==1)){
System.out.println("这一局电脑胜利,记一分!");
c.score++;
count++;
p.closeCount++;
}
if((a1==1 && a2==3) ||
(a1==2 && a2==1) ||
(a1==3 && a2==2)){
System.out.println("这一局你胜利了,记一分!");
p.score++;
count++;
p.winCount++;
}
}
}
每个类都被我放在了day12_review包里面,所以代码最上面有一行代码 package day12_review;
以下为运行结果截图:
1,初始界面
2,中间结果
3,游戏结束