当前课程知识点:Python 交互式程序设计导论 > 第8周 > 本周项目:守卫家园 > 项目模板
返回《Python 交互式程序设计导论》慕课在线视频课程列表
项目模板
# “守卫家园”游戏 import simpleguitk as gui import math import random # 全局变量 WIDTH = 800 # 画布宽度 HEIGHT = 600 # 画布高度 enemy_killed = 0 # 消灭敌人数量 castle_left = 4 # 画布完好数量 enemy_escaped = 0 # 逃脱敌人数量 escaped_limit = 10 # 运行逃脱敌人的数量上限 success_limit = 100 # 消灭敌人数量 game_over = False # 守卫是否以失败结束 game_success = False # 守卫是否以成功结束 soldier = None # 战士对象 enemy_group = set([]) # 所有敌人对象的集合 castle_group = set([]) # 所有城堡对象的集合 arrow_group = set([]) # 所有箭对象的集合 explosion_group = set([]) # 所有爆炸对象的集合 # 图片信息类 class ImageInfo: def __init__(self, center, size, radius=0, lifespan=None, animated=False, frame=None): self.center = center # 图片的中心坐标 self.size = size # 图片的大小 self.radius = radius # 图片的半径,用来计算是否和其它对象发生碰撞 if lifespan: self.lifespan = lifespan # 由该图片生成对象的寿命,以帧为单位,通常每秒为60帧 else: self.lifespan = float('inf') # 表示无穷大 self.animated = animated # 由该图片生成对象是否具备动画效果 self.frame = frame # 为实现动画效果所提供的平铺图片数量 def get_center(self): return self.center def get_size(self): return self.size def get_radius(self): return self.radius def get_lifespan(self): return self.lifespan def get_animated(self): return self.animated def get_frame(self): return self.frame # 加载图片资源 grassland_info = ImageInfo([960, 600], [1920, 1200]) grassland_image = gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project8/grassland.jpg") # 地面背景 arrow_info = ImageInfo([21, 5], [42, 10],5,60) arrow_image = gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project8/arrow.png") # 箭 castle_info = ImageInfo([54, 52], [109, 105],50) castle_image = gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project8/castle.png") # 城堡 enemy_info = ImageInfo([32, 15], [64, 29], 15, 1000, True,4) enemy_image = gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project8/enemy.png") # 敌人,图像文件中包含4副图片用来实现动画 soldier_info = ImageInfo([32, 26], [64, 52]) soldier_image = gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project8/soldier.png") # 战士,图像文件中包含2副图片用来实现动画 win_info = ImageInfo([320, 240], [640, 480]) win_image = gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project8/win.png") # 游戏成功图片 game_over_info = ImageInfo([320, 240], [640, 480]) game_over_image = gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project8/gameover.png") # 游戏结束图片 explosion_info = ImageInfo([64, 64], [128, 128], 17, 24, True,24) explosion_image = gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project8/explosion.png") # 爆炸,图像文件中包含多副图片用来实现动画 # 加载音效资源 back_sound = gui.load_sound("http://202.201.225.74/video/PythonResoure/ProjectResource/sounds/project8/moonlight.wav") # 背景音乐 shoot_sound = gui.load_sound("http://202.201.225.74/video/PythonResoure/ProjectResource/sounds/project8/shoot.wav") # 箭发射声音 explode_sound = gui.load_sound("http://202.201.225.74/video/PythonResoure/ProjectResource/sounds/project8/explode.wav") # 箭击中敌人的声音 enemy_sound = gui.load_sound("http://202.201.225.74/video/PythonResoure/ProjectResource/sounds/project8/enemy.wav") # 敌人击中城堡的声音 # 游戏初始化辅助函数 def init(): pass # 计算两点距离的辅助函数 def distance(p,q): pass # 处理一组精灵的辅助函数 def process_sprite_group(sprites,canvas): pass # 检查越过左边界敌人的辅助函数 def enemy_escape_check(): pass # # 检测一组对象和另一个对象是否发生碰撞的辅助函数 def group_collide(group,other_object): pass # 检测两组对象是否发生碰撞的辅助函数 def group_group_collide(group1, group2): pass # 战士类 class Soldier: def __init__(self, pos, vel, angle, image, info): self.pos = [pos[0],pos[1]] self.vel = [vel[0],vel[1]] self.shooting = False self.angle = angle self.image = image self.image_center = info.get_center() self.image_size = info.get_size() def get_pos(self): pass def shoot(self): global arrow_group arrow_pos = [self.pos[0] + self.image_size[0] * math.cos(self.angle), self.pos[1] + self.image_size[0] * math.sin(self.angle)] arrow_vel =[0,0] arrow_vel[0] = 10 * math.cos(self.angle) arrow_vel[1] = 10 * math.sin(self.angle) a_arrow = Sprite(arrow_pos, arrow_vel, self.angle, arrow_image, arrow_info, shoot_sound) arrow_group.add(a_arrow) def set_angle(self, angle): pass def set_shooting(self, is_shooting): pass def set_vel(self,new_vel): self.vel=new_vel def draw(self,canvas): pass def update(self): pass # 精灵类 class Sprite: def __init__(self, pos, vel, ang, image, info, sound = None): self.pos = [pos[0],pos[1]] self.vel = [vel[0],vel[1]] self.angle = ang self.image = image self.image_center = info.get_center() self.image_size = info.get_size() self.radius = info.get_radius() self.lifespan = info.get_lifespan() self.animated = info.get_animated() self.frame = info.get_frame() self.age = 0 if sound: sound.set_volume(0.05) sound.rewind() sound.play() def get_radius(self): pass def get_pos(self): pass def collide(self,other_object): pass def draw(self, canvas): pass def update(self): pass # 主绘制函数 def draw(canvas): pass # 处理鼠标点击事件的函数 def mouse_handler(pos): pass # 处理键盘按下事件的函数 def key_down(key): pass # 处理键盘释放事件 def key_up(key): pass # 用来产生敌人的时间事件处理函数 def enemy_spawner(): pass # 创建窗口 frame = gui.create_frame("守卫家园", WIDTH, HEIGHT) # 添加按钮 frame.add_button("重新开始", init, 100) # 添加标签 label_killed = frame.add_label("消灭敌人 = 0") label_escaped = frame.add_label("逃脱敌人 = 0") label_attacked = frame.add_label("受到袭击 = 0") # 注册事件处理函数 frame.set_mouseclick_handler(mouse_handler) frame.set_keydown_handler(key_down) frame.set_keyup_handler(key_up) frame.set_draw_handler(draw) # 创建定时器 timer = gui.create_timer(1000.0, enemy_spawner) # 启动游戏 init() timer.start() frame.start()
-课程简介
--课程简介
-A 课程视频(算数操作符及表达式)
--绪论
-B 课程视频(变量及赋值)
--变量
--项目提交
-C 辅助视频(计算机结构、Python开发环境安装)
-D 辅助视频(如何提交项目)
--项目提交
-第0周--小测验
-本周项目:"我喜欢Python"
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
--项目提交
-A 课程视频(函数)
--函数
--其它操作符
--随机函数
-B 课程视频(逻辑及表达式)
--逻辑值和比较
--条件
--编程技巧
-第1周--小测验
-本周项目:“老虎杠子鸡虫”游戏
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(Python交互式应用)
--事件驱动编程
--按钮
-B 课程视频(输入框、全局变量)
--输入框
--编程技巧
-第2周--小测验A
-第2周--小测验B
-本周项目:猫咪藏在哪个房间
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(画布绘图)
--画布和图形绘制
--字符串处理
--图片和音效
-B 课程视频(计时器)
--计时器
--交互式绘图
--“神奇时钟”游戏
--编程技巧
-第3周--小测验A
-第3周--小测验B
-本周项目:“神奇时钟”
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(列表)
--列表
--键盘输入
--碰撞和反射
-B 课程视频(键盘控制)
--速度控制
--运动
--编程技巧
--“桌上冰球”游戏
-第4周--小测验A
-第4周--小测验B
-本周项目:“桌上冰球”游戏
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(鼠标输入、列表进阶)
--鼠标输入
--Video
--Video
--Video
-B 课程视频(字典和图片)
--Video
--Video
--Video
--Video
-第5周--小测验A
-第5周--小测验B
-本周项目:“世界杯八强连连看”
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(类)
--华容道中的类
-B 课程视频(平铺图片)
--平铺图片
--理解对象
--编程技巧
--“华容道”游戏
-第6周--小测验A
-第6周--小测验B
-本周项目:“华容道”游戏
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(类进阶及文件操作)
--集合
--文件操作
--文字块类
--处理停止的文字块
-B 课程视频(游戏状态控制)
--游戏记分规则
--编程技巧
-第7周--小测验A
-第7周--小测验B
-本周项目:决战三字经
--游戏说明
--程序说明
--编程步骤
--评分标准
--项目模板
-A、课程视屏(精灵集合)
--Video
--精灵类
--战士类
--编程技巧
-B、课程视屏(动画)
--精灵碰撞
--精灵动画
--编程技巧
--保卫家园游戏
-第8周--小测验
-本周项目:守卫家园
--游戏说明
--程序说明
--编程步骤
--评分标准
--项目模板