python小游戏代码 利用python画图的步骤

前言:这一期,我们来做一个拼图。让我们快乐地开始吧~ ~ ~我们先来看看这样的效果:开发工具**Python版本:**3.6.4私人边肖01可以获得很多python学习资源。相关模块:Pygame模块;以及Python附带的一些模块环境建设安装Python并将其添加到环境变量中。pip可以安装所需的相关模块...

前言:

这一期,我们来做一个拼图。让我们快乐地开始吧~ ~ ~

我们先来看看这样的效果:

开发工具

**Python版本:**3.6.4

私人边肖01可以获得很多python学习资源。

相关模块:

Pygame模块;

以及Python附带的一些模块

环境建设

安装Python并将其添加到环境变量中。pip可以安装所需的相关模块。

原理介绍

游戏介绍:

将图像分成m×n个矩形块,将图像右下角的矩形块替换为空白色块,然后将这些矩形块随机放置成原图的形状。游戏的目标是通过移动非空白块将随机放置的图像恢复为原始图像,并规定移动操作只存在于非空白块移动到空白块的情况下。

例如,如下所示:

逐渐意识到:

第一步:游戏的初始界面

既然是游戏,就要有初始界面吧?

好,我们先写一个游戏初始界面:

'''显示游戏开始界面'''def ShowStartInte***ce(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 3elif event.key == ord('m'): return 4elif event.key == ord('h'): return 5pygame.display.update()***代码

根据玩家自身的水平,可以选择不同难度的拼图。

步骤2:定义移动操作

定义move操作的目的是移动拼图(类似废话T_T),具体实现很简单:

'''将空白Cell左边的Cell右移到空白Cell位置'''def moveR(board, blank_cell_idx, num_cols):if blank_cell_idx % num_cols == 0: return blank_cell_idxboard[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_idxboard[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_idxboard[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_idxboard[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 - 1board[blank_cell_idx] = -1for i in range(cfg.NUMRANDOM):# 0: left, 1: right, 2: up, 3: downdirection = 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***代码

游戏主界面初始化:

最后实现主界面的显示刷新和事件响应:

while True:game_board, blank_cell_idx = CreateBoard(num_rows, num_cols, num_cells)if not isGameOver(game_board, size):break# 游戏主循环is_running = Truewhile 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_widthy_pos = y // cell_heightidx = x_pos + y_pos * num_colsif 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 - 1is_running = False# --更新屏幕screen.fill(cfg.BACKGROUNDCOLOR)for i in range(num_cells):if game_board[i] == -1:continuex_pos = i // num_colsy_pos = i % num_colsrect = 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)***代码

第四步:游戏结束界面

当玩家完成拼图后,需要显示游戏结束界面,该界面类似于游戏的初始界面,实现起来相对简单:

'''显示游戏结束界面'''def ShowEndInte***ce(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()***代码

这是文章的结尾。感谢您的观看。

本文来自浅沫投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/530786.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 05-03
下一篇 05-03

相关推荐

  • 猪的简笔画(猪简笔画图片大全)

    画猪的鼻子,然后是猪的耳朵,猪的眼睛和嘴巴,然后是猪肥胖的身体和腿。然后画猪尾巴,最后上色。工具/材料工具/材料白纸、黑白铅笔、彩笔。操作01先画猪鼻子。请注意,这个鼻子的轮廓不是一个规则的圆形或椭圆形。但是线变了。0202画猪的大耳朵。耳朵要大一点,末端尖一点,

    2023-07-22 06:08:01
    594 0
  • ppt中图形如何对齐 ppt画图怎么对齐

    当我们编辑单词时,一个重要的方面是对齐。其实在PPT中,图形的对齐尤为重要。今天就一起来学习一下吧。让我们先来看看对齐。这里提供了四种对齐方式,分别是左对齐、右对齐、上对齐和下对齐。如果图形是水平排列的,那么使用顶部对齐和底部对齐,另外两个是垂直排列的图形。

    2023-07-18 09:51:01
    178 0
  • 手机画图软件有哪几个 电脑绘画app排行

    程序员除了写代码,还经常需要画一些图,包括流程图、软件架构图、一些说明文档的插图等等。目前,微软Visio、IBM Rose、易图等软件应用广泛。这些软件的功能真的很强大,完全够我们用,但是要收费。今天,我将向你介绍一些免费的,但非常容易使用的绘图软件,我相信你会喜欢

    2023-07-08 18:28:01
    114 0
  • 电脑cad画图软件哪个好用免费 应用最广泛的5款CAD画图软件

    很多人不知道为什么别人一个小时就能看完的图,自己一天也看不完。其实很多人都会用辅助软件。这些工具可以帮助你完成正确的绘图步骤,提高绘图效率。不要以为所有好用的软件都要钱。今天就给大家安利几个免费的CAD神器。如果你不收集一个,就像失去了一个亿。1.CAD图层管理插

    2023-07-06 03:50:01
    727 0

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信