zoukankan      html  css  js  c++  java
  • 【2017.9.20】硬币游戏—— 代码分析与改进

    软件工程作业2——硬币游戏:代码分析与改进

    任务: 

    • Python 程序阅读理解
    • 学习Python 编码风格指南中译版(Google SOC), 改进Python程序
    • 如何设计游戏规则,使得慈善事业可持续。 地铁口放置硬币箱(初始值500硬币),顾客可取、可放。请设计一组规则,使得该钱箱永远有钱取(尽量符合实际)
    • 参考:地铁口钱箱

    作业步骤:

    • step 1:fork 老师的仓库

      +硬币游戏:http://git.oschina.net/juking2017/Game.git 将其 fork 到自己的码云仓库。(点击页面右上角的fork就可以了)

    • step2:将自己仓库Game clone 到本地D盘SE
    1  $ git clone http://git.oschina.net/yiyanXU/Game.git 
    • step3:运行Python 程序

      首先安装Python软件,去官网下载即可。一般是默认的,安装成功之后,但是在运行的时候会出现问题,因此,还要安装pip.同学分享了一个安装链接http://blog.csdn.net/qy20115549/article/details/52179800,按照这个教程,就可以安装好了。

       双击IDLE打开之后,单击Flie —open,自己之前克隆下的Game里的SRC文件夹中的GameMain.py ;如下图所示:

      单击run后结果如下图所示:(每次run后图都有所变化,里面的数据是随机的)

      python编码风格中,关于缩进的要求是,空4个,tab和空格不能同时使用,也可以说是不能使用tab。原代码是空格空的不对,修改之后,如下图所示:

     

    • step5:将修改之后的文件commit 并 push 到自己远端的仓库。

       最后我的码云上的界面是这样的:

      

     钱箱使用规则

    1. 在地铁口放置钱箱,内放500枚硬币
    2. 如需要零钱,可以取其中1~5枚硬币,如果不足所需,则取光。 取钱倾向多取
    3. 善良的人可以往其中放置1枚硬币。放钱倾向少放

    将Threshold 调整为 4,得到下图结果

    可以看到图形随着时间而变化很大,变得不持续了。可以看到取硬币的人变多了之后,箱子里的钱变少了。

    我上网搜了一下关于地铁口的慈善,投放硬币的,报道最后零钱箱里面一天下来,还是有很多硬币,放硬币的人比拿的人多。

    代码是符合现实规律的。但是我代码具体没有做修改,只修改了风格。

     附:


    1.修改风格之后的程序代码:

     1 #!/usr/bin/env python3
     2 # -*- coding: utf-8 -*-
     3 import random
     4 import numpy as np
     5 import matplotlib.pyplot as plt
     6 from matplotlib import mlab
     7 from matplotlib import rcParams
     8 
     9 
    10 # 初始参数设置
    11 Box_sum =500         # 箱子中剩余硬币数量,初始值
    12 People_Flag= random.randint(1,10)       # flag 模拟人们取硬币或放硬币的概率 1~10 
    13 Threshold = 2.5        #  阈值,可调: 1~Threshold 为取硬币,Threshold+1 ~10 为放硬币
    14 Max_TakeCoin=5       #  最多可取硬币数量
    15 Max_DonateCoin=1     #  最多可放硬币数量
    16 
    17 delata=0                # 取、放硬币数量
    18 Box_per_remain= [500]   # 每次箱子中硬币余额,list
    19 
    20 
    21 # 算法模拟
    22 for x in range(1,5000):  # 循环次数表示参与人数
    23     flag= random.randint(1,10) # flag 模拟人们取硬币或放硬币的概率 
    24     if flag > Threshold:
    25        # 放硬币
    26        delta=random.randint(1,Max_DonateCoin)
    27        delta=random.randint(1,delta)          # 模拟了人们捐款可能性,有偏少的倾向
    28        Box_sum =Box_sum + delta
    29        Box_per_remain.append(Box_sum)
    30     else:
    31         # 取硬币
    32         delta=random.randint(1,Max_TakeCoin)
    33         delta=random.randint(delta,Max_TakeCoin) # 模拟了人 取硬币的可能性,偏多的倾向
    34         if Box_sum < delta:
    35             Box_sum =0                           # 如果不够取,则取光
    36         else:
    37             Box_sum =Box_sum - delta
    38         Box_per_remain.append(Box_sum)
    39 
    40 print(Box_per_remain)
    41 
    42 
    43 # 绘图区
    44 fig = plt.figure()
    45 
    46 ## 1. 标题、X、Y 轴 label
    47 plt.title('Subway testing')
    48 plt.xlabel('Time')
    49 plt.ylabel('Money remained')
    50 
    51 x= np.arange(len(Box_per_remain))
    52 
    53 ## 2. data
    54 
    55 plt.plot(x,Box_per_remain,color='r')
    56 plt.bar(x,Box_per_remain,alpha=.5,color='g')
    57 
    58 plt.show()

    2. 我的远端仓库的链接

    https://gitee.com/yiyanXU/Game

  • 相关阅读:
    详解应对平台高并发的分布式调度框架TBSchedule
    利用httpd配置虚拟目录创建下载站点
    在centos7下用http搭建配置svn服务
    centos7/rhel7下配置PXE+Kickstart自动安装linux系统
    centos7破解安装confluence5.9.11
    centos7破解安装jira6.3.6(含Agile)
    mysql5.6做单向主从复制Replication
    解决忘记mysql中的root用户密码问题
    centos7安装mysql5.6(rpm包安装)
    centos7/RHEL7最小化系统安装gnome图形界面
  • 原文地址:https://www.cnblogs.com/yiyanXU/p/7565229.html
Copyright © 2011-2022 走看看