课程全名:An Introduction to Interactive Programming in Python,来自 Rice University

授课教授:Joe Warren, Scott Rixner, John Greiner, Stephen Wong

工具:http://www.codeskulptor.org/, simplegui 模块

这是第三次作业,前面两次主要是熟悉Python动手做起来都很简单,就不记录了。

作业需要完成一个关于手表的游戏,估计很多人也都玩过。初中和高中考试做完卷子,但离收卷还有很久,就折腾手上的电子表用来掐秒,锻炼反应力。这里要实现的游戏是一个道理,就是酱紫。

这个Mini project开始采用事件驱动(event-driven)的交互方式,所以先明确一些问题。

1. 界面canvas的drawing速率大概是 60 frams/sec

2. 每一个应用程序需要注册一个特殊的事件句柄叫做 draw handler

3. 在simplegui 模块中,创建和注册draw handler最后的绘制是在canvas中

4. 绘制的操作有很多种,例如线、圆、多边形等,这些都在simplegui模块里面定义,具体查看doc

canvas的布局如下,原点在左上角,第一个坐标是宽度,第二个坐标是高度

Stopwatch完成的结果如下:

Start开始游戏,Stop暂停,Reset重置。右上角记录 成功停在整数秒次数/尝试次数

需要的元素:

frame:主界面

start button, stop button, reset button.

timer: 计时

逻辑设计:

start button事件: 开始计时

def start_handler():
global is_running
if is_running is False:
timer.start()
is_running = True

stop button事件:停止计时,更新右上角记录

def stop_handler():
global num_stop, num_succ_stop, is_running
if is_running is True:
timer.stop()
num_stop += 1
if tick % 10 == 0 and tick != 0:
num_succ_stop += 1
is_running = False

reset button事件:停止计时,重置相关参数

def reset_handler():
global tick, num_stop, num_succ_stop, is_running
timer.stop()
num_succ_stop, num_stop, tick = 0, 0, 0
is_running = False

timer 事件:负责计时不断增加,每次0.1s

def timer_handler():
global tick
tick += 1

draw事件:界面元素绘制

def draw_handler(canvas):
canvas.draw_text(format(tick), [100, 100], 30, "Green")
canvas.draw_text(str(num_succ_stop) + "/" + str(num_stop), [250, 20], 20, "Green")

定义了一个辅助的方法format用来转换当前时间t为00:00.0格式

def format(t):
D = str(t % 10)
BC = t / 10 % 60
if BC < 10:
BC = '0'+str(BC)
else:
BC = str(BC)
A = str(t / 10 / 60)
return A + ":" + BC + "." + D

整体完整代码如下:

# template for "Stopwatch: The Game"

import simplegui

# define global variables
tick = 0
num_stop = 0
num_succ_stop = 0
is_running = False # define helper function format that converts time
# in tenths of seconds into formatted string A:BC.D
def format(t):
D = str(t % 10)
BC = t / 10 % 60
if BC < 10:
BC = '0'+str(BC)
else:
BC = str(BC)
A = str(t / 10 / 60)
return A + ":" + BC + "." + D # define event handlers for buttons; "Start", "Stop", "Reset"
def start_handler():
global is_running
if is_running is False:
timer.start()
is_running = True def stop_handler():
global num_stop, num_succ_stop, is_running
if is_running is True:
timer.stop()
num_stop += 1
if tick % 10 == 0 and tick != 0:
num_succ_stop += 1
is_running = False def reset_handler():
global tick, num_stop, num_succ_stop, is_running
timer.stop()
num_succ_stop, num_stop, tick = 0, 0, 0
is_running = False # define event handler for timer with 0.1 sec interval
def timer_handler():
global tick
tick += 1 # define draw handler
def draw_handler(canvas):
canvas.draw_text(format(tick), [100, 100], 30, "Green")
canvas.draw_text(str(num_succ_stop) + "/" + str(num_stop), [250, 20], 20, "Green") # create frame
frame = simplegui.create_frame('Stopwatch: The Game', 300, 200) # register event handlers
start_btn = frame.add_button('Start', start_handler, 200)
stop_btn = frame.add_button('Stop', stop_handler, 200)
reset_btn = frame.add_button('Reset', reset_handler, 200)
frame.set_draw_handler(draw_handler)
timer = simplegui.create_timer(100, timer_handler) # start frame
frame.start() # Please remember to review the grading rubric

