数字华容道游戏介绍,华容道编程Python

  数字华容道游戏介绍,华容道编程Python

  python基础运用1、定义块

  定义相应的块,每个块实际上是一个按钮,所以继承Button类。每个方块的基本数据除了方块的类型外,还包括左上角的坐标。一旦确定了方块的类型和坐标,就可以确定方块相应的作用和位置。正方形左上角的坐标由Point类的对象表示,在Block类中定义了一个属性位置。

  从tkinter导入* One=1;TowH=2;TowV=1;four=4 class point:def _ _ init _ _(self,x,y): #定义坐标x,y self。x=xself。y=y class block(Button):# block class def _ _ init _ _(self,p,blocktype,master,r,bm): Button。__init__(自身,主)自身。位置=p自我。BType=block type self[ text ]=r self[ image ]=BM self . bind( button press ,BTN _ MouseDown);self.bind(ButtonRelease ,BTN _ Release);self.place(x=self。位置. X*80,y=自身。位置. Y*80)2、定义初始坐标位置,判断条件

  坐标如下:

  每个模块相应地完成特定的操作,每个模块具有以下功能:

  (1)在block类中定义一个函数GetPoints来

  获得该正方形所占据的所有坐标位置的列表,

  你可以通过方块类型和左上角的坐标得到它。

  占据所有的坐标位置。

  (2)再次定义函数IsValid来判断该方是

  不,在比赛区域,如果任何部分出界,就

  没错,你可以坐在方型和左上角。

  来判断。

  (3)函数相交(块b)用于判断a

  该角色是否与另一个角色重叠,如果是

  是,返回True,通过获取两个角色各自的角色。

  根据点来判断是否有重叠。

  #定义游戏画面的初始位置def get points(self):plist=[]if self . btype==one:plist . append(self . location)elif self . btype==tow:plist . append(self . location)plist . append(Point(self .位置。X 1,自我。Location.Y)) elif self。BType==TowV: pList.append(self。位置)pList.append(点(自身。位置。X,自我。Location.Y 1)) elif self。BType==Four: pList.append(self。位置)pList.append(点(自身。位置。X,自我。location . Y 1))plist . append(Point(self。位置。X 1,自我。location . Y))plist . append(Point(self。位置。X 1,自我。Location.Y 1))返回pList def isValid(self,width,Height): #判断移动边界条件点数=self。get points()for I in points:if I . x0 or I . x=width or I . y0 or I . y=height:return false return true def interrupts(self,Block): #判断角色是否重叠my points=self . get points()other points=Block . get points()for I in my points:for j in other points:if I . x==j . x and I . y==j . y:return true return false3

  (1).定义游戏类并定义一些变量

  首先,它包括场地的宽度和高度,

  在华容道,宽4格,高5格。

  格,在类中定义变量Width=4;

  Height=5类定义了一个要保存的列表。

  游戏中所有的方块,一开始都是空的:

  Blocks=[],在类中定义另一个

  变量保存结束位置坐标,变量名

  和代码:finishPoint=Point(1,3)

  (2).在类中定义函数GetBlockByPos(self,p)获取指定位置的正方形。

  (3).AddBlock(self,Block)用于将块添加到块列表中,

  可以用来编辑游戏。判断要添加的方块是否已经在列表中,是否在有效范围内,是否与列表中任何已经存在的方块重叠。只有满足条件才能添加,代码显示。

  (4).定义函数MoveBlock用来移动字符的块。

  MoveBlock所做的是首先指向移动的方块。

  向某个方向移动,然后判断方块是否出界,是否

  与其他方块重叠,如果是,它将保持在原来的位置。

  否则,移动并更新位置。

  (5).定义函数GameWin来判断游戏是否赢了。

  显示该类的全局变量WinFlag的值。

  无论比赛是否赢了。将在函数MoveBlock中进行判断。

  dpdfh是否移动到位置(1,3)这个坐标,如果是

  则把WinFlag的值置为没错。

  班级游戏():#控制游戏模块,Width=4 Height=5 WinFlag=False Blocks=[]finish Point=Point(1,3) def GetBlockByPos(self,p): for i in self .块:如果i.Location.X==p.X和一.地点。Y==p . Y:return I return False def add block(self,block): if block in self .区块:如果不是block.isValid(self,则返回错误.宽度,自我身高):为我在自我中返回错误.区块:如果我。相交(区块):返回虚假自我Blocks.append(块)返回真实定义移动块(自身、块、方向):如果块不在自己中块:返回oldx=block .位置10 . X旧=块。如果direction==Up: block .位置。y-=1 elif direction== Down :block .位置。Y=1 elif direction== Left :block .位置。x-=1 elif direction== Right :block .位置。X=1 moveOK=True如果不是block。是有效的(自身.宽度,自我. Height): moveOK=False else:为了自我中的我块:如果(块不是我)和街区.相交(I):移动ok=假中断,如果移动ok==假:块.Location=Point(oldx,oldy)else:if block[ text ]= DPD FH and block .位置。X==1并阻塞。位置。Y==3:自我. WinFlag=True return moveOK def GameWin(self):返回自我WinFlagoldx=0 #保存方块移动之前的x轴坐标oldy=0 #保存方块移动之前的y轴坐标BlockSize=80 #方块的显示范围mouseDownPoint=Point(0,0)#鼠标按下位置mouseDown=False #标记鼠标是否按下定义Game控制游戏

  (1).控制游戏的全局变量

  oldx=0 #保存方块移动之前的x轴坐标

  oldy=0 #保存方块移动之前的y轴坐标

  BlockSize=80 #方块的显示范围

  mouseDownPoint=Point(0,0)#鼠标按下位置

  mouseDown=False #标记鼠标是否按下

  (2).函数btn_MouseDown(事件)

  处理鼠标按下的事件,

  把按下坐标值保存到各个变量。

  (3).函数btn_Realse(事件)

  处理鼠标松开的事件,根据鼠标拖动的水平和

  垂直方向偏移量超过方格大小1/3,

  则向此方向移动。

  def btn_MouseDown(事件):全局oldx,oldy,mouseDownPoint,MouseDown mouseDownPoint=Point(事件。x,事件。y)MouseDown=True oldx=event。x oldy=事件。y打印(事件。x,event.y)def btn_Release(event):全局oldx,oldy,鼠标按下点,鼠标按下如果不是MouseDown:返回moveH=event。x-鼠标按下点.X moveV=event.y-mouseDownPoint .y x=int(事件。小部件。place _ info()[ x ])//80y=int(event。小部件。place _ info()[ y ])//80 block=game .GetBlockByPos(Point(x,y)) if moveH=BlockSize//3: game .MoveBlock(block, Right )elif moveH=-block size//3:game .MoveBlock(block, Left )elif moveV=block size//3:game .MoveBlock(block, Down )elif moveV=-block size//3:game .MoveBlock(block, Up )else:return事件。小部件。place(x=block .位置. X*80,y=块地点。Y*80)如果游戏GameWin(): print(游戏胜利)mouseDown=False # win=Tk()win=Toplevel()win。标题(华容道游戏)赢。几何( 320 x400 )游戏=游戏()角色=[ DPD FH ,关羽,黄忠,大方的飞鸟,马超,赵云,兵,兵,兵,兵]BM=[PhotoImage(file= BMP \ \ % s . png %(I))for I in role]Block _ para=[(Point(1,0),Four),(Point(1,2),TowH),(Point(3,2),TowV),(Point(0,0),TowV),(Point(3,0),TowV),(Point(1,3),One,(Point(2,3),One),(Point(0,4),One),(Point(3,4),One)]AddBlock(b)win参考资料链接:https://pan . Baidu . com/s/1 sgqfoyjpsddcmnj 68 C4 ffw密码:rzqa

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: