首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python实现2048游戏

今天带大家完成一份终端版2048游戏

2048游戏还是很经典的

首先还是新建一个空白的棋盘

```python

def screen_into():#棋盘初始化

  for i in range(4):

      list_width = []

      for j in range(4):

          list_width.append(' ')

      screen.append(list_width)

```

然后是棋盘的显示函数

```python

def screen_print():#打印棋盘

  print('——' * 13)

  for i in range(4):

      print('|',end=' ')

      for j in range(4):

          print(' '+screen[i][j],end='  | ')

      print()

      print('——'*13)

```

2048必不可少的随机生成棋子

```python

def produce_chess():#随机生成棋子

  global screen

  while True:

      x=random.randint(0,3)

      y=random.randint(0,3)

      if screen[x][y]==' ':

          screen[x][y]=str(num[random.randint(0,2)])

          break

```

然后是判断是否游戏结束

```python

def referee():#裁判

  dete=False

  for i in range(4):

      for j in range(4):

          if screen[i][j]==' ':

              dete=True

  if not dete:

      for i in range(4):

          for j in range(3):

              if screen[i][j]==screen[i][j+1]:

                  dete=True

      for j in range(4):

          for i in range(3):

              if screen[i][j]==screen[i+1][j]:

                  dete=True

  return dete

```

游戏操作的上下左右 四个函数

