文章目录

  • 一、 面向对象
    • 1、 三大思想(从概念上分)
    • 2、 三大特征
      • 2.1 封装
      • 2.2 继承
      • 2.3 多态
        • 对象的多态性
        • 方法的多态性
  • 二、 使用面向对象方法实现猜拳游戏
    • 1、 题目大意
    • 2、 题意分解
    • 3、 解题思路
    • 4、 代码实现
      • 机器类
      • 用户测试类
        • 接收用户输入的拳头属性对应的值
        • 将数字转换成对应的拳头属性
        • judge方法判断猜拳情况
        • main测试
    • 5、 完整代码
      • 机器类
      • 用户测试类
    • 6、 运行结果

一、 面向对象

面向对象相对于面向过程来讲,把相关的数据和方法组织为一个整体来看待
面向过程到面向对象是程序员思想上从执行者指挥者的转变

1、 三大思想(从概念上分)

OOA:面向对象分析
OOD:面向对象设计
OOP:面向对象程序

2、 三大特征

2.1 封装

全部内容对外不可见(信息隐藏,用类进行封装)

  • 特点
    对内:结构完整,可自我管理,自我平衡,高度集中
    对外:功能明确,接口单一,各种环境独立工作
  • 意义
    保护、防止代码及数据被无意中破坏
    保护成员属性,不让类意外的程序直接访问和修改
    仅对外公开访问方法,隐藏对象属性和实现细节

2.2 继承

功能继承下来继续发展,即子类继承父类非私有的方法和属性

  • tips:
    新类必须在已有类的基础上进行构造。
    单根继承,父类只有一个
    允许多重继承(a继承b,b继承c),但是不允许多继承(a继承b和c)
    每个类都有父类:Object
  • super关键字
    访问父类的构造方法、属性、方法
    调用super构造方法的代码必须放在子构造方法的第一行(自动创建父类对象)
    【区别于this关键字】
  • 重写
    参数列表、返回类型必须完全与被重写方法相同
    访问权限不能比父类中被重写的方法的访问权限更低(比如父类为public,子类不能为protected)
    父类的成员方法只能被子类重写
    static和private不能被重写,但是能再次被声明
  • 【区别于重载】
    重写与重载的区别
重写@override 重载@overload
子类父类中 一个类中
参数列表必须相同 参数列表必须不同
返回值类型必须一致 与返回值类型无关
子类访问权限必须不能小于父类的访问权限 与访问权限无关
可以减少或删除(异常范围更小,但不能抛出异常) 与异常处理无关

2.3 多态

对象的多种表现形式(多种体现形态)

对象的多态性

在类中有子类、父类之分,子类为父类的一种形态

方法的多态性

方法的多态性即相同的方法有多种形态

  • 重载:一个类中方法的多态性体现
  • 重写(继承):子类父类中方法的多态性体现

二、 使用面向对象方法实现猜拳游戏

1、 题目大意

通过控制台方式实现一个人机对战的猜拳游戏,用户通过输入(1.剪刀 2.石头 3.布),机器随机生成(1.剪刀 2.石头 3.布),胜者积分,n 局以后通过积分的多少判定胜负。

2、 题意分解

①编写机器类,以及拳头属性(此属性只有三个值:剪刀,石头,布。这里
的值可以使用数值代替)
②编写生成随机数的方法(让机器生成剪刀,石头,布的值),赋值给第一
步的拳头属性
③编写用户测试类,获取用户输入的剪头石头布的值,和随机生成的值比较
④测试中,定义变量保存胜者积分

3、 解题思路

  • 先编写机器类
    ① 定义机器类的成员变量(拳头属性、积分),将属性进行封装(private),使用get和set来获取、设置属性的值
    ②定义方法 随机生成拳头属性对应的值
    ③定义方法 将拳头属性对应的值转换为拳头属性并进行输出
  • 编写用户测试类
    ①通过输入以及循环来确定猜拳的局数
    ②定义方法 实现用户的输入
    ③定义方法 实现判断,每次输出猜拳结果
    ④猜拳结束后分别输出用户和机器的积分,判断胜负并输出

4、 代码实现

机器类

