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.
相关推荐
YENCSDN 2020-11-17
lsjweiyi 2020-11-17
houmenghu 2020-11-17
Erick 2020-11-17
HeyShHeyou 2020-11-17
以梦为马不负韶华 2020-10-20
lhtzbj 2020-11-17
夜斗不是神 2020-11-17
pythonjw 2020-11-17
dingwun 2020-11-16
lhxxhl 2020-11-16
坚持是一种品质 2020-11-16
染血白衣 2020-11-16
huavhuahua 2020-11-20
meylovezn 2020-11-20
逍遥友 2020-11-20
weiiron 2020-11-16