清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
# _*_utf-8_*_
SCREEN_SIZE = (640,480)
import pygame
from pygame.locals import *
from gameobjects.vector2 import Vector2
from sys import exit
import random
background_filename = 'C:\\python32\\sushiplate.jpg'
image_file_name = '2048-1.jpg'
class Cell(object):
'''
this is for one small cell,
can hold the file path,
'''
def __init__(self, num, pos_x, pos_y):
self.num = num
self.file_name = '2048-' + str(num) + '.jpg'
self.position = Vector2(pos_x, pos_y)
self.image = pygame.image.load(self.file_name).convert()
def get(self):
return self.num
def set(self,num):
self.num = num
self.file_name = '2048-' + str(num) + '.jpg'
self.image = pygame.image.load(self.file_name).convert()
def add(self, cell):
self.num += cell.num
self.set(self.num)
def isEqual(self, instanse):
if self.num == instanse.num:
return True
else:
return False
def draw(self):
screen.blit(self.image, self.position)
def clear(self):
self.num = 0
self.set(self.num)
def randomPlace(cells):
ran_num = [2,4]
place = random.choice(range(16))
for cell in cells:
if cell.num == 0:
break
else:
return
if cells[place].num == 0:
cells[place].set(random.choice(ran_num))
return
else:
randomPlace(cells)
def gameInit(cells):
Start = 0
if len(cells) == 0:
for i in range(16):
c = i/4
y = i % 4
cells.append(Cell(Start,y*60 + 100 , c * 60 + 100))
'''
else:
for i in range(16):
cells[i].set(Start)
cells[8].clear()
cells[10].clear()
cells[1].clear()
cells[15].clear()
'''
randomPlace(cells)
randomPlace(cells)
def display(screen, background, cells):
screen.blit(background,(0,0))
for i in range(16):
cells[i].draw()
def move_x(cells, flag):
if not flag:# to left move
for k in range(4): #move by row
i = k *4
while i < k*4 + 4:
if cells[i].num != 0:
i += 1
continue
j = i + 1
while j < k*4 +4:
if cells[j].num == 0:
j += 1
continue
else:
cells[i].set(cells[j].num)
cells[j].clear()
j += 1
i += 1
break
else:
i += 1
else:
for k in range(4):
i = k*4+3
while i >=k*4:
if cells[i].num != 0:
i -= 1
continue
j = i-1
while j >=k*4:
if cells[j].num == 0:
j -= 1
continue
else:
cells[i].set(cells[j].num)
cells[j].clear()
j -= 1
i -= 1
break
else: # this is for while
i -= 1
def move_y(cells, flag):
if not flag:
for k in range(4):
for i in range(3):
if cells[i*4 + k].num != 0:
i += 1
continue
j = i +1
while j < 4:
if cells[j*4 + k].num == 0:
j += 1
continue
else:
cells[i*4 + k].set(cells[j*4 + k].num)
cells[j*4 + k].clear()
i += 1
j += 1
else:# this is for while
i += 1
elif flag:
for k in range(4):
i = 3
while i >= 0:
if cells[i*4 + k].num != 0:
i -= 1
continue
j = i - 1
while j >= 0:
if cells[j*4 + k].num == 0:
j -= 1
continue
else:
cells[i*4 + k].set(cells[j*4 + k].num)
cells[j*4 + k].clear()
i -= 1
j -= 1
else:
i -= 1
if __name__ == '__main__':
pygame.init()
screen = pygame.display.set_mode(SCREEN_SIZE, 0, 32)
background = pygame.image.load(background_filename).convert()
cells = []
gameInit(cells)
deal_flag = True
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
exit()
if event.type == KEYDOWN and event.key == K_ESCAPE:
pygame.quit()
exit()
if event.type == KEYUP:
deal_flag = True
#to store all the pressed keys
pressed_keys = pygame.key.get_pressed()
# the space key to reset the game
if pressed_keys[K_SPACE]:
gameInit(cells)
# Left button is to move left
if pressed_keys[K_LEFT] and deal_flag:
deal_flag = False
move_x(cells, 0)
for k in range(4):
i = k*4
while i < k*4+3:
if cells[i].isEqual(cells[i+1]):
cells[i].add(cells[i+1])
cells[i+1].clear()
i += 1
move_x(cells, 0)
randomPlace(cells)
# right button is to move right
if pressed_keys[K_RIGHT] and deal_flag:
deal_flag = False
move_x(cells, 1)
for k in range(4):
i = k*4+3
while i > k*4:
if cells[i].isEqual(cells[i-1]):
cells[i].add(cells[i-1])
cells[i-1].clear()
i -= 1
move_x(cells, 1)
randomPlace(cells)
# up button is to move up
if pressed_keys[K_UP] and deal_flag:
deal_flag = False
move_y(cells, 0)
for k in range(4):
for i in range(3):
if cells[i*4 + k].isEqual(cells[(i+1)*4 + k]):
cells[i*4 + k].add(cells[(i+1)*4 + k])
cells[(i+1)*4 + k].clear()
move_y(cells, 0)
randomPlace(cells)
# down button is to move down
if pressed_keys[K_DOWN] and deal_flag:
deal_flag = False
move_y(cells, 1)
for k in range(4):
for i in range(3, -1, -1):
if cells[i*4 + k].isEqual(cells[(i-1)*4 + k]):
cells[i*4 + k].add(cells[(i-1)*4 + k])
cells[(i-1)*4 + k].clear()
move_y(cells, 1)
randomPlace(cells)
display(screen, background, cells)
pygame.display.update()