20193420 敖轶凡《Python程序设计》实验报告四
Posted 敖轶凡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20193420 敖轶凡《Python程序设计》实验报告四相关的知识,希望对你有一定的参考价值。
一、所用的python知识
1.python基础知识:数据类型、变量、list、循环和判断等;
2.python进阶知识:函数、切片、迭代以及类的基础用法等;
3.模块:numpy模块中矩阵相关的操作;random模块中的几个简单函数;
二、游戏设计思路
首先要有一个用于我们存储阵列数组(也就是游戏里要显示的那些数字)的东西,可以用list或者矩阵,我选择的是矩阵,主要是考虑用list部分操作实现起来比较麻烦,但是python中没有内置这种数据类型,所以用了第三方的模块numpy。
然后就是考虑设计一个类,将游戏的属性设计成类的属性,将游戏的各种操作定义为类的方法,这样以后不管是扩充功能还是修改起来都比较方便。
三、源代码
#!/usr/bin/env python3
#coding: utf-8
import numpy
import numpy as np
import random
from random import choice
class Game2048(object):
‘‘‘2048游戏的类‘‘‘
def __init__(self):#定义类属性
self.dimension = dimension #维数,决定要构建几维的数组
self.matrix = np.zeros((dimension,dimension)) #创建一个全是0的n(n = dimension)维数组
def judge_gameover(self):#判断是否游戏结束
pass
def generate_num(self):#在随机的空白(为0)的位置替换为1个随机的2或者4
pass
def left_2048(self):#向左平移合并
pass
def right_2048(self):#向右平移合并
pass
def down_2048(self):#向下平移合并
pass
def up_2048(self):#向上平移合并
pass
def print_2048(self):#显示
pass
def input_2048(self):#输入
pass
if __name__ == ‘__main__‘:#主程序
pass
四、程序设计
这个游戏最难最核心的地方在如何实现向滑动方向平移数字并将符合条件的数字合并,可以先考虑一个方向上的,我是考虑的向左方向的,然后其他方向上的都快可以通过矩阵的水平垂直变换变成向左方向的,完成平移合并的操作后再变换回来就可以了,这样可以减少代码量,也降低了难度。
具体到每个方法的思路后续慢慢补全,注释写的比较细,应该比较容易看懂,建议新手也养成规范写注释的习惯,方便别人也方便自己。
以下源代码:
#!/usr/bin/env python3
#coding: utf-8
import numpy
import numpy as np
import random
from random import choice
class Game2048(object):
‘‘‘2048游戏的类‘‘‘
‘‘‘
属性:
self.dimension
self.matrix
方法:
judge_gameover(self)
generate_num(self)
left_2048(self)
right_2048(self)
down_2048(self)
up_2048(self)
print_(self)
input_(self)
‘‘‘
def __init__(self,dimension = 4):
self.dimension = dimension #维数,决定要构建几维的矩阵
self.matrix = np.zeros((dimension,dimension)) #创建一个全是0的n(n = dimension)维矩阵
def judge_gameover(self):#判断是否游戏结束,如果游戏结束返回True,未结束则返回False
‘‘‘如果水平方向上任意两个相邻的数字有相等的或者有为0的那么游戏未结束‘‘‘
for a in range(0,self.dimension):
for b in range(0,self.dimension-1):
if self.matrix[a][b] == self.matrix[a][b+1] or self.matrix[a][b] == 0 or self.matrix[a][b+1] == 0:
return False
‘‘‘如果垂直方向上任意两个相邻的数字有相等的或者有为0的那么游戏未结束‘‘‘
self.matrix = np.transpose(self.matrix)#先转置垂直方向变作水平方向 eg:[[1,2],[3,4]]>>[[1,3],[2,4]]
for a in range(0,self.dimension):
for b in range(0,self.dimension-1):
if self.matrix[a][b] == self.matrix[a][b+1] or self.matrix[a][b] == 0 or self.matrix[a][b+1] == 0:
return False
return True
def generate_num(self):#在随机的空白(为0)的位置替换为1个随机的2或者4
‘‘‘在随机的空白(为0)的位置替换为1个随机的2或者4‘‘‘
#判断矩阵内为零的数的位置,并将索引放入到list_0中
list_0 = []
for a in range(0,self.