数字华容道游戏介绍,华容道编程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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。