python+pygame Hopscotch小游戏

本文介绍了如何利用Python的Pygame库制作一款名为Hopscotch的小游戏。游戏规则类似于跳房子,目标是通过特定操作使得矩阵中只剩下一个值为1的点。文章详细阐述了游戏规则、实现思路,包括59矩阵的使用、游戏状态判断以及Pygame界面的创建和事件处理。同时,文中还提到了在实现过程中遇到的问题和改进点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解密小游戏Hopscotch

偶然看到了一个小游戏【Hopscotch】,和跳房子的规则有点类似,这里放一个视频,(如果你不想看这个视频,我下面会简单介绍一下玩法,但建议看一下,我说的可能不清楚),我是看到这个了然后像写一个这样的简易小游戏,一方面练习python,另一方面‘0’成本玩游戏。

游戏规则

在这里插入图片描述
第一步:选择一个位置拿掉(这里皮卡丘将会变成喷火龙)
在这里插入图片描述
第二步:选择两个位置,这两个位置应该满足第一个位置是皮卡丘,第二个位置是喷火龙,他俩之间需要用皮卡丘隔开,效果如下:
在这里插入图片描述
第三步:反复操作,最后只剩下一个皮卡丘则胜利,否则失败。

思路说明

1、首先我采用59的矩阵来表示三角形的放置如图。
在这里插入图片描述
2、初始化,即第一步操作:去除一个点,使1变为0。
3、反复跳跃,使1变为0。这里主要在判断是否可以跳跃。我用的方法是,选择的第一个点值为1,第二个点值为0,两点坐标对应均值作为坐标的点的值为1。(这里可能有点绕,不太懂的可以看下面的代码)
4、判断是否胜利。方法为算矩阵值之和为666
30+1。
5、编写pygame的界面。(要将鼠标事件与对应跳跃相关联)

关键点解析

因为我在初步接触pygame,所以这里重点说一下pygame的应用。
pygame.init()初始化模块
pygame.image.load('pikaqiu.bmp')载入图片
screen.blit(icon1, [x,y])将图片icon放在[x,y]绝对坐标处
pygame.draw.rect(screen,[255,255,255],[x,y],0)在screen表面[x,y]处画一个宽度为1,颜色为黑色的矩形边框
size = width, height = 900, 650 screen = pygame.display.set_mode(size)建立screen的大小
pygame.display.set_caption('title')标题
screen.fill((255,255,255))背景颜色
pygame.mixer.music.load('River Fflows In You.wav')载入音乐
pygame.mixer.music.play()播放音乐
map_font = pygame.font.Font('msyh.ttc', 20)载入字体和字号
font_surf = map_font.render('祝您游戏愉快!', True, (0, 0, 0)) font_rect = font_surf.get_rect()编辑文本,建立一个对象
font_rect.center = (100, 25)将文本居中放在(100,25)绝对坐标处
screen.blit(font_surf, font_rect)显示文本
pygame.display.update()更新屏幕
在这里插入图片描述
进入事件队列,循环判断事件发生,并产生响应
pygame.event.pump() — 让 Pygame 内部自动处理事件
pygame.event.get() — 从队列中获取事件
pygame.event.poll() — 从队列中获取一个事件
pygame.event.wait() — 等待并从队列中获取一个事件
pygame.event.peek() — 检测某类型事件是否在队列中
pygame.event.clear() — 从队列中删除所有的事件
pygame.event.event_name() — 通过 id 获得该事件的字符串名字
pygame.event.set_blocked() — 控制哪些事件禁止进入队列
pygame.event.set_allowed() — 控制哪些事件允许进入队列
pygame.event.get_blocked() — 检测某一类型的事件是否被禁止进入队列
pygame.event.set_grab() — 控制输入设备与其他应用程序的共享
pygame.event.get_grab() — 检测程序是否共享输入设备
pygame.event.post() — 放置一个新的事件到队列中
pygame.event.Event() — 创建一个新的事件对象
pygame.event.EventType — 代表 SDL 事件的 Pygame 对象
事件类型摘自:https://blog.youkuaiyun.com/qq_41556318/article/details/86303039

代码回放

import pygame
import sys
#wx模块用于在选择错误是发出警告
import wx
import time

#list_是45个点的在屏幕中的位置坐标
#list_2是对应点的位置坐标
list_2 = [(1,5),(2,4),(2,6),(3,3),(3,5),(3,7),(4,2),(4,4),(4,6),(4,8),(5,1),(5,3),(5,5),(5,7),(5,9)]
list_ = [[405, 30], [305, 155], [505, 155], [205, 280], [405, 280], [605, 280], [105, 405], [305, 405], [505, 405], [705, 405], [5, 530], [205, 530], [405, 530], [605, 530], [805, 530], [405, 30], [305, 155], [505, 155], [205, 280], [405, 280], [605, 280], [105, 405], [305, 405], [505, 405], [705, 405], [5, 530], [205, 530], [405, 530], [605, 530], [805, 530], [405, 30], [305, 155], [505, 155], [205, 280], [405, 280], [605, 280], [105, 405], [305, 405], [505, 405], [705, 405], [5, 530], [205, 530], [405, 530], [605, 530], [805, 530], [405, 30], [305, 155], [505, 155], [205, 280], [405, 280], [605, 280], [105, 405], [305, 405], [505, 405], [705, 405], [5, 530], [205, 530], [405, 530], [605, 530], [805, 530], [405, 30], [305, 155], [505, 155], [205, 280], [405, 280], [605, 280], [105, 405], [305, 405], [505, 405], [705, 405], [5, 530], [205, 530], [405, 530], [605, 530], [805, 530], [405, 30], [305, 155], [505, 155], [205, 280], [405, 280], [605, 280], [105, 405], [305, 405], [505, 405], [705, 405], [5, 530], [205, 530], [405, 530], [605, 530], [805, 530], [405, 30], [305, 155], [505, 155], [205, 280], [405, 280], [605, 280], [105, 405], [305, 405], [505, 405], [705, 405], [5, 530], [205, 530], [405, 530], [605, 530], [805, 530], [405, 30], [305, 155], [505, 155], [205, 280], [405, 280], [605, 280], [105, 405], [305, 405], [505, 405
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值