Python2048小游戏
在一本书上找到的小游戏实例,自己运行起来感觉比较有意思就发出来看看.
其中有很多地方不是很懂,等到自己研究透彻了会更新带全部注释版本的.
对于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()
带上蓝牙的YS3886评测蓝牙声音也可以hifi了无源系统音质非常出色,比内置功放前级只能妥协的有源音箱有更出色的声音。但通常价格昂贵,而且使用不方便,占空间。因此在推出NS16后自己一直在寻找一台价格便宜量又足的小功放,希望能在
参加上海音响展(HAVE)的回顾流水账效果终于满意了(上)2021年10月15日到17日,自然声参加了2021年上海音响展。忙了三天,可把俺累坏了,痛并且快乐着,哈哈。算起来,这是自己第五次参加音响展了,但是却是唯一一次把NS17真正调满
无人机AR,SpinMaster公司打造游戏新玩法视频加载中目前如果仅仅依靠设备的摄像头,很难让AR(增强现实)在内容拓展上有很大的突破,不过现在已经有一些公司尝试配合其他硬件外设来丰富AR应用的玩法,例如SpinMaster公司
iPhone11很抢手,但有4个问题苹果公司在经历过去年的种种挫折后仿佛开窍般降低了新款iPhone的售价,当新iPhone性价比明显提升的同时,国内消费者也重拾对iPhone的信心。天时地利人和的情况下,iPhon
苹果汽酒品牌Somersby视觉形象升级Somersby自2008年3月在丹麦售出第一瓶后,目前已畅销世界50多个国家及地区,并成为年轻人群在聚会派对和休闲娱乐时最受欢迎的高端苹果汽酒品牌之一。最近,他们公布了由Elmw
合理使用空气净化设备,减少装修污染越来越多的高楼大厦崛地而起,也有越来越多的人到都市生活和工作等,也有很多人不惜花费大量积蓄去购买现代化楼宇的居室,只为在自己孤单欢乐时有一个归宿。购置新房是一件很开心的事,但面对种
最高8T固态硬盘苹果发布新笔记本电脑北京时间11月13日,苹果公司正式发布了新的笔记本电脑MacBookPro,新的MacBookPro与以往的MacBookPro最大的不同就是屏幕尺寸提升到16英寸以及重新设计的键
创品知识产权浅谈专利管理对企业的重要性近年来,随着智慧型企业的迅速发展,企业对专利权的保护和管理显得尤为重要。所谓专利管理,是指对专利工作加以计划组织协调和控制的活动和过程。企业对专利进行管理,是为了发挥专利在企业发展
解决室内甲醛问题,了解这些并不晚新房装修老房翻修的过程中都会或多或少地受到甲醛污染,因为装修会使用到防水胶人造胶合板等,其中比较常见的有酚醛树脂胶脲醛树脂胶三聚氰胺甲醛树脂胶3种。因此,人造胶合板家具等是室内甲醛
新风系统加速室内外换气,提高室内空气含氧量根据新风系统的基本工作原理来看新风系统的作用或功能究竟有哪些?不同工作原理的新风系统又是怎样实现新风交换的?在此,按照新风系统进出风口的差异,将新风系统分为单向流新风系统双向流新风
家用空气净化器是什么?家用空气净化器好么?根据使用场所不同可将空气净化器分为家用空气净化器商用空气净化器学校空气净化器以及医院空气净化器等等。空气净化器是一种通过一套过滤系统净化空气的设备,其主要作用在于净化空气中的固态污