zoukankan      html  css  js  c++  java
  • 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基础视频的自己整理

  • 相关阅读:
    覆盖方法和重载方法 C++快速入门19
    访问控制 C++快速入门18
    继承机制中的构造器和析构器 C++快速入门17
    PEInfo编程思路讲解03 工具篇03|解密系列
    静态属性和静态方法 C++快速入门21
    PEInfo编程思路讲解03 工具篇03|解密系列
    继承机制中的构造器和析构器 C++快速入门17
    覆盖方法和重载方法 C++快速入门19
    linux系统中chmod命令
    linux系统中文件、目录的权限
  • 原文地址:https://www.cnblogs.com/LS1314/p/8504664.html
Copyright © 2011-2022 走看看