学习python编程,在新东方少儿编程官网的自由创作平台做的一些作品。
可以在线运行,效果如下(在新页面中打开链接):
代码如下(用到平台自定义的xdf库):
from xdf import *
W0 = 768
H0 = 1024
N = 12 #玩不过去,可以改小一点,比如8,要能被W0整除
CW = W0 / N
R = CW / 4
offX = 0.001
offY = 0.001
cubesUp = []
cubesDown = []
mpUp = []
mpDown = []
offUp = 0
offUp0 = 0
countDown = 100
rockY = 0
isOver = False
heroX = 0
for i in range(N):
b0 = box(offX, offY, CW, H0, "gray", "black")
cubesUp.append(b0)
b1 = box(offX, offY, CW, H0, "gray", "black")
cubesDown.append(b1)
mpUp.append(0)
mpDown.append(0)
hero = circle(W0 / 2 + offX, H0 / 2 + offY - R, R, "green", "black")
overTxt = text("Game Over", 100, "red", "center")
def x2i(x):
return int((x - offX) / CW)
def i2x(i):
return i * CW + offX + CW / 2
def refresh():
global cubesUp,cubesDown,offUp,offY,offX,rockY,CW
for i in range(N):
b0 = cubesUp[i]
b1 = cubesDown[i]
oy0 = mpUp[i] + offUp + offY + rockY
oy1 = H0 + mpDown[i] + offY
xi = CW * i + CW / 2 + offX
b0.move(xi, oy0)
b1.move(xi, oy1)
def reset():
global isOver,overTxt,countDown,rockY
isOver = False
countDown = 100
rockY = 0
initMap()
refresh()
overTxt.hide()
def tap():
global isOver,countDown
if isOver:
reset()
else:
if countDown >= 25:
i = x2i(x)
moveHero(i)
def gameOver():
global isOver,overTxt
isOver = True
overTxt.show()
def checkOver():
global heroX,mpUp,mpDown
i = x2i(heroX)
if mpUp[i] == mpDown[i]:
gameOver()
def loop():
global countDown,offUp,offUp0,rockY, isOver
if isOver:
return
countDown = countDown - 1
if countDown > 50:
pass
elif countDown > 30:
rockY = random(20) - 1 - 20 / 2
elif countDown >= 25:
rockY = 0
offUp = offUp0 * (countDown - 25) / 5
elif countDown == 20:
checkOver()
elif countDown < 0:
countDown = 0
reset()
refresh()
def initMap():
global hero,mpUp, mpDown, offUp, offUp0, rockY
rockY = 0
offUp0 = offUp = -H0 / 2 + CW * 2
for i in range(N):
oyi = random(3) - 2
mpUp[i] = oyi * CW
mpDown[i] = oyi * CW
for i in range(2):
mi = random(N) - 1
mpUp[mi] = mpDown[mi] - CW * random(2)
md = int(N // 2) - 1
moveHero(md)
def moveHero(i):
global heroX,hero,mpDown
if i < 0 or i >= len(mpDown):
return
heroX = i2x(i)
hero.move(heroX, H0 / 2 - R + mpDown[i])
reset()
# xdf库的坑
# 1、坐标为0会被忽略掉,导致出问题,所以加了个offX,offY
# 2、创建的时候,box是以左上角为锚点的,move的时候,是以中心为锚点的
# 3、random函数,正常random(n)是生成[0,n-1]的随机(整)数,
# xdf库中random(n)生成的是[1,n]的随机(整)数
也可以下载代码,本地python环境运行(用pygame封装了xdf库)。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。