猫史档案馆


【Python作品分享】【去太空,趣编程】新的作品

用户:花海UqGB花海UqGB查看:0 回复:2 评论:0 创建时间:2021-05-05T20:15:50


【作品展示】

center_image

 

【作品介绍】

我的作品是航天飞船

使用:点击运行后,左右键控制方向,空格键进行攻击

 

【作品源代码】

from vpython import *
import random

scene.background = vec(0, 0, 0.2)

s = 0

front_body = sphere(size=vec(100, 100, 300), color=color.red, opacity=0.9)
back_body = cylinder(axis=vec(0, 0, 150), radius=50, color=color.white)
left_w = cone(axis=vec(0, 0, -150), radius=35,
              pos=vec(-45, -20, 100), color=color.yellow)
right_w = left_w.clone(pos=vec(45, -20, 100))
left_f = cone(axis=vec(0, 0, 75), radius=10, pos=vec(-50, -25,
                                                         100), color=color.orange, opacity=0.6, emissive=True)
right_f = left_f.clone(pos=vec(50, -20, 100))
middle_f = left_f.clone(axis=vec(0, 0, 100),
                        radius=30, pos=vec(0, 0, 150))

a = compound([front_body, back_body, left_w,
              right_w, left_f, right_f, middle_f], H=100, pos=vec(0, -20, 3000), v=random.uniform(8, 12))
b = a.clone(color=color.yellow, H=100, v=random.uniform(8, 12))
c = b.clone(H=100, v=random.uniform(8, 12))
d = b.clone(H=100, v=random.uniform(8, 12))

def rand():
    x = random.randint(-2000, 2000)
    z = random.randint(-3300, -3150)
    return vec(x, -20, z)

b.pos = rand()
c.pos = rand()
d.pos = rand()

l = [b, c, d]

for i in l:
    i.rotate(angle = pi, axis = vec(0, 1, 0))

bh = box(color=color.green)
ch = bh.clone()
dh = bh.clone()
ah = bh.clone()

s1 = sphere(radius = 40, color = vec(0.6, 0.5, 0.5), pos = rand(), v = random.uniform(15, 25))
s2 = s1.clone(pos=rand(), v=random.uniform(15, 25))
s3 = s1.clone(pos=rand(), v=random.uniform(15, 25))
s4 = s1.clone(pos=rand(), v = random.uniform(15, 25))
s5 = s1.clone(pos=rand(), v = random.uniform(15, 25))
s6 = s1.clone(pos=rand(), v=random.uniform(15, 25))
ls = [s1, s2, s3, s4, s5, s6]

redl = box(pos = vec(0, -60, 2650), size = vec(4000, 20, 20), color = color.red, opacity = 0.6)
at = cylinder(pos = a.pos, color=vec(0.2, 0.9, 0.9), axis=vec(0, 0, -1), radius=20, emissive=True, opacity=0.9)
lab = label(pos = a.pos + vec(200, 100, 0), color = color.white, text = "score:"+str(s), height = 10, font = "Arial")

while True:
    rate(100)

    k = keysdown()
    if "left" in k and a.pos.x > -2000:
        a.pos.x -= 5
    if "right" in k and a.pos.x < 2000:
        a.pos.x += 5
    if " " in k:
        at.axis = vec(0, 0, -5000)
        for i in l:
            if i.pos.x + 100 >= a.pos.x >= i.pos.x - 100:
                i.H -= 3
                if i.H <= 0:
                    i.pos = rand()
                    i.v = random.uniform(8, 12)
                    a.H += 5
                    s += 1
    else:
        at.axis = vec(0, 0, -1)

    for i in l:
        if i.pos.z < 2500:
            i.pos.z += i.v
        else:
            i.pos = rand()
            i.v = random.uniform(8, 12)
            a.H -= 10

    for i in ls:
        if i.pos.z < 2750:
            i.pos.z += i.v
        elif 2750 <= i.pos.z <= 3250:
            if i.pos.x + 90 >= a.pos.x >= i.pos.x - 90:
                a.H -= 5
                i.pos = rand()
                i.v = random.uniform(15, 20)
            else:
                i.pos.z += i.v
        else:
            i.pos = rand()
            i.v = random.uniform(15, 20)

    bh.pos=b.pos + vec(0, 60, 0)
    bh.size=vec(b.H, 20, 20)
    ch.pos=c.pos + vec(0, 60, 0)
    ch.size=vec(c.H, 20, 20)
    dh.pos=d.pos + vec(0, 60, 0)
    dh.size=vec(d.H, 20, 20)
    ah.pos=a.pos + vec(0, 60, 0)
    ah.size=vec(a.H, 20, 20)

    at.pos = a.pos
    lab.pos = a.pos + vec(200, 100, 0)
    lab.text = "score:"+str(s)

    if a.H <= 0:
        lab.text = "Game over"+"\n"+"final score:"+str(s)
        break

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
猫老祖05猫老祖05

emotion_编程猫_点赞

点赞0


评论


无题_无题_

这个库不让用哦

点赞0


评论