56-筛子游戏

游戏规则:

有一个筛子游戏:
1.已知:有2个玩家,每个玩家有3个骰子(dice)
2.问:猜测这6个骰子的点数的类型及每一类的个数
(比如1点出现3次,6点出现3次)

类的设计

UNL之类图:

中文描述类的结构

1.骰子游戏本身是个class,名称为DiceGame
2.玩家是一个class,名称为Player
3.骰子本身也是个class,名称为Dice

DiceGame的结构:
  • 属性:player(两个User)
  • 方法: start_ganme, get_win
Player的结构:
  • 属性:
  • 方法:cast(投掷,逻辑上的),guess_dice(猜测点数)
Dice的结构:
  • 属性:点数(num)
  • 方法:get_num(获取点数), move(真正实施cast的物理操作)

调用关系:

代码:

    import random
    class Game:
         
        def __init__(self,player1,player2):
            self.player1=player1
            self.player2=player2
            print("游戏初始化成功,可以开始")
     
        def start_game(self):
            self.player1.cast()
            self.player2.cast()
            print(self.player1)
            print(self.player2)
         
        del get_win():
            self.player1.guess_dice()
            self.player2.guess_dice()
            #判断谁赢了
    class Player:
         
        def __init__(self,name,sex,*dice):
            self.name=name
            self.sex=sex
            self.dices=dice#表示该玩家拥有的骰子列表(元组)
         
        #玩家抛骰子
        def cast(self):
            for dice in self.dices:
                dice.move()
             
     
        def guess_dice(self):
            return (4,2)
     
        def __str__(self):
            play_dice_count_list=[self.dices[0].count,self.dices[1].count,self.dices[2].count]
            return "姓名为:%s,投掷的骰子点数信息为:%s"%(self.name,str(play_dice_count_list))
     
    class Dice:
         
        def __init__(self):
            self.count=0
     
        #骰子滚动的方法,滚动之后该骰子的点数确定了
        def move(self):
            self.count=random.randint(1,6)
     
    #游戏开始之前准备六颗骰子
     
    d1=Dice()
    d2=Dice()
    d3=Dice()
    d4=Dice()
    d5=Dice()
    d6=Dice()
    #每次游戏需要两个玩家对象
    p1=Player("player1","男",d1,d2,d3)
    p2=Player("player2","女",d4,d5,d6)
     
    #一共要玩五次游戏
    for i in range(1,6):
        print("第%d次游戏的情况----------"%i)
        game=Game(p1,p2)
        game.start_game()

个人心得:

  1. 根据业务逻辑,抽象出几个类
  2. 根据每个类的特点,抽象出他们最基本的属性和方法
  3. 根据各个类,画出调用关系图
  4. 自底向上的编码:

    • 先搭建整个模块的框架:思考自上层向底层的调用关系,自上而下地思考
    • 先写底层,并测试底层,直到成功为止。再写上层,自下而上的编码

参考文献:

[1] 基于尚学堂python基础视频的自己整理

转载于:https://www.cnblogs.com/LS1314/p/8504664.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值