首页
/
每日頭條
/
遊戲
/
合成2048小遊戲小程序
合成2048小遊戲小程序
更新时间:2024-09-28 22:13:57

合成2048小遊戲小程序?在一本書上找到的小遊戲實例,自己運行起來感覺比較有意思就發出來看看.,接下來我們就來聊聊關于合成2048小遊戲小程序?以下内容大家不妨參考一二希望能幫到您!

合成2048小遊戲小程序(Python--2048小遊戲)1

合成2048小遊戲小程序

在一本書上找到的小遊戲實例,自己運行起來感覺比較有意思就發出來看看.

其中有很多地方不是很懂,等到自己研究透徹了會更新帶全部注釋版本的.

對于pygame模塊還是在探索階段,大家要有什麼好的學習渠道可以在評論區留言,不勝感謝

import random import pygame import time import sys from pygame.locals import * import threading # 多線程模塊 SIZE = 4 # 2048的小格式4*4,尺寸暫定為4 LENGTH = 130 # 每個小格的邊長長度 SCORE_HEIGTH = 130 # 計分區占用高度 DEFAULT = (205, 193, 180) # 背景顔色 C_FONT = (120, 111, 102) # 字體顔色 C_2 = (238, 228, 218) C_4 = (237, 224, 200) C_8 = (242, 177, 121) C_16 = (245, 149, 99) C_32 = (246, 94, 59) C_64 = (246, 94, 59) C_128 = (237, 207, 114) C_256 = (237, 204, 98) C_512 = (237, 200, 80) C_1024 = (237, 197, 63) C_2048 = (225, 187, 0) ''' 建立獲取顔色的函數 ''' def get_color(n): n_t = 0 for i in range(1, 12): if n >> i == 1: n_t = i color = [ DEFAULT, C_2, C_4, C_8, C_16, C_32, C_64, C_128, C_256, C_512, C_1024, C_2048, C_FONT] return color[n_t] ''' 畫面内容控制 ''' class Map: def __init__(self, size): self.size = size self.map = [[0 for i in range(size)]for i in range(size)] self.score = 0 self.is_move = 0 self.add() self.add() def add(self): while True: pos = random.randint(0, self.size * self.size - 1) flag = self.map[pos // self.size][pos % self.size] if flag == 0: num = random.randint(0, 3) n = 2 if num == 0: n = 4 self.map[pos // self.size][pos % self.size] = n self.score = n break def failed(self): for i in self.map: for j in i: if j == 0: return False for i in range(0, self.size): for j in range(0, self.size): if (i - 1 > 0 and self.map[i][j] == self.map[i - 1][j])\ or (j - 1 >= 0 and self.map[i][j] == self.map[i][j - 1])\ or (i 1 < self.size and self.map[i][j] == self.map[i 1][j])\ or (j 1 < self.size and self.map[i][j] == self.map[i][j 1]): return False return True def check(self, num): for i in self.map: for j in i: if j == num: return True return False def move_to_left(self): changed = False for a in self.map: b = [] last = 0 for v in a: if v != 0: if v != last: b.append(v) last = v else: b.append(b.pop() * 2) last = 0 b = [0] * (self.size - len(b)) for i in range(0, self.size): if a[i] != b[i]: changed = True a[:] = b return changed def change(self): self.map = [[self.map[i][j] for i in reversed(range(self.size))]for j in range(self.size)] def move_left(self): if self.move_to_left(): self.is_move = 1 self.add() def move_up(self): self.change() self.change() self.change() if self.move_to_left(): self.is_move = 1 self.add() self.change() def move_right(self): self.change() self.change() if self.move_to_left(): self.is_move = 1 self.add() self.change() self.change() def move_down(self): self.change() if self.move_to_left(): self.is_move = 1 self.add() self.change() self.change() self.change() ''' 顯示控制部分 ''' def display(map, screen): block_font = pygame.font.Font(None, 86) score_font = pygame.font.Font(None, 86) screen.fill(DEFAULT) for i in range(map.size): for j in range(map.size): block = pygame.Surface((LENGTH, LENGTH)) block.fill(get_color(map.map[i][j])) font_surf = block_font.render(str(map.map[i][j]), True, C_FONT) font_rect = font_surf.get_rect() font_rect.center = ( j * LENGTH LENGTH / 2, LENGTH * i LENGTH / 2) screen.blit(block, (j * LENGTH, i * LENGTH)) if map.map[i][j] != 0: screen.blit(font_surf, font_rect) score_surf = score_font.render( 'score:' str(map.score), True, C_FONT) score_rect = score_surf.get_rect() score_rect.center = ( LENGTH * SIZE / 2, LENGTH * SIZE SCORE_HEIGTH / 2) screen.blit(score_surf, score_rect) pygame.display.update() # 定義主程序 def main(): pygame.init() # 初始化界面 screen = pygame.display.set_mode( (LENGTH * SIZE, LENGTH * SIZE SCORE_HEIGTH)) # 屏幕尺寸設置 pygame.display.set_caption("2048小遊戲") # 設置遊戲标題 clock = pygame.time.Clock() # 用于控制幀率 map = Map(SIZE) display(map, screen) while not map.failed(): # 檢測是否退出遊戲 clock.tick(5) # 幀率為5 for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() elif event.type == KEYDOWN: keys = pygame.key.get_pressed() map.is_move = 0 if keys[K_UP]: map.move_up() elif keys[K_DOWN]: map.move_down() elif keys[K_RIGHT]: map.move_right() elif keys[K_LEFT]: map.move_left() elif event.type == KEYUP: t = threading.Thread(target=display,args=(map,screen)) t.setDaemon(True) t.start() if map.is_move==1: if map.check(2048): break time.sleep(0.01) result="YOU LOST!!!" if map.check(2048): result="YOU WIN!!!" screen.fill(DEFAULT) map_font=pygame.font.Font(None,86) font_surf=map_font.render(result,True,C_FONT) font_rect=font_surf.get_rect() font_rect.center=(SIZE*LENGTH/2,SIZE*LENGTH/2) screen.blit(font_surf,font_rect) pygame.display.update() # 測試調用主程序 if __name__ == "__main__": main()

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
拓麻歌子怎麼開啟場景
拓麻歌子怎麼開啟場景
《拓麻歌子:經典版TamagotchiClassic》是一款以培養拓麻歌子為樂趣的養成類小遊戲。《拓麻歌子:經典版TamagotchiClassic》采用了非常經典的像素風懷舊風格,玩法也簡單易上手。另外《拓麻歌子:經典版Tamagotch...
2024-09-28
電商知名平台遊戲推薦
電商知名平台遊戲推薦
最近微信小遊戲火得一塌糊塗,各種炸群引發了一場關于友誼的災難。不得不承認,小遊戲真的有橫掃千軍的架勢,眼看這麼大一塊蛋糕騰訊似乎要獨吞,與其相愛相殺的對手阿裡也發大招了,在淘寶也搞了個小遊戲。早在今年4月2号,淘寶就買下了「旅行青蛙」的版權...
2024-09-28
全英雄聯盟最騷的騷豬出處
全英雄聯盟最騷的騷豬出處
最近玩英雄聯盟的時候看看到幾個巨幾吧搞笑的ID,我直接用手機拍了幾張最搞笑的,希望能在這個寒冷的冬天帶個大家一種溫暖的感覺。1、U哥帥過吳彥祖一提到這個ID,大家應該就明白了,多得就不說了,很想念大家。吳彥祖的顔值是真滴高,還拿了一個骷髅頭...
2024-09-28
騰訊遊戲發展現狀和未來預估
騰訊遊戲發展現狀和未來預估
哈喽大家好,我是X博士。這個月發生了個大事,那就是版号終于發了!大家可能意識不到這事的重要性。在此之前,263天停發版号,國内2.2萬家遊戲相關公司倒閉,遊戲圈人心惶惶、風聲鶴唳。僅憑一個“今年不新發版号”以及“騰訊要被錘了”的謠言,就讓騰...
2024-09-28
王思聰打遊戲怎麼樣
王思聰打遊戲怎麼樣
提到“王健林”這三個字,你第一時間會想到什麼:首富、思聰少爺還是搖滾?超級網紅王健林“我要從南走到北,我還要從白走到黑,我要人們都看到我,但不知道我是誰。”不管是因為兒子又調皮了,或是在國外又揮金如土大收購了,還是亞洲首富的位置不保了,這個...
2024-09-28
Copyright 2023-2024 - www.tftnews.com All Rights Reserved