第一个面向对象的程序:

一个控制台猜拳小游戏:

第一步选择角色;

第二部选择剪刀,石头,布,与电脑进行PK;

第三部选择继续或者选择结束;

结束显示比赛的局数,以及各自赢得的分数;

设计思路

分析问题,设计出四个类

1.设计Person,Computer,Game三个类;

2.设计Test类启动程序;

测试运行:

-----------欢迎进入游戏世界-----------
        ******************
        ******猜拳开始*****
        ******************
----------------------------------------

出拳规则:1.剪刀 2.石头 3.布
请选择角色:(1.刘备 2.孙权 3.曹操):

你选择  曹操对战
输入y开始:
y
请你出拳:1.剪刀 2.石头 3.布(请输入相应数字:)

你出拳: 剪刀
电脑出拳:剪刀
和局,再来一局吧

是否开始下一轮(y/n):y
请你出拳:1.剪刀 2.石头 3.布(请输入相应数字:)

你出拳: 石头
电脑出拳:布
你输了,真笨!

是否开始下一轮(y/n):y
请你出拳:1.剪刀 2.石头 3.布(请输入相应数字:)

你出拳: 布
电脑出拳:布
和局,再来一局吧

是否开始下一轮(y/n):n

你选的是:曹操 你共战局数:3
你共得: 0分
电脑共得了: 1分
你赢了 0局
你输了 1局
和局 2局
你第1局出的: 剪刀   电脑出的: 剪刀
你第2局出的: 石头   电脑出的: 布
你第3局出的: 布   电脑出的: 布

Person 类:

package com.tt;

import java.util.*;

public class Person {
    Scanner input = new Scanner(System.in);
    public static int score = 0;

    public int showSelect() {
        while (true) {
            System.out.print("请你出拳:1.剪刀 2.石头 3.布(请输入相应数字:)\n");
            int num = input.nextInt();
            switch (num) {
            case 1:
                System.out.println("你出拳: 剪刀");
                return 1;
            case 2:
                System.out.println("你出拳: 石头");
                return 2;
            case 3:
                System.out.println("你出拳: 布");
                return 3;
            default:
                System.out.println("输入有误,请重新输入\n");
                continue;// 输入有误,重新输入
            }
        }
    }
}

Computer 类:

package com.tt;

import java.util.*;

public class Computer {
    Scanner input = new Scanner(System.in);
    public static int score;

    public int showSelect() {
        int num = (int) (Math.random() * 3 + 1);
        switch (num) {
        case 1:
            System.out.println("电脑出拳:剪刀");
            return 1;
        case 2:
            System.out.println("电脑出拳:石头");
            return 2;
        case 3:
            System.out.println("电脑出拳:布");
            return 3;
        default:
            return -1;
        }
    }
}

Game 类:

package com.tt;

import java.util.*;

public class Game {
    Scanner input = new Scanner(System.in);
    private Person person = new Person();
    private Computer computer = new Computer();
    private static int count = 0;// 记录比赛的次数
    private static int win_count = 0;
    private static int lose_count = 0;
    private static int peace_count = 0;
    ArrayList<Integer> list1 = new ArrayList<Integer>();// 记录人每次出的数字
    ArrayList<Integer> list2 = new ArrayList<Integer>();// 记录电脑每次出的数字

    public String Show() {
        System.out.println("-----------欢迎进入游戏世界-----------");
        System.out
                .println("\t\t******************\n\t\t******猜拳开始*****\n\t\t******************");
        System.out.println("----------------------------------------\n");
        System.out.println("出拳规则:1.剪刀 2.石头 3.布");
        while (true) {
            System.out.println("请选择角色:(1.刘备 2.孙权 3.曹操):");
            int num = input.nextInt();
            switch (num) {
            case 1:
                System.out.println("你选择  刘备对战");
                return "刘备";
            case 2:
                System.out.println("你选择  孙权对战");
                return "孙权";
            case 3:
                System.out.println("你选择  曹操对战");
                return "曹操";
            default:
                System.out.println("你输入有误,请重新输入哈");
                continue;// 输入有误,重新输入
            }
        }
    }

    public void Start(String s) {
        System.out.println("输入y开始:");
        while (true) {
            String answer = input.next();
            if (answer.equals("y")) {
                int person_select = person.showSelect();
                int computer_select = computer.showSelect();
                if ((person_select == 1 && computer_select == 1)
                        || (person_select == 2 && computer_select == 2)
                        || (person_select == 3 && computer_select == 3)) {
                    System.out.println("和局,再来一局吧\n");
                    peace_count++;
                } else if ((person_select == 1 && computer_select == 3)
                        || (person_select == 2 && computer_select == 1)
                        || (person_select == 3 && computer_select == 2)) {
                    System.out.println(" 恭喜, 你赢了!加油\n");
                    Person.score++;
                    win_count++;
                } else {
                    System.out.println("你输了,真笨!\n");
                    Computer.score++;
                    lose_count++;
                }
                list1.add(person_select);// 添加到记录人的数组中
                list2.add(computer_select);// 添加到电脑人的数组中
                count++;
                System.out.print("是否开始下一轮(y/n):");
            } else {
                System.out.println("\n你选的是:" + s + " 你共战局数:" + count);
                System.out.println("你共得: " + Person.score + "分");
                System.out.println("电脑共得了: " + Computer.score + "分");
                System.out.println("你赢了 " + win_count + "局");
                System.out.println("你输了 " + lose_count + "局");
                System.out.println("和局 " + peace_count + "局");
                // 显示人和电脑每次的对战
                for (int i = 0; i < list1.size(); i++) {
                    System.out.println("你第" + (i + 1) + "局出的: "
                            + great(list1.get(i)) + "   电脑出的: "
                            + great(list2.get(i)));
                }
            }
        }
    }

