失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【Python黑科技】tkinter库实战“2048”小游戏(保姆级图文+实现代码)

【Python黑科技】tkinter库实战“2048”小游戏(保姆级图文+实现代码)

时间:2024-01-11 18:12:52

相关推荐

【Python黑科技】tkinter库实战“2048”小游戏(保姆级图文+实现代码)

目录

实现效果实现思路接收玩家操作实现代码总结

欢迎关注 『Python黑科技』 系列,持续更新中

欢迎关注 『Python黑科技』 系列,持续更新中

实现效果


实现思路

按上下左右移动方块。

用一个数据矩阵代表方块的内容。

移动是整体的移动,而不是只移动某一些滑块,所以难度更大(主要是编代码方便一点狗头保命

移动后会有新的数字生成,弥补原来没有数字的空格。

接收玩家操作

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()


实现代码

# @Time : /2/9 21:12# @Author : 南黎# @FileName: 2048.pyimport randomimport sysimport pygamefrom pygame.locals import *PIXEL = 150SCORE_PIXEL = 100SIZE = 4# 地图的类class Map:def __init__(self, size):self.size = sizeself.score = 0self.map = [[0 for i in range(size)] for i in range(size)]self.add()self.add()# 新增2或4,有1/4概率产生4def add(self):while True:p = random.randint(0, self.size * self.size - 1)if self.map[int(p / self.size)][int(p % self.size)] == 0:x = random.randint(0, 3) > 0 and 2 or 4self.map[int(p / self.size)][int(p % self.size)] = xself.score += xbreak# 地图向左靠拢,其他方向的靠拢可以通过适当旋转实现,返回地图是否更新def adjust(self):changed = Falsefor a in self.map:b = []last = 0for v in a:if v != 0:if v == last:b.append(b.pop() << 1)last = 0else:b.append(v)last = vb += [0] * (self.size - len(b))for i in range(self.size):if a[i] != b[i]:changed = Truea[:] = breturn 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 Falsefor r in range(self.size):for c in range(self.size - 1):if self.map[r][c] == self.map[r][c + 1]:return Falsefor r in range(self.size - 1):for c in range(self.size):if self.map[r][c] == self.map[r + 1][c]:return Falsereturn Truedef 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, int(PIXEL * 2 / 3))score_font = pygame.font.Font(None, int(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)


总结

大家喜欢的话,给个👍,点个关注!给大家分享更多有趣好玩的Python黑科技!

欢迎关注 『Python黑科技』 系列,持续更新中

欢迎关注 『Python黑科技』 系列,持续更新中

【Python黑科技】tkinter库实战7个小项目合集(保姆级图文+实现代码)

【Python黑科技】tkinter库实战制作一个计算器(保姆级图文+实现代码)

【Python黑科技】tkinter库实战制作一个记事本(保姆级图文+实现代码)

【Python黑科技】tkinter库实战用户的注册和登录(保姆级图文+实现代码)

【Python黑科技】tkinter库实战“2048”小游戏(保姆级图文+实现代码)

【Python黑科技】tkinter库实战“俄罗斯方块”小游戏(保姆级图文+实现代码)

【Python黑科技】tkinter库实战“贪吃蛇”小游戏(保姆级图文+实现代码)

【Python黑科技】tkinter库实战“连连看”小游戏(保姆级图文+实现代码)

【Python安装第三方库一行命令永久提高速度】

【使用PyInstaller打包exe】

【免登陆爬虫一键下载知乎文章图片(保姆级图文+实现代码)】

【孤独的程序员和AI机器人朋友聊天解闷(免费接口+保姆级图文+实现代码注释)】

【几行代码绘制gif动图(保姆级图文+实现代码)】

【几行代码实现网课定时循环截屏,保存重要知识点(保姆级图文+实现代码)】

【常用的user_agent 浏览器头爬虫模拟用户(保姆级图文+实现代码)】

【更多内容敬请期待】


如果觉得《【Python黑科技】tkinter库实战“2048”小游戏(保姆级图文+实现代码)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。