随机赛车双人游戏

Python海龟宝典含200多个原创的用turtle模块制作的创意程序,原名《Python趣味编程200例》。准备参加全国创意编程与智能设计大赛的同学们可以用来做参考。

李兴球Python随机赛车双人游戏
李兴球Python随机赛车双人游戏

一个用Python制作的双人小游戏,里面有颜色碰撞检测,图章碰撞检测(项目编号碰撞检测)等等,以下是完整源代码:

"""
   随机赛车双人游戏
   本程序操作红色和青色两架小车去接金币,
   障碍为红色的圈形。碰到障碍物后,小车会自动回到起始坐标。
   接到一个金币后会进行统计。
   这是一个多线程示例程序,两架小车在独自的线程中运行。
   本程序还演示了颜色碰撞和对tkinter的items进行碰撞。
   本程序需要Python精灵模块支持,如果没有安装,请在以下网址下载批处理进行安装。
   http://www.lixingqiu.com/pms.bat

   相关命令说明:

   1、颜色碰撞检测命令collidecolor
   本命令只对造型为图片的角色起作用,它会检测所碰到的角色上面的颜色,
   如果是相应的颜色,则返回真,否则返回假。
   它可以有两个参数,第一个参数是颜色,需要为RGB三元组格式,如(255,0,0)表示的是红色。
   第二个参数应该是一个序列,表示要检测的角色,如果第二个参数为空,则检测所有角色。
   本使中的car1.collidecolor(red,cs)命令,检测的是cs列表中的角色,而red的值是(255,0,0)。
   它的意思car1有没有碰到cs列表中角色上面的红色。

   2、overlap_with,与...重叠命令。
   本命令查找有无和角色最小矩形重叠的项目(包括线条,圆点,多边形,圆弧,图章,填充区域,其它角色)。
   它的参数可以是列表/元组/集合、整数与角色或字符串,返回重叠的所有项目编号。
   本方法返回所有与角色矩形重叠的项目集合。

   典型应用为用一个角色盖一些图章,把这些图章的编号收集起来,然后可以用overlap_with去检测有没有碰到这些图章。
   本例中的金币有一个是角色,其它的都是图章。
   它们的项目编号都放在coins列表中。和海龟画图一样,求一个角色的项目编号用turtle属性的_item值。
   本例coin的项目编号为coin.turtle._item。而所有的图章的项目编号,在盖图章的时候都会直接返回。   

   
"""
__author__ = '李兴球'
__date__ = '2020/5/27'
__blog__ = 'www.lixingqiu.com'

from sprites import *                # 从精灵模块导入所有命令
from random import random            # 从随机模块导入random命令
from threading import Thread         # 从线程模块导入Thread类 

width,height = 960,720               # 定义宽高
screen = Screen()                    # 生成屏幕
screen.setup(width,height)           # 设置屏幕宽高 
screen.bgcolor('gray')               # 设定背景色
screen.title('随机赛车双人游戏')     # 设定标题  

red = (255,0,0)                      # 代表红色
r = Sprite('res/red.png')            # 障碍物的本体
cs = []                              # cs列表存储所有障碍物
for _ in range(30):
    r.gotorandom(-200,200,-200,200,180)
    x = (10 + random())/50 
    y = r.clone()
    y.shapesize(x,x)
    cs.append(y)
screen.listen()
r.hide()

# 生成一些金币
coin = Sprite(shape='circle')
coin.color('yellow')
coins = [coin.turtle._item]         # coins列表存储的都是些项目编号(整数)
for _ in range(50):
    coin.gotorandom()               # 在到达屏幕范围任一点  
    item = coin.stamp()             # 盖图章
    coins.append(item)              # 添加到coins列表 


def redcarfunc():
    """
       本函数是线程1的目标函数,
       它主要是生成一辆小车,然后可以用上下左右键进行控制,
       并且碰到红色的障碍物,它会回到起始点,
       碰到黄色的圆形,它会得1分,并且黄色圆形会消失。
    """
    score_bug = Sprite(visible=False,pos=(-200,250))
    score_bug.color('red')
    car1 = Sprite('res/redcar.png',pos=(-50,0))
    car1.left(90)
    car1.score = 0                              # 自定义属性
    leftkey = Key("Left")
    rightkey = Key("Right")
    upkey = Key("Up")
    downkey = Key("Down")
    while True:
        if leftkey.down():car1.left(5)
        if rightkey.down():car1.right(5)
        if upkey.down():car1.fd(5)
        if downkey.down():car1.bk(5)    
        if car1.collidecolor(red,cs):car1.slide((0,-50))
        items = car1.overlap_with(coins)
        car1.score += len(items)
        if items:
            [coin.clearstamp(i) for i in items]
            score_bug.clear()
            score_bug.write(car1.score,font=("",32,"normal"))        
        screen.update()
        
thread1 = Thread(target=redcarfunc)            # 创建线程1
thread1.start()                                # 启动线程1

