学习python编程,在新东方少儿编程官网的自由创作平台做的一些作品。
可以在线运行,效果如下(在新页面中打开链接):
代码如下(用到平台自定义的xdf库):
from xdf import *
cw = 192
ox = 2
oy = 2
curHr = None
isPlaying = True
def ij2xy(i, j):
return (j * cw + ox, i * cw + oy)
def xy2ij(x, y):
return (int((y - oy)//cw), int((x - ox)//cw))
class Hero:
def __init__(self):
global cw
self.cw = cw
self.I = 0
self.J = 0
self.x = 0
self.y = 0
self.w = 0
self.h = 0
self.fsize = self.cw * 0.5
self.b = None
def update(self):
self.b.move(self.x + self.w * 0.5, self.y + self.h * 0.5)
def setIJ(self, i, j):
self.I = i
self.J = j
xy = ij2xy(self.I, self.J)
self.x = xy[0]
self.y = xy[1]
self.update()
def choose(self):
self.b.change("green", "red")
def unChoose(self):
self.b.change("blue", "white")
def tryMoveTo(self, i, j):
return False
def moveTo(self, i, j):
pass
class Caocao(Hero):
def __init__(self):
Hero.__init__(self)
self.w = self.cw * 2
self.h = self.cw * 2
self.b = box(0, 0, self.w, self.h, "blue", "white")
self.t = text("曹操", 0, 0, self.fsize, "red", "center")
def update(self):
super().update()
self.t.move(self.x + self.w * 0.5, self.y + (self.h + self.fsize) * 0.5)
def tryMoveTo(self, i, j):
if mp[i][j] == None:
if i == self.I - 1:
if mp[i][self.J] == None and mp[i][self.J + 1] == None:
self.moveTo(i, self.J)
return True
return False
if i == self.I + 2:
if mp[i][self.J] == None and mp[i][self.J + 1] == None:
self.moveTo(i - 1, self.J)
return True
return False
if j == self.J - 1:
if mp[self.I][j] == None and mp[self.I + 1][j] == None:
self.moveTo(self.I, j)
return True
return False
if j == self.J + 2:
if mp[self.I][j] == None and mp[self.I + 1][j] == None:
self.moveTo(self.I, j - 1)
return True
return False
return False
def moveTo(self, i, j):
mp[self.I][self.J] = None
mp[self.I][self.J + 1] = None
mp[self.I + 1][self.J] = None
mp[self.I + 1][self.J + 1] = None
mp[i][j] = self
mp[i][j + 1] = self
mp[i + 1][j] = self
mp[i + 1][j + 1] = self
self.setIJ(i, j)
class Guanyu(Hero):
def __init__(self):
Hero.__init__(self)
self.w = self.cw * 2
self.h = self.cw
self.b = box(0, 0, self.w, self.h, "blue", "red")
self.t = text("关羽", 0, 0, self.fsize, "red", "center")
def update(self):
super().update()
self.t.move(self.x + self.w * 0.5, self.y + (self.h + self.fsize) * 0.5)
def tryMoveTo(self, i, j):
if mp[i][j] == None:
if i == self.I:
if j == self.J - 1:
self.moveTo(self.I, j)
return True
if j == self.J + 2:
self.moveTo(self.I, j - 1)
return True
return False
if abs(i - self.I) == 1:
if mp[i][self.J] == None and mp[i][self.J + 1] == None:
self.moveTo(i, self.J)
return True
return False
return False
def moveTo(self, i, j):
mp[self.I][self.J] = None
mp[self.I][self.J + 1] = None
mp[i][j] = self
mp[i][j+1] = self
self.setIJ(i, j)
class Zhangfei(Hero):
def __init__(self):
Hero.__init__(self)
self.w = self.cw
self.h = self.cw * 2
self.b = box(0, 0, self.w, self.h, "blue", "red")
self.t1 = text("张", 0, 0, self.fsize, "red", "center")
self.t2 = text("飞", 0, 0, self.fsize, "red", "center")
def update(self):
super().update()
self.t1.move(self.x + self.w * 0.5, self.y + self.h * 0.5 - self.fsize * 0.5)
self.t2.move(self.x + self.w * 0.5, self.y + self.h * 0.5 + self.fsize * 0.5)
def tryMoveTo(self, i, j):
if mp[i][j] == None:
if j == self.J:
if i == self.I - 1:
self.moveTo(i, self.J)
return True
if i == self.I + 2:
self.moveTo(i - 1, self.J)
return True
return False
if abs(j - self.J) == 1:
if mp[self.I][j] == None and mp[self.I + 1][j] == None:
self.moveTo(self.I, j)
return True
return False
return False
def moveTo(self, i, j):
mp[self.I][self.J] = None
mp[self.I + 1][self.J] = None
mp[i][j] = self
mp[i + 1][j] = self
self.setIJ(i, j)
class Machao(Zhangfei):
def __init__(self):
Zhangfei.__init__(self)
self.t1.change("马")
self.t2.change("超")
class Zhaoyun(Zhangfei):
def __init__(self):
Zhangfei.__init__(self)
self.t1.change("赵")
self.t2.change("云")
class Huangzhong(Zhangfei):
def __init__(self):
Zhangfei.__init__(self)
self.t1.change("黄")
self.t2.change("忠")
class Bing(Hero):
def __init__(self):
Hero.__init__(self)
self.w = self.cw
self.h = self.cw
self.b = box(0, 0, self.w, self.h, "blue", "red")
self.t = text("兵", 0, 0, self.fsize, "red", "center")
def update(self):
super().update()
self.t.move(self.x + self.w * 0.5, self.y + (self.h + self.fsize) * 0.5)
def tryMoveTo(self, i, j):
if mp[i][j] == None:
if i == self.I and abs(j - self.J) == 1:
self.moveTo(i, j)
return True
if j == self.J and abs(i - self.I) == 1:
self.moveTo(i, j)
return True
return False
def moveTo(self, i, j):
mp[self.I][self.J] = None
mp[i][j] = self
self.setIJ(i, j)
caocao = Caocao()
guanyu = Guanyu()
zhangfei = Zhangfei()
machao = Machao()
zhaoyun = Zhaoyun()
huangzhong = Huangzhong()
bing1 = Bing()
bing2 = Bing()
bing3 = Bing()
bing4 = Bing()
txt = text("恭喜过关", 200, "yellow", "center")
txt.hide()
mp = []
def reset():
global isPlaying, mp, curHr, txt
global zhangfei, caocao, machao, zhaoyun, guanyu, huangzhong
global bing1, bing2, bing3, bing4
txt.hide()
mp = [
[zhangfei, caocao, caocao, machao]
,[zhangfei, caocao, caocao, machao]
,[zhaoyun, guanyu, guanyu, huangzhong]
,[zhaoyun, bing2, bing3, huangzhong]
,[bing1, None, None, bing4]
]
zhangfei.setIJ(0, 0)
caocao.setIJ(0, 1)
machao.setIJ(0, 3)
zhaoyun.setIJ(2, 0)
guanyu.setIJ(2, 1)
huangzhong.setIJ(2, 3)
bing1.setIJ(4, 0)
bing2.setIJ(3, 1)
bing3.setIJ(3, 2)
bing4.setIJ(4, 3)
isPlaying = True
if curHr != None:
curHr.unChoose()
curHr = None
def checkWin():
global isPlaying
if caocao.I == 3 and caocao.J == 1:
isPlaying = False
txt.show()
def loop():
pass
def tap():
global isPlaying, mp, curHr
if not isPlaying:
reset()
return
ij = xy2ij(x, y)
if ij[0] < 0 or ij[0] > 4 or ij[1] < 0 or ij[1] > 3:
return
hr = mp[ij[0]][ij[1]]
if hr == curHr:
return
if hr == None:
if curHr != None:
if curHr.tryMoveTo(ij[0], ij[1]):
checkWin()
else:
if curHr:
curHr.unChoose()
curHr = hr
curHr.choose()
reset()
也可以下载代码,本地python环境运行(用pygame封装了xdf库)。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。