```python

def move_w():#往上

  global screen

  dete=False

  for k in range(3):

      for i in range(1,4):#判断是否可以移动

          for j in range(4):

              if screen[i][j]!=screen[i-1][j] and screen[i-1][j]==' ':

                  screen[i][j],screen[i-1][j]=screen[i-1][j],screen[i][j]

                  dete=True

                  if i>1:

                      if screen[i-1][j]!=screen[i-2][j] and screen[i-2][j]==' ':

                          screen[i-1][j],screen[i-2][j]=screen[i-2][j],screen[i-1][j]

                          if i>2:

                              if screen[i-2][j]!=screen[i-3][j] and screen[i-3][j]==' ':

                                  screen[i-2][j],screen[i-3][j]=screen[i-3][j],screen[i-2][j]

      for i in range(1,4):#判定是否相同 相同则合成(下同)

          for j in range(4):

              if screen[i][j]==screen[i-1][j] and screen[i][j]!=' ':

                  screen[i-1][j]=str(int(screen[i][j])+int(screen[i-1][j]))

                  screen[i][j]=' '

                  dete = True

                  if i>1:

                      if screen[i][j]==screen[i-1][j] and screen[i][j]!=' ':

                          screen[i-1][j]=str(int(screen[i][j])+int(screen[i-1][j]))

                          screen[i][j]=' '

                          screen[i-1][j],screen[i-2][j]=screen[i-2][j],screen[i-1][j]

                          if i>2:

                              if screen[i][j]==screen[i-1][j] and screen[i][j]!=' ':

                                  screen[i-1][j]=str(int(screen[i][j])+int(screen[i-1][j]))

                                  screen[i][j]=' '

                                  screen[i-1][j],screen[i-2][j]=screen[i-2][j],screen[i-1][j]

                                  screen[i-2][j],screen[i-3][j]=screen[i-3][j],screen[i-2][j]

  if dete:

      produce_chess()

  screen_print()

def move_s():#往下

  global screen

  dete=False

  for k in range(3):

      for i in range(2,-1,-1):

          for j in range(4):

              if screen[i][j]!=screen[i+1][j] and screen[i+1][j]==' ':

                  screen[i][j],screen[i+1][j]=screen[i+1][j],screen[i][j]

                  dete = True

                  if i

                      if screen[i+1][j]!=screen[i+2][j] and screen[i+2][j]==' ':

                          screen[i+1][j],screen[i+2][j]=screen[i+2][j],screen[i+1][j]

                          if i

                              if screen[i+2][j]!=screen[i+3][j] and screen[i+3][j]==' ':

                                  screen[i+2][j],screen[i+3][j]=screen[i+3][j],screen[i+2][j]

      for i in range(2,-1,-1):

          for j in range(4):

              if screen[i][j]==screen[i+1][j] and screen[i][j]!=' ':

                  screen[i+1][j]=str(int(screen[i][j])+int(screen[i+1][j]))

                  screen[i][j]=' '

                  dete = True

                  if i

                      if screen[i][j]==screen[i+1][j] and screen[i][j]!=' ':

                          screen[i+1][j]=str(int(screen[i][j])+int(screen[i+1][j]))

                          screen[i][j]=' '

                          screen[i+1][j],screen[i+2][j]=screen[i+2][j],screen[i+1][j]

                          if i

                              if screen[i][j]==screen[i+1][j] and screen[i][j]!=' ':

                                  screen[i+1][j]=str(int(screen[i][j])+int(screen[i+1][j]))

                                  screen[i][j]=' '

                                  screen[i+1][j],screen[i+2][j]=screen[i+2][j],screen[i+1][j]

                                  screen[i+2][j],screen[i+3][j]=screen[i+3][j],screen[i+2][j]

  if dete:

      produce_chess()

  screen_print()

def move_a():#往左

  global screen

  dete = False

  for k in range(3):

      for i in range(4):

          for j in range(1,4):

              if screen[i][j]!=screen[i][j-1] and screen[i][j-1]==' ':

                  screen[i][j],screen[i][j-1]=screen[i][j-1],screen[i][j]

                  dete = True

                  if j>1:

                      if screen[i][j-1]!=screen[i][j-2] and screen[i][j-2]==' ':

                          screen[i][j-1],screen[i][j-2]=screen[i][j-2],screen[i][j-1]

                          if j>2:

                              if screen[i][j-2]!=screen[i][j-3] and screen[i][j-3]==' ':

                                  screen[i][j-2],screen[i][j-3]=screen[i][j-3],screen[i][j-2]

      for i in range(4):

          for j in range(1,4):

              if screen[i][j]==screen[i][j-1] and screen[i][j]!=' ':

                  screen[i][j-1]=str(int(screen[i][j])+int(screen[i][j-1]))

                  screen[i][j]=' '

                  dete = True

                  if j>1:

                      if screen[i][j]==screen[i][j-1] and screen[i][j]!=' ':

                          screen[i][j-1]=str(int(screen[i][j])+int(screen[i][j-1]))

                          screen[i][j]=' '

                          screen[i][j-1],screen[i][j-2]=screen[i][j-2],screen[i][j-1]

                          if j>2:

                              if screen[i][j]==screen[i][j-1] and screen[i][j]!=' ':

                                  screen[i][j-1]=str(int(screen[i][j])+int(screen[i][j-1]))

                                  screen[i][j]=' '

                                  screen[i][j-1],screen[i][j-2]=screen[i][j-2],screen[i][j-1]

                                  screen[i][j-2],screen[i][j-3]=screen[i][j-3],screen[i][j-2]

  if dete:

      produce_chess()

  screen_print()

def move_d():#往右

  global screen

  dete = False

  for k in range(3):

      for i in range(4):

          for j in range(2,-1,-1):

              if screen[i][j]!=screen[i][j+1] and screen[i][j+1]==' ':

                  screen[i][j],screen[i][j+1]=screen[i][j+1],screen[i][j]

                  dete = True

                  if j

                      if screen[i][j+1]!=screen[i][j+2] and screen[i][j+2]==' ':

                          screen[i][j+1],screen[i][j+2]=screen[i][j+2],screen[i][j+1]

                          if j

                              if screen[i][j+2]!=screen[i][j+3] and screen[i][j+3]==' ':

                                  screen[i][j+2],screen[i][j+3]=screen[i][j+3],screen[i][j+2]

      for i in range(4):

          for j in range(2,-1,-1):

              if screen[i][j]==screen[i][j+1] and screen[i][j]!=' ':

                  screen[i][j+1]=str(int(screen[i][j])+int(screen[i][j+1]))

                  screen[i][j]=' '

                  dete = True

                  if j

                      if screen[i][j]==screen[i][j+1] and screen[i][j]!=' ':

                          screen[i][j+1]=str(int(screen[i][j])+int(screen[i][j+1]))

                          screen[i][j]=' '

                          screen[i][j+1],screen[i][j+2]=screen[i][j+2],screen[i][j+1]

                          if j

                              if screen[i][j]==screen[i][j+1] and screen[i][j]!=' ':

                                  screen[i][j+1]=str(int(screen[i][j])+int(screen[i][j+1]))

                                  screen[i][j]=' '

                                  screen[i][j+1],screen[i][j+2]=screen[i][j+2],screen[i][j+1]

                                  screen[i][j+2],screen[i][j+3]=screen[i][j+3],screen[i][j+2]

  if dete:

      produce_chess()

  screen_print()

```

计算总成绩的函数

```python

def score():#总成绩

  score_sum=0

  for i in range(4):

      for j in range(4):

          score_sum+=int(screen[i][j])

  return score_sum

```

完整代码如下

