当前课程知识点: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()

返回《Python 交互式程序设计导论》慕课在线视频列表

Python 交互式程序设计导论课程列表:

第0周

-课程简介

--课程简介

-A 课程视频(算数操作符及表达式)

--绪论

--Python交互式解释器使用方法

--PyCharm集成开发环境介绍

--算数操作符及表达式

-B 课程视频(变量及赋值)

--变量

--项目提交

--“我喜欢Python”热身小项目

-C 辅助视频(计算机结构、Python开发环境安装)

--Windows平台安装Python开发环境

--Mac平台安装Python开发环境

-D 辅助视频(如何提交项目)

--项目提交

-第0周--小测验

-本周项目:"我喜欢Python"

--项目发布、完成、提交及评分流程

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

--项目提交

第1周

-A 课程视频(函数)

--函数

--其它操作符

--随机函数

-B 课程视频(逻辑及表达式)

--逻辑值和比较

--条件

--编程技巧

--“老虎杠子鸡虫”游戏

-第1周--小测验

-本周项目:“老虎杠子鸡虫”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第2周

-A 课程视频(Python交互式应用)

--事件驱动编程

--事件可视化跟踪执行

--SimpleGUITk

--按钮

-B 课程视频(输入框、全局变量)

--输入框

--局部变量和全局变量

--编程技巧

--“猫咪藏在哪个房间”游戏

-第2周--小测验A

-第2周--小测验B

-本周项目:猫咪藏在哪个房间

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第3周

-A 课程视频(画布绘图)

--画布和图形绘制

--字符串处理

--绘图和计时器可视化跟踪执行

--图片和音效

-B 课程视频(计时器)

--计时器

--交互式绘图

--“神奇时钟”游戏

--编程技巧

-第3周--小测验A

-第3周--小测验B

-本周项目:“神奇时钟”

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第4周

-A 课程视频(列表)

--列表

--键盘输入

--列表及变化可视化跟踪执行

--碰撞和反射

-B 课程视频(键盘控制)

--速度控制

--运动

--编程技巧

--“桌上冰球”游戏

-第4周--小测验A

-第4周--小测验B

-本周项目:“桌上冰球”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第5周

-A 课程视频(鼠标输入、列表进阶)

--鼠标输入

--Video

--Video

--Video

-B 课程视频(字典和图片)

--Video

--Video

--Video

--Video

-第5周--小测验A

-第5周--小测验B

-本周项目:“世界杯八强连连看”

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第6周

-A 课程视频(类)

--面向对象编程(类和对象入门)

--面向对象编程(类和对象进阶)

--对象可视化跟踪执行

--华容道中的类

-B 课程视频(平铺图片)

--平铺图片

--理解对象

--编程技巧

--“华容道”游戏

-第6周--小测验A

-第6周--小测验B

-本周项目:“华容道”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第7周

-A 课程视频(类进阶及文件操作)

--集合

--文件操作

--文字块类

--处理停止的文字块

-B 课程视频(游戏状态控制)

--游戏记分规则

--游戏结束的条件及处理

--编程技巧

--“决战三字经”游戏

-第7周--小测验A

-第7周--小测验B

-本周项目:决战三字经

--游戏说明

--程序说明

--编程步骤

--评分标准

--项目模板

第8周

-A、课程视屏(精灵集合)

--Video

--精灵类

--战士类

--编程技巧

-B、课程视屏(动画)

--精灵碰撞

--精灵动画

--编程技巧

--保卫家园游戏

-第8周--小测验

-本周项目:守卫家园

--游戏说明

--程序说明

--编程步骤

--评分标准

--项目模板

项目模板笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。