版本一:
/**
*面向过程的程序设计:计算机随机产生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("笨笨哦,下次继续努力!");
}
}
}