```python

import random

screen=[]

num=[2,4,8]

def screen_into():#棋盘初始化

  for i in range(4):

      list_width = []

      for j in range(4):

          list_width.append(' ')

      screen.append(list_width)

def screen_print():#打印棋盘

  print('——' * 13)

  for i in range(4):

      print('|',end=' ')

      for j in range(4):

          print(' '+screen[i][j],end='  | ')

      print()

      print('——'*13)

def produce_chess():#随机生成棋子

  global screen

  while True:

      x=random.randint(0,3)

      y=random.randint(0,3)

      if screen[x][y]==' ':

          screen[x][y]=str(num[random.randint(0,2)])

          break

def referee():#裁判

  dete=False

  for i in range(4):

      for j in range(4):

          if screen[i][j]==' ':

              dete=True

  if not dete:

      for i in range(4):

          for j in range(3):

              if screen[i][j]==screen[i][j+1]:

                  dete=True

      for j in range(4):

          for i in range(3):

              if screen[i][j]==screen[i+1][j]:

                  dete=True

  return dete

def move_w():#往上

  global screen

  dete=False

  for k in range(3):

      for i in range(1,4):#判断是否可以移动

          for j in range(4):

              if screen[i][j]!=screen[i-1][j] and screen[i-1][j]==' ':

                  screen[i][j],screen[i-1][j]=screen[i-1][j],screen[i][j]

                  dete=True

                  if i>1:

                      if screen[i-1][j]!=screen[i-2][j] and screen[i-2][j]==' ':

                          screen[i-1][j],screen[i-2][j]=screen[i-2][j],screen[i-1][j]

                          if i>2:

                              if screen[i-2][j]!=screen[i-3][j] and screen[i-3][j]==' ':

                                  screen[i-2][j],screen[i-3][j]=screen[i-3][j],screen[i-2][j]

      for i in range(1,4):#判定是否相同 相同则合成(下同)

          for j in range(4):

              if screen[i][j]==screen[i-1][j] and screen[i][j]!=' ':

                  screen[i-1][j]=str(int(screen[i][j])+int(screen[i-1][j]))

                  screen[i][j]=' '

                  dete = True

                  if i>1:

                      if screen[i][j]==screen[i-1][j] and screen[i][j]!=' ':

                          screen[i-1][j]=str(int(screen[i][j])+int(screen[i-1][j]))

                          screen[i][j]=' '

                          screen[i-1][j],screen[i-2][j]=screen[i-2][j],screen[i-1][j]

                          if i>2:

                              if screen[i][j]==screen[i-1][j] and screen[i][j]!=' ':

                                  screen[i-1][j]=str(int(screen[i][j])+int(screen[i-1][j]))

                                  screen[i][j]=' '

                                  screen[i-1][j],screen[i-2][j]=screen[i-2][j],screen[i-1][j]

                                  screen[i-2][j],screen[i-3][j]=screen[i-3][j],screen[i-2][j]

  if dete:

      produce_chess()

  screen_print()

def move_s():#往下

  global screen

  dete=False

  for k in range(3):

      for i in range(2,-1,-1):

          for j in range(4):

              if screen[i][j]!=screen[i+1][j] and screen[i+1][j]==' ':

                  screen[i][j],screen[i+1][j]=screen[i+1][j],screen[i][j]

                  dete = True

                  if i

                      if screen[i+1][j]!=screen[i+2][j] and screen[i+2][j]==' ':

                          screen[i+1][j],screen[i+2][j]=screen[i+2][j],screen[i+1][j]

                          if i

                              if screen[i+2][j]!=screen[i+3][j] and screen[i+3][j]==' ':

                                  screen[i+2][j],screen[i+3][j]=screen[i+3][j],screen[i+2][j]

      for i in range(2,-1,-1):

          for j in range(4):

              if screen[i][j]==screen[i+1][j] and screen[i][j]!=' ':

                  screen[i+1][j]=str(int(screen[i][j])+int(screen[i+1][j]))

                  screen[i][j]=' '

                  dete = True

                  if i

                      if screen[i][j]==screen[i+1][j] and screen[i][j]!=' ':

                          screen[i+1][j]=str(int(screen[i][j])+int(screen[i+1][j]))

                          screen[i][j]=' '

                          screen[i+1][j],screen[i+2][j]=screen[i+2][j],screen[i+1][j]

                          if i

                              if screen[i][j]==screen[i+1][j] and screen[i][j]!=' ':

                                  screen[i+1][j]=str(int(screen[i][j])+int(screen[i+1][j]))

                                  screen[i][j]=' '

                                  screen[i+1][j],screen[i+2][j]=screen[i+2][j],screen[i+1][j]

                                  screen[i+2][j],screen[i+3][j]=screen[i+3][j],screen[i+2][j]

  if dete:

      produce_chess()

  screen_print()

def move_a():#往左

  global screen

  dete = False

  for k in range(3):

      for i in range(4):

          for j in range(1,4):

              if screen[i][j]!=screen[i][j-1] and screen[i][j-1]==' ':

                  screen[i][j],screen[i][j-1]=screen[i][j-1],screen[i][j]

                  dete = True

                  if j>1:

                      if screen[i][j-1]!=screen[i][j-2] and screen[i][j-2]==' ':

                          screen[i][j-1],screen[i][j-2]=screen[i][j-2],screen[i][j-1]

                          if j>2:

                              if screen[i][j-2]!=screen[i][j-3] and screen[i][j-3]==' ':

                                  screen[i][j-2],screen[i][j-3]=screen[i][j-3],screen[i][j-2]

      for i in range(4):

          for j in range(1,4):

              if screen[i][j]==screen[i][j-1] and screen[i][j]!=' ':

                  screen[i][j-1]=str(int(screen[i][j])+int(screen[i][j-1]))

                  screen[i][j]=' '

                  dete = True

                  if j>1:

                      if screen[i][j]==screen[i][j-1] and screen[i][j]!=' ':

                          screen[i][j-1]=str(int(screen[i][j])+int(screen[i][j-1]))

                          screen[i][j]=' '

                          screen[i][j-1],screen[i][j-2]=screen[i][j-2],screen[i][j-1]

                          if j>2:

                              if screen[i][j]==screen[i][j-1] and screen[i][j]!=' ':

                                  screen[i][j-1]=str(int(screen[i][j])+int(screen[i][j-1]))

                                  screen[i][j]=' '

                                  screen[i][j-1],screen[i][j-2]=screen[i][j-2],screen[i][j-1]

                                  screen[i][j-2],screen[i][j-3]=screen[i][j-3],screen[i][j-2]

  if dete:

      produce_chess()

  screen_print()

def move_d():#往右

  global screen

  dete = False

  for k in range(3):

      for i in range(4):

          for j in range(2,-1,-1):

              if screen[i][j]!=screen[i][j+1] and screen[i][j+1]==' ':

                  screen[i][j],screen[i][j+1]=screen[i][j+1],screen[i][j]

                  dete = True

                  if j

                      if screen[i][j+1]!=screen[i][j+2] and screen[i][j+2]==' ':

                          screen[i][j+1],screen[i][j+2]=screen[i][j+2],screen[i][j+1]

                          if j

                              if screen[i][j+2]!=screen[i][j+3] and screen[i][j+3]==' ':

                                  screen[i][j+2],screen[i][j+3]=screen[i][j+3],screen[i][j+2]

      for i in range(4):

          for j in range(2,-1,-1):

              if screen[i][j]==screen[i][j+1] and screen[i][j]!=' ':

                  screen[i][j+1]=str(int(screen[i][j])+int(screen[i][j+1]))

                  screen[i][j]=' '

                  dete = True

                  if j

                      if screen[i][j]==screen[i][j+1] and screen[i][j]!=' ':

                          screen[i][j+1]=str(int(screen[i][j])+int(screen[i][j+1]))

                          screen[i][j]=' '

                          screen[i][j+1],screen[i][j+2]=screen[i][j+2],screen[i][j+1]

                          if j

                              if screen[i][j]==screen[i][j+1] and screen[i][j]!=' ':

                                  screen[i][j+1]=str(int(screen[i][j])+int(screen[i][j+1]))

                                  screen[i][j]=' '

                                  screen[i][j+1],screen[i][j+2]=screen[i][j+2],screen[i][j+1]

                                  screen[i][j+2],screen[i][j+3]=screen[i][j+3],screen[i][j+2]

  if dete:

      produce_chess()

  screen_print()

def score():#总成绩

  score_sum=0

  for i in range(4):

      for j in range(4):

          score_sum+=int(screen[i][j])

  return score_sum

def main():

  screen_into()

  produce_chess()

  screen_print()

  while referee():

      user=input('请输入你的操作(wasd代表上下左右)')

      if user=='w' or user=='W':

          move_w()

      elif user=='s' or user=='S':

          move_s()

      elif user=='a' or user=='A':

          move_a()

      elif user=='d' or user=='D':

          move_d()

      else:

          print('指令错误,重新输入')

  print('游戏结束,你的成绩为:',score())

  input('输入任何字符退出游戏')

if __name__=='__main__':

  main()

```

效果图如下:

一起学习python,小白指导,教学分享记得私信我

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210101A0DDRK00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券