    // 用来显示比赛过程
    public String great(int num) {
        switch (num) {
        case 1:
            return "剪刀";
        case 2:
            return "石头";
        case 3:
            return "布";
        default:
            return null;
        }
    }
}

Test 类:

package com.tt;

public class Test {

    public static void main(String[] args) {
        Game g1 = new Game();
        String s = g1.Show();
        g1.Start(s);
    }
}

Java面向对象思想解决猜拳问题的更多相关文章

  1. 06-03 Java 面向对象思想概述、开发设计特征,类和对象的定义使用,对象内存图

    面向对象思想概述.开发设计特征 1:面向对象思想 面向对象是基于面向过程的编程思想. 面向过程:强调的是每一个功能的步骤 面向对象:强调的是对象,然后由对象去调用功能 2:面向对象的思想特点 A:是一 ...

  2. JAVA面向对象思想理解分析

    1.面向对象是面向过程而言.两者都是一种思想.面向过程:强调的是功能行为.(强调过程.动作)面向对象:将功能封装进对象,强调了具备了功能的对象.(强调对象.事物)面向对象是基于面向过程的.将复杂的事情 ...

  3. 薪资管理系统(Java面向对象思想)

    package com.test3; import java.util.*; import java.io.*; /** * @author qingfeng * 重要思想:面向对象思想(添加员工管理 ...

  4. java面向对象思想2

    1.主函数是一类特殊的函数,作为程序入口,可被虚拟机调用.主函数格式是固定的.public:函数访问权限最大.static:代表函数随着类的加载已经存在.void:主函数没有具体返回值.main:不是 ...

  5. java面向对象思想1

    1.面向对象是面向过程而言.两者都是一种思想.面向过程:强调的是功能行为.(强调过程.动作)面向对象:将功能封装进对象,强调了具备了功能的对象.(强调对象.事物)面向对象是基于面向过程的.将复杂的事情 ...

  6. 《Head First Java》读书笔记(2) - Java面向对象思想

    1.了解继承 对象继承实际上就是一种"is - a"的关系,如上图的"PantherMan is a SuperHero?",是,那么便属于继承的理解. 继承能 ...

  7. java面向对象思想之封装

    一.什么是封装 菜鸟教程对封装的解释是"在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装.隐藏起来的方法.".简单来说就 ...

  8. JAVA面向对象思想

    1.面向对象的基本特征     面向对象具有三个基本特征:封装.多态.继承.      1)封装             封装指的是将对象的实现细节隐藏起来,然后通过一些公用方法来暴露该对象的功能. ...

  9. 浅谈Java面向对象思想

    本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...

随机推荐

  1. app之间的跳转,进入二级界面

    功能实现:A跳到B并打开B中指定页面.http://blog.csdn.net/dollyyang/article/details/50325307 点击页面判断是否安装app并打开,否则跳转app ...

  2. [C#基础]ref和out的使用

    在C#中如果需要把值类型转换成引用类型传递其他方法中并使其原来值发生改变,使用 ref 和 out 转换成引用类型传递. 1. ref : 使用ref之前需要定义变量并初始化(必须初始) class ...

  3. Eclipse问题集锦

    1.SDK版本过低的问题. 现象: 更新SDK后,每次进入Eclipse,都会提示说需要23.0.0版本的SDK,当前的22.6.0版本的SDK版本过低:然而,确认更新后,结果却是说没有任何更新的东东 ...

  4. BZOJ1261: [SCOI2006]zh_tree

    Description 张老师根据自己工作的需要,设计了一种特殊的二叉搜索树.他把这种二叉树起名为zh_tree,对于具有n个结点的zh_tree,其中序遍历恰好为(1,2,3,-,n),其中数字1, ...

  5. http statusCode(状态码) 200、300、400、500序列

    201-206都表示服务器成功处理了请求的状态代码,说明网页可以正常访问.        200(成功)  服务器已成功处理了请求.通常,这表示服务器提供了请求的网页.        201(已创建) ...

  6. android studio 华为手机看不到具体的错误日志

    手机的开发人员选项打开了么,其中的 USB 调试打开了么?搞定他们并重新运行,是否能找到我们的日志?否,转到 2. 日志中是否有这样 could not disable core file gener ...

  7. LR11录制脚本时打不开浏览器,如何解决?

    请教一下各位大神,我安装的LR11,在录制脚本的时候打不开浏览器,已经试过了网上的方法还是不行,以下是搜到的方法: 无法打开IE的主要原因是,LR的注册信息被修改了,所以无法找到IE的路径. 解决这个 ...

  8. 【洛谷P1196】银河英雄传说

    有特殊意义的一道题-- 加权并查集,我们增加cnt.deep数组 分别表示i点所在链共有多少个点,以及路径压缩之前点i在链中的深度 每次合并时直接修改cnt,路径压缩的同时更新deep 因为每次查询之 ...

  9. MyBatis使用动态SQL标签的小陷阱

    现在MyBatis越来越受大家的喜爱了,它的优势大家都知道,我就不多说了,直接说重点. MyBatis中提供动态SQL功能,我们可以使用<if><when><where& ...

  10. 推荐一款跨平台的 Azure Storage Explorer

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...