第十三章 指导学习:人机猜拳
一、难点突破
1 知识梳理
二、综合练习
1 阶段1:练习——分析业务,创建用户类
1.1 需求说明
分析业务,抽象出类、类的特征和行为
创建用户类
![](/assets/blank.gif)
1.2 分析
![](/assets/blank.gif)
![](/assets/blank.gif)
1.3 代码
- 创建用户:定义用户类Person,定义类的属性(name、score)和类的方法(showFirst())
/**
*
* @author wangshaohua
*
*/
public class Person {
String name = "匿名"; // 名字
int score = 0; // 积分
/**
* 出拳
*
* @return 出拳结果:1.剪刀 2.石头 3.布
*/
public int showFist() {
// 接收用户的选择
Scanner input = new Scanner(System.in);
System.out.print("\n请出拳:1.剪刀 2.石头 3.布 (输入相应数字) :");
int show = input.nextInt();
// 输出出拳结果,并返回
switch (show) {
case 1:
System.out.println("你出拳: 剪刀");
break;
case 2:
System.out.println("你出拳: 石头");
break;
case 3:
System.out.println("你出拳: 布");
break;
}
return show;
}
}
- 测试用户出拳
/**
* 人机互动版猜拳游戏
* 阶段1:测试用户出拳
*
*/
public class TestPerson {
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.showFist());
}
}
2 阶段2:练习——创建计算机类
2.1 需求说明
![](/assets/blank.gif)
2.2 分析
2.3 代码
- 计算机类
/**
* 计算机类
* 阶段2完成
*/
public class Computer {
String name = "电脑"; // 名字
int score = 0;; // 积分
/**
* 出拳
* @return 出拳结果:1.剪刀 2.石头 3.布
*/
public int showFist(){
// 产生随机数
int show = (int)(Math.random()*10)%3 + 1; //产生随机数,表示电脑出拳
// 输出出拳结果并返回
switch(show){
case 1:
System.out.println(name+"出拳: 剪刀");
break;
case 2:
System.out.println(name+"出拳: 石头");
break;
case 3:
System.out.println(name+"出拳: 布");
break;
}
return show;
}
}
- 测试计算机类
/**
* 人机互动版猜拳游戏
* 阶段2:测试电脑出拳
*/
public class TestComputer {
public static void main(String[] args) {
Computer computer = new Computer();
System.out.println(computer.showFist());
}
}
3 阶段3 练习——创建游戏类,选择对战对手
3.1 需求说明
- 创建游戏类Game
- 编写游戏类的初始化方法initial()
- 编写游戏类的开始游戏方法startGame()
3.2 分析
3.3 代码
- 游戏类
/**
* 游戏类
*/
public class Game1 {
Person person; //甲方
Computer computer; //乙方
int count; //对战次数
/**
* 初始化
*/
public void initial(){
person = new Person();
computer = new Computer();
count = 0;
}
/**
* 开始游戏
*/
public void startGame() {
initial();
System.out.println("----------------欢 迎 进 入 游 戏 世 界----------------\n");
System.out.println("\n\t\t******************");
System.out.println ("\t\t** 猜拳, 开始 **");
System.out.println ("\t\t******************");
System.out.println("\n\n出拳规则:1.剪刀 2.石头 3.布");
/*选择对方角色*/
System.out.print("请选择对方角色(1:刘备 2:孙权 3:曹操): ");
Scanner input = new Scanner(System.in);
int role = input.nextInt();
if(role == 1){
computer.name = "刘备";
}else if(role == 2){
computer.name = "孙权";
}else if(role == 3){
computer.name = "曹操";
}
System.out.print("你选择了"+computer.name+"对战");
}
}
- 测试开始游戏:选择对战角色
/**
* 人机互动版猜拳游戏
* 阶段3:测试开始游戏:选择对战角色
*/
public class TestGame1 {
public static void main(String[] args) {
Game1 game = new Game1();
game.startGame();
}
}
4 阶段4:练习——实现一局对战
4.1 需求说明
分别调用用户类和计算机类的出拳方法showFist(),接受返回值并比较,给出胜负结果
![](/assets/blank.gif)
4.2 分析
4.3 代码
- 实现一局对战
/**
* 游戏类
* 阶段4:实现一局对战
*/
public class Game2 {
Person person; //甲方
Computer computer; //乙方
int count; //对战次数
/**
* 初始化
*/
public void initial(){
person = new Person();
computer = new Computer();
count = 0;
}
/**
* 开始游戏
*/
public void startGame() {
initial(); // 初始化
System.out.println("----------------欢 迎 进 入 游 戏 世 界----------------\n");
System.out.println("\n\t\t******************");
System.out.println ("\t\t** 猜拳, 开始 **");
System.out.println ("\t\t******************");
System.out.println("\n\n出拳规则:1.剪刀 2.石头 3.布");
/*选择对方角色*/
System.out.print("请选择对方角色(1:刘备 2:孙权 3:曹操): ");
Scanner input = new Scanner(System.in);
int role = input.nextInt();
if(role == 1){
computer.name = "刘备";
}else if(role == 2){
computer.name = "孙权";
}else if(role == 3){
computer.name = "曹操";
}
System.out.println("你选择了 "+computer.name+"对战");
/*开始游戏*/
System.out.print("\n要开始吗?(y/n) ");
String con = input.next();
int perFist; //用户出的拳
int compFist; //计算机出的拳
if(con.equals("y")){
/*出拳*/
perFist = person.showFist();
compFist = computer.showFist();
/*裁决*/
if((perFist == 1 && compFist == 1) || (perFist == 2 && compFist == 2) || (perFist == 3 && compFist == 3)){
System.out.println("结果:和局,真衰!\n"); //平局
}else if((perFist == 1 && compFist == 3) || (perFist == 2 && compFist == 1) || (perFist == 3 && compFist == 2)){
System.out.println("结果: 恭喜, 你赢了!"); //用户赢
}else{
System.out.println("结果说:^_^,你输了,真笨!\n"); //计算机赢
}
}
}
}
- 测试开始游戏:实现1局对战
/**
* 人机互动版猜拳游戏
* 阶段4:测试开始游戏:实现1局对战
*/
public class TestGame2 {
public static void main(String[] args) {
Game2 game = new Game2();
game.startGame();
}
}
5 阶段5:练习——实现循环对战,并累计得分
5.1 需求说明
实现循环对战,
![](/assets/blank.gif)
5.2 分析
5.3 代码
- 实现循环对战
/**
* 游戏类
* 阶段5:实现循环对战
*
*/
public class Game3 {
Person person; //甲方
Computer computer; //乙方
int count; //对战次数
/**
* 初始化
*/
public void initial(){
person = new Person();
computer = new Computer();
count = 0;
}
/**
* 开始游戏
*/
public void startGame() {
initial(); // 初始化
System.out.println("----------------欢 迎 进 入 游 戏 世 界----------------\n");
System.out.println("\n\t\t******************");
System.out.println ("\t\t** 猜拳, 开始 **");
System.out.println ("\t\t******************");
System.out.println("\n\n出拳规则:1.剪刀 2.石头 3.布");
/*选择对方角色*/
System.out.print("请选择对方角色(1:刘备 2:孙权 3:曹操): ");
Scanner input = new Scanner(System.in);
int role = input.nextInt();
if(role == 1){
computer.name = "刘备";
}else if(role == 2){
computer.name = "孙权";
}else if(role == 3){
computer.name = "曹操";
}
System.out.println("你选择了 "+computer.name+"对战");
/*开始游戏*/
System.out.print("\n要开始吗?(y/n) ");
String con = input.next();
int perFist; //用户出的拳
int compFist; //计算机出的拳
while(con.equals("y")){
/*出拳*/
perFist = person.showFist();
compFist = computer.showFist();
/*裁决*/
if((perFist == 1 && compFist == 1) || (perFist == 2 && compFist == 2) || (perFist == 3 && compFist == 3)){
System.out.println("结果:和局,真衰!嘿嘿,等着瞧吧 !\n"); //平局
}else if((perFist == 1 && compFist == 3) || (perFist == 2 && compFist == 1) || (perFist == 3 && compFist == 2)){
System.out.println("结果: 恭喜, 你赢了!"); //用户赢
person.score++;
}else{
System.out.println("结果说:^_^,你输了,真笨!\n"); //计算机赢
computer.score++;
}
count++;
System.out.print("\n是否开始下一轮(y/n): ");
con = input.next();
}
}
}
- 测试循环对战
public class TestGame3 {
public static void main(String[] args) {
Game3 game = new Game3();
game.startGame();
}
}
6 阶段6:练习——显示对战结果
6.1 需求说明
游戏结束后,显示对战结果
6.2 分析
6.3 代码
- 实现对战结果显示
/**
* 游戏类
* 阶段6:实现对战结果显示
*/
public class Game4 {
Person person; //甲方
Computer computer; //乙方
int count; //对战次数
/**
* 初始化
*/
public void initial(){
person = new Person();
computer = new Computer();
count = 0;
}
/**
* 开始游戏
*/
public void startGame() {
initial(); // 初始化
System.out.println("----------------欢 迎 进 入 游 戏 世 界----------------\n");
System.out.println("\n\t\t******************");
System.out.println ("\t\t** 猜拳, 开始 **");
System.out.println ("\t\t******************");
System.out.println("\n\n出拳规则:1.剪刀 2.石头 3.布");
/*选择对方角色*/
System.out.print("请选择对方角色(1:刘备 2:孙权 3:曹操): ");
Scanner input = new Scanner(System.in);
int role = input.nextInt();
if(role == 1){
computer.name = "刘备";
}else if(role == 2){
computer.name = "孙权";
}else if(role == 3){
computer.name = "曹操";
}
System.out.println("你选择了 "+computer.name+"对战");
System.out.print("\n要开始吗?(y/n) ");
String con = input.next();
int perFist; //用户出的拳
int compFist; //计算机出的拳
while(con.equals("y")){
/*出拳*/
perFist = person.showFist();
compFist = computer.showFist();
/*裁决*/
if((perFist == 1 && compFist == 1) || (perFist == 2 && compFist == 2) || (perFist == 3 && compFist == 3)){
System.out.println("结果:和局,真衰!嘿嘿,等着瞧吧 !\n"); //平局
}else if((perFist == 1 && compFist == 3) || (perFist == 2 && compFist == 1) || (perFist == 3 && compFist == 2)){
System.out.println("结果: 恭喜, 你赢了!"); //用户赢
person.score++;
}else{
System.out.println("结果说:^_^,你输了,真笨!\n"); //计算机赢
computer.score++;
}
count++;
System.out.print("\n是否开始下一轮(y/n): ");
con = input.next();
}
/*显示结果*/
showResult();
}
/**
* 显示比赛结果
*/
public void showResult(){
/*显示最后结果*/
System.out.println("---------------------------------------------------");
System.out.println(computer.name + " VS " + person.name);
System.out.println("对战次数:"+ count);
int result = calcResult();
if(result == 1){
System.out.println("结果:打成平手,下次再和你一分高下!");
}else if(result == 2){
System.out.println("结果:恭喜恭喜!"); //用户获胜
}else{
System.out.println("结果:呵呵,笨笨,下次加油啊!"); //计算机获胜
}
System.out.println("---------------------------------------------------");
}
/**
* 计算比赛结果
* @return 1:战平;2:用户赢;3:电脑赢
*/
public int calcResult(){
if(person.score == computer.score){
return 1; // 战平
}else if(person.score > computer.score){
return 2; // 用户赢
}else{
return 3; // 电脑赢
}
}
}
- 测试
public class TestGame4 {
/**
* 人机互动版猜拳游戏
*/
public static void main(String[] args) {
Game4 game = new Game4();
game.initial();
game.startGame();
}
}
7 阶段7:练习——完善游戏类的startGame()
7.1 需求说明
输入并保存用户姓名,游戏结束后显示双方的各自得分
7.2 分析
7.3 代码
- 功能扩展
public class Game {
Person person; //甲方
Computer computer; //乙方
int count; //对战次数
/**
* 初始化
*/
public void initial(){
person = new Person();
computer = new Computer();
count = 0;
}
/**
* 开始游戏
*/
public void startGame() {
System.out.println("----------------欢 迎 进 入 游 戏 世 界----------------");
System.out.println("\n\t\t******************");
System.out.println ("\t\t** 猜拳, 开始 **");
System.out.println ("\t\t******************");
System.out.println("\n出拳规则:1.剪刀 2.石头 3.布");
Scanner input = new Scanner(System.in);
String exit = "n"; // 退出系统
do{
initial(); // 初始化
/*选择对方角色*/
System.out.print("请选择对方角色(1:刘备 2:孙权 3:曹操): ");
int role = input.nextInt();
if(role == 1){
computer.name = "刘备";
}else if(role == 2){
computer.name = "孙权";
}else if(role == 3){
computer.name = "曹操";
}
// 扩展功能1:输入用户姓名
/*输入用户姓名*/
System.out.print("请输入你的姓名:");
person.name = input.next();
System.out.println(person.name+" VS "+computer.name+" 对战\n");
// 扩展功能1结束
System.out.print("要开始吗?(y/n) ");
String start = input.next(); // 开始每一局游戏
int perFist; //用户出的拳
int compFist; //计算机出的拳
while(start.equals("y")){
/*出拳*/
perFist = person.showFist();
compFist = computer.showFist();
/*裁决*/
if((perFist == 1 && compFist == 1) || (perFist == 2 && compFist == 2) || (perFist == 3 && compFist == 3)){
System.out.println("结果:和局,真衰!嘿嘿,等着瞧吧 !\n"); //平局
}else if((perFist == 1 && compFist == 3) || (perFist == 2 && compFist == 1) || (perFist == 3 && compFist == 2)){
System.out.println("结果: 恭喜, 你赢了!"); //用户赢
person.score++;
}else{
System.out.println("结果说:^_^,你输了,真笨!\n"); //计算机赢
computer.score++;
}
count++;
System.out.print("\n是否开始下一轮(y/n): ");
start = input.next();
}
/*显示结果*/
showResult();
// 扩展功能3:循环游戏,直到退出系统
System.out.print("\n要开始下一局吗?(y/n):");
exit = input.next();
System.out.println();
// 扩展功能3结束
}while(!exit.equals("n"));
System.out.println("系统退出!");
}
/**
* 显示比赛结果
*/
public void showResult(){
/*显示对战次数*/
System.out.println("---------------------------------------------------");
System.out.println(computer.name + " VS " + person.name);
System.out.println("对战次数:"+ count);
// 扩展功能2:显示最终的得分
System.out.println("\n姓名\t得分");
System.out.println(person.name+"\t"+person.score);
System.out.println(computer.name+"\t"+computer.score+"\n");
// 扩展功能2结束
/*显示对战结果*/
int result = calcResult();
if(result == 1){
System.out.println("结果:打成平手,下次再和你一分高下!");
}else if(result == 2){
System.out.println("结果:恭喜恭喜!"); //用户获胜
}else{
System.out.println("结果:呵呵,笨笨,下次加油啊!"); //计算机获胜
}
System.out.println("---------------------------------------------------");
}
/**
* 计算比赛结果
* @return 1:战平;2:用户赢;3:电脑赢
*/
public int calcResult(){
if(person.score == computer.score){
return 1; // 战平
}else if(person.score > computer.score){
return 2; // 用户赢
}else{
return 3; // 电脑赢
}
}
}
/**
* 人机互动版猜拳游戏
* 程序入口
*/
public class StartGuess {
public static void main(String[] args) {
Game game = new Game();
game.startGame();
}
}
三、总结
- 类和对象的关系是抽象和具体的关系
- 使用类的步骤如下
- (1)定义类:使用关键字class。
- (2)创建类的对象:使用关键字new。
- (3)使用类的属性和方法:使用“.”操作符。
- 定义类的方法包括三个部分
- (1)方法的名称
- (2)方法返回值的类型
- (3)方法的主体
- 类的方法调用,使用如下两种形式。
- (1)同一个类中的方法,直接使用方法名
- (2)不同类的方法,先创建对象,再使用“对象名.方法名”
- 在Java中,有成员变量和局部变量,它们的作用域各不相同
关注我们
![](/assets/blank.gif)
捐赠我们
良师益友工作室一直在致力于帮助编程爱好更加快速方便地学习编程,如果您对我们的成果表示认同并且觉得对你有所帮助,欢迎您对我们捐赠^_^。
![](/assets/blank.gif)
转载于:https://www.cnblogs.com/imentors/p/4729909.html
第十三章 指导学习:人机猜拳相关推荐
- 《游戏设计艺术(第二版)》第十三章个人学习
第十三章 游戏机制必须平衡 "平衡游戏就像创造一种新菜谱,确定需要哪些原料是一件事,但决定每种用多少.怎么组合.又是另一件事了" 十二种最常见的游戏平衡 平衡类型1:公平 &quo ...
- Java OOP 第五章 指导学习
Java OOP 5 特种部队 文章目录 Java OOP 5 特种部队 一.内容回顾 二.难点突破 三.知识梳理--类和对象 四.知识梳理--继承 五.知识梳理--多态 六.知识梳理--抽象类 七. ...
- 大一新生的c++ pp 第十三章基础学习笔记:继承
目录 1.总的领起: 2.派生类的注意点(公有继承): 2.1.为派生类写构造函数(必须): 2.2.派生类与基类的数据类型关系 3.公有继承: 4.虚方法(关键字:virtual) 5.函数联编 6 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十三章:计算着色器(The Compute Shader)...
Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十三章:计算着色器(The Compute Shader) 原文: Int ...
- 《构建之法》第十三章学习总结
第十三章的内容是关于各种测试方法和测试的设计方法. 一个软件开发团队统一思想首先要从基本名词解释开始,第一节为我们解释了一些基本名词并进行分类(例:Bug是指软件的缺陷,可以分解为症状(Symptom ...
- 【正点原子STM32连载】第五十三章 DSP测试实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...
- PMP备考指南之第十三章:项目干系人管理
求关注 项目干系人管理 第十三章 项目干系人管理 了解干系人的需要和期望.解决实际发生的问题.管理利益冲突.促进干系人合理参与项目决策和活动.PM 正确识别并合理管理干系人的能力,能决定项目的成败. ...
- 第二十三章 案例分析
第二十三章 案例分析 一.可行×××问题 1.主要内容 技术可行性分析.经济可行性分析.运行环境可行性分析. 其他方面可行性分析,如法律.社会道德. 2.可能产生的原因 没有进行系统的可行性分析.调研 ...
- 人机猜拳(这是最近的一个总结)
人机猜拳是我自己原创的一段代码,我刚学完do-while,知识有限,但自己感觉写的这段代码是我的一个小巅峰,发出来让大家看看,新手能学到东西的话是极好的,然后更多的是想让一些老鸟给点建议.这个写代码很 ...
最新文章
- 绿色版NVM安装与配置详细说明
- 一键控制全屋设备,AI交互时代来临
- android 九宫格封装,Android 九宫格的实现方法
- mysql user_tab_cols_最新Oracle 和 mysql 的对比参照----开发篇(转)
- Spring MVC页面重定向
- Python+Selenium练习篇之2-利用ID定位元素
- 第9章 SportsStorePeta 完成购物车
- html颜色代码生成器,在线取色配色工具,CSS3渐变色代码生成器-易玩稀有
- 新媒体营销渠道大盘点
- 斯特林数 java实现_关于斯特林数
- JNA 中 String 转 Pointer
- tensorflow-serving源码阅读1
- oracle磁带的使用期限,存储的损耗 关于磁带寿命的一些探讨
- (转载)常见的差分(动)阻抗计算模型(CITS25 软件)
- 计算机操作系统原理--Linux实例分析
- 动态规划法(四)0-1背包问题(0-1 Knapsack Problem)
- 室内装饰培训 地面装饰要注意什么
- 保重/千万保重!英语怎么说?
- excel如何快速制作柱状图
- 利用requests库获取cookies的方式