当前位置:   article > 正文

Pygame简易版2048小游戏:超详细解说,看完还不会可以剁手了(附完整源码)_2048小游戏代码的每步解析

2048小游戏代码的每步解析

 导语

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

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

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

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

篇简单版本的吧!

正文

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

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

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

1024 + 1024 = 2048!

正式开始:

  1. # 练习1:定义函数,将列表中0元素,移动到末尾。
  2. # [2,0,2,0] --> [2,2,0,0]
  3. # [0,4,2,4] --> [4,2,4,0]
  4. # 适合零基础同学
  5. def zero_to_end(list_target):
  6. # 选出非零元素 形成新列表
  7. # [2, 0, 2, 0] --> [2, 2]
  8. new_list = []
  9. for item in list_target:
  10. if item != 0:
  11. new_list.append(item)
  12. # 追加零元素 [2, 2] --> [2,2,0,0]
  13. # 判断原列表零元素数量: list_target.count(0)
  14. for i in range(list_target.count(0)):
  15. new_list.append(0)
  16. # 返回新列表
  17. return new_list
  18. # def zero_to_end(list_target):
  19. # # 选出非零元素 形成新列表
  20. # # [2, 0, 2, 0] --> [2, 2]
  21. # new_list = [item for item in list_target if item != 0]
  22. # # 重复生成零元素 [0] * list_target.count(0)
  23. # new_list += [0] * list_target.count(0)
  24. # # 返回新列表
  25. # return new_list
  26. # 同学方法
  27. # def zero_to_end(list_target):
  28. # # 删除零元素 在后面追加
  29. # for item in list_target:
  30. # if item == 0:
  31. # list_target.remove(0)
  32. # list_target.append(item)
  33. # # 返回新列表
  34. # return list_target
  35. # 测试
  36. # print(zero_to_end([1, 0, 0, 2]))
  37. # print(zero_to_end([0, 4, 2, 4]))
  38. # 练习2:定义合并相同(不相邻也可以)列表元素的函数
  39. # [2,2,0,0] --> [4,0,0,0]
  40. # [2,0,2,0] --> [4,0,0,0]
  41. # [2,2,2,0] --> [4,2,0,0]
  42. # [4,2,0,4] --> [4,2,4,0]
  43. # [0,0,2,4] --> [2,4,0,0]
  44. # 提示:
  45. # 0元素移动到末尾
  46. # 相邻相同合并
  47. # list[0] == list[1]
  48. def merge(list_target):
  49. # 1.将零元素移动到末尾 [2,0,2,0] --> [2,2,0,0]
  50. list_target = zero_to_end(list_target)
  51. # 2. 合并
  52. for i in range(len(list_target) - 1):
  53. # 如果非零元素 相邻且相同
  54. if list_target[i] != 0 and list_target[i] == list_target[i + 1]:
  55. # 将后一个元素累加到前一个元素上
  56. list_target[i] += list_target[i + 1]
  57. # 讲后一个元素清零
  58. list_target[i + 1] = 0
  59. # 3. 将零元素移动到末尾 [2,2,2,0] --> [4,0,2,0] -->[4,2,0,0]
  60. list_target = zero_to_end(list_target)
  61. return list_target
  62. # print(merge([2,2,2,0]))
  63. # 练习3:定义在控制台中绘制2048地图的函数 11:33
  64. def print_atlas(list_atlas):
  65. # 00 01 02 03
  66. for r in range(len(list_atlas)):
  67. for c in range(len(list_atlas[r])):
  68. print(list_atlas[r][c], end=" ")
  69. print()
  70. atlas01 = [
  71. [2, 0, 0, 2],
  72. [8, 0, 4, 4],
  73. [2, 2, 0, 4],
  74. [0, 2, 4, 0],
  75. ]
  76. print_atlas(atlas01)
  77. # 练习4:在控制台中打印第二行,与第四行元素。
  78. # 第一列,与第三列元素。
  79. # 第二行
  80. # for c in range(4):
  81. # print(atlas01[1][c], end=" ")
  82. # print()
  83. # # 第四行
  84. # for c in range(4):
  85. # print(atlas01[3][c], end=" ")
  86. # print()
  87. # # 第一列
  88. # for r in range(4):
  89. # print(atlas01[r][0])
  90. # # 第三列
  91. # for r in range(4):
  92. # print(atlas01[r][2])
  93. # 练习5,定义向上移动的函数
  94. # 提示:将二维列表每列元素形成一维列表,交给合并merge函数,再还给二维列表
  95. def move_up(atlas): # 15:30
  96. # 将二维列表第一列元素形成一维列表,
  97. # 00 10 20 30
  98. for c in range(4):
  99. list_merge = []
  100. for r in range(4):
  101. list_merge.append(atlas[r][c])
  102. # 交给合并merge函数
  103. list_merge = merge(list_merge)
  104. # 再还给二维列表
  105. for r in range(4):
  106. atlas[r][c] = list_merge[r]
  107. return atlas
  108. # resutl = move_up(atlas01)
  109. # print_atlas(resutl)
  110. # 扩展作业1:定义向左移动的函数
  111. def move_left(atlas):
  112. for r in range(4):
  113. # 从左到右依次获取行
  114. list_merge = []
  115. for c in range(4):
  116. # 00 01 02 03
  117. list_merge.append(atlas[r][c])
  118. list_merge = merge(list_merge)
  119. for c in range(4):
  120. atlas[r][c] = list_merge[c]
  121. return atlas
  122. # resutl = move_left(atlas01)
  123. # print_atlas(resutl)
  124. # 扩展作业2:定义向下移动的函数
  125. # 30 20 10 00
  126. def move_down(atlas):
  127. for c in range(4):
  128. list_merge = []
  129. # 从下至上获取二维列表列元素
  130. for r in range(3,-1,-1):
  131. list_merge.append(atlas[r][c])
  132. list_merge = merge(list_merge)
  133. # 从左至右获取一维列表元素
  134. # 从下至上还给二维列表
  135. for r in range(3, -1, -1):
  136. atlas[r][c] = list_merge[3 -r] # 0 1 2 3
  137. return atlas
  138. def move_right(atlas):
  139. for r in range(4):
  140. list_merge = []
  141. for c in range(3, -1, -1):
  142. list_merge.append(atlas[r][c])
  143. list_merge=merge(list_merge)
  144. for c in range(3, -1, -1):
  145. atlas[r][c] = list_merge[3 - c]
  146. return atlas
  147. # resutl = move_down(atlas01)
  148. # print_atlas(resutl)
  149. # 扩展作业3:定义向右移动的函数
  150. while True:
  151. shell = input("请输入玩家指令wsad:")
  152. if shell=="w":
  153. move_up(atlas01)
  154. print_atlas(atlas01)
  155. elif shell=="s":
  156. move_down(atlas01)
  157. print_atlas(atlas01)
  158. elif shell=="a":
  159. move_left(atlas01)
  160. print_atlas(atlas01)
  161. elif shell=="d":
  162. move_right(atlas01)
  163. print_atlas(atlas01)
  164. else:
  165. print("输入错误")

效果如下:

图片

​总结

好啦好啦!不慌不慌,这款简单的2048其实没什么趣味性滴,下一篇的话给大家上2048小游戏的

界面化版本呢~好玩界面还很还原~无限接近原版,嘿嘿,如果你喜欢玩游戏的话可以关注小编哦~

往期还有很多游戏源码啦!

完整的素材等:滴滴我吖!或者点击文末自取免费拿的哈~

还有更多更多源码等你来领区啦!

文章汇总——

汇总: Python文章合集 | (入门到实战、游戏、Turtle、案例等)

(文章汇总还有更多你案例等你来学习啦~源码找我即可免费!)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/191984
推荐阅读
相关标签
  

闽ICP备14008679号