石头剪刀布游戏控制台版(RockPaperScissorsConsole)
案例简介
石头剪刀布游戏:玩家可以在控制台输入代表石头、剪刀、布的数字,游戏会随机生成一个手势并和玩家输入的手势比较,根据比较结果增加或减少玩家的金钱数量。
案例使用建议
- 讲解:通过讲解演示此案例的实现过程教授学生综合应用JAVA程序设计基础知识和技能。此使用方式需要教师将实现步骤与逻辑梳理清楚,并且能在讲解过程中突出涉及到的知识点与技能点,最好在讲解的最后对涉及的知识点与技能点进行总结归纳。建议采用此方式的过程中尽量多提案例相关知识点相关的问题,以便学生可以参与课堂,帮助学生回想相关知识点与技能点。
- 分析:通过讲解演示如何分析设计此案例的实现方案帮助学生学习如何设计程序。此使用方式需要教师提前梳理清楚开发人员分析设计程序的过程并将其设计为授课过程,在讲解过程中应循循善诱、多提问,引导学生自己思考设计出程序的实现方案。
- 填补:通过删除部分代码让学生补全的方式考察学生对JAVA程序设计基础知识与技能的掌握情况,同时给予学生练习JAVA程序设计基础知识与技能的机会。如果删除很少的代码,题型可以是程序阅读填空题。如果删除的代码为逻辑完整的整块代码,则可以考察学生对代码整体的理解和锻炼学生自主设计微型程序的能力。教师还可以通过添加注释的方式帮助学生完成任务。如:删除案例中判断输赢方法中的所有代码并添加注释说明后让学生完成。
- 扩展:通过布置扩展任务为学生提供练习JAVA程序设计基础知识与技能的机会。如:让学生思考是否有更好的方法用来判断玩家和电脑的输赢。
涉及知识点与技能点
- 包的导入;
- 类的定义与使用;
- 属性的定义与使用;
- 数组的定义与使用;
- 构造方法的定义;
- 成员方法的定义与调用;
-
Scanner
的使用:实例化、从标准输入读取内容、关闭; - 变量声明与赋值;
- 字符串使用:声明、初始化、拼接、相等比较;
- 基本数据类型使用;
- 随机数生成;
- 基本运算符的使用:算数运算符、逻辑运算符、比较运算符;
- 表达式的使用;
-
if
条件语句; -
do-while
循环; -
while
循环; -
continue
以及break
语句的使用; - 标准输出使用;
import java.util.Scanner;
public class RockPaperScissors{
/* 石头剪刀布游戏控制台版。
* 第一次出手势 可以免费获取 500 币子,
* 之后每次 赢得电脑 会获取 60 币子,
* 平局 扣除 10 币子,输一局 扣除50币子,
* 币子小于0或大于1000自动结束游戏,或手动输入8结束游戏。
*/
String hand[] = {"","剪刀","石头","布"}; //方便对照石头剪刀布点数
int theMoney;
public RockPaperScissors(){
theMoney = 500;
System.out.println("1代表剪刀;2代表石头;3代表布!4代表不想玩儿了!");
System.out.println("送你"+theMoney+" 金币 ,看你能赢多少,或者几局输光!哈哈哈!!");
}
//判断用户和电脑的输赢并对操作相应分数
public void winJudge(int player, int computer){
if (computer == player) {
theMoney -= 10;
System.out.println("平局:金币-10 当前金币:"+theMoney);
} else if ((computer == 1 && player == 3) || (computer == 3 && player == 1)) {//出现1>3场景,即剪刀>布
if (computer == 1) {
theMoney -= 50;
System.out.println("电脑赢!它是: "+hand[computer]+" 金币-50 当前金币:"+theMoney);
} else if (player == 1) {
theMoney += 60;
System.out.println("你赢了!它是: "+hand[computer]+" 金币+60 当前金币:"+theMoney);
}
}
else {
if (computer > player) {//除去特例1>3,其它情况正常比较数值
theMoney -= 50;
System.out.println("电脑赢,ta是:"+hand[computer]+" 金币-50 当前金币:"+theMoney);
} else {
theMoney += 60;
System.out.println("你赢了,ta是:"+hand[computer]+" 金币+60 当前金币:"+theMoney);
}
}
}
//根据剩余分数判断用户得分情况
public void scores(){
if (theMoney == 500)
System.out.println("不赚不亏,账户余额:"+theMoney+"金币");
else if (theMoney<500)
System.out.println("您亏啦!账户余额:"+theMoney+"金币");
else
System.out.println("恭喜你赚翻啦!账户余额:"+theMoney+"金币");
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String playAgain = "";
do{
RockPaperScissors rps = new RockPaperScissors();
do {
int guess;
int computer;
System.out.print("请出拳:");
//try对合法性检测
try{
guess = Integer.parseInt(input.next());
}catch (NumberFormatException e){
System.out.println("输入不合法,请重试!"+1+"代表剪刀"+2+"代表石头"+3+"代表布");
continue;
}
if(guess == 4){
break;
}
//限制输入为1,2,3
if (guess < 1 || guess > 3){
System.out.println("输入不合法,请重试!"+1+"代表剪刀"+2+"代表石头"+3+"代表布");
continue;
}
computer = (int) (1 + Math.random() * 3);
rps.winJudge(guess, computer);
}while (rps.theMoney<1000 && rps.theMoney>0); //分数小于0或大于1000时结束游戏
rps.scores();//根据剩余分数判断
System.out.println("再玩一次(y/n)?");
playAgain = input.next();
}while(playAgain.equalsIgnoreCase("y"));
input.close();
}
}