学习python编程,在新东方少儿编程官网的自由创作平台做的一些作品。
可以在线运行,效果如下(在新页面中打开链接):
代码如下(用到平台自定义的xdf库):
from xdf import *
from math import *
W = 768
H = 1024
CX = W / 2
CY = H / 2
ps = []
ls = [[0,1],[0,3],[0,4], [1,2], [2,3], [3,4], [4,5], [5,1]]
r = 64
R = 256
cur = None
isOver = False
isMoving = False
y0 = 10
ps.append([CX, CY])
for i in range(5):
ang = pi*i*2/5-pi
ps.append([CX - R * sin(ang), CY + R * cos(ang)])
pass
for a in ls:
line(ps[a[0]][0], ps[a[0]][1], ps[a[1]][0], ps[a[1]][1])
pass
for a in ps:
circle(a[0], a[1], r, "white", "black")
pass
thief = [
circle(ps[1][0], ps[1][1], r, "white", "black"),
circle(ps[1][0], ps[1][1], r, "white", "red"),
text("小偷", ps[1][0], ps[1][1] + y0, 30, "center"),
1
]
police = [
circle(ps[0][0], ps[0][1], r, "white", "black"),
circle(ps[0][0], ps[0][1], r, "white", "red"),
text("警察", ps[0][0], ps[0][1] + y0, 30, "center"),
0
]
winTf = text("游戏结束","red","center", W / 2, 100, 50)
AI = None
def chooseAI():
global AI
a = input("选择角色,1、小偷,2、警察")
if a and a == "1":
AI = police
else:
AI = thief
setTurn(thief)
pass
def setTurn(v):
global cur
if v == thief:
cur = thief
thief[1].show()
police[1].hide()
else:
cur = police
thief[1].hide()
police[1].show()
if AI == cur:
aiTurn()
pass
def move(v, i, dt=0):
a = ps[i]
v[0].move(a[0], a[1], dt)
v[1].move(a[0], a[1], dt)
v[2].move(a[0], a[1] + y0, dt),
v[3] = i
pass
def reset():
global AI,isMoving
AI = None
isMoving = False
winTf.hide()
move(thief, 1)
move(police, 0)
chooseAI()
def tap():
global isOver, AI, isMoving
if isOver:
isOver = False
reset()
return
if not AI:
return
if isMoving:
return
if cur == AI:
return
for i in range(len(ps)):
a = ps[i]
dx = x - a[0]
dy = y - a[1]
if dx * dx + dy * dy < r * r and canMove(cur, i):
move(cur, i, 300)
checkWin()
break
pass
pass
def canMove(c, i):
if not inLine(i, c[3]):
return False
if c == thief and police[3] == i:
return False
return True
def inLine(a, b):
for c in ls:
if (c[0] == a and c[1] == b) or (c[0] == b and c[1] == a):
return True
return False
def checkWin():
global isOver,isMoving
if police[3] == thief[3]:
winTf.show()
isOver = True
else:
isMoving = True
delay(swapTurn, 500)
pass
def swapTurn():
global isMoving
isMoving = False
setTurn(police if cur == thief else thief)
def aiTurn():
delay(aiTap, 2000)
def getAllPath(c):
arr = []
for i in range(len(ps)):
if canMove(c, i):
arr.append(i)
return arr
def choosePos(arr, b, i):
if len(arr) == 1:
return arr[0]
aa = []
for a in arr:
d = dm[i][a]
if b:
if d == 0:
return a
if d == 2 and a == 0:
return a
if d == 2:
aa.append(a)
if len(aa) > 0:
return aa[random(len(aa)) - 1]
return arr[random(len(arr)) - 1]
def aiTap():
arr = getAllPath(AI)
other = police if AI==thief else thief
p = choosePos(arr, AI==police, other[3])
move(AI, p, 300)
checkWin()
pass
dm = [[0,1,2,1,1,2],[1,0,1,2,2,1],[2,1,0,1,2,2],[1,2,1,0,1,2],[1,2,2,1,0,1],[2,1,2,2,1,0]]
reset()
也可以下载代码,本地python环境运行(用pygame封装了xdf库)。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。