IT培训网 - IT职场人学IT技术上IT培训网
如何制作2048游戏 2048游戏开发详解
时间:2018-03-28 14:10:42 来源:编程网 作者:IT培训网 已有:名学员访问该课程
如何制作2048游戏?2048游戏开发是一款比较受欢迎的小游戏,学软件开发对于制作一个2048小游戏来讲,是非常易上手的,IT培训网小编将针对2048小游戏进行一个详细的分析,想学习的可以用来参考。
2048游戏制作思路
需要做的事情: 左右上下移动
随机生成2或者4填入地图中。
判断游戏结束
得分问题:()
步骤1:读取键盘的输入,判断输入选项,做相应的函数操作。
步骤2:做完相应的操作,判断是否为游戏结束。如果没有结束,重复步骤一。否则,退出游戏。
2048游戏开发详细步骤
算符1 移动算法,移动一行(左移)
# file : game2048.py
import random
map2048 = [[2, 0, 2, 4], # [0, 0, 4,4]
[2, 2, 4, 4],
[2, 0, 0, 4],
[4, 0, 4, 8]]
# 重新设置开始游戏的地图
def reset():
global map2048
map2048 = [[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]
fill_to_zero(2)
fill_to_zero(2)
fill_to_zero(4)
# 算法1
# 去除列表中的所有0
def _remove_zero(L):
try:
while True:
i = L.index(0)
# 否则将i指向的位置删除
L.pop(i)
except ValueError: # 结束执行删除0
pass
# 移动一行数据,自右至左滑动算法
def _left_shift(L):
old = L.copy()
# 第一步,将0全部删除
_remove_zero(L)
# 第二步,合并相邻两个相同值的元素,
# 将左侧值做乘2操作,将右侧的值置0
for i in range(len(L)-1): # 重复最多3次
if L[i] == L[i + 1]:
L[i] *= 2
L[i + 1] = 0
# 第三步,再次删除0
_remove_zero(L)
# 第四步,在长度不足4的列表中尾部添加0
while len(L) < 4:
L.append(0)
# 当新的列表与旧列表不同时,返回True
# 否则返回False
return L != old
# 左操作,将每一行都执行左移操作
def left():
ret = False
for r in map2048:
if _left_shift(r):
ret = True
return ret # ret (urn)
# 右操作,
def right():
ret = False
# 先将所有行左右反转
for r in map2048:
r.reverse()
# 再左移操作,
ret = left()
# 再左右反转回来
for r in map2048:
r.reverse()
return ret
# 上操作
def up():
ret = False
# 对每一列进行操作,i代表列索引
for i in range(4):
L = []
for r in map2048:
# 将每一行的第i列放入列表
L.append(r[i])
if _left_shift(L):
ret = True
# 再将列表入回原列中
for j in range(4):
map2048[j][i] = L[j]
return ret
# 下操作
def down():
map2048.reverse()
ret = up()
map2048.reverse()
return ret
def fill_to_zero(n):
L = []
for r in range(4):
for c in range(4):
if map2048[r][c] == 0:
L.append((r, c))
# 如果L 为空,则没有空位置,直接返回
if not L:
return
# 随机选择列表中的一个元素
i = random.choice(L)
r, c = i # 元组序列赋值
map2048[r][c] = n
# print(L)
def is_gameover():
# 遍历所有的行
for r in map2048:
# 如果行中出现0则,游戏没有结束
if r.count(0):
return False
# 每一行中的相邻元素相同,则游戏没有结束
for r in map2048:
for i in range(len(r) - 1):
if r[i] == r[i + 1]:
return False
# 每一列中的相邻元素相同,则游戏没有结束
for col in range(4): # col 为列
for i in range(3): # 行索引
if map2048[i][col] == map2048[i + 1][col]:
return False
# 以上都没有,则游戏失败
return True
# 初始化地图
reset()
def test():
line1 = [2, 0, 2, 4]
_left_shift(line1)
print(line1) # [4, 4, 0, 0]
line2 = [2, 2, 4, 4]
_left_shift(line2)
print(line2)
if __name__ == '__main__':
test()
每期开班座位有限.0元试听抢座开始!
温馨提示 : 请保持手机畅通,咨询老师为您
提供专属一对一报名服务。
- 上一篇:西安LINUX培训班老学员分享活动总结
- 下一篇:想学编程从哪里开始好