国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > 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)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 藁城市| 临高县| 井冈山市| 林口县| 弥勒县| 辽宁省| 六盘水市| 丰县| 盐津县| 环江| 合川市| 多伦县| 丹棱县| 宁明县| 宜章县| 珠海市| 宜良县| 松桃| 兴海县| 桑植县| 家居| 喀什市| 潮州市| 巴林右旗| 册亨县| 孝感市| 鹤壁市| 馆陶县| 巴塘县| 五台县| 南城县| 米脂县| 游戏| 锦屏县| 古蔺县| 抚顺市| 独山县| 永宁县| 锡林郭勒盟| 弥渡县| 类乌齐县|