Python+Pygame制作简易版2048小游戏

作者:嗨!栗子同学 时间:2022-12-01 18:05:03 

导语

哈喽!大家好,我是栗子,感谢大家的支持!

Python+Pygame制作简易版2048小游戏

新的一天,新气象,程序猿们的日常开始敲敲敲,改改改——今天给大家来一款简单的小游戏!

2048小游戏——准确的来说确实是一个简单版本的!

呐呐呐 ,主要是担心很多小伙伴儿直接上界面版本的看不懂,所以做了这款简单的2048,先看这篇简单版本的吧!

Python+Pygame制作简易版2048小游戏

为了搞懂这个游戏的规则,小编去直接下载了一款2048的小游戏,上手玩了一波!

然后.........完全停不下来!23333~

Python+Pygame制作简易版2048小游戏

玩法: 用手指或键盘上下左右滑动,将两个相同的数字合并,例如:2 + 2 = 4, 4 + 4 = 8... 直到

1024 + 1024 = 2048!

主要代码

# 练习1:定义函数,将列表中0元素,移动到末尾。
# [2,0,2,0]   -->  [2,2,0,0]
# [0,4,2,4]   -->  [4,2,4,0]

# 适合零基础同学
def zero_to_end(list_target):
   # 选出非零元素 形成新列表
   # [2, 0, 2, 0] -->  [2, 2]
   new_list = []
   for item in list_target:
       if item != 0:
           new_list.append(item)
           # 追加零元素 [2, 2] --> [2,2,0,0]
   # 判断原列表零元素数量: list_target.count(0)
   for i in range(list_target.count(0)):
       new_list.append(0)
       # 返回新列表
   return new_list

# def zero_to_end(list_target):
#     # 选出非零元素 形成新列表
#     # [2, 0, 2, 0] -->  [2, 2]
#     new_list = [item for item in list_target if item != 0]
#     # 重复生成零元素 [0] * list_target.count(0)
#     new_list += [0] * list_target.count(0)
#     # 返回新列表
#     return new_list

# 同学方法
# def zero_to_end(list_target):
#     # 删除零元素  在后面追加
#     for item in list_target:
#         if item == 0:
#             list_target.remove(0)
#             list_target.append(item)
#     # 返回新列表
#     return list_target

# 测试
# print(zero_to_end([1, 0, 0, 2]))
# print(zero_to_end([0, 4, 2, 4]))

# 练习2:定义合并相同(不相邻也可以)列表元素的函数
# [2,2,0,0]    -->  [4,0,0,0]
# [2,0,2,0]    -->  [4,0,0,0]
# [2,2,2,0]    -->  [4,2,0,0]
# [4,2,0,4]    -->  [4,2,4,0]
# [0,0,2,4]    -->  [2,4,0,0]
# 提示:
# 0元素移动到末尾
# 相邻相同合并
# list[0] == list[1]

def merge(list_target):
   # 1.将零元素移动到末尾 [2,0,2,0]    -->  [2,2,0,0]
   list_target = zero_to_end(list_target)
   # 2. 合并
   for i in range(len(list_target) - 1):
       # 如果非零元素  相邻且相同
       if list_target[i] != 0 and list_target[i] == list_target[i + 1]:
           # 将后一个元素累加到前一个元素上
           list_target[i] += list_target[i + 1]
           # 讲后一个元素清零
           list_target[i + 1] = 0
   # 3. 将零元素移动到末尾  [2,2,2,0]    -->  [4,0,2,0]  -->[4,2,0,0]
   list_target = zero_to_end(list_target)
   return list_target

# print(merge([2,2,2,0]))

# 练习3:定义在控制台中绘制2048地图的函数 11:33
def print_atlas(list_atlas):
   # 00   01   02   03
   for r in range(len(list_atlas)):
       for c in range(len(list_atlas[r])):
           print(list_atlas[r][c], end=" ")
       print()

atlas01 = [
   [2, 0, 0, 2],
   [8, 0, 4, 4],
   [2, 2, 0, 4],
   [0, 2, 4, 0],
]

print_atlas(atlas01)

# 练习4:在控制台中打印第二行,与第四行元素。
#                   第一列,与第三列元素。
# 第二行
# for c in range(4):
#     print(atlas01[1][c], end=" ")
# print()
# # 第四行
# for c in range(4):
#     print(atlas01[3][c], end=" ")
# print()
# # 第一列
# for r in range(4):
#     print(atlas01[r][0])
# # 第三列
# for r in range(4):
#     print(atlas01[r][2])

