15
2024
11

python编程学习-赛车

学习python编程,在新东方少儿编程官网的自由创作平台做的一些作品。

可以在线运行,效果如下(在新页面中打开链接):

代码如下(用到平台自定义的xdf库):

from xdf import *

road = [
    line(0, 0, 0, 1024, 'red'),
    line(768, 0, 768, 1024, 'red')
]
lines = []
objects = []
for i in range(9):
    lines.append({
        'x': 768 / 2,
        'y': i * 128,
        'line': line(768/2, i * 128, 768/2, i * 128 + 96)
    })
for i in range(5):
    a = random(2)
    if a != 1:
        a = -1
    objects.append({
        'x': 768/2 + a * 768 / 4,
        'y': i * 2 * 128 - 1024,
        'sp': box(0, 0, 300, 60, 'red')
    })
    
hero = {
    'x': 768 / 2,
    'y': 1024 - 200,
    'v': 20,
    'frames': [
        box(0, 0, 100, 100, 'black')
    ]
}
state = {
    's': 0,
    'v': 10,
    'over': False
}

overText = text("Game Over", 100, 'center', 'green')
overText.hide()
sText = text("", 10, 60, 40, 'blue')
    
def loop():
    sText.change(str(state['s'] // 20) + "米")
    if state['over']:
        return
    if hero['x'] < 50:
        hero['x'] = 50
    elif hero['x'] > 768 - 50:
        hero['x'] = 768 - 50
    hero['frames'][0].move(hero['x'], hero['y'])
    state['s'] = state['s'] + state['v']
    n = len(lines)
    for i in range(n):
        l = lines[i]
        l['y'] = l['y'] + state['v']
        if l['y'] > 1024:
            l['y'] = l['y'] - 128 * n
        l['line'].move(l['x'], l['y'], l['x'], l['y'] + 96)
    n = len(objects)
    for i in range(n):
        o = objects[i]
        o['y'] = o['y'] + state['v']
        if o['y'] > 1024:
            a = random(2)
            if a != 1:
                a = -1
            o['x'] = 768/2 + a * 768 / 4
            o['y'] = o['y'] - 2 * 128 * n
        o['sp'].move(o['x'], o['y'])
    for i in range(n):
        dx = abs(hero['x'] - objects[i]['x'])
        dy = abs(hero['y'] - objects[i]['y'])
        if dx < 50 + 150 and dy < 50 + 30:
            state['over'] = True
            overText.show()
            break

def reStart():
    overText.hide()
    state['over'] = False
    state['s'] = 0
    hero['x'] = 768 / 2
    for i in range(len(lines)):
        l = lines[i]
        l['y'] = i * 128
    for i in range(len(objects)):
        o = objects[i]
        o['y'] = i * 2 * 128 - 1024

def moveLeft():
    hero['x'] = hero['x'] - hero['v']

def moveRight():
    hero['x'] = hero['x'] + hero['v']

def keydown(keyCode, key):
    if keyCode == 37:
        moveLeft()
    elif keyCode == 39:
        moveRight()
    elif keyCode == 32:
        if state['over']:
            reStart()

def tap():
    if state['over']:
        reStart()
    

class MyKeyBoard:
    def __init__(self, x, y, w):
        hw = w / 2
        hhw = w * 0.75
        self.arr = [
            box(x, y - w, w, w, "transparent", "red"),
            text("↑", x + hw, y - w + hhw, w, "center", "red"),
            box(x, y, w, w, "transparent", "red"),
            text("↓", x + hw, y + hhw, w, "center", "red"),
            box(x - w, y, w, w, "transparent", "red"),
            text("←", x - hw, y + hhw, w, "center", "red"),
            box(x + w, y, w, w, "transparent", "red"),
            text("→", x + w + hw, y + hhw, w, "center", "red"),
        ]
        self.arr[0].tap=self.clickUp
        self.arr[2].tap=self.clickDown
        self.arr[4].tap=self.clickLeft
        self.arr[6].tap=self.clickRight
        delay(self.loop, 100)
        
    def loop(self):
        for i in range(len(self.arr)):
            self.arr[i].front()
        delay(self.loop, 100)
    
    def onKeydown(self, keyCode, key):
        try:
            keydown(keyCode, key)
        except e:
            pass
    def clickUp(self):
        self.onKeydown(38, "ArrowLeft")
    def clickDown(self):
        self.onKeydown(40, "ArrowDown")
    def clickLeft(self):
        self.onKeydown(37, "ArrowLeft")
    def clickRight(self):
        self.onKeydown(39, "ArrowRight")
MyKeyBoard(768-200, 1024-100, 100)








也可以下载代码,本地python环境运行(用pygame封装了xdf库)。



« 上一篇下一篇 »

相关文章:

python编程学习-跑酷01  (2024-11-15 11:40:3)

python编程学习-贪食蛇  (2024-11-15 11:38:41)

python编程学习-警察抓小偷  (2024-11-15 11:38:7)

python编程学习-英雄天梯  (2024-11-15 11:37:35)

python编程学习-翻滚的方块  (2024-11-15 11:37:10)

python编程学习-玛丽跳跳跳  (2024-11-15 11:36:43)

python编程学习-汉诺塔  (2024-11-15 11:36:16)

python编程学习-模拟键盘按键  (2024-11-15 11:35:50)

python编程学习-显示帧频  (2024-11-15 11:35:26)

python编程学习-收不完的西瓜  (2024-11-15 11:35:0)

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。