课程全名: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. Android(Intent 学习)

    Intent 是一个消息传递对象,Intent可以通过多种方式促进组件之间的通信,基本的三种用例: 启动Acitivity: Activity表示应用中的一个屏幕,通过将Intent传递给startA ...

  2. PowerDesginer 生成的Oracle 11g 组合触发器代码编译错误(29): PLS-00103

    问题描述: 采用PowerDesigner15针对Oracle 11g 创建物理数据模型,想实现一个字段的自增,采用如下步骤: 1.创建序列,命名为Sequence_1; 2.在自增字段编辑窗口中,选 ...

  3. jQuery插件制作方法

    html页面:<h1>Hello My name is Alex,i from china.</h1> 1.无参数实现文字阴影效果 测试代码: $("h1" ...

  4. lucene历史版本地址

    http://archive.apache.org/dist/lucene/java/

  5. IT行业果真跳槽快吗?

    近年来IT行业越来越火爆,许多人也开始炒,月入万元不是梦,随随便便拿高薪之类的文章层出不穷,许多的青少年甚至中年人开始关注这块,许多人选择去学习it行业,也朝着月入万元的目标前进,然而,曾几何时,月入 ...

  6. android 内存问题

    借鉴:大苞米的博客(http://blog.csdn.net/a396901990) 一.内存溢出(OOM--out of memory) (1)内存溢出引发的问题展现: 1.程序卡顿,响应速度慢(内 ...

  7. C++ --- Hellowrod

    #include <iostream> int main() { ) { using namespace std; cout << "helloword"; ...

  8. poj 1276 Cash Machine(多重背包)

    Cash Machine Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 33444   Accepted: 12106 De ...

  9. 类的序列化和反序列化(ObjectOutputStream和ObjectInputStream)

    1.需要序列化的类 import java.io.Serializable; /** * 必须继承 Serializable 接口才能实现序列化 */ public class Employee im ...

  10. php_access_ADOConn 备忘

    1.咕~~(╯﹏╰)b 各种乱码. 2.本来是MFC+Access 用msado15.dll写的系统,闲的想用php改改. Demo.php <meta http-equiv="Con ...