验证中...
语言: Python
分类: 编程语言基础
最后更新于 2018-02-14 16:48
gistfile1.txt
原始数据 复制代码
import pyHook
import random
import time
class Game():
def __init__(self,xnum=4,ynum=4):
self.xnum=xnum
self.ynum=ynum
self.score=0
#初始化用于随机出现的数字,只能随机出现2或4
self.randdata=[2,4]
#生成对应长度的列表用于存储棋盘上的数据
self.data=[[0 for i in range(0,xnum)] for i in range(0,ynum)]
def trans(self,lista):
'''二维列表的转置'''
listb=[[row[i] for row in lista] for i in range(len(lista[0]))]
return listb
def createdata(self):
'''在为0的位置中随机选一个位置随机生成2或4'''
#随机生成个数字2,4
self.thisdata=random.choice(self.randdata)
#遍历列表,把为0的位置存储起来
zero=[]
for i in range(0,len(self.data)):
for j in range(0,len(self.data[0])):
if(self.data[i][j]==0)
zeros.append((i,j))
#随机生成个数字2,4随机填到棋盘里面为0的位置中的其中一个位置上
self.thisposition=random.choive(zeros)
self.data[self.thisposition[0]][self.thisposition[1]]=self.thisdata
def Imerge(self):
'''左滑合并'''
for i in range(0,len(self.data)):
for j in range(1,len(self.data[0])):
#若相邻的两个元素值相同,进行合并操作
if(self.data[i][j-1])=self.data[i][j-1]*2
#统计当前得分
self.score=self.data[i][j-1]+self.score
#合并后靠右的那个元素已经被合并,故而对应位置的值清零
self.data[i][j]=0
def rmerge(self):
'''右滑合并'''
for i in range(0,len(self.data)):
for j in range(len(self.data[0])-1,0,-1):
#从右往左遍历
#若相邻的两个元素值相同,进行合并操作
if(self.data[i][j])==self.data[i][j-1]):
self.data[i][j]=self.data[i][j]*2
#统计当前得分
self.score=self.data[i][j]+self.score
#合并后靠左的那个元素已经被合并,故而对应位置的值清零
self.data[i][j-1]=0
def umerge(self):
trans_data=self.trans(self.data)
#------以左滑合并的方式处理开始-------
for i in range (0,len(trans_data)):
for j in range(1,len(trans_data[0])):
if (trans_data[i][j]==trans_data[i][j-1]):
trans_data[i][j-1]=trans_data[i][j-1]*2
self.score=trans_data[i][j-1]+self.score
trans_data[i][j]=0
#------以左滑合并的方式处理结束-------
#转置回来
self.data=self.trans(trans_data)
def dmerge(self):
'''下滑合并'''
trans_data=self.trans(self.data)
#------以右滑合并的方式处理开始--------
for i in range(0,len(trans_data)):
for j in range(len(self.data[0])-1,0,-1):
if(trans_data[i][j]=trans_data[i][j-1]):
trans_data[i][j]=trans_data[i][j]*2
self.score=trans_data[i][j]+self.score
trans_data[i][j-1]=0
#------以右滑合并的方式处理结束--------
#转置回来
self.data=self.trans(trans_data)
def left(self):
'''向左滑动操作对应的业务逻辑处理'''
#可以一行一行的处理
for i in range(0,len(self.data)):
thisline=self.data[i]
can_movepos=None
for j in range(0,len(thisline)):
#从左到右对元素进行处理
#判断是否为0
if(thisline[j]==0):
#判断其前面是否还有0
if(j!=0):
if(self.data[i][j]==self.data[i][j-1]):
#此时其前面还有0,所以can_movepos不用变化
pass
else:
can_movepos=j
else:can_movepos=j
else:
#此时为非0元素
#判断can_movepos是否存在并且小于j
if(can_movepos==None):
#不存在can_movepos,不移动
pass
else:
if(can_movepos<j):
#可以移动
self.data[i[[can_movepos]=thisline[j]
can_movepos+=1
self.data[i][j]=0
def right(self):
'''向右边滑动操作对应的业务逻辑出来'''
def up(self):
'''上滑处理'''
def down(self):
'''下滑处理'''
def show(self):
#输出钱的处理
#判断输赢,并输出得分
#先将棋盘数据转为一维列表data1便于统计
data1=sum(self.data,[])
#统计看看棋盘上面有没有值为2048的数字,若有则赢
if(data1.count(2048)>=1):
print('恭喜,您赢了!3秒后关闭程序!')
print('您的得分是:'+str(self.score))
time.sleep(3)
exit(0)
if(data1.count(0)==0):
print('棋盘已满,您输了!3秒后关闭程序!')
print('您的最终得分是:'+str(self.score))
time.sleep(3)
exit(0)
#如果尚未输赢,则继续输出棋盘
#输出对应的棋盘
print('您当前累计得分是'+str(self.score))
print('---------------------------------')
for i in range(0,len(self.data)):
for j in range(0,len(self.data[0])):
print(str(self.data[i][j]),end='\t')
print()
print('---------------------------------')
def listenanddo(self,mypresskey):
#获取当前按键

评论列表( 0 )

你可以在登录后,发表评论