A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© up_ 中级黑马   /  2012-10-25 13:34  /  2028 人查看  /  2 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.Random;

//5.用用面向对象的思想实现如下的骰子游戏:丢下两个骰子,若分值的总值为7点,则赢;否则输。public class Test4 {
        public static void main(String[] args){
                DiceGame c=new DiceGame();
                c.play();
                Die d=new Die();
                d.roll();
                Random r=new Random();
                int a=r.nextInt(6)+1;
                int b=r.nextInt(6)+1;
                System.out.println(a+"    "+b);
                d.getFaceValue(a,b);
        }
}
class DiceGame{
        int Die1;
        int Die2;
         void play(){
                System.out.println("开始啦");
        }
}
class Die{
        int faceValue;
         static void roll(){
                 System.out.println("请投掷骰子");
        }
        static void getFaceValue(int a,int b){
                int faceValue=a+b;
                if(faceValue==7){
                        System.out.println("您赢啦");       
                }else{
                System.out.println("很抱歉,您输了");}
        }
}//用面向的思维应该怎样改写该代码.

评分

参与人数 1技术分 +1 收起 理由
邓艳秋 + 1 赞一个!

查看全部评分

2 个回复

正序浏览
以下是我的想法,分离出两个对象,一个是游戏窗口本身对象,另一个是骰子对象,两者是组合关系。因为游戏中我们可以更换骰子,因此从面对象来考虑,两者互为组合关系。
以下是我的代码设计:
  1. public class DiceGame {
  2.         private Dice dice1;
  3.         private Dice dice2;

  4.         public DiceGame(Dice dice1, Dice dice2) {
  5.                 this.dice1 = dice1;
  6.                 this.dice2 = dice2;
  7.         }

  8.         // 更换骰子(比如骰子在游戏中找不到,需要更换一个)
  9.         public void setDice1(Dice dice1) {
  10.                 this.dice1 = dice1;
  11.         }

  12.         public void setDice2(Dice dice2) {
  13.                 this.dice2 = dice2;
  14.         }

  15.         public void gameStar() {
  16.                 System.out.println("游戏开始,掷下两个骰子");
  17.                 dice1.roll();
  18.                 dice2.roll();
  19.                 System.out.println("两个骰子的值分别为:" + dice1.getFaceValue() + "、"
  20.                                 + dice2.getFaceValue());
  21.                 int value = dice1.getFaceValue() + dice2.getFaceValue();
  22.                 if (value == 7)
  23.                         System.out.println("您赢啦");
  24.                 else
  25.                         System.out.println("很抱歉,您输了");
  26.         }

  27.         public static void main(String[] args) {
  28.                 Dice dice1 = new Dice();
  29.                 Dice dice2 = new Dice();
  30.                 DiceGame game = new DiceGame(dice1, dice2);
  31.                 game.gameStar();
  32.                 System.out.println("骰子1掉下水道去了(可能是马路上玩的)");
  33.                 Dice dice3 = new Dice();// 拿来一个新骰子
  34.                 game.setDice1(dice3);// 在游戏中使用新骰子
  35.                 // 游戏再次开始
  36.                 game.gameStar();
  37.         }

  38. }
复制代码
  1. package cn.zuhe;

  2. import java.util.Random;

  3. // 骰子对象
  4. public class Dice {
  5.         private int faceValue = 1;// 筛子的值
  6.         Random r = new Random();

  7.         // 获取骰子的值
  8.         public int getFaceValue() {
  9.                 return faceValue;
  10.         }

  11.         // 掷骰子的方法
  12.         public void roll() {
  13.                 faceValue = r.nextInt(6) + 1;
  14.         }
  15. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
你要想万物皆对象。把掷骰子游戏看成一个对象,它有开始、判断输赢等功能。
这里是我的一点拙见。。因为我也是刚开始学的。
代码如下,主要是用到了面向对象的封装性。
  1. import java.util.Random;
  2. public class Test4 {
  3.     public static void main(String[] args){
  4.                 Game g= new Game();   //创建了一个Game类的对象g
  5.                 g.play();
  6.                 g.roll();
  7.                 int a =g.random();
  8.                 int b = g.random();
  9.                 System.out.println(a+"    "+b);
  10.                 g.getFaceValue(a,b);
  11.         }
  12. }
  13. class Game{
  14.         void play()
  15.         {
  16.                 System.out.println("Start!");
  17.         }
  18.         void roll(){
  19.         System.out.println("请投掷骰子");
  20.         }
  21.         int random(){
  22.                 Random r = new Random();
  23.                 return r.nextInt(6)+1;
  24.         }
  25.         void getFaceValue(int a,int b){
  26.         int faceValue=a+b;
  27.         if(faceValue==7)
  28.             System.out.println("您赢啦");        
  29.                 else
  30.                         System.out.println("很抱歉,您输了");
  31.         }
  32. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马