学习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库)。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。