Python拼图,python程序设计拼图小游戏

  Python拼图,python程序设计拼图小游戏

  快到毕业季了,你心中的学长,你真的放下了吗?本文将使用pygame为你的学姐定制开发一款拼图游戏。如果你有兴趣,跟边肖学习。

  00-1010前言首效配置环境配置文件介绍资源主要功能代码游戏运行方法

  

目录

  事情是这样的。

  快到毕业季了,大四学生要离校了。

  你还记得你未说出口的学长吗?

  跟着博主用pygame给学姐做个拼图。

  如果有什么意外收获呢?

  

前言

  我给隔壁学诗歌的姐姐做了一个拼图。

  结果我自己都拼不出来。

  

先上效果

  安装pygame模块

  #pip安装游戏

  PS C:\Users\lex pip安装pygame查找索引:

  http://mirrors.aliyun.com/pypi/simple要求已经满足:

  f : \ develop \ python 36 \ lib \ site-packages中的pygame(2 . 0 . 1)

  PS C: \用户\lex

  

配置环境

  cfg.py

  配置学姐要读取的照片路径,导入游戏引用的字体和颜色。

  个人资料

  导入操作系统

  屏幕大小

  屏幕大小=(640,640)

  阅读高年级照片

  PICTURE _ ROOT _ DIR=OS . path . join(OS . getcwd(), resources/pictures )

  字体路径

  font path=OS . path . join(OS . getcwd(), resources/font/FZSTK。TTF’)

  定义一些颜色

  背景色=(255,255,255)

  红色=(255,0,0)

  蓝色=(0,0,255)

  黑色=(0,0,0)

   FPS

  FPS=40

  \ \ 随机时间的拼图\ \

  NUMRANDOM=100

  

配置文件

  将高级诗人的照片添加到资源/图片路径。

  当游戏开始时,根据我们在cfg.py中的配置,这条路径的照片会自动

  成为装载我们拼图的原材料。

  

