为何将用pygame制作的跳一跳程序放到四足机器人这个专栏呢?
我觉的他们有共同点的:
跳一跳:用户点击 棋子 根据接触屏幕时间的长短来控制其弹跳的高度h与距离s
四足机器人:操作者通过摆动遥感,控制机器人运动方向,若遥感朝前表示四足机器人朝前走,又由于上一篇中描述了,机器人腿部脚端轨迹符合摆线方程,然后再通过某种类似节律的方式使得四条腿各自再此节律周期内规律运动,总而使得机器人实现各种动作,例如:跳跃,对角小跑,空翻,漫步,匍匐前进,扭屁股,如厕等....
回归重点:
在跳一跳中,我设计的是棋子通过二次方程的轨迹弹出:
y=y+math.sin(math.radians(t2))*(-x1/3-2)
先看图吧!这个有图才有真相!
整篇代码:
import random
import pygame
import sys
from pygame.locals import*
import math
pygame.init()
clock = pygame.time.Clock()
pygame.mixer.init()
pygame.font.init()
#字体
ziti=pygame.font.Font("ziti.ttf",50)
##音乐
pygame.mixer.music.load("66.ogg")
pygame.mixer.music.play()
m1=pygame.mixer.Sound("tiaoyue.ogg")#跳跃
m2=pygame.mixer.Sound("ba.ogg")#落下
m3=pygame.mixer.Sound("shibai.ogg")#GG
size=width,height=1000,600
screen=pygame.display.set_mode(size)
pygame.display.set_caption("贪玩蓝月")
bg=(255,206,232)
BLACK=(0,0,0)
i1=pygame.image.load("1.jpg")
i1=pygame.transform.smoothscale(i1,(200,100))
qz=pygame.image.load("qz.png")
qz=pygame.transform.smoothscale(qz,(50,100))
oqz=qz
pqz=x,y=125,400
opqz=pqz
#方块
list=[(1,1)]*30
for i in range(29):
list[i]=(random.randint(400,900),-100)
list[0]=(50,500)
list[1]=(550,500)
#qz_r=pygame.transform.rotate(qz,90)
#qz_t=pygame.transform.rotate(qz,180)
#计时器判断
pan1=False
pan2=False
pan3=False
pan4=False
pan5=False
pan6=False
pan7=False
#计时器
t1=0
t2=0
#缓存区
x1=0
#计分区
fen1=0
#循环区
while True:
#退出
for event in pygame.event.get():
if event.type==pygame.QUIT:
sys.exit()
#计时器
if event.type==MOUSEBUTTONDOWN:
if event.button==1:
pan1=True
m1.play()
if event.type == MOUSEBUTTONUP:
if event.button == 1:
pan1 = False
pan2=True
t1=0
y=400
m1.stop()
if pan1:
t1=t1+1
x1=t1
qz=pygame.transform.smoothscale(qz,(50,100-t1))
y=400+t1
if pan2:
t2=t2+6
x=x+x1/6
qz=pygame.transform.smoothscale(oqz,(50,100))
if t2>=360:
pan2=False
m2.play()
t2=0
if x>list[fen1+1][0]-50 and x<list[fen1+1][0]+200 and y>399:
pan3=True
if x>list[fen1][0]+200 and x<list[fen1+1][0]-50 and y>399 or y>399 and x>list[fen1+1][0]+200:
pan5=True
if pan3:
list[fen1+1]=(list[fen1+1][0]-10,list[fen1+1][1])
list[fen1]=(list[fen1][0]-10,list[fen1][1])
x=x-10
if x<110:
fen1+=1
pan3=False
pan4=True
if pan4:
list[fen1+1]=(list[fen1+1][0],list[fen1+1][1]+10)
if list[fen1+1][1]==500:
pan4=False
if y>499:
pan6=True
pan5=False
if pan5:
y+=10
if pan7:
pan6=False
if pan6:
m3.play()
pan6=False
pan7=True
y=y+math.sin(math.radians(t2))*(-x1/3-2)
pqz=x,y
print(t1,x1,t2)
#输出
screen.fill(bg)
fen_str=str(fen1)
ziti1 = ziti.render(fen_str,True,(0,0,0))
screen.blit(ziti1, (20, 20))
screen.blit(i1,list[fen1])
screen.blit(i1,list[fen1+1])
screen.blit(qz,pqz)
pygame.display.flip()
clock.tick(60)
完整代码我已经开源了: