猜数字小游戏不同版本的实现(体现面向过程和面向对象的思想)

版本一:

/**
*面向过程的程序设计:计算机随机产生0到100之间待猜的整数,玩家猜数。
*                        猜对为止,根据猜的次数进行评价。猜大或者猜小了给出提示。
*/
import java.util.Scanner;

public class  GuessGame01
{
    public static void main(String[] args) 
    {
        Scanner sc = new Scanner(System.in);
        System.out.println("--------------------开天辟地猜数字游戏欢迎你!--------------------\n");


        //1.计算机随机产生0到100之间待猜的整数

        int cnum = (int)(Math.random() * 100);

        //2.玩家猜数,猜对为止,并且记录猜的次数
        int count = 0;

        while(true)
        {
            System.out.print("请输入你猜的数:");
            int gnum = sc.nextInt();
            count++;

            if(gnum > cnum)
            {
                System.out.println("\n你第" + count + "次猜的数" + gnum + "猜大了!");
            }

            else if(gnum < cnum)
            {
                System.out.println("\n你第" + count + "次猜的数" + gnum + "猜小了!");
            }

            else
            {
                System.out.println("\n恭喜,你第" + count + "次猜对了!");
                break;
            }
        }

        //3.根据猜的次数进行评价
        if(count <= 3)
        {
            System.out.println("神了,我的哥!");
        }

        else if(count <= 6)
        {
            System.out.println("厉害了,我的哥!");
        }

        else if(count <= 9)
        {
            System.out.println("不错,不错!");
        }

        else
        {
            System.out.println("笨笨哦,下次继续努力!");
        }

    }
}
 

 版本二:有面向对象的味道,但还是面向过程的思想。不过引入了类的数据成员,构造方法等面向对象的基本概念,还是属于面向过程的设计。

/**
*面向过程的程序设计:计算机随机产生0到100之间待猜的整数,玩家猜数。
*                        猜对为止,根据猜的次数进行评价。猜大或者猜小了给出提示。
*/
import java.util.Scanner;

public class  GuessGame02
{
    private int cnum;    //待猜的数
    private int count;    //猜的次数

    public GuessGame02()
    {
        //1.计算机随机产生0到100之间待猜的整数

         cnum = (int)(Math.random() * 100);

         count = 0;

         System.out.println("--------------------开天辟地猜数字游戏欢迎你!--------------------\n");
    }

    public static void main(String[] args) 
    {
        GuessGame02 game = new GuessGame02();

        game.start();
    }

    public void start()
    {
        Scanner sc = new Scanner(System.in);
        //2.玩家猜数,猜对为止,并且记录猜的次数

        while(true)
        {
            System.out.print("请输入你猜的数:");
            int gnum = sc.nextInt();
            count++;

            if(gnum > cnum)
            {
                System.out.println("\n你第" + count + "次猜的数" + gnum + "猜大了!");
            }

            else if(gnum < cnum)
            {
                System.out.println("\n你第" + count + "次猜的数" + gnum + "猜小了!");
            }

            else
            {
                System.out.println("\n恭喜,你第" + count + "次猜对了!");
                break;
            }
        }

        judge();
    }


    //3.根据猜的次数进行评价
    public void judge()
    {
        if(count <= 3)
        {
            System.out.println("神了,我的哥!");
        }

        else if(count <= 6)
        {
            System.out.println("厉害了,我的哥!");
        }

        else if(count <= 9)
        {
            System.out.println("不错,不错!");
        }

        else
        {
            System.out.println("笨笨哦,下次继续努力!");
        }
    
    }
}
 

 面向对象的分析设计方法:

模拟客观世界:计算机随机产生0到100之间待猜的数,玩家猜数,猜对为止,根据玩家的次数给予评价,猜大或者猜小了给出提示。

1.找出要模拟的客观世界中有哪些对象?(对象都是名词:对象的行为表现为动词/动作/职责)

计算机:Computer、玩家:Player、游戏:Game

2.确定每个对象的职责。(对象的行为/动作/责任:为了完成相应的职责,需要维持相应的内部状态/属性/数据成员)

计算机:     随机产生0到100之间待猜的数。方法:构造方法和普通方法。

玩家:        猜数(从键盘输入)。guess方法

游戏:        记录猜数的次数,根据猜的次数judge进行评价,猜大或者猜小了给出提示。游戏主循环start。

3.确定对象之间的相互联系和作用。(宏观层面:确定系统的架构以及总的工作流程!)

版本三:面向对象设计的代码展示

计算机,玩家,游戏(组织者)三个对象

/**
*模拟计算机
*/

public class Computer 
{
    private int cnum;    //待猜的数

    public Computer()
    {
        //计算机随机产生0到100之间待猜的整数
        cnum = (int)(Math.random() * 100);
    }

    //返回待猜的数
    public int getCnum()
    {
        return this.cnum;
    }
    
}
 

/**
*模拟玩家
*/

import java.util.Scanner;

public class Player 
{
    private Scanner sc;

    public Player()
    {
        sc = new Scanner(System.in);
    }

    //玩家猜数
    public int guess()
    {
        System.out.println("请输入你猜的数:");
        return sc.nextInt();
    }
}
 

/**
*模拟猜数游戏:整个游戏的组织者。
*/

public class Game 
{
    private Computer computer;    //计算机
    private Player player;        //玩家

    //初始化代码一般放到构造方法中
    public Game()
    {
        computer = new Computer();
        player = new Player();
    }

    public static void main(String[] args) 
    {
        Game game = new Game();
        game.start();
    }

    //游戏主过程
    public void start()
    {
        int cnum = computer.getCnum();        //计算机产生待猜的数
        int gnum = -1;                        //玩家猜的数
        int count = 0;                        //玩家猜的次数

        System.out.println("--------------------开天辟地猜数字游戏欢迎你!--------------------\n");

        while(cnum != gnum)
        {
            //玩家猜一把
            gnum = player.guess();
            count++;
            if(gnum > cnum)
            {
                System.out.println("\n你第" + count + "次猜的数" + gnum + "猜大了!");
            }

            else if(gnum < cnum)
            {
                System.out.println("\n你第" + count + "次猜的数" + gnum + "猜小了!");
            }

            else
            {
                System.out.println("\n恭喜,你第" + count + "次猜对了!");
                break;
            }
        }
                
                //根据玩家猜测次数进行评价
                judge(count);
    }

    //根据猜的次数进行评价
    public void judge(int count)
    {
        if(count <= 3)
        {
            System.out.println("神了,我的哥!");
        }

        else if(count <= 6)
        {
            System.out.println("厉害了,我的哥!");
        }

        else if(count <= 9)
        {
            System.out.println("不错,不错!");
        }

        else
        {
            System.out.println("笨笨哦,下次继续努力!");
        }
    
    }

}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值