我觉的初学面对对象,首先是思路很重要。我写的这个猜拳小游戏,我觉得对于我的思路有帮助,需要的可以参考下
一共四个类
1:玩家类
2:电脑类
3:游戏过程类
4:测试类
玩家类
public class Person {
// 用户类的属性
public String pname;// 姓名
public int pscore;// 积分
public void showquan(int pnum) {
switch(pnum) {
case 1:
System.out.println("你出拳为:剪刀");
break;
case 2:
System.out.println("你出拳为:石头");
break;
case 3:
System.out.println("你出拳为:布");
break;
default:
System.out.println("输入错误!");
}
}
}
电脑类
public class Computer {
public String cname;
public int cscore;
public void show(int cnum) {
switch(cnum) {
case 1:
System.out.println(cname+"出拳: 剪刀");
break;
case 2:
System.out.println(cname+"出拳: 石头");
break;
case 3:
System.out.println(cname+"出拳: 布");
break;
default:
System.out.println("输入有误,请重新输入!");
}
}
}
游戏过程类
// 导包
import java.util.Random;
import java.util.Scanner;
public class Game {
// 输入数据的实例化对象
Scanner scan=new Scanner(System.in);
// 存放电脑玩家信息的数组,数组类型为我们的Computer类
Computer[] arr=new Computer[3];
// 实例化对象Person玩家类
Person p=new Person();
// 随机数的实例化对象
Random ran=new Random();
/**
* 电脑类的初始化
* 给电脑类创建一个电脑类的数组,给其初始化
* 给其创建三个对象 赋值 给电脑类型的数组arr
*/
public void initial() {
// 需要注意的是这里是创建的三个对象,所以需要电脑类的三次实例化对象
// 第一个电脑对象为 刘备
Computer c=new Computer();
c.cname="刘备";
arr[0]=c;
// 第二个实例化对象为孙权
c=new Computer();
c.cname="孙权";
arr[1]=c;
// 第三个电脑类实例化对象为 曹操
c=new Computer();
c.cname="曹操";
arr[2]=c;
}
/**
* 游戏的开始方法
* 放置的是我们整个的流程
*/
public void startGame() {
// 调用 本类中的开始菜单
startMenu();
System.out.println("出拳规则:1.剪刀2.石头3.布");
System.out.print("请选择对方角色(1:刘备2:孙权3:曹操):");
// 选择电脑角色
int num=scan.nextInt();
// 输出选择的是哪一个对象
System.out.println("你选择了"+computerObject(num).cname+"对战");
// 提示选择是否开始
System.out.print("要开始吗?(y/n):");
String choose=scan.next();
if("n".equals(choose)) {
// 当选择为n的时候也就是程序结束的时候。
// 程序结束的时候,需要注意的是推出的这个方法
// 使用 return来退出本方法
System.out.println("程序结束,欢迎下次使用!");
return ;
}
// 因为 不一定进行几次游戏,所以使用while的死循环来进行游戏
// count 用来计数,一共进行了几轮游戏
int count=0;
while(true) {
// 调用 start的方法,一次猜拳的过程的方法
start(num);
count+=1;
// 提示是否进行下一轮
System.out.print("是否开始下一轮?(y/n):");
String choose1=scan.next();
if("n".equals(choose1)) {
// 最后选择不继续玩的时候需要输出下最后的积分,以及最后的结果
showResult(num,count);
System.out.println("111程序结束,欢迎下次使用!");
return;
}
}
}
/**
* 开始的菜单方法
*/
public void startMenu() {
// 初始 菜单界面
System.out.println("***************欢迎进入游戏世界*****************");
System.out.println();
System.out.println(" *****************");
System.out.println(" ** 猜拳,开始 **");
System.out.println(" *****************");
System.out.println();
}
/**
* 这是返回我们玩家选择 的是那个电脑对象
* @param num // 玩家选择的是那个对应电脑角色的数字
* @return // 玩家选择的是哪一个电脑对象
*/
public Computer computerObject(int num) {
// 因为是几个选择项,所以使用switch来选择
switch(num) {
case 1:
return arr[0];
case 2:
return arr[1];
case 3:
return arr[2];
default:
return null;
}
}
/**
* 一次猜拳的过程方法
* 玩家出拳以及电脑出拳,以及胜负和电脑玩家的积分
* 赢一次积一分,输或者平局都不积分
* @param num
*/
public void start(int num) {
System.out.print("请出拳:1.剪刀2.石头3.布(输入相对应的数字):");
int pnum=scan.nextInt();
//调用玩家的实例化对象 的showquan方法,输出下玩家的出拳
p.showquan(pnum);
// 电脑出拳,方式是随机1-3之间的随机数
int cnum=ran.nextInt(3)+1;
computerObject(num).show(cnum);
// 两个出拳比较
compare(num,pnum,cnum);
}
/**
* 比较玩家与电脑谁赢的方法
* 数字的对应关系:
* 1: 剪刀 2:石头 3:布
* @param num 决定电脑对象的数字
* @param pnum 玩家出拳对应的数字
* @param cnum 电脑出拳对应的数字
*/
public void compare(int num,int pnum,int cnum) {
if(pnum==cnum) {
System.out.println("结果说:和局.真衰!嘿嘿,等着瞧吧");
}else if( pnum-cnum==1 || cnum-pnum==2) {
System.out.println("结果说:恭喜恭喜,你赢了!");
//玩家获胜的时候,玩家积分增加一分
p.pscore+=1;
}else {
System.out.println("结果说:你输了,真笨");
// 电脑获胜的时候,电脑加一分
computerObject(num).cscore+=1;
}
}
/**
* 最后显示最终结果的方法
* @param num // 玩家选择电脑角色对应的数字
* @param count // 对战的次数
*/
public void showResult(int num,int count) {
System.out.print("请输入你的姓名:");
String pname=scan.next();
p.pname=pname;
System.out.println(p.pname+" VS "+computerObject(num).cname);
System.out.println("对战次数:"+count+"次");
System.out.println();
System.out.println("姓名\t得分");
System.out.println(p.pname+"\t"+p.pscore);
System.out.println(computerObject(num).cname+"\t"+computerObject(num).cscore);
if(p.pscore>computerObject(num).cscore) {
System.out.println("最后的结果:恭喜恭喜!你获胜了");
}else if(p.pscore==computerObject(num).cscore) {
System.out.println("最后的结果:可惜可惜,平局");
}else {
System.out.println("最后的结果,惜败惜败");
}
}
}
测试类Test
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 实例化对象
Game g=new Game();
// 初始化电脑类的信息
g.initial();
// 开始游戏
g.startGame();
}
}