def cyancarfunc():
    """
       本函数是线程2的目标函数,
       它主要是生成一辆小车,然后可以用awsd键进行控制,
       并且碰到红色的障碍物,它会回到起始点,
       碰到黄色的圆形,它会得1分,并且黄色圆形会消失。
    """
    score_bug = Sprite(visible=False,pos=(200,250))
    score_bug.color('cyan')
    car1 = Sprite('res/cyancar.png',pos=(50,0))
    car1.left(90)
    car1.score = 0                              # 自定义属性
    leftkey = Key("a")
    rightkey = Key("d")
    upkey = Key("w")
    downkey = Key("s")
    while True:
        if leftkey.down():car1.left(5)
        if rightkey.down():car1.right(5)
        if upkey.down():car1.fd(5)
        if downkey.down():car1.bk(5)    
        if car1.collidecolor(red,cs):car1.slide((0,50))
        items = car1.overlap_with(coins)
        car1.score += len(items)        
        if items:
            [coin.clearstamp(i) for i in items]
            score_bug.clear()
            score_bug.write(car1.score,font=("",32,"normal"))       
        screen.update()
        
thread2 = Thread(target=cyancarfunc)           # 创建线程2
thread2.start()                                # 启动线程2

PlaySound('Dance Energetic.wav',SND_LOOP|SND_ASYNC)
screen.mainloop()

本站所有作品,教程等皆为原创,版权所有。只供个人及单位内部研究使用,对外展示或传播必需经本站同意,且注明来自本站。培训机构等用本站资源培训学生,需经本站授权。一旦付款,表示同意本站知识付费原则:数字商品,不支持退款。亦可直接向微信号scratch8付款购买。入住QQ群:225792826 和爱好者共同交流,并且能下载免费提供的Python资源(需提供真实姓名才可入群)
李兴球的博客_Python创意编程技术前沿_pygame » 随机赛车双人游戏

李兴球Python微信公众号文章列表

Python游戏海龟模块教程说明书与案例若干免费发放

爱的纪念_Python创意情景动画源代码解析

少儿Python编程到底学些什么?这些代码或许回答了问题.

Python编程家长会花絮_萍乡中小学Python家长会现场

火星路上等着你_少儿从小学什么最好呢?

国家大力整顿教育培训机构,Scratch或Python少儿编程还有得教吗?

鸿蒙系统支持Python开发_可视化编程特别兴趣小组

Scratch作品转Python作品_小猴接桃

python海龟数据可视化。第七次全国人口普查历年数据图表

你的孩子Python编程学到哪个阶段了?给孩子报编程的家长,务必仔细一读。

五一神女来对话,看看她们聊什么?赠Python教案等。

五一快乐有大礼,告诉大家我是如何上Python课的。

Python名堂多,趣味到处有,劈开机械手,帧帧是图片。速算达人之猫狮大战正在进行。 逐字动画不独享,自动生成皆有它。2行代码自动生成字幕gif动画。 Python之潮来临,我在安源区教师科技创新能力的Python讲座

小心你的Python程序,它会是你的一面镜子。小方块闯迷宫.py源代码简析。送Scratch算法集。?

铃儿响钉铛_音效怎能忘_Python配音之Pygame混音器

人面桃花相映红_winsound模块简介

《Python昨晚我想你了》_开源的游戏海龟模块实例案例浅析

《八猫联动初体验》_来自游戏海龟模块的问候

喜爱春天的人儿啊 心地纯洁的人_Python逐行像素显示

旋转之三叶炫彩扇_蟒蛇与海龟的表演

彩虹欢迎字幕_三模合体滚图形

《Python海龟宝典》简介

100%错误的算法还在用,明明没有错别字,说我有11个错别字

奇怪的Python代码,谁能帮我解释一下??

人造地球系统让人类文明充满整个宇宙之Python32768版

深夜,是什么把你的大脑搞成一团浆糊!再谈少儿编程!

5线城市萍乡的少儿Python寒假班学的是什么内容?

关于纯少儿编程课程进化的自然选择

Python海龟画图经典作品_国庆中秋双重喜庆源代码免费下载

海龟为什么要自杀!turtle制作游戏秘籍之一

朋友,你是否知道我在仰望着你_Python神笔马良案例集

酷酷的爆炸效果_Python海龟画图不仅仅是画图

虫子满屏爬_三bug多线程示例程序浅析 少儿Python视频课程A级简介

给的gif图片加文字水印_拆帧与合帧(免费下载180个Python创意源码

用Python制作酷炫图形之如意金箍棒_颜色增加模块应用

简单的用Python做酷炫图形与动画

sb3转exe,sb3素材提取器,编程小子apk, 未公开的pygame游戏集/scratch/python少儿编程免费下载集合

夜幕下的霓虹

学本领,探索更大的世界!

李兴球博客 风火轮编程主页
error: Content is protected !!