文章目录

  • 联动归位游戏
  • 下载包
  • 项目结构
  • 准备
  • 编写代码
    • 导入包
    • 定义图像类
    • 绘制滑块和文字
    • 定义一个二维列表的查找函数
    • 定义字体
    • 生成目标
    • 移动函数
      • 分析
      • 获得滑块行列
      • 四个方向的移动方法
      • 调用移动方法
      • 完整的代码
    • 初始化游戏并定义常量
    • 循环判断
    • 游戏结束后显示信息
  • 完整代码
  • 资源及源代码下载链接

联动归位游戏

上视频。

【最强大脑】第二轮挑战“联动归位”

下载包

pip install pygame

项目结构

  • simsun.ttc是字体
  • applicant下的东西是滑块
  • background.jpeg是背景
  • help.jpg是目标图片
  • icon.png是图标

准备

资源及源代码下载链接
提取码: 7jhp

编写代码

在"联动归位"文件夹下创建main-game.py

导入包

import pygame
import random
import os
import sys
import time
import pprint

定义图像类

class Image(object):def __init__(self, path):self.image = pygame.image.load(path)self.name = (os.path.basename(path)).split('.')[0]def __str__(self):return self.name

绘制滑块和文字

def render(colors):screen.blit(background.image, (0, 0))for row, i in enumerate(colors):for column, j in enumerate(i):screen.blit(j.image, (row * 40, column * 40))screen.blit(getfont(text='成果实例图:'), (gwidth * 40, screen.get_rect().centery - gwidth // 2 * 40))screen.blit(helping.image, (gwidth * 40 + 6 * 28, screen.get_rect().centery - gwidth // 2 * 40))screen.blit(getfont(text=f'计时:{timer}秒'), (gwidth * 40, screen.get_rect().centery))screen.blit(getfont(text=f'移动步数:{movement}次'), (gwidth * 40, screen.get_rect().centery + 50))

定义一个二维列表的查找函数

def getindex(target, lists):for row, i in enumerate(lists):for column, j in enumerate(i):if j == target:return row, columnraise IndexError

定义字体

def getfont(text, color=(255, 70, 130)):return gamefont.render(text, True, color)

生成目标

def targets(images):ans = images[:]for counter, color in enumerate(imgcolors):ans[-1][counter] = colorreturn ans

移动函数

分析

  • 获得滑块的行列
  • 通过angel的方向参数,定义四个方向的不同移动

获得滑块行列

def move(angel):global movement, colorsredx, redy = getindex(red, colors)bluex, bluey = getindex(blue, colors)brownx, browny = getindex(brown, colors)greenx, greeny = getindex(green, colors)orangex, orangey = getindex(orange, colors)pinkx, pinky = getindex(pink, colors)purplex, purpley = getindex(purple, colors)yellowx, yellowy = getindex(yellow, colors)movement += 1

四个方向的移动方法

    def left():def mover(x, y, col):colors[x][y] = streetx -= 1if (colors[x][y] != street and (colors[x][y] not in imgtars)) or x < 0:x += 1colors[x][y] = colmover(bluex, bluey, blue)mover(brownx, browny, brown)mover(greenx, greeny, green)mover(orangex, orangey, orange)mover(pinkx, pinky, pink)mover(purplex, purpley, purple)mover(redx, redy, red)mover(yellowx, yellowy, yellow)def right(): # 差不多def mover(x, y, col):colors[x][y] = streetx += 1if x >= gwidth:x -= 1if colors[x][y] != street and (colors[x][y] not in imgtars):x -= 1colors[x][y] = colmover(bluex, bluey, blue)mover(brownx, browny, brown)mover(greenx, greeny, green)mover(orangex, orangey, orange)mover(pinkx, pinky, pink)mover(purplex, purpley, purple)mover(redx, redy, red)mover(yellowx, yellowy, yellow)def up(): # 差不多def mover(x, y, col):colors[x][y] = streety -= 1if (colors[x][y] != street and (colors[x][y] not in imgtars)) or y < 0:y += 1colors[x][y] = colmover(bluex, bluey, blue)mover(brownx, browny, brown)mover(greenx, greeny, green)mover(orangex, orangey, orange)mover(pinkx, pinky, pink)mover(purplex, purpley, purple)mover(redx, redy, red)mover(yellowx, yellowy, yellow)def down(): # 差不多def mover(x, y, col):colors[x][y] = streety += 1if y >= gwidth:y -= 1if colors[x][y] != street and (colors[x][y] not in imgtars):y -= 1colors[x][y] = colmover(bluex, bluey, blue)mover(brownx, browny, brown)mover(greenx, greeny, green)mover(orangex, orangey, orange)mover(pinkx, pinky, pink)mover(purplex, purpley, purple)mover(redx, redy, red)mover(yellowx, yellowy, yellow)

调用移动方法

    functions = {'left': left,'right': right,'up': up,'down': down,}[angel]functions()

完整的代码

def move(angel):global movement, colorsredx, redy = getindex(red, colors)bluex, bluey = getindex(blue, colors)brownx, browny = getindex(brown, colors)greenx, greeny = getindex(green, colors)orangex, orangey = getindex(orange, colors)pinkx, pinky = getindex(pink, colors)purplex, purpley = getindex(purple, colors)yellowx, yellowy = getindex(yellow, colors)movement += 1def left():def mover(x, y, col):colors[x][y] = streetx -= 1if (colors[x][y] != street and (colors[x][y] not in imgtars)) or x < 0:x += 1colors[x][y] = colmover(bluex, bluey, blue)mover(brownx, browny, brown)mover(greenx, greeny, green)mover(orangex, orangey, orange)mover(pinkx, pinky, pink)mover(purplex, purpley, purple)mover(redx, redy, red)mover(yellowx, yellowy, yellow)def right():def mover(x, y, col):colors[x][y] = streetx += 1if x >= gwidth:x -= 1if colors[x][y] != street and (colors[x][y] not in imgtars):x -= 1colors[x][y] = colmover(bluex, bluey, blue)mover(brownx, browny, brown)mover(greenx, greeny, green)mover(orangex, orangey, orange)mover(pinkx, pinky, pink)mover(purplex, purpley, purple)mover(redx, redy, red)mover(yellowx, yellowy, yellow)def up():def mover(x, y, col):colors[x][y] = streety -= 1if (colors[x][y] != street and (colors[x][y] not in imgtars)) or y < 0:y += 1colors[x][y] = colmover(bluex, bluey, blue)mover(brownx, browny, brown)mover(greenx, greeny, green)mover(orangex, orangey, orange)mover(pinkx, pinky, pink)mover(purplex, purpley, purple)mover(redx, redy, red)mover(yellowx, yellowy, yellow)def down():def mover(x, y, col):colors[x][y] = streety += 1if y >= gwidth:y -= 1if colors[x][y] != street and (colors[x][y] not in imgtars):y -= 1colors[x][y] = colmover(bluex, bluey, blue)mover(brownx, browny, brown)mover(greenx, greeny, green)mover(orangex, orangey, orange)mover(pinkx, pinky, pink)mover(purplex, purpley, purple)mover(redx, redy, red)mover(yellowx, yellowy, yellow)functions = {'left': left,'right': right,'up': up,'down': down,}[angel]functions()

初始化游戏并定义常量

pygame.init()gwidth = 19
width = gwidth * 40 + 240
height = gwidth * 40helping = Image('images/help/help.jpg')
gamefont = pygame.font.Font('fonts/simsun.ttc', 29)icon = Image('images/icon/icon.png')background = Image('images/back/background.jpeg')
blue = Image('images/applicant/blue.bmp')
brown = Image('images/applicant/brown.bmp')
green = Image('images/applicant/green.bmp')
orange = Image('images/applicant/orange.bmp')
pink = Image('images/applicant/pink.bmp')
purple = Image('images/applicant/purple.bmp')
red = Image('images/applicant/red.bmp')
stack = Image('images/applicant/stack.bmp')
street = Image('images/applicant/street.bmp')
yellow = Image('images/applicant/yellow.bmp')bluetar = Image('images/applicant/target/blue-target.bmp')
browntar = Image('images/applicant/target/brown-target.bmp')
greentar = Image('images/applicant/target/green-target.bmp')
orangetar = Image('images/applicant/target/orange-target.bmp')
pinktar = Image('images/applicant/target/pink-target.bmp')
purpletar = Image('images/applicant/target/purple-target.bmp')
redtar = Image('images/applicant/target/red-target.bmp')
yellowtar = Image('images/applicant/target/yellow-target.bmp')imgcolors = [blue, brown, green, orange, purple, red, yellow, pink]
imgtars = [bluetar, browntar, greentar, orangetar, pinktar, purpletar, redtar, yellowtar]movement = 0colors = [[stack if random.random() < 0.28 else street for i in range(gwidth)] for j in range(gwidth)]
colors = targets(colors)
winmap = [list(i) for i in colors]
# print(images, winmap)
for count in range(gwidth * gwidth):move(random.choice(('left', 'right', 'up', 'down')))clock = pygame.time.Clock()
fps = 12start = time.time()
end = time.time()
timer = 0movement = 0screen = pygame.display.set_mode((width, height))pygame.display.set_caption('联动归位')
pygame.display.set_icon(icon.image)running = True
win = False
# win = True

循环判断

while running:clock.tick(fps)end = time.time()timer = int(end - start)render(colors)if colors == winmap:win = Truerunning = Falsefor event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE:running = Falseelif event.key == pygame.K_LEFT:move('left')elif event.key == pygame.K_RIGHT:move('right')elif event.key == pygame.K_UP:move('up')elif event.key == pygame.K_DOWN:move('down')pygame.display.flip()

游戏结束后显示信息

running = win
while running:screen.blit(background.image, background.image.get_rect())centerx = screen.get_rect().centerxcentery = screen.get_rect().centeryscreen.blit(getfont('作答完成'), (centerx, centery - 158))screen.blit(getfont(f'用时:{timer}'), (centerx, centery - 102))screen.blit(getfont(f'移动:{movement}'), (centerx, centery - 60))for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE:running = Falsepygame.display.update()pygame.quit()
sys.exit()

完整代码

import pygame
import random
import os
import sys
import time
import pprintclass Image(object):def __init__(self, path):self.image = pygame.image.load(path)self.name = (os.path.basename(path)).split('.')[0]def __str__(self):return self.namedef render(colors):screen.blit(background.image, (0, 0))for row, i in enumerate(colors):for column, j in enumerate(i):screen.blit(j.image, (row * 40, column * 40))screen.blit(getfont(text='成果实例图:'), (gwidth * 40, screen.get_rect().centery - gwidth // 2 * 40))screen.blit(helping.image, (gwidth * 40 + 6 * 28, screen.get_rect().centery - gwidth // 2 * 40))screen.blit(getfont(text=f'计时:{timer}秒'), (gwidth * 40, screen.get_rect().centery))screen.blit(getfont(text=f'移动步数:{movement}次'), (gwidth * 40, screen.get_rect().centery + 50))def getindex(target, lists):for row, i in enumerate(lists):for column, j in enumerate(i):if j == target:return row, columnraise ValueErrordef getfont(text, color=(255, 70, 130)):return gamefont.render(text, True, color)def targets(images):ans = images[:]for counter, color in enumerate(imgcolors):ans[-1][counter] = colorreturn ansdef move(angel):global movement, colorsredx, redy = getindex(red, colors)bluex, bluey = getindex(blue, colors)brownx, browny = getindex(brown, colors)greenx, greeny = getindex(green, colors)orangex, orangey = getindex(orange, colors)pinkx, pinky = getindex(pink, colors)purplex, purpley = getindex(purple, colors)yellowx, yellowy = getindex(yellow, colors)movement += 1def left():def mover(x, y, col):colors[x][y] = streetx -= 1if (colors[x][y] != street and (colors[x][y] not in imgtars)) or x < 0:x += 1colors[x][y] = colmover(bluex, bluey, blue)mover(brownx, browny, brown)mover(greenx, greeny, green)mover(orangex, orangey, orange)mover(pinkx, pinky, pink)mover(purplex, purpley, purple)mover(redx, redy, red)mover(yellowx, yellowy, yellow)def right():def mover(x, y, col):colors[x][y] = streetx += 1if x >= gwidth:x -= 1if colors[x][y] != street and (colors[x][y] not in imgtars):x -= 1colors[x][y] = colmover(bluex, bluey, blue)mover(brownx, browny, brown)mover(greenx, greeny, green)mover(orangex, orangey, orange)mover(pinkx, pinky, pink)mover(purplex, purpley, purple)mover(redx, redy, red)mover(yellowx, yellowy, yellow)def up():def mover(x, y, col):colors[x][y] = streety -= 1if (colors[x][y] != street and (colors[x][y] not in imgtars)) or y < 0:y += 1colors[x][y] = colmover(bluex, bluey, blue)mover(brownx, browny, brown)mover(greenx, greeny, green)mover(orangex, orangey, orange)mover(pinkx, pinky, pink)mover(purplex, purpley, purple)mover(redx, redy, red)mover(yellowx, yellowy, yellow)def down():def mover(x, y, col):colors[x][y] = streety += 1if y >= gwidth:y -= 1if colors[x][y] != street and (colors[x][y] not in imgtars):y -= 1colors[x][y] = colmover(bluex, bluey, blue)mover(brownx, browny, brown)mover(greenx, greeny, green)mover(orangex, orangey, orange)mover(pinkx, pinky, pink)mover(purplex, purpley, purple)mover(redx, redy, red)mover(yellowx, yellowy, yellow)functions = {'left': left,'right': right,'up': up,'down': down,}[angel]functions()pygame.init()gwidth = 19
width = gwidth * 40 + 240
height = gwidth * 40helping = Image('images/help/help.jpg')
gamefont = pygame.font.Font('fonts/simsun.ttc', 29)icon = Image('images/icon/icon.png')background = Image('images/back/background.jpeg')
blue = Image('images/applicant/blue.bmp')
brown = Image('images/applicant/brown.bmp')
green = Image('images/applicant/green.bmp')
orange = Image('images/applicant/orange.bmp')
pink = Image('images/applicant/pink.bmp')
purple = Image('images/applicant/purple.bmp')
red = Image('images/applicant/red.bmp')
stack = Image('images/applicant/stack.bmp')
street = Image('images/applicant/street.bmp')
yellow = Image('images/applicant/yellow.bmp')bluetar = Image('images/applicant/target/blue-target.bmp')
browntar = Image('images/applicant/target/brown-target.bmp')
greentar = Image('images/applicant/target/green-target.bmp')
orangetar = Image('images/applicant/target/orange-target.bmp')
pinktar = Image('images/applicant/target/pink-target.bmp')
purpletar = Image('images/applicant/target/purple-target.bmp')
redtar = Image('images/applicant/target/red-target.bmp')
yellowtar = Image('images/applicant/target/yellow-target.bmp')imgcolors = [blue, brown, green, orange, purple, red, yellow, pink]
imgtars = [bluetar, browntar, greentar, orangetar, pinktar, purpletar, redtar, yellowtar]movement = 0colors = [[stack if random.random() < 0.28 else street for i in range(gwidth)] for j in range(gwidth)]
colors = targets(colors)
winmap = [list(i) for i in colors]
# print(images, winmap)
for count in range(gwidth * gwidth):move(random.choice(('left', 'right', 'up', 'down')))clock = pygame.time.Clock()
fps = 12start = time.time()
end = time.time()
timer = 0movement = 0screen = pygame.display.set_mode((width, height))pygame.display.set_caption('联动归位')
pygame.display.set_icon(icon.image)running = True
win = False
# win = Truewhile running:clock.tick(fps)end = time.time()timer = int(end - start)render(colors)if colors == winmap:win = Truerunning = Falsefor event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE:running = Falseelif event.key == pygame.K_LEFT:move('left')elif event.key == pygame.K_RIGHT:move('right')elif event.key == pygame.K_UP:move('up')elif event.key == pygame.K_DOWN:move('down')pygame.display.flip()running = win
while running:screen.blit(background.image, background.image.get_rect())centerx = screen.get_rect().centerxcentery = screen.get_rect().centeryscreen.blit(getfont('作答完成'), (centerx, centery - 158))screen.blit(getfont(f'用时:{timer}'), (centerx, centery - 102))screen.blit(getfont(f'移动:{movement}'), (centerx, centery - 60))for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE:running = Falsepygame.display.update()pygame.quit()
sys.exit()

资源及源代码下载链接

资源及源代码下载链接
提取码: 7jhp

python+pygame 最强大脑联动归位游戏相关推荐

  1. 保姆级教学——Python+Pygame怎么实现吃豆豆游戏

    耽搁十几天的时间,我顺利的从阳转阴啦, 以后的日子一切恢复正常,好好工作,积极分享.希望在座的小伙伴阳了的全部健康转阴,没阳的全部不会变阳,新的一年,一切顺顺利利. 不知道最近大家学习得怎么样?有没有 ...

  2. 数字推盘游戏java_最强大脑数字推盘游戏-最强大脑数字推盘游戏官方版 v1.0预约_手机乐园...

    游戏简介 最强大脑数字推盘游戏是一款根据同名综艺节目的挑战项目改变制作的益智闯关游戏.游戏中玩家你要走的就是将各个数字合理的进行移动与组合,而且是要在规则的限制下进行移动,这样一来你就能组出对应的数字 ...

  3. java盖金字塔的游戏,最强大脑积木金字塔

    最强大脑积木金字塔,这是一款大家比较喜欢的益智解密的手游,在游戏中玩家可以不断的参与冒险竞技,并且在其中拥有着超多的有挑战性的关卡,并且游戏的难度会不断的提升,喜欢的朋友快快来下载吧. 最强大脑积木金 ...

  4. python数字推盘游戏怎么显示步数_Python游戏开发:《最强大脑》同款游戏【数字华容道】...

    今年年初,新一季的<最强大脑>开播了,第一集选拔的时候大家做了一个数字游戏,名叫<数字华容道>,当时何猷君以二十几秒的成绩夺得该项目的冠军,看了这个游戏之后我决定要写一个< ...

  5. Python游戏开发:最强大脑第一关,数字华容道

    前言 freegames是Apache2许可的Python游戏集合,旨在用于教育和娱乐,完全是开源的,我们只要引用编写就好,当前在最强大脑的舞台上的第一关就是数字华容道,好多人都栽在了上面,如果你也想 ...

  6. python自己制作节奏大师游戏_使用pygame制作一个简单的游戏

    翻译自Will McGugan的<Beginning Game Development with Python and Pygame –From Novice to Professional&g ...

  7. PYTHON pygame库实战——实现双人弹球小游戏

    PYTHON pygame实战--运用pygame库实现双人弹球小游戏 使用python pygame库实现一个双人弹球小游戏,两人分别控制一个左右移动的挡板用来拦截小球,小球会在两板间不停弹跳,拦截 ...

  8. python pygame 简单小游戏

    python pygame 简单小游戏 最近学习了pygame,感觉十分有意思,花了一点时间制作了一个简单的小游戏 效果图 这是一个很简单的防守类小游戏 玩家可以使用wasd控制人物移动,并且鼠标控制 ...

  9. 如何用 Python 攻克「最强大脑」

    最强大脑之[七阶立方密码] 在 2018 年<最强大脑之燃烧吧大脑>节目中,来自清华大学的杨易和来自北京大学的 刘宇进行了个人淘汰赛,两个人所要挑战的项目是"七阶立方密码&quo ...

  10. 又是一年中秋至|Python Pygame制作中秋兔子接月饼游戏【源码+解析】

    一年中秋又快到了,今年加入了Python的学习行列,得益于Python的开发效率和易读性,网上写文章的次数多了起来,既然是中秋节那肯定要搞个应景的游戏才行. 左思右想没有头绪时,刚好看到一篇介绍Pyg ...

最新文章

  1. [置顶] 2014年八大最热门IT技能
  2. python 验证回文串
  3. JavaScript中发布/订阅模式的理解
  4. C#操作Excel总结
  5. USACO Training Section 1.2 双重回文数 Dual Palindrom
  6. Java图片压缩 BufferedImage Linux 下代码阻塞不工作
  7. JavaScript基本数据类型讲解
  8. Leetcode 392.判断子序列
  9. 基于SpringBoot的网页版进销存-2.0版本
  10. Windows上的安全模式
  11. excel宏-自定义筛选查询
  12. 老九学堂 学习 C++ 第四天
  13. 虚拟机虚拟磁盘文件格式转换
  14. 数据集fer2013
  15. linux 查看用户访问ip,(总结)按时按登录IP记录Linux所有用户操作日志的方法(附脚本)...
  16. 钢铁行业关键业务系统介绍
  17. 获取JOP卡的版本与功能信息
  18. 图片和图片转base64大小的关系
  19. 如何调用openai
  20. redis 为什么这么快,你真的知道吗?

热门文章

  1. 使用Jsoup实现网络爬虫
  2. android电子时钟码源,android自定义时钟APP源码
  3. robocode 创建机器人
  4. MyBatis创建视图
  5. GIS软件开发入门需要学习哪些内容?
  6. 软件开发的201个原则
  7. mqtt 客户端和服务端搭建及基本使用详解
  8. 智慧新泰时空大数据与云平台_智慧城市时空大数据与云平台建设技术大纲即将出台...
  9. linux 开机密码忘了,linux系统开机忘记密码
  10. Object-C语法