麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Python > 正文

python pygame實現2048游戲

2020-02-15 23:45:04
字體:
來源:轉載
供稿:網友

實現2048相對來說比較簡單,用4*4的二維數組保存地圖,pygame.key.get_pressed()獲取鍵盤操作,詳見代碼。

效果圖

代碼

# -*- coding: utf-8 -*-#!/usr/bin/python'''Created on May 31, 2014@author: yuanzi'''import randomimport sysimport pygamefrom pygame.locals import * PIXEL = 150SCORE_PIXEL = 100SIZE = 4 # 地圖的類class Map:  def __init__(self, size):    self.size = size    self.score = 0    self.map = [[0 for i in range(size)] for i in range(size)]    self.add()    self.add()    # 新增2或4,有1/4概率產生4  def add(self):    while True:      p = random.randint(0, self.size * self.size - 1)      if self.map[p / self.size][p % self.size] == 0:        x = random.randint(0, 3) > 0 and 2 or 4        self.map[p / self.size][p % self.size] = x        self.score += x        break    # 地圖向左靠攏,其他方向的靠攏可以通過適當旋轉實現,返回地圖是否更新  def adjust(self):    changed = False    for a in self.map:      b = []      last = 0      for v in a:        if v != 0:          if v == last:            b.append(b.pop() << 1)            last = 0          else:            b.append(v)            last = v      b += [0] * (self.size - len(b))      for i in range(self.size):        if a[i] != b[i]:          changed = True      a[ : ] = b    return changed    # 逆時針旋轉地圖90度  def rotate90(self):    self.map = [[self.map[c][r] for c in range(self.size)] for r in reversed(range(self.size))]    # 判斷游戲結束  def over(self):    for r in range(self.size):      for c in range(self.size):        if self.map[r][c] == 0:          return False    for r in range(self.size):      for c in range(self.size - 1):        if self.map[r][c] == self.map[r][c + 1]:          return False    for r in range(self.size - 1):      for c in range(self.size):        if self.map[r][c] == self.map[r + 1][c]:          return False    return True    def moveUp(self):    self.rotate90()    if self.adjust():      self.add()    self.rotate90()    self.rotate90()    self.rotate90()    def moveRight(self):    self.rotate90()    self.rotate90()    if self.adjust():      self.add()    self.rotate90()    self.rotate90()    def moveDown(self):    self.rotate90()    self.rotate90()    self.rotate90()    if self.adjust():      self.add()    self.rotate90()    def moveLeft(self):    if self.adjust():      self.add() # 更新屏幕def show(map):  for i in range(SIZE):    for j in range(SIZE):      # 背景顏色塊      screen.blit(map.map[i][j] == 0 and block[(i + j) % 2] or block[2 + (i + j) % 2], (PIXEL * j, PIXEL * i))      # 數值顯示      if map.map[i][j] != 0:        map_text = map_font.render(str(map.map[i][j]), True, (106, 90, 205))        text_rect = map_text.get_rect()        text_rect.center = (PIXEL * j + PIXEL / 2, PIXEL * i + PIXEL / 2)        screen.blit(map_text, text_rect)  # 分數顯示  screen.blit(score_block, (0, PIXEL * SIZE))  score_text = score_font.render((map.over() and "Game over with score " or "Score: ") + str(map.score), True, (106, 90, 205))  score_rect = score_text.get_rect()  score_rect.center = (PIXEL * SIZE / 2, PIXEL * SIZE + SCORE_PIXEL / 2)  screen.blit(score_text, score_rect)  pygame.display.update() map = Map(SIZE)pygame.init()screen = pygame.display.set_mode((PIXEL * SIZE, PIXEL * SIZE + SCORE_PIXEL))pygame.display.set_caption("2048")block = [pygame.Surface((PIXEL, PIXEL)) for i in range(4)]# 設置顏色block[0].fill((152, 251, 152))block[1].fill((240, 255, 255))block[2].fill((0, 255, 127))block[3].fill((225, 255, 255))score_block = pygame.Surface((PIXEL * SIZE, SCORE_PIXEL))score_block.fill((245, 245, 245))# 設置字體map_font = pygame.font.Font(None, PIXEL * 2 / 3)score_font = pygame.font.Font(None, SCORE_PIXEL * 2 / 3)clock = pygame.time.Clock()show(map) while not map.over():  # 12為實驗參數  clock.tick(12)  for event in pygame.event.get():    if event.type == QUIT:      sys.exit()  # 接收玩家操作  pressed_keys = pygame.key.get_pressed()  if pressed_keys[K_w] or pressed_keys[K_UP]:    map.moveUp()  elif pressed_keys[K_s] or pressed_keys[K_DOWN]:    map.moveDown()  elif pressed_keys[K_a] or pressed_keys[K_LEFT]:    map.moveLeft()  elif pressed_keys[K_d] or pressed_keys[K_RIGHT]:    map.moveRight()  show(map) # 游戲結束pygame.time.delay(3000)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久夜草 | 成人在线视频一区 | 免费嗨片首页中文字幕 | 中国久久久 | 国产九九热视频 | 国产欧美在线一区二区三区 | 亚洲生活片 | 久久精品女人天堂av | 亚洲va久久久噜噜噜久牛牛影视 | 黄色成人小视频 | 国产精品视频一区二区噜噜 | 欧美日韩免费一区二区三区 | 91久久久久久久 | 亚洲欧美成aⅴ人在线观看 免费看欧美黑人毛片 | 免费看成人av | 久久亚洲线观看视频 | 亚洲爱爱图 | 亚洲视频在线一区二区 | 国产69精品福利视频 | 99亚洲伊人久久精品影院红桃 | 国产一区二区影视 | 久久撸视频 | 91丝袜| 亚洲片在线观看 | 国产亚洲精品综合一区91555 | 亚洲成人高清在线观看 | 久久成人午夜视频 | 91色一区二区三区 | 欧美成人精品一区二区男人小说 | 精国产品一区二区三区 | 国产羞羞视频在线观看免费应用 | 免费a网| 91午夜视频 | 国产一区日韩精品 | 亚洲性生活免费视频 | 午夜精品在线视频 | 狠狠久久伊人中文字幕 | 国产成人在线网址 | 国产精品久久久久无码av | 精品国产高清一区二区三区 | 亚洲精品成人久久 |