加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

自己实现的2048

发布时间:2020-12-17 17:08:59 所属栏目:Python 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 # _*_utf-8_*_SCREEN_SIZE = (640,480)import pygamefrom pygame.locals import *from gameobjects.vector2 import Vector2from sys import exitimpor

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

# _*_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:python32sushiplate.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,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,cells)
        
        pygame.display.update()

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读