为了账号安全,请及时绑定邮箱和手机立即绑定

用python编写简易2048,代码运行时为什么一直提示invalid syntax?

用python编写简易2048,代码运行时为什么一直提示invalid syntax?

qq_缱绻流年_03682441 2017-01-07 10:13:07
如图,而且一直是在def位置提示错误import random#导入随机数from tkinter import*def add_number():#这是用于添加新块的函数    number=[]#定义一个空列表用于存储序号    for j in range(4):        for i in range(4):            if keyboard[j][i]==0:                number.append([j,i])#找到所有没有数字的位置    length=len(number)    if length==0:        Label(game,text="game over").pack()        exit    k=random.randint(0,length-1)    c=number[k][0]    d=number[k][1]    keyboard[c][d]=2#在没有数字的位置添加2    def origin():    for j in range(4):        for i in range(4):            keyboard[j][i]=key[j][i]            #注:在表达两个列表相同时,要用循环逐一判断其中元素。            #key=keyboard的写法是不正确的。    change()def Right(event):    for j in range(4):        for i in range(4):            key[j][i]=keyboard[j][i]    for j in range(4): #对于同一行数        a=['0']*4       #a表示读到的这些数有没有被加过,没有则为0,有则为1        #避免出现合并后的块再次被合并的情况        i=2        while i>=0:               n=1          #初始化n,n表示向右移动几位            while (i+n)<=3:    #通过循环得出每个数需要上移几位                if keyboard[j][i+n]==0:                    keyboard[j][i+n]=keyboard[j][i+n-1]                    keyboard[j][i+n-1]=0#若为空则上移一位                elif keyboard[j][i+n-1]==keyboard[j][i+n] and a[i+n]=='0' and a[i+n-1]=='0':                    keyboard[j][i+n]=keyboard[j][i+n-1]*2                    keyboard[j][i+n-1]=0                    a[i+n]='1'     #记录上面格已经加过一次                    a[i+n-1]='0'   #下面的格初始化                n=n+1            i=i-1    add_number()    change()    def Left(event):    for j in range(4):        for i in range(4):            key[j][i]=keyboard[j][i]    for j in range(0,4): #对于同一行数        a=['0']*4       #a表示读到的这些数有没有被加过,没有则为0,有则为1,避免出现合并后的块再次被合并的情况        for i in range(1,4):                n=1          #初始化n,n表示向上移动几位            while (i-n)>=0:    #通过循环得出每个数需要上移几位                if keyboard[j][i-n]==0:                    keyboard[j][i-n]=keyboard[j][i-n+1]                    keyboard[j][i-n+1]=0#若为空则上移一位                elif keyboard[j][i-n]==keyboard[j][i-n+1] and a[i-n]=='0' and a[i-n+1]=='0':                    keyboard[j][i-n]=keyboard[j][i-n+1]*2                    keyboard[j][i-n+1]=0                    a[i-n]='1'     #记录上面格已经加过一次                    a[i-n+1]='0'   #下面的格初始化                n=n+1    add_number()    change()    def Upward(event):    for j in range(4):        for i in range(4):            key[j][i]=keyboard[j][i]    for i in range(0,4): #对于同一列数        a=['0']*4       #a表示读到的这些数有没有被加过,没有则为0,有则为1,避免出现合并后的块再次被合并的情况        for j in range(1,4):                n=1          #初始化n,n表示向上移动几位            while (j-n)>=0:    #通过循环得出每个数需要上移几位                if keyboard[j-n][i]==0:                    keyboard[j-n][i]=keyboard[j-n+1][i]                    keyboard[j-n+1][i]=0#若为空则上移一位                elif keyboard[j-n][i]==keyboard[j-n+1][i] and a[j-n]=='0' and a[j-n+1]=='0':                    keyboard[j-n][i]=keyboard[j-n+1][i]*2                    keyboard[j-n+1][i]=0                    a[j-n]='1'     #记录上面格已经加过一次                    a[j-n+1]='0'   #下面的格初始化                n=n+1    add_number()    change()def Downward(event):    for j in range(4):        for i in range(4):            key[j][i]=keyboard[j][i]    for i in range(4):        a=['0']*4        j=2        while j >=0:            n=1            while(j+n)<=3:                if keyboard[j+n][i]==0:                    keyboard[j+n][i]=keyboard[j+n-1][i]                    keyboard[j+n-1][i]=0#若为空则上移一位                elif keyboard[j+n][i]==keyboard[j+n-1][i] and a[j+n]=='0' and a[j+n-1]=='0':                    keyboard[j+n][i]=keyboard[j+n-1][i]*2                    keyboard[j+n-1][i]=0                    a[j+n]='1'     #记录上面格已经加过一次                    a[j+n-1]='0'   #下面的格初始化                n=n+1            j=j-1    add_number()    change()def change():    color_map = {0:('white'),2: ('#eee4da'),                 4: ( '#ede0c8'), 8: ( '#f2b179'),                 16: ('#f2b179'),32: ( '#f67c5f'),                 64: ('#f65e3b'),128:('#edcf72'),                 256: ( '#edcc61'),512: ('#edc850'),                 1024: ('#f9f6f2'), 2048: ('#f9f6f2')}    #定义一个字典,颜色和色块相对应    for j in range(4):        for i in range(4):            if keyboard[j][i]!=0:                btns[j][i]['text']=keyboard[j][i]            else:                btns[j][i]['text']=('')            btns[j][i]['background']=color_map[keyboard[j][i]def panduan():    for j in range(4):        for i in range(4):            if keyboard[j][i]!=key[j][i]:                add_number()                pass#用于判断在进行移动变换后整个数据是否有变。如果没有变化,则不能生成新的2    key=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]#先定义一个全是0的列表keyboard=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]#keyboard0为基准列表,用于存储上一步的原始数据,用于还原上一步操作a=random.randint(0,3)b=random.randint(0,3)keyboard[a][b]=2#游戏初始化时, 手动随机生成一个位置,把2放上去game=Tk()game.geometry('320x400')#设定一个320x400的GUI窗口,取名为game,主窗口btns = []#定义了一个名为btns(buttons)的列表,用于存储界面上16个button的信息#为什么2048的方块要使用button呢?在实际游戏中,2048用的都是较有立体感的滑块,#因此用button比较有质感,和按钮的功能无关。for j in range(4):    btns.append([])    for i in range(4):        btns[j].append(            Button(game,width=10,height=5))        btns[j][i].place(x=80*i,y=80*j)#利用4x4循环把这些button都写出来,并放到指定位置。#自己在写这里时犯了一个逻辑上的小错误,把x\y放反了,导致函数逻辑出现错误。origin=Button(game,text='return',command=origin).place(x=200,y=360)#返回上一步的函数,即显示的数字均根据操作前的来显示。这里有个小问题是不能返回多步。change()game.bind("<KeyPress-d>",Right)game.bind("<KeyPress-a>",Left)game.bind("<KeyPress-w>",Upward)game.bind("<KeyPress-s>",Downward)代码原文如下
查看完整描述
  • 3 回答
  • 1 关注
  • 2274 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信