其中is_running用来记录当前timer是否在运行,防止重复点击stop出现计数错误的问题。

整体逻辑也比较简单,课程挺有意思,声音听着超棒,锻炼听力挺不错。每个老师相当的负责和认真。感叹自己本科那时初学C的时候,授课的差距是那么大,也感慨现在有这么多好的资源可以利用。学无止境。

Mini projects #3 ---- Stopwatch: The Game的更多相关文章

  1. Mini projects #8–RiceRocks

    课程全名:An Introduction to Interactive Programming in Python,来自 Rice University 授课教授:Joe Warren, Scott ...

  2. Mini projects #7 ---- Spaceship

    课程全名:An Introduction to Interactive Programming in Python,来自 Rice University 授课教授:Joe Warren, Scott ...

  3. Mini projects #6 ---- Blackjack

    课程全名:An Introduction to Interactive Programming in Python,来自 Rice University 授课教授:Joe Warren, Scott ...

  4. Mini projects #5 ---- Memory

    课程全名:An Introduction to Interactive Programming in Python,来自 Rice University 授课教授:Joe Warren, Scott ...

  5. Mini projects #4 ---- Pong

    课程全名:An Introduction to Interactive Programming in Python,来自 Rice University 授课教授:Joe Warren, Scott ...

  6. A Complete List of .NET Open Source Developer Projects

    http://scottge.net/2015/07/08/a-complete-list-of-net-open-source-developer-projects/?utm_source=tuic ...

  7. Building Xcode iOS projects and creating *.ipa file from the command line

    For our development process of iOS applications, we are using Jenkins set up on the Mac Mini Server, ...

  8. All the Apache Streaming Projects: An Exploratory Guide

    The speed at which data is generated, consumed, processed, and analyzed is increasing at an unbeliev ...

  9. Golang优秀开源项目汇总, 10大流行Go语言开源项目, golang 开源项目全集(golang/go/wiki/Projects), GitHub上优秀的Go开源项目

    Golang优秀开源项目汇总(持续更新...)我把这个汇总放在github上了, 后面更新也会在github上更新. https://github.com/hackstoic/golang-open- ...

随机推荐

  1. Fortran 笔记

    1.将字符串写入文本 open(,File=trim("e:\XRIVER_LOG.txt"), ACCESS = 'APPEND')!ACCESS = 'APPEND' 在文本末 ...

  2. UITextView 显示不全的问题

    //设置UITextView的内边距 textView.contentInset = UIEdgeInsetsMake(0, 0, 20, 0);

  3. openvpn安装

    1,wget http://swupdate.openvpn.org/as/openvpn-as-2.0.10-CentOS7.x86_64.rpm 2,passwd openvpn

  4. Activity启动模式

    ------siwuxie095 共4种启动模式:standard singleTop singleTask singleInstance 1.标准启动模式(standard) 也即默认的启动模式 ( ...

  5. 解决libcurl7.50.3在windows XP SP3 VC++ 6.0下编译报错 unresolved external symbol __imp__IdnToAscii@20 unresolved external symbol __imp__IdnToUnicode@20

    错误重现: --------------------Configuration: curl - Win32 LIB Debug DLL Windows SSPI DLL WinIDN--------- ...

  6. HibernateTemplate的一些常用方法总结

    1:get/load存取单条数据 public Teacher getTeacherById(Long id) { return (Teacher)this.hibernateTemplate.get ...

  7. 深入浅出Symfony2 - 结合MongoDB开发LBS应用

    简介 随着近几年各类移动终端的迅速普及,基于地理位置的服务(LBS)和相关应用也越来越多,而支撑这些应用的最基础技术之一,就是基于地理位置信息的处理.我所在的项目也正从事相关系统的开发,我们使用的是S ...

  8. dictionaryWithContentsOfFile:方法

    dictionaryWithContentsOfFile:方法的功能是创建一个字典,将字典中的内容设置为指定文件中的所有内容, 语法:(id)dictionaryWithContentsOffilE. ...

  9. 图解VMware内存机制

    在写<VMware内存机制初探>之后,原本是计划写一篇<VMware内存机制再探>的,讲一讲VMware内存机制中的另外几个重要内容,比如透明内存共享(TPS, Transpa ...

  10. python学习-day14-前端之html、css

    一.Html 1.本质:一个规则,浏览器能任务的规则 2.开发者:        学习Html规则        开发后台程序:            - 写Html文件(充当模板的作用) ***** ...