# 练习5,定义向上移动的函数
# 提示:将二维列表每列元素形成一维列表,交给合并merge函数,再还给二维列表
def move_up(atlas):  # 15:30
   # 将二维列表第一列元素形成一维列表,
   # 00  10   20  30
   for c in range(4):
       list_merge = []
       for r in range(4):
           list_merge.append(atlas[r][c])

# 交给合并merge函数
       list_merge = merge(list_merge)

# 再还给二维列表
       for r in range(4):
           atlas[r][c] = list_merge[r]
   return atlas

# resutl = move_up(atlas01)
# print_atlas(resutl)

# 扩展作业1:定义向左移动的函数
def move_left(atlas):
   for r in range(4):
       # 从左到右依次获取行
       list_merge = []
       for c in range(4):
           # 00  01  02  03
           list_merge.append(atlas[r][c])

list_merge = merge(list_merge)

for c in range(4):
           atlas[r][c] = list_merge[c]

return atlas

# resutl = move_left(atlas01)
# print_atlas(resutl)

# 扩展作业2:定义向下移动的函数
# 30   20   10  00
def move_down(atlas):
   for c in range(4):
       list_merge = []
       # 从下至上获取二维列表列元素
       for r in range(3,-1,-1):
           list_merge.append(atlas[r][c])

list_merge = merge(list_merge)

# 从左至右获取一维列表元素
       # 从下至上还给二维列表
       for r in range(3, -1, -1):
           atlas[r][c] = list_merge[3 -r]  # 0  1 2 3
   return atlas

def move_right(atlas):
   for r in range(4):
       list_merge = []
       for c in range(3, -1, -1):
           list_merge.append(atlas[r][c])

list_merge=merge(list_merge)

for c in range(3, -1, -1):
           atlas[r][c] = list_merge[3 - c]
   return atlas
# resutl = move_down(atlas01)
# print_atlas(resutl)

# 扩展作业3:定义向右移动的函数
while True:
   shell = input("请输入玩家指令wsad:")
   if shell=="w":
       move_up(atlas01)
       print_atlas(atlas01)
   elif shell=="s":
       move_down(atlas01)
       print_atlas(atlas01)
   elif shell=="a":
       move_left(atlas01)
       print_atlas(atlas01)
   elif shell=="d":
       move_right(atlas01)
       print_atlas(atlas01)
   else:
       print("输入错误")

效果图

Python+Pygame制作简易版2048小游戏

来源:https://blog.csdn.net/xy258009/article/details/122641062

标签:Python,Pygame,2048
0
投稿

猜你喜欢

  • python单例模式实例分析

    2021-11-02 12:17:49
  • Python入门教程 超详细1小时学会Python

    2023-06-13 23:34:12
  • golang的httpserver优雅重启方法详解

    2023-08-06 00:22:41
  • Golang检查变量类型的四种方式

    2024-04-27 15:26:11
  • 在Python3中使用asyncio库进行快速数据抓取的教程

    2022-04-10 06:41:44
  • Python进程池Pool应用实例分析

    2022-02-22 16:46:01
  • Python编程中对文件和存储器的读写示例

    2022-04-27 06:26:35
  • Python伪随机数模块random详解

    2022-12-21 01:06:39
  • 使用Python的Supervisor进行进程监控以及自动启动

    2022-11-19 16:55:35
  • MySQL实现replace函数的几种实用场景

    2024-01-24 20:32:23
  • Python urllib库如何添加headers过程解析

    2023-01-09 00:07:35
  • asp文章上一篇,下一篇实现代码

    2008-03-24 20:15:00
  • PHP获取表单所有复选框的值的方法

    2024-05-13 09:24:34
  • Python Pygame实现兔子猎人守护城堡游戏

    2021-09-21 11:09:59
  • PHP实现PDF转图片的详细过程(使用imagick)

    2023-09-07 13:27:34
  • 详解Python2.x中对Unicode编码的使用

    2022-12-01 10:58:04
  • js实时获得服务器上时间

    2008-11-25 13:55:00
  • Numpy中如何创建矩阵并等间隔抽取数据

    2023-01-14 16:21:16
  • 批量替换sqlserver数据库挂马字段并防范sql注入攻击的代码

    2024-01-28 08:03:47
  • golang实现http服务器处理静态文件示例

    2024-05-21 10:22:17
  • asp之家 网络编程 m.aspxhome.com