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

如图,而且一直是在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("",Right)

game.bind("",Left)

game.bind("",Upward)

game.bind("",Downward)

代码原文如下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值