编写机器类MoraGameMachine

  • 定义无参构造方法
 public MoraGameMachine() {super();}
  • 定义拳头属性以及初始积分
 private int mora;// 拳头属性(1石头,2剪刀,3布)private int score = 0;// 机器的初始积分为0
  • 使用set和get来设置和获取拳头属性和积分值
 public int getMora() {//获取拳头属性setMora();//调用setMore方法,随机生成拳头属性return mora;}public void setMora() {//随机生成拳头属性this.mora = this.machineCreateMore();// 通过调用方法随机生成}public int getScore() {//获取机器的积分值return score;}public void setScore(int score) {//设置机器的积分值this.score = score;}
  • 随机生成拳头属性对应的值
    通过Random随机生成1、2、3三个数,分别代表石头、剪刀、布
//随机产生1、2、3三个数,分别代表石头、剪刀、布public int machineCreateMore() {Random r = new Random();int num;num = r.nextInt(3) + 1;// [1,4),即1,2,3toMore(num);//将随机生成的值转换为对应的拳头属性return num;}
  • 通过machineCreateMore随机生成的值转换成对应的拳头属性
    1、2、3三个数,分别代表石头、剪刀、布
    (为什么输出?告诉用户机器方所出的拳头属性)
 //将随机生成的值转换为对应的拳头属性并进行输出(告诉用户机器方输出的拳头属性)public void toMore(int num) {switch (num) {case 1:System.out.println("机器:我方出的是剪刀!");break;case 2:System.out.println("机器:我方出的是石头!");break;case 3:System.out.println("机器:我方出的是布!");break;}}

用户测试类

  • 定义静态属性:用户所出的拳头、用户的积分
 public static int userMoreNum;public static int userScore = 0;//用户的初始积分为0

接收用户输入的拳头属性对应的值

实现用户输入,1、2、3三个数分别代表石头、剪刀、布

 // 实现用户输入public static void userCreateMore() {do {// 通过循环确保用户输入的是有效值userMoreNum = input.nextInt();//输入if (userMoreNum < 1 || userMoreNum > 3) {//1、2、3System.out.println("输入错误,请重新输入!");} else {toMore(userMoreNum);//toMore方法将用户输入的数字转换成具体拳头的值并打印}} while (userMoreNum < 1 || userMoreNum > 3);}

将数字转换成对应的拳头属性

 // 将用户输入的数字转换成具体拳头的值public static void toMore(int userMoreNum) {switch (userMoreNum) {case 1:System.out.println("您出的是剪刀!");break;case 2:System.out.println("您出的是石头!");break;case 3:System.out.println("您出的是布!");break;}}

judge方法判断猜拳情况

判断石头剪刀布的猜拳情况,并且输出本次猜拳结果

注意:1、2、3三个数分别代表石头、剪刀、布,因此1>3,2>1,3>2

tips:石头剪刀布的输赢判断和最后分值的输赢判断不同,因此这个函数不能用作最后分数的判断

public static int judge(int userMore, int machineMore) {if (userMore == machineMore) {System.out.println("平局!不错哦!\n");return 0;// 平局} else {// user胜利,条件:1>3,2>1,3>2if ((userMore == 1 && machineMore == 3) || (userMore == 2 && machineMore == 1)|| (userMore == 3 && machineMore == 2)) {System.out.println("恭喜取得胜利!\n");return 1;}}// 不满足上述条件,则machine winSystem.out.println("很遗憾!\n");return -1;// 不满足上述条件,machine win}

main测试

  • 初始界面提示打印,并通过输入来确定猜拳的轮数
     System.out.println("============一起来玩猜拳游戏吧============");System.out.print("请问您想玩几局?");int gameTime = input.nextInt();//通过输入以及接下来的for循环来确定进行几次猜拳
  • for循环进行猜拳
     System.out.println("================游戏开始=================");for (int i = 0; i < gameTime; i++) {//猜拳的轮数System.out.print("请选择您要出的拳头属性(1.剪刀 2.石头 3.布):");userCreateMore();//定义方法,实现用户的输入//judge实现判断,用户赢返回1,平局返回0,输返回-1int judge = judge(userMoreNum, moraGameMachine.getMora());if (judge == 1) {// 用户赢userScore++;//用户积分+1} else if (judge == -1) {// 机器赢int machineScore = moraGameMachine.getScore();//先get机器的分数machineScore++;//机器积分+1moraGameMachine.setScore(machineScore);//set,更新机器的分数}}
  • 游戏结束,分别输出用户和机器的分数
     System.out.println("===============游戏结束===============");System.out.println("机器的最终得分是:" + moraGameMachine.getScore());System.out.println("您的最终得分是:" + userScore);
  • 判断分数并输出最终结果
     if (userScore > moraGameMachine.getScore()) {System.out.println("恭喜取得胜利!\n");} else if (userScore < moraGameMachine.getScore()) {System.out.println("很遗憾!下次运气会更好哦!\n");} else {System.out.println("平局!不错哦!\n");}

5、 完整代码

机器类

import java.util.Random;public class MoraGameMachine {private int mora;// 拳头属性(1石头,2剪刀,3布)private int score = 0;// 机器的初始积分为0public MoraGameMachine() {super();}public int getMora() {setMora();return mora;}public void setMora() {this.mora = this.machineCreateMore();// 通过调用方法随机生成}public int getScore() {return score;}public void setScore(int score) {this.score = score;}//随机产生1、2、3三个数,分别代表石头、剪刀、布public int machineCreateMore() {Random r = new Random();int num;num = r.nextInt(3) + 1;// [1,4),即1,2,3toMore(num);return num;}//将随机生成的值转换为对应的拳头属性并进行输出public void toMore(int num) {switch (num) {case 1:System.out.println("机器:我方出的是剪刀!");break;case 2:System.out.println("机器:我方出的是石头!");break;case 3:System.out.println("机器:我方出的是布!");break;}}}

用户测试类

import java.util.Random;
import java.util.Scanner;public class MoraGameMachineTest {public static Scanner input = new Scanner(System.in);//定义静态属性,接下来直接调用public static int userMoreNum;public static int userScore = 0;//用户的初始积分为0public static void main(String[] args) {MoraGameMachine moraGameMachine = new MoraGameMachine();System.out.println("============一起来玩猜拳游戏吧============");System.out.print("请问您想玩几局?");int gameTime = input.nextInt();//通过输入以及接下来的for循环来确定进行几次猜拳System.out.println("================游戏开始=================");for (int i = 0; i < gameTime; i++) {//猜拳的轮数System.out.print("请选择您要出的拳头属性(1.剪刀 2.石头 3.布):");userCreateMore();//定义方法,实现用户的输入//judge实现判断,用户赢返回1,平局返回0,输返回-1int judge = judge(userMoreNum, moraGameMachine.getMora());if (judge == 1) {// 用户赢userScore++;//用户积分+1} else if (judge == -1) {// 机器赢int machineScore = moraGameMachine.getScore();//先get机器的分数machineScore++;//机器积分+1moraGameMachine.setScore(machineScore);//set机器的分数}}System.out.println("===============游戏结束===============");System.out.println("机器的最终得分是:" + moraGameMachine.getScore());System.out.println("您的最终得分是:" + userScore);if (userScore > moraGameMachine.getScore()) {System.out.println("恭喜取得胜利!\n");} else if (userScore < moraGameMachine.getScore()) {System.out.println("很遗憾!下次运气会更好哦!\n");} else {System.out.println("平局!不错哦!\n");}}// 判断输赢(石头剪刀布的输赢判断和最后分值的输赢判断不同,因此这个函数不能用作最后分数的判断)public static int judge(int userMore, int machineMore) {if (userMore == machineMore) {System.out.println("平局!不错哦!\n");return 0;// 平局} else {// user胜利,条件:1>3,2>1,3>2if ((userMore == 1 && machineMore == 3) || (userMore == 2 && machineMore == 1)|| (userMore == 3 && machineMore == 2)) {System.out.println("恭喜取得胜利!\n");return 1;}}// 不满足上述条件,则machine winSystem.out.println("很遗憾!\n");return -1;// 不满足上述条件,machine win}// 实现用户输入public static void userCreateMore() {do {// 通过循环确保用户输入的是有效值userMoreNum = input.nextInt();if (userMoreNum < 1 || userMoreNum > 3) {//1、2、3System.out.println("输入错误,请重新输入!");} else {toMore(userMoreNum);//toMore方法将用户输入的数字转换成具体拳头的值并打印}} while (userMoreNum < 1 || userMoreNum > 3);}// 将用户输入的数字转换成具体拳头的值public static void toMore(int userMoreNum) {switch (userMoreNum) {case 1:System.out.println("您出的是剪刀!");break;case 2:System.out.println("您出的是石头!");break;case 3:System.out.println("您出的是布!");break;}}}

6、 运行结果

  • Demo1
  • Demo2

使用面向对象方法实现猜拳游戏(Java)相关推荐

  1. 用java写猜拳游戏,Java写人机猜拳游戏(可扩展其他游戏或其他参与者)

    初学Java,写一个控制台输入输出的小游戏,模拟人机猜拳.为了扩展性稍微强一些,这个小游戏代码有些复杂,但确实可以扩展其他游戏或者其他参与者的. 代码还有一些小问题,后面贴出来... /******* ...

  2. 与计算机玩猜拳游戏,猜拳游戏 java基础

    //用循环方式实现和计算机玩猜拳的程序 (设定胜出条件--输3次或赢3次即退出) package eduask01; import java.util.*; public class Rask03 { ...

  3. java猜拳游戏代码_猜拳游戏 - java代码库 - 云代码

    [java]代码库public class Computer { String name; int score; public int showfist(){ int quan; quan=(int) ...

  4. 【Java语言】项目实践:人机猜拳游戏(源码)(面向对象方法)

    package com.njwbhz.part0217.Mora;import java.util.Scanner;public class PersonPlayer {//属性//人类玩家的名字St ...

  5. 【JAVA面向对象练习】用户与电脑猜拳游戏

    一.需求 1.用户可自定义游戏的局数 2.用户每局可以输入石头(0),剪刀(1),布(2) 3.电脑随机从石头(0),剪刀(1),布(2)中选择一个 4.每局比赛都可以自动判断输赢,并在游戏结束后打印 ...

  6. Java学习第二十七天<面向对象综合练习><猜拳游戏>

    面向对象综合练习 找最大值 package chapter06.D10综合练习; //找最大值 public class Homework01 {public static void main(Str ...

  7. c语言猜拳游戏实训报告,Java猜拳小游戏程序设计实验报告.doc

    Java程序设计实验报告 班级: 学号: 姓名: 实验题目:猜拳小游戏 实验要求: 用java编写一个人机对战的猜拳小游戏.人选择性出拳,电脑随机出拳,判断输赢,记录输赢情况.有简单的操作界面. 实验 ...

  8. Java人机猜拳游戏(命令行版)

    这是本学期的java作业: java编写一个人机对战的猜拳小游戏.人选择性出拳,电脑随机出拳,判断输赢,记录输赢情况.有简单的操作界面. 学了一个学期的Java,感觉收获还挺多的.第一次用Java写小 ...

  9. 基于java的人机猜拳游戏

    任务描述 完成人机猜拳互动游戏的开发,用户通过控制台输入实现出拳,电脑通过程序中的随机数实现出拳,每一局结束后都要输出结果.当用户输入n时停止游戏,并输出总结果.效果如图1-1所示. 图1-1人机猜拳 ...

  10. java刘备猜拳游戏类_基于java实现人机猜拳游戏

    本文实例为大家分享了java实现人机猜拳游戏的具体代码,供大家参考,具体内容如下 完成人机猜拳互动游戏的开发,用户通过控制台输入实现出拳,电脑通过程序中的随机数实现出拳,每一局结束后都要输出结果.当用 ...

最新文章

  1. NYOJ-232 How to eat more Banana
  2. Spring boot注入配置为java静态属性
  3. Python学习笔记-模块介绍
  4. 创建AOP静态代理(上篇)
  5. 一步一步实现自己的模拟控件(5)——隐藏类
  6. 使用SAT研究IBASE hierarchy读取性能
  7. vue笔记(三)生命周期、组件(嵌套)、数据传递
  8. Docker精华问答 | Docker vs VM
  9. oracle 数据类型详解---日期型(转载)
  10. 滴滴怒怼美团;阿里麻吉宝刷屏;B站、爱奇艺上市 | CSDN 极客头条
  11. 九爷 带你了解 nginx优化与防盗链
  12. 30.磁盘 I/O 问题
  13. 通过 web 录制视频(摄像头)并上传
  14. 湖北大学98届计算机网络,我校学子在“H3C”杯全国大学生网络技术大赛中获一等奖...
  15. 2020-03-03学习日结
  16. Iterator循环的用法
  17. HTML5面试题及答案
  18. 云测试平台(testin)
  19. MOSFET反向恢复特性总结-4
  20. npm安装依赖至指定版本 npm依赖升级

热门文章

  1. 【云售前工具】在线绘图工具推荐
  2. Windows 7下IE9升级到IE 11,F12控制台不能使用的解决方法
  3. JAVA毕业设计华水疫情预警与防护用品调度系统计算机源码+lw文档+系统+调试部署+数据库
  4. 企业品牌营销型网站搭建需要关注这6大核心要素
  5. Irrational problem
  6. 学考计算机会考考点工作总结,高中生学业水平考试工作总结范文
  7. Linux驱动BSP(I2C 驱动实验)
  8. lighttpd移植
  9. android 开机动画 卡顿,开机动画没按帧率播放 有卡顿
  10. 微分方程数值解 matlab,本学期微分方程数值解课程总结(matlab代码)