引入资源

  pintu.py

  让代码结构更简单。一个配置文件cfg,一个资源路径resources,存储字体和图片。

  主功能代码放在这里:

  1.定义四个可移动函数,在有空格的情况下允许向空格方向移动。

  2.createboard:随机拆分图片并进行加扰。

  3.刚开始的时候,从图片文件夹里随机取一张图片:如果你要给全宿舍的学弟学妹们打游戏,

  把大家的照片放进去就行了,这样每次打开都会随机生成一个学长的照片作为游戏背景。

  功能:

  益智游戏

  作者:

  莱克斯圣徒

  导入操作系统

  导入系统

  导入cfg

  随机导入

  导入pygame

  判断游戏是否结束

  def是一个:的游戏面板

  断言isinstance(size,int)

  num_cells=size * size

  对于范围(细胞数-1):内的I

  如果板[我]!=i:返回

  False

   return True

  将空白Cell左边的Cell右移到空白Cell位置

  def moveR(board, blank_cell_idx, num_cols):

   if blank_cell_idx % num_cols == 0: return blank_cell_idx

   board[blank_cell_idx-1], board[blank_cell_idx] = board[blank_cell_idx], board[blank_cell_idx-1]

   return blank_cell_idx - 1

  将空白Cell右边的Cell左移到空白Cell位置

  def moveL(board, blank_cell_idx, num_cols):

   if (blank_cell_idx+1) % num_cols == 0: return blank_cell_idx

   board[blank_cell_idx+1], board[blank_cell_idx] = board[blank_cell_idx], board[blank_cell_idx+1]

   return blank_cell_idx + 1

  将空白Cell上边的Cell下移到空白Cell位置

  def moveD(board, blank_cell_idx, num_cols):

   if blank_cell_idx < num_cols: return blank_cell_idx

   board[blank_cell_idx-num_cols], board[blank_cell_idx] = board[blank_cell_idx], board[blank_cell_idx-num_cols]

   return blank_cell_idx - num_cols

  将空白Cell下边的Cell上移到空白Cell位置

  def moveU(board, blank_cell_idx, num_rows, num_cols):

   if blank_cell_idx >= (num_rows-1) * num_cols: return blank_cell_idx

   board[blank_cell_idx+num_cols], board[blank_cell_idx] = board[blank_cell_idx], board[blank_cell_idx+num_cols]

   return blank_cell_idx + num_cols

  获得打乱的拼图

  def CreateBoard(num_rows, num_cols, num_cells):

   board = []

   for i in range(num_cells): board.append(i)

   # 去掉右下角那块

   blank_cell_idx = num_cells - 1

   board[blank_cell_idx] = -1

   for i in range(cfg.NUMRANDOM):

   # 0: left, 1: right, 2: up, 3: down

   direction = random.randint(0, 3)

   if direction == 0: blank_cell_idx = moveL(board, blank_cell_idx, num_cols)

   elif direction == 1: blank_cell_idx = moveR(board, blank_cell_idx, num_cols)

   elif direction == 2: blank_cell_idx = moveU(board, blank_cell_idx, num_rows, num_cols)

   elif direction == 3: blank_cell_idx = moveD(board, blank_cell_idx, num_cols)

   return board, blank_cell_idx

  随机选取一张图片

  def GetImagePath(rootdir):

   imagenames = os.listdir(rootdir)

   assert len(imagenames) > 0

   return os.path.join(rootdir, random.choice(imagenames))

  显示游戏结束界面

  def ShowEndInterface(screen, width, height):

   screen.fill(cfg.BACKGROUNDCOLOR)

   font = pygame.font.Font(cfg.FONTPATH, width//15)

   title = font.render(恭喜! 你成功完成了拼图!, True, (233, 150, 122))

   rect = title.get_rect()

   rect.midtop = (width/2, height/2.5)

   screen.blit(title, rect)

   pygame.display.update()

   while True:

   for event in pygame.event.get():

   if (event.type == pygame.QUIT) or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):

   pygame.quit()

   sys.exit()

   pygame.display.update()

  显示游戏开始界面

  def ShowStartInterface(screen, width, height):

   screen.fill(cfg.BACKGROUNDCOLOR)

   tfont = pygame.font.Font(cfg.FONTPATH, width//4)

   cfont = pygame.font.Font(cfg.FONTPATH, width//20)

   title = tfont.render(拼图游戏, True, cfg.RED)

   content1 = cfont.render(按H或M或L键开始游戏, True, cfg.BLUE)

   content2 = cfont.render(H为5*5模式, M为4*4模式, L为3*3模式, True, cfg.BLUE)

   trect = title.get_rect()

   trect.midtop = (width/2, height/10)

   crect1 = content1.get_rect()

   crect1.midtop = (width/2, height/2.2)

   crect2 = content2.get_rect()

   crect2.midtop = (width/2, height/1.8)

   screen.blit(title, trect)

   screen.blit(content1, crect1)

   screen.blit(content2, crect2)

   while True:

   for event in pygame.event.get():

   if (event.type == pygame.QUIT) or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):

   pygame.quit()

   sys.exit()

   elif event.type == pygame.KEYDOWN:

   if event.key == ord(l): return 3

   elif event.key == ord(m): return 4

   elif event.key == ord(h): return 5

   pygame.display.update()

  主函数

  def main():

   # 初始化

   pygame.init()

   clock = pygame.time.Clock()

   # 加载图片

   game_img_used = pygame.image.load(GetImagePath(cfg.PICTURE_ROOT_DIR))

   game_img_used = pygame.transform.scale(game_img_used, cfg.SCREENSIZE)

   game_img_used_rect = game_img_used.get_rect()

   # 设置窗口

   screen = pygame.display.set_mode(cfg.SCREENSIZE)

   pygame.display.set_caption(拼图游戏 —— Linux黑客小课堂)

   # 游戏开始界面

   size = ShowStartInterface(screen, game_img_used_rect.width, game_img_used_rect.height)

   assert isinstance(size, int)

   num_rows, num_cols = size, size

   num_cells = size * size

   # 计算Cell大小

   cell_width = game_img_used_rect.width // num_cols

   cell_height = game_img_used_rect.height // num_rows

   # 避免初始化为原图

   while True:

   game_board, blank_cell_idx = CreateBoard(num_rows, num_cols, num_cells)

   if not isGameOver(game_board, size):

   break

   # 游戏主循环

   is_running = True

   while is_running:

   # --事件捕获

   for event in pygame.event.get():

   # ----退出游戏

   if (event.type == pygame.QUIT) or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):

   pygame.quit()

   sys.exit()

   # ----键盘操作

   elif event.type == pygame.KEYDOWN:

   if event.key == pygame.K_LEFT or event.key == ord(a):

   blank_cell_idx = moveL(game_board, blank_cell_idx, num_cols)

   elif event.key == pygame.K_RIGHT or event.key == ord(d):

   blank_cell_idx = moveR(game_board, blank_cell_idx, num_cols)

   elif event.key == pygame.K_UP or event.key == ord(w):

   blank_cell_idx = moveU(game_board, blank_cell_idx, num_rows, num_cols)

   elif event.key == pygame.K_DOWN or event.key == ord(s):

   blank_cell_idx = moveD(game_board, blank_cell_idx, num_cols)

   # ----鼠标操作

   elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:

   x, y = pygame.mouse.get_pos()

   x_pos = x // cell_width

   y_pos = y // cell_height

   idx = x_pos + y_pos * num_cols

   if idx == blank_cell_idx-1:

   blank_cell_idx = moveR(game_board, blank_cell_idx, num_cols)

   elif idx == blank_cell_idx+1:

   blank_cell_idx = moveL(game_board, blank_cell_idx, num_cols)

   elif idx == blank_cell_idx+num_cols:

   blank_cell_idx = moveU(game_board, blank_cell_idx, num_rows, num_cols)

   elif idx == blank_cell_idx-num_cols:

   blank_cell_idx = moveD(game_board, blank_cell_idx, num_cols)

   # --判断游戏是否结束

   if isGameOver(game_board, size):

   game_board[blank_cell_idx] = num_cells - 1

   is_running = False

   # --更新屏幕

   screen.fill(cfg.BACKGROUNDCOLOR)

   for i in range(num_cells):

   if game_board[i] == -1:

   continue

   x_pos = i // num_cols

   y_pos = i % num_cols

   rect = pygame.Rect(y_pos*cell_width, x_pos*cell_height, cell_width, cell_height)

   img_area = pygame.Rect((game_board[i]%num_cols)*cell_width, (game_board[i]//num_cols)*cell_height, cell_width, cell_height)

   screen.blit(game_img_used, rect, img_area)

   for i in range(num_cols+1):

   pygame.draw.line(screen, cfg.BLACK, (i*cell_width, 0), (i*cell_width, game_img_used_rect.height))

   for i in range(num_rows+1):

   pygame.draw.line(screen, cfg.BLACK, (0, i*cell_height), (game_img_used_rect.width, i*cell_height))

   pygame.display.update()

   clock.tick(cfg.FPS)

   # 游戏结束界面

   ShowEndInterface(screen, game_img_used_rect.width, game_img_used_rect.height)

  run

  if __name__ == __main__:

   main()

  

  

  

游戏运行方法

  1、开发工具启动

  如果你有python开发环境VScode、sublimeText、notepad+、pycharm等等这些环境,可以直接在工具中,运行游戏。

  2、命令行运行游戏

  如下图:

  

  以上就是通过Python把学姐照片做成拼图游戏的详细内容,更多关于Python拼图游戏的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 浅谈python程序的错误-变量未定义的原因,浅谈python程序的错误-变量未定义为
  • 浅谈python程序的错误-变量未定义的原因,浅谈python程序的错误-变量未定义为,浅谈Python程序的错误-变量未定义
  • Python程序设计与算法基础教程,python算法指南
  • Python程序设计与算法基础教程,python算法指南,Python常用算法学习基础教程
  • ,,8个实用的Python程序你知道几个
  • python程序打包成exe可执行文件,python程序打包成exe后的 运行速度
  • python流程管理,Python程序开发流程
  • Python程序开发案例教程,python程序设计案例实践教程
  • python编程基础与案例集锦,python程序代码实例
  • python程序设计实例教程董付国课后答案,python程序设计第三版董付国
  • 如果在python程序中没有导入相关模块,python外部模块不用导入可以直接使用
  • Python程序语言设计基础,Python编程设计
  • python程序语言的特点,Python编程的特点
  • python程序编写,python编程求素数
  • python向服务器发送数据,python程序如何在服务器部署
  • 留言与评论(共有 条评论)
       
    验证码: