首页 > 代码库 > python版2048游戏

python版2048游戏

闲来无聊,电脑上的游戏也被删了,自己动手写了个2048,目前只是实现了基本的游戏功能,代码还比较弱:

百度盘:http://pan.baidu.com/s/1eQpJbgQ

gui代码如下:

#!/usr/bin/python# -*- coding: utf-8 -*-#导入tkinterimport Tkinter   import game2048_Classimport sysdef refreshGui():	n = len(game.nlist)	for i in range(n):		for j in range(n):			if game.nlist[i][j] == 0:				button_list[i][j][‘text‘] = ‘ ‘			else:				button_list[i][j][‘text‘] = game.nlist[i][j]#定义的方法 监听键盘事件def printkey(event):    print(‘input: ‘ + event.char)    input_chr = event.char    if ( ( input_chr == "s") & ( game.start_flag == 0) ):    	game.start_flag = 1    elif ( input_chr == "q" ):    	sys.exit(0)    else:    	game.nlistModify(input_chr)    	if (game.move_flag):    		game.randomNum()    		game.isEnd()    		if (game.end_flag) :    			sys.exit(0)    refreshGui()game = game2048_Class.game2048(4)iwindow = Tkinter.Tk()iwindow.wm_title("2048")button_list = []num_game_list = len(game.nlist)for i in range(num_game_list):#初始化2048矩阵	button_list.append([])	for j in range(num_game_list):								button = Tkinter.Button(iwindow)		button[‘text‘] = ‘ ‘					button[‘width‘] = 6		button[‘height‘] = 3					button.grid(row = i,column = j)		button_list[i].append(button)iwindow.bind_all(‘<Key>‘, printkey)#显示窗体iwindow.mainloop()

game_2048的类如下:

#!/usr/bin/python# -*- coding: utf-8 -*-"""2048 gameVersion:    2014-11-19Author:     zyh"""import randomimport sysimport osimport pythoncom import pyHook   class game2048:	"""docstring for game2048"""	n = 0 #维度	nlist = [] #矩阵	numlist = [2,2,2,4] #取值数组	start_flag = 0 #游戏开始标志	end_flag = 0 #游戏结束标志	move_flag = 0 #移动是否有效标志	#2048 初始化函数	def __init__(self, n):		self.n = n		for i in range(self.n):#初始化2048矩阵			self.nlist.append([])			for j in range(self.n):				#self.nlist[i][j] = 0				self.nlist[i].append(0)		#########<随机两个位置为2或4>#############				x_first = random.randint(0,self.n-1)		y_first = random.randint(0,self.n-1)		self.nlist[x_first][y_first] = random.choice(self.numlist)		x_second = random.randint(0,self.n-1)		y_second = random.randint(0,self.n-1)		while ( (x_second == x_first) & (y_second == y_first) ):			x_second = random.randint(0,self.n-1)			y_second = random.randint(0,self.n-1)		self.nlist[x_second][y_second] = random.choice(self.numlist)		#########</随机两个位置为2或4>#############	def nlistModify(self,action):		#根据用户输入的上i、下k、左j、右l,图形进行相应的变化		originalMatrix = [] #保存原始矩阵,用于判断矩阵是否发生了变化		for i in range(self.n): #初始化原始矩阵			originalMatrix.append([])			for j in range(self.n):				#self.nlist[i][j] = 0				originalMatrix[i].append(self.nlist[i][j])		#print "originalMatrix1:",originalMatrix		#self.outPut(originalMatrix)		nlistModify = []		nlistModifyBack = []		self.move_flag = 0 #用于判定本次用户输入方向的移动是否有效		if( action == ‘i‘ ):#矩阵向上移动			for i in range(self.n):				#print self.n,i				nlistModify.append([row[i] for row in self.nlist])#将矩阵的列变成行			#print "nlistModify_matrix:"			#self.outPut(nlistModify)			nlistModify = self.matrixMove(nlistModify)#矩阵向左移动			#print "nlistModify_matrix_move:"			#self.outPut(nlistModify)			for i in range(self.n):				#print self.n,i				nlistModifyBack.append([row[i] for row in nlistModify])#将矩阵的列变成行			self.nlist = nlistModifyBack		elif( action == ‘j‘ ):#矩阵向左移动			self.nlist = self.matrixMove(self.nlist)			#print "nlistModify_self.nlist:",self.nlist		elif( action == ‘k‘ ):#矩阵向下移动			for i in range(self.n):				#print self.n,i				nlistModify.append([row[i] for row in self.nlist])#将矩阵的列变成行			for i in range(self.n):				nlistModify[i].reverse()#将矩阵的顺序左右颠倒			nlistModify = self.matrixMove(nlistModify)#矩阵向左移动			for i in range(self.n):				nlistModify[i].reverse()#将矩阵的顺序左右颠倒			for i in range(self.n):				#print self.n,i				nlistModifyBack.append([row[i] for row in nlistModify])#将矩阵的列变成行			self.nlist = nlistModifyBack		elif( action == ‘l‘ ):#矩阵向右移动			nlistModify = self.nlist			for i in range(self.n):				nlistModify[i].reverse()#将矩阵的顺序左右颠倒			nlistModify = self.matrixMove(nlistModify)#矩阵向左移动			nlistModifyBack = nlistModify			for i in range(self.n):				nlistModifyBack[i].reverse()#将矩阵的顺序左右颠倒			self.nlist = nlistModifyBack		else:			pass		#print "originalMatrix2:"		#self.outPut(originalMatrix)		#print "movedMatrix:"		#self.outPut(self.nlist)		for i in range(self.n):			for j in range(self.n):				if ( originalMatrix[i][j] != self.nlist[i][j] ):					self.move_flag = 1					break			if (self.move_flag):				break	def matrixMove(self,matrix):#矩阵从右向左移动,相同的数字合并,空余位置补0		m = matrix		#print "matrix:",matrix		length = len(matrix)		for i in range(length):			m[i] = self.listMove(m[i])			#print "m[i]:",m[i]		return m		#print "matrixMove_self.nlist:",self.nlist	def listMoveOnce(self,single_list):#每次合并一个数字		l = single_list		len_list = len(single_list)#列表的长度		#print "list:"		#print l		#print "listlength:"		#print len_list		flag = 0		zero_flag = 0		for i in range(len_list-1):			if  (l[i] == 0):				zero_flag = zero_flag + 1				continue			else:				j = i + 1				if (j<len_list):					while (l[j] == 0):						j = j + 1						if j > len_list -1 :							break						#print "j:",j						#print "len_list:",len_list						pass					if (j<len_list):						if (l[i] == l[j]):							l[i] = l[i] + l[j]							t_i = i + 1							t_j = j + 1							while (t_i < len_list)&(t_j < len_list):								l[t_i] = l[t_j]								t_i = t_i + 1								t_j = t_j + 1							while (t_i < len_list):								l[t_i] = 0								t_i = t_i + 1							flag = flag + 1				break		#print "l:",l		#print "j:",j		#print "zero_flag:",zero_flag		#print "zero_flag:",zero_flag		for k in range(len_list-zero_flag):			l[k] = l[k+zero_flag]		for t_k in range(zero_flag):			#print "k:",k			#print len_list-1-k			l[len_list-1-t_k] = 0		if flag == 0:			flag = 1		return flag , l	def listMove(self,single_list):#列表从后向前移动,相同的数字合并,空余位置补0		p = 0		len_list = len(single_list)#列表的长度		p,l = self.listMoveOnce(single_list)		while (p < len_list):			#print "p:"			#print p			q,l[p:] = self.listMoveOnce(single_list[p:])			#print "q:"			#print q			if(	q==0 ):				break			p = p + q		return l	def randomNum(self):		#根据用户输入,图形进行相应的变化后,剩余为0的位置随机出现2或4		zero_list = []		random_ij = []		for i in range(self.n):			for j in range(self.n):				if (self.nlist[i][j] == 0):					temp_ij = [i,j]					zero_list.append(temp_ij)		random_ij = random.choice(zero_list)		self.nlist[random_ij[0]][random_ij[1]] = random.choice(self.numlist)	def isEnd(self):		#判断游戏是否结束		originalMatrix = self.nlist #保存原始矩阵,用于判断完成后,恢复原始矩阵		self.end_flag = 1		for i in range(self.n):			for j in range(self.n):				if (self.nlist[i][j] == 0):					self.end_flag = 0					break			if (self.end_flag == 0) :				break		for m in [‘i‘,‘j‘,‘k‘,‘l‘]:			self.nlistModify(m)			if self.move_flag == 1:				self.end_flag = 0				break		self.nlist = originalMatrix	#2048 输出函数	def outPut(self,matrix):		#print "self.nlist:",self.nlist		os.system(‘cls‘)		n = len(matrix)		for i in range(n):			#for j in range(n):			#	print matrix[i][j],"\t"			#	pass			print matrix[i]		print "                                      "if __name__=="__main__":    game = game2048(4)    #game.userInput()    #print game.nlist    #game.outPut(game.nlist)    #game.randomNum()    #game.outPut(game.nlist)    game.nlist = [[8,16,8,2],[32,2,8,4],[4,32,8,2],[32,2,4,16]]    #game.nlist = [[0,0,0,0],[0,0,0,0],[0,0,0,4],[0,0,0,16]]    #game.nlist = [[0,0,0,0],[0,0,0,2],[0,0,0,4],[0,0,2,8]] #左移右移都无效    #game.outPut(game.nlist)    #print "game.move_flag:",game.move_flag    #game.nlistModify("j")    #print "game.move_flag:",game.move_flag    #game.outPut(game.nlist)    #f,l = game.listMoveOnce([2,0,0,0])    #print f    #print l    #print game.nlist    print "                                      "    #game.nlistModify(‘l‘)    #game.outPut(game.nlist)    #game.userInput()#    game.matrixMove(‘i‘)    #print game.listMoveOnce([0,0,0,0,2])

 

python版2048游戏