开始页面
如果你想体验一下
http://gabrielecirulli.github.io/2048
源代码
https://pan.baidu.com/s/1_LoS5QsQwjG3NQz_8pAGHg
提取码2sgz
借鉴一下大佬的
https://blog.csdn.net/weixin_42668123/article/details/82381568
2048游戏规则:简单的移动方向键让数字叠加,并且获得这些数字每次叠加后的得分,当出现2048这个数字时游戏胜利。同时每次移动方向键时,都会在这个4*4的方格矩阵的空白区域随机产生一个数字2或者4,如果方格被数字填满了,那么就GameOver了
生成一个4*4的矩阵用于进行游戏
field = [[0 for j in range(4)] for i in range(4)]
调用random函数在矩阵中随机位置创建数字
import random
def random_create():
i = random.choice(range(4))
j = random.choice(range(4))
value = random.choice([2,2,2,4])
field[i][j] = value
将生成的图像画出来
def draw_sep():
print('+-----' * 4 + '+')
def draw_num(row):
print(''.join('|{:^5}'.format(num) if num != 0 else '| ' for num in row) + '|')
for row in li:
draw_sep()
draw_num(row)
draw_sep()
判断一下你的数字是否可以移动
如果第一个是0下一个不是0就可以移动
def is_row_change(row):
# row
# 判断一行内容是否可以移动
def is_change(i):
# 判断每两个元素之间是否可以移动
if row[i] == 0 and row[i + 1] != 0:
return True
if row[i] != 0 and row[i + 1] == row[i]:
return True
else:
return False
return any([is_change(index) for index in range(len(row) - 1)])
如果可以移动,具体怎么操作
def is_move_left(field):
return any([is_row_change(row) for row in field])
def is_move_right(field):
# 对于列表元素进行反转
field = invert(field)
print(field)
return is_move_left(field)
def is_move_up(field):
# 对于列表元素进行转置
field = transpose(field)
return is_move_left(field)
def is_move_down(field):
# 反转+ 转置
field = transpose(field)
return is_move_right(field)
棋盘移动在相加
def tight(row): # [2, 0, 2, 0]
# 最快的方式, 通过排序实现...........
return sorted(row, key=lambda x: if x == 0 )
score = 0
# 相加
def merge(row): # [2,2,0,0]
# [0,1,2]
for i in range(len(row)-1):
# 如果两个值相等, 前一个元素*2, 后一个元素改为0。
if row[i] == row[i+1]:
row[i] *= 2
row[i+1] = 0
# 如果覆盖成功, 就给得分
global score
score += row[i]
return row
具体的上下左右的移动
def move_row_left(self, row):
return self.tight(self.merge(self.tight(row)))
def move_left(self, field):
return [self.move_row_left(row) for row in field]
def move_right(self, field):
field = self.invert(field)
return self.invert([self.move_row_left(row) for row in field])
def move_up(self, field):
return self.transpose([self.move_row_left(row) for row in self.transpose(field)])
def move_down(self, field):
return self.invert(self.transpose([self.move_row_left(row)
for row in self.invert(self.transpose(field))]))
判断胜负
出现2048为胜利
无法移动为输
def victory(field):
li = [y for row in li for y in row]
if max(li) >= 2048:
print('Victory')
def game_over(filed):
if all((is_move_left(filed), is_move_right(filed), is_move_up(filed), is_move_down(filed))) == False:
print('Game Over')