当前位置: 首页 > news >正文

【Python童年游戏】满满的回忆杀—那些年玩过的童年游戏你还记得吗?那个才是你的菜?看到第一个我就泪奔了(致我们逝去的青春)

导语

滴一一学生卡🙌

结伴上车的学生仔子们

用笑声打破车厢的沉默

大人眼里的晚高峰

是给放学后快乐😀时光的加时

下车的学生匆匆起身带起

一阵熟悉的栀子香于💓

是关于校园的记忆

开始零零散散地闪现

放学后集合的秘密基地/跟着城市变了模样

超级马里奥里的隐藏地图😁(重点)

吃豆人里的闪躲奥秘 😁(重点)

却刻进了DNA里一曾经珍藏的交换日记

不记得被放在了哪里

你现在记得的是/相互鼓励的感动

还是小纸条里写的八卦❓

从肩上的书包到手里的电脑包

时间在改变生活的轨迹🚀

少年带着率真与坚定/甩开不谙世事

同在路上的朋友啊

愿你迎风像栀子花一样/💯继续灿烂地开!

所有文章完整的素材+源码都在👇👇

粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。

当我写完前言的时候,可能在长沙的小伙伴儿就知道这是哪儿的宣传语,偷偷给你们提醒,是

一家好喝的奶茶店哦~

今天去喝奶茶的时候,突然看到了这个宣传语我就拍下来啦,然后当做今天的内容素材,嘿嘿

今天小编教大家两款上面提到过的小游戏,直接用Python编程的语言来诠释它们——

1、超级马里奥里的隐藏地图(重点)  2、吃豆人里的闪躲奥秘 (重点)。

正文

小霸王,那是属于一代人的记忆,70、80、甚至90后都对这个“键盘”有着不一样的感情。

今今天小编教大家用代码编写两款小游戏给大家,大家喜欢的话记得三连哦~

一、环境准备中 

 1)运行环境

环境安装:python 3.8: 解释器、pycharm: 代码编辑器。需要安装的模块如下

2)的模块安装方式安装即可。自带的一些模块 直接安装Python就可以使用了。 

 相对应的安装包/安装教程/激活码/使用教程/学 习资料/工具插件 可以直接找我厚台获取 。 

 2)模块安装 

 第三方库的安装方式如下: 

 一般安装:pip install +模块名 镜像源安装:pip install -i https://pypi.douban.com/simple/+模块名(还有很多国内镜像源,这里是豆瓣的用习惯 了,其他镜像源可以去看下之前文章都有的) 

 模块安装问题可以详细的找我给大家讲一下的哈,之前其实也有的文章写了几个点的。 

二、超级马里奥里的隐藏地图

“超级玛丽”有多少人还记得这款经典游戏?对于90、00后应该不大熟悉,但多多少少印象中见

那个戴帽子的大胡子穿着背带裤的马里奥🤣

如果你的童年也曾被魔性的 灯~灯灯~灯~灯灯~灯洗脑那就接着来怀旧一番吧~

1)运行程序:mario_level_1.py。

#!/usr/bin/env python
__author__ = '超级玛丽-源码基地'"""
This is an attempt to recreate the first level of
Super Mario Bros for the NES.
"""import sys
import pygame as pg
from data.main import main
import cProfileif __name__=='__main__':main()pg.quit()sys.exit()

2) 配置音乐文字等setup.py。🎑

__author__ = 'Python源码基地'"""
This module initializes the display and creates dictionaries of resources.
"""import os
import pygame as pg
from . import tools
from .import constants as cORIGINAL_CAPTION = c.ORIGINAL_CAPTIONos.environ['SDL_VIDEO_CENTERED'] = '1'
pg.init()
pg.event.set_allowed([pg.KEYDOWN, pg.KEYUP, pg.QUIT])
pg.display.set_caption(c.ORIGINAL_CAPTION)
SCREEN = pg.display.set_mode(c.SCREEN_SIZE)
SCREEN_RECT = SCREEN.get_rect()FONTS = tools.load_all_fonts(os.path.join("resources","fonts"))
MUSIC = tools.load_all_music(os.path.join("resources","music"))
GFX   = tools.load_all_gfx(os.path.join("resources","graphics"))
SFX   = tools.load_all_sfx(os.path.join("resources","sound"))

3)游戏音乐设置game_sound.py。🎑

__author__ = 'Python顾木子吖'import pygame as pg
from . import setup
from . import constants as cclass Sound(object):"""Handles all sound for the game"""def __init__(self, overhead_info):"""Initialize the class"""self.sfx_dict = setup.SFXself.music_dict = setup.MUSICself.overhead_info = overhead_infoself.game_info = overhead_info.game_infoself.set_music_mixer()def set_music_mixer(self):"""Sets music for level"""if self.overhead_info.state == c.LEVEL:pg.mixer.music.load(self.music_dict['main_theme'])pg.mixer.music.play()self.state = c.NORMALelif self.overhead_info.state == c.GAME_OVER:pg.mixer.music.load(self.music_dict['game_over'])pg.mixer.music.play()self.state = c.GAME_OVERdef update(self, game_info, mario):"""Updates sound object with game info"""self.game_info = game_infoself.mario = marioself.handle_state()def  handle_state(self):"""Handles the state of the soundn object"""if self.state == c.NORMAL:if self.mario.dead:self.play_music('death', c.MARIO_DEAD)elif self.mario.invincible \and self.mario.losing_invincibility == False:self.play_music('invincible', c.MARIO_INVINCIBLE)elif self.mario.state == c.FLAGPOLE:self.play_music('flagpole', c.FLAGPOLE)elif self.overhead_info.time == 100:self.play_music('out_of_time', c.TIME_WARNING)elif self.state == c.FLAGPOLE:if self.mario.state == c.WALKING_TO_CASTLE:self.play_music('stage_clear', c.STAGE_CLEAR)elif self.state == c.STAGE_CLEAR:if self.mario.in_castle:self.sfx_dict['count_down'].play()self.state = c.FAST_COUNT_DOWNelif self.state == c.FAST_COUNT_DOWN:if self.overhead_info.time == 0:self.sfx_dict['count_down'].stop()self.state = c.WORLD_CLEARelif self.state == c. TIME_WARNING:if pg.mixer.music.get_busy() == 0:self.play_music('main_theme_sped_up', c.SPED_UP_NORMAL)elif self.mario.dead:self.play_music('death', c.MARIO_DEAD)elif self.state == c.SPED_UP_NORMAL:if self.mario.dead:self.play_music('death', c.MARIO_DEAD)elif self.mario.state == c.FLAGPOLE:self.play_music('flagpole', c.FLAGPOLE)elif self.state == c.MARIO_INVINCIBLE:if (self.mario.current_time - self.mario.invincible_start_timer) > 11000:self.play_music('main_theme', c.NORMAL)elif self.mario.dead:self.play_music('death', c.MARIO_DEAD)elif self.state == c.WORLD_CLEAR:passelif self.state == c.MARIO_DEAD:passelif self.state == c.GAME_OVER:passdef play_music(self, key, state):"""Plays new music"""pg.mixer.music.load(self.music_dict[key])pg.mixer.music.play()self.state = statedef stop_music(self):"""Stops playback"""pg.mixer.music.stop()

4)取得的分数🎑。

import pygame as pg
from .. import setup
from .. import constants as cclass Digit(pg.sprite.Sprite):"""Individual digit for score"""def __init__(self, image):super(Digit, self).__init__()self.image = imageself.rect = image.get_rect()class Score(object):"""Scores that appear, float up, and disappear"""def __init__(self, x, y, score, flag_pole=False):self.x = xself.y = yif flag_pole:self.y_vel = -4else:self.y_vel = -3self.sprite_sheet = setup.GFX['item_objects']self.create_image_dict()self.score_string = str(score)self.create_digit_list()self.flag_pole_score = flag_poledef create_image_dict(self):"""Creates the dictionary for all the number 图片 needed"""self.image_dict = {}image0 = self.get_image(1, 168, 3, 8)image1 = self.get_image(5, 168, 3, 8)image2 = self.get_image(8, 168, 4, 8)image4 = self.get_image(12, 168, 4, 8)image5 = self.get_image(16, 168, 5, 8)image8 = self.get_image(20, 168, 4, 8)image9 = self.get_image(32, 168, 5, 8)image10 = self.get_image(37, 168, 6, 8)image11 = self.get_image(43, 168, 5, 8)self.image_dict['0'] = image0self.image_dict['1'] = image1self.image_dict['2'] = image2self.image_dict['4'] = image4self.image_dict['5'] = image5self.image_dict['8'] = image8self.image_dict['3'] = image9self.image_dict['7'] = image10self.image_dict['9'] = image11def get_image(self, x, y, width, height):"""Extracts image from sprite sheet"""image = pg.Surface([width, height]).convert()rect = image.get_rect()image.blit(self.sprite_sheet, (0, 0), (x, y, width, height))image.set_colorkey(c.BLACK)image = pg.transform.scale(image,(int(rect.width*c.BRICK_SIZE_MULTIPLIER),int(rect.height*c.BRICK_SIZE_MULTIPLIER)))return imagedef create_digit_list(self):"""Creates the group of 图片 based on score received"""self.digit_list = []self.digit_group = pg.sprite.Group()for digit in self.score_string:self.digit_list.append(Digit(self.image_dict[digit]))self.set_rects_for_images()def set_rects_for_images(self):"""Set the rect attributes for each image in self.image_list"""for i, digit in enumerate(self.digit_list):digit.rect = digit.image.get_rect()digit.rect.x = self.x + (i * 10)digit.rect.y = self.ydef update(self, score_list, level_info):"""Updates score movement"""for number in self.digit_list:number.rect.y += self.y_velif score_list:self.check_to_delete_floating_scores(score_list, level_info)if self.flag_pole_score:if self.digit_list[0].rect.y <= 120:self.y_vel = 0def draw(self, screen):"""Draws score numbers onto screen"""for digit in self.digit_list:screen.blit(digit.image, digit.rect)def check_to_delete_floating_scores(self, score_list, level_info):"""Check if scores need to be deleted"""for i, score in enumerate(score_list):if int(score.score_string) == 1000:if (score.y - score.digit_list[0].rect.y) > 130:score_list.pop(i)else:if (score.y - score.digit_list[0].rect.y) > 75:score_list.pop(i)

5)效果展示

游戏界面——

游戏运行——

​三、吃豆人里的闪躲奥秘

1)配置文件:cfg.py

import os'''定义一些颜色'''
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
BLUE = (0, 0, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
YELLOW = (255, 255, 0)
PURPLE = (255, 0, 255)
SKYBLUE = (0, 191, 255)
'''游戏素材路径'''
BGMPATH = os.path.join(os.getcwd(), 'resources/sounds/bg.mp3')
ICONPATH = os.path.join(os.getcwd(), 'resources/images/icon.png')
FONTPATH = os.path.join(os.getcwd(), 'resources/font/ALGER.TTF')
HEROPATH = os.path.join(os.getcwd(), 'resources/images/pacman.png')
BlinkyPATH = os.path.join(os.getcwd(), 'resources/images/Blinky.png')
ClydePATH = os.path.join(os.getcwd(), 'resources/images/Clyde.png')
InkyPATH = os.path.join(os.getcwd(), 'resources/images/Inky.png')
PinkyPATH = os.path.join(os.getcwd(), 'resources/images/Pinky.png')

2)定义一些精灵类:Sprites.py

import random
import pygame'''墙类'''
class Wall(pygame.sprite.Sprite):def __init__(self, x, y, width, height, color, **kwargs):pygame.sprite.Sprite.__init__(self)self.image = pygame.Surface([width, height])self.image.fill(color)self.rect = self.image.get_rect()self.rect.left = xself.rect.top = y'''食物类'''
class Food(pygame.sprite.Sprite):def __init__(self, x, y, width, height, color, bg_color, **kwargs):pygame.sprite.Sprite.__init__(self)self.image = pygame.Surface([width, height])self.image.fill(bg_color)self.image.set_colorkey(bg_color)pygame.draw.ellipse(self.image, color, [0, 0, width, height])self.rect = self.image.get_rect()self.rect.left = xself.rect.top = y'''角色类'''
class Player(pygame.sprite.Sprite):def __init__(self, x, y, role_image_path):pygame.sprite.Sprite.__init__(self)self.role_name = role_image_path.split('/')[-1].split('.')[0]self.base_image = pygame.image.load(role_image_path).convert()self.image = self.base_image.copy()self.rect = self.image.get_rect()self.rect.left = xself.rect.top = yself.prev_x = xself.prev_y = yself.base_speed = [30, 30]self.speed = [0, 0]self.is_move = Falseself.tracks = []self.tracks_loc = [0, 0]'''改变速度方向'''def changeSpeed(self, direction):if direction[0] < 0:self.image = pygame.transform.flip(self.base_image, True, False)elif direction[0] > 0:self.image = self.base_image.copy()elif direction[1] < 0:self.image = pygame.transform.rotate(self.base_image, 90)elif direction[1] > 0:self.image = pygame.transform.rotate(self.base_image, -90)self.speed = [direction[0] * self.base_speed[0], direction[1] * self.base_speed[1]]return self.speed'''更新角色位置'''def update(self, wall_sprites, gate_sprites):if not self.is_move:return Falsex_prev = self.rect.lefty_prev = self.rect.topself.rect.left += self.speed[0]self.rect.top += self.speed[1]is_collide = pygame.sprite.spritecollide(self, wall_sprites, False)if gate_sprites is not None:if not is_collide:is_collide = pygame.sprite.spritecollide(self, gate_sprites, False)if is_collide:self.rect.left = x_prevself.rect.top = y_prevreturn Falsereturn True'''生成随机的方向'''def randomDirection(self):return random.choice([[-0.5, 0], [0.5, 0], [0, 0.5], [0, -0.5]])

3)定义关卡:Levels.py

import pygame
from .Sprites import *'''关卡数量'''
NUMLEVELS = 1'''关卡一'''
class Level1():def __init__(self):self.info = 'level1''''创建墙'''def setupWalls(self, wall_color):self.wall_sprites = pygame.sprite.Group()wall_positions = [[0, 0, 6, 600], [0, 0, 600, 6], [0, 600, 606, 6], [600, 0, 6, 606], [300, 0, 6, 66], [60, 60, 186, 6],[360, 60, 186, 6], [60, 120, 66, 6], [60, 120, 6, 126], [180, 120, 246, 6], [300, 120, 6, 66],[480, 120, 66, 6], [540, 120, 6, 126], [120, 180, 126, 6], [120, 180, 6, 126], [360, 180, 126, 6],[480, 180, 6, 126], [180, 240, 6, 126], [180, 360, 246, 6], [420, 240, 6, 126], [240, 240, 42, 6],[324, 240, 42, 6], [240, 240, 6, 66], [240, 300, 126, 6], [360, 240, 6, 66], [0, 300, 66, 6],[540, 300, 66, 6], [60, 360, 66, 6], [60, 360, 6, 186], [480, 360, 66, 6], [540, 360, 6, 186],[120, 420, 366, 6], [120, 420, 6, 66], [480, 420, 6, 66], [180, 480, 246, 6], [300, 480, 6, 66],[120, 540, 126, 6], [360, 540, 126, 6]]for wall_position in wall_positions:wall = Wall(*wall_position, wall_color)self.wall_sprites.add(wall)return self.wall_sprites'''创建门'''def setupGate(self, gate_color):self.gate_sprites = pygame.sprite.Group()self.gate_sprites.add(Wall(282, 242, 42, 2, gate_color))return self.gate_sprites'''创建角色'''def setupPlayers(self, hero_image_path, ghost_images_path):self.hero_sprites = pygame.sprite.Group()self.ghost_sprites = pygame.sprite.Group()self.hero_sprites.add(Player(287, 439, hero_image_path))for each in ghost_images_path:role_name = each.split('/')[-1].split('.')[0]if role_name == 'Blinky':player = Player(287, 199, each)player.is_move = Trueplayer.tracks = [[0, -0.5, 4], [0.5, 0, 9], [0, 0.5, 11], [0.5, 0, 3], [0, 0.5, 7], [-0.5, 0, 11], [0, 0.5, 3],[0.5, 0, 15], [0, -0.5, 15], [0.5, 0, 3], [0, -0.5, 11], [-0.5, 0, 3], [0, -0.5, 11], [-0.5, 0, 3],[0, -0.5, 3], [-0.5, 0, 7], [0, -0.5, 3], [0.5, 0, 15], [0, 0.5, 15], [-0.5, 0, 3], [0, 0.5, 3],[-0.5, 0, 3], [0, -0.5, 7], [-0.5, 0, 3], [0, 0.5, 7], [-0.5, 0, 11], [0, -0.5, 7], [0.5, 0, 5]]self.ghost_sprites.add(player)elif role_name == 'Clyde':player = Player(319, 259, each)player.is_move = Trueplayer.tracks = [[-1, 0, 2], [0, -0.5, 4], [0.5, 0, 5], [0, 0.5, 7], [-0.5, 0, 11], [0, -0.5, 7],[-0.5, 0, 3], [0, 0.5, 7], [-0.5, 0, 7], [0, 0.5, 15], [0.5, 0, 15], [0, -0.5, 3],[-0.5, 0, 11], [0, -0.5, 7], [0.5, 0, 3], [0, -0.5, 11], [0.5, 0, 9]]self.ghost_sprites.add(player)elif role_name == 'Inky':player = Player(255, 259, each)player.is_move = Trueplayer.tracks = [[1, 0, 2], [0, -0.5, 4], [0.5, 0, 10], [0, 0.5, 7], [0.5, 0, 3], [0, -0.5, 3],[0.5, 0, 3], [0, -0.5, 15], [-0.5, 0, 15], [0, 0.5, 3], [0.5, 0, 15], [0, 0.5, 11],[-0.5, 0, 3], [0, -0.5, 7], [-0.5, 0, 11], [0, 0.5, 3], [-0.5, 0, 11], [0, 0.5, 7],[-0.5, 0, 3], [0, -0.5, 3], [-0.5, 0, 3], [0, -0.5, 15], [0.5, 0, 15], [0, 0.5, 3],[-0.5, 0, 15], [0, 0.5, 11], [0.5, 0, 3], [0, -0.5, 11], [0.5, 0, 11], [0, 0.5, 3], [0.5, 0, 1]]self.ghost_sprites.add(player)elif role_name == 'Pinky':player = Player(287, 259, each)player.is_move = Trueplayer.tracks = [[0, -1, 4], [0.5, 0, 9], [0, 0.5, 11], [-0.5, 0, 23], [0, 0.5, 7], [0.5, 0, 3],[0, -0.5, 3], [0.5, 0, 19], [0, 0.5, 3], [0.5, 0, 3], [0, 0.5, 3], [0.5, 0, 3],[0, -0.5, 15], [-0.5, 0, 7], [0, 0.5, 3], [-0.5, 0, 19], [0, -0.5, 11], [0.5, 0, 9]]self.ghost_sprites.add(player)return self.hero_sprites, self.ghost_sprites'''创建食物'''def setupFood(self, food_color, bg_color):self.food_sprites = pygame.sprite.Group()for row in range(19):for col in range(19):if (row == 7 or row == 8) and (col == 8 or col == 9 or col == 10):continueelse:food = Food(30 * col + 32, 30 * row + 32, 4, 4, food_color, bg_color)is_collide = pygame.sprite.spritecollide(food, self.wall_sprites, False)if is_collide:continueis_collide = pygame.sprite.spritecollide(food, self.hero_sprites, False)if is_collide:continueself.food_sprites.add(food)return self.food_sprites

4)主程序Game.py

import sys
import cfg
import pygame
import modules.Levels as Levels'''开始某一关游戏'''
def startLevelGame(level, screen, font):clock = pygame.time.Clock()SCORE = 0wall_sprites = level.setupWalls(cfg.SKYBLUE)gate_sprites = level.setupGate(cfg.WHITE)hero_sprites, ghost_sprites = level.setupPlayers(cfg.HEROPATH, [cfg.BlinkyPATH, cfg.ClydePATH, cfg.InkyPATH, cfg.PinkyPATH])food_sprites = level.setupFood(cfg.YELLOW, cfg.WHITE)is_clearance = Falsewhile True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit(-1)pygame.quit()if event.type == pygame.KEYDOWN:if event.key == pygame.K_LEFT:for hero in hero_sprites:hero.changeSpeed([-1, 0])hero.is_move = Trueelif event.key == pygame.K_RIGHT:for hero in hero_sprites:hero.changeSpeed([1, 0])hero.is_move = Trueelif event.key == pygame.K_UP:for hero in hero_sprites:hero.changeSpeed([0, -1])hero.is_move = Trueelif event.key == pygame.K_DOWN:for hero in hero_sprites:hero.changeSpeed([0, 1])hero.is_move = Trueif event.type == pygame.KEYUP:if (event.key == pygame.K_LEFT) or (event.key == pygame.K_RIGHT) or (event.key == pygame.K_UP) or (event.key == pygame.K_DOWN):hero.is_move = Falsescreen.fill(cfg.BLACK)for hero in hero_sprites:hero.update(wall_sprites, gate_sprites)hero_sprites.draw(screen)for hero in hero_sprites:food_eaten = pygame.sprite.spritecollide(hero, food_sprites, True)SCORE += len(food_eaten)wall_sprites.draw(screen)gate_sprites.draw(screen)food_sprites.draw(screen)for ghost in ghost_sprites:# 幽灵随机运动(效果不好且有BUG)'''res = ghost.update(wall_sprites, None)while not res:ghost.changeSpeed(ghost.randomDirection())res = ghost.update(wall_sprites, None)'''# 指定幽灵运动路径if ghost.tracks_loc[1] < ghost.tracks[ghost.tracks_loc[0]][2]:ghost.changeSpeed(ghost.tracks[ghost.tracks_loc[0]][0: 2])ghost.tracks_loc[1] += 1else:if ghost.tracks_loc[0] < len(ghost.tracks) - 1:ghost.tracks_loc[0] += 1elif ghost.role_name == 'Clyde':ghost.tracks_loc[0] = 2else:ghost.tracks_loc[0] = 0ghost.changeSpeed(ghost.tracks[ghost.tracks_loc[0]][0: 2])ghost.tracks_loc[1] = 0if ghost.tracks_loc[1] < ghost.tracks[ghost.tracks_loc[0]][2]:ghost.changeSpeed(ghost.tracks[ghost.tracks_loc[0]][0: 2])else:if ghost.tracks_loc[0] < len(ghost.tracks) - 1:loc0 = ghost.tracks_loc[0] + 1elif ghost.role_name == 'Clyde':loc0 = 2else:loc0 = 0ghost.changeSpeed(ghost.tracks[loc0][0: 2])ghost.update(wall_sprites, None)ghost_sprites.draw(screen)score_text = font.render("Score: %s" % SCORE, True, cfg.RED)screen.blit(score_text, [10, 10])if len(food_sprites) == 0:is_clearance = Truebreakif pygame.sprite.groupcollide(hero_sprites, ghost_sprites, False, False):is_clearance = Falsebreakpygame.display.flip()clock.tick(10)return is_clearance'''显示文字'''
def showText(screen, font, is_clearance, flag=False):clock = pygame.time.Clock()msg = 'Game Over!' if not is_clearance else 'Congratulations, you won!'positions = [[235, 233], [65, 303], [170, 333]] if not is_clearance else [[145, 233], [65, 303], [170, 333]]surface = pygame.Surface((400, 200))surface.set_alpha(10)surface.fill((128, 128, 128))screen.blit(surface, (100, 200))texts = [font.render(msg, True, cfg.WHITE),font.render('Press ENTER to continue or play again.', True, cfg.WHITE),font.render('Press ESCAPE to quit.', True, cfg.WHITE)]while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()pygame.quit()if event.type == pygame.KEYDOWN:if event.key == pygame.K_RETURN:if is_clearance:if not flag:returnelse:main(initialize())else:main(initialize())elif event.key == pygame.K_ESCAPE:sys.exit()pygame.quit()for idx, (text, position) in enumerate(zip(texts, positions)):screen.blit(text, position)pygame.display.flip()clock.tick(10)'''初始化'''
def initialize():pygame.init()icon_image = pygame.image.load(cfg.ICONPATH)pygame.display.set_icon(icon_image)screen = pygame.display.set_mode([606, 606])pygame.display.set_caption('吃豆豆小游戏')return screen'''主函数'''
def main(screen):pygame.mixer.init()pygame.mixer.music.load(cfg.BGMPATH)pygame.mixer.music.play(-1, 0.0)pygame.font.init()font_small = pygame.font.Font(cfg.FONTPATH, 18)font_big = pygame.font.Font(cfg.FONTPATH, 24)for num_level in range(1, Levels.NUMLEVELS+1):level = getattr(Levels, f'Level{num_level}')()is_clearance = startLevelGame(level, screen, font_small)if num_level == Levels.NUMLEVELS:showText(screen, font_big, is_clearance, True)else:showText(screen, font_big, is_clearance)'''run'''
if __name__ == '__main__':main(initialize())

5)效果展示

总结

如果有一台时光机,你最想回到什么时候?想必不少人的答案都会是,童年。童年的无忧无

虑,童年的单纯天真,那些笑与泪的日子,放学时,三五好友嬉笑打闹的走到学校门口小卖

店,买一包糖果,边吃边走回家的时光。回忆童年让我们从游戏开始吧~

✨完整的素材源码等:可以滴滴我吖!或者点击文末hao自取免费拿的哈~

 🔨推荐往期文章——

项目1.8  Wifi破解免费

Python编程零基础如何逆袭成为爬虫实战高手之《WIFI破解》(甩万能钥匙十条街)爆赞爆赞~

项目1.9  浪漫樱花表白代码合集

【Python表白代码】你喜欢什么场景下的告白?“我途径一场樱花的绽放 想分享给你”(永不落幕的樱花代码合集)

项目1.0  图像处理系统1.0版本

【OpenCV+Tkinter项目】同学,你要的OpenCV图像处理小系统已安排,终于有人把OpenCV那些必备的知识点讲透彻了~(太厉害了,已跪)

项目1.2  学习经验分享(14张思维导图)

【学习编程】献给迷茫中的你,教你如何快速入门编程,如何从编程小百到 IT 巨佬?零基础自学请收下这份学习指南(经验分享)

项目1.1   扫雷

 Pygame实战:据说这是史上最难扫雷游戏,没有之一,你们感受下......

项目1.2   魂斗罗

Pygame实战:多年后“魂斗罗”像素风归来 不止是经典与情怀@全体成员

🎄文章汇总——

汇总合集 Python—2022 |已有文章汇总 | 持续更新,直接看这篇就够了

(更多内容+源码都在✨文章汇总哦!!欢迎阅读喜欢的文章🎉~

相关文章:

【Python童年游戏】满满的回忆杀—那些年玩过的童年游戏你还记得吗?那个才是你的菜?看到第一个我就泪奔了(致我们逝去的青春)

导语 滴一一学生卡&#x1f64c; 结伴上车的学生仔子们 用笑声打破车厢的沉默 大人眼里的晚高峰 是给放学后快乐&#x1f600;时光的加时 下车的学生匆匆起身带起 一阵熟悉的栀子香于&#x1f493; 是关于校园的记忆 开始零零散散地闪现 放学后集合的秘密基地/跟着城…...

C++ | 认识标准库string和vector

本文概要 本篇文章主要介绍C的标准库类型string和vector&#xff0c;文中描述和代码示例很详细&#xff0c;看完即可掌握&#xff0c;感兴趣的小伙伴快来一起学习吧。 &#x1f31f;&#x1f31f;&#x1f31f;个人简介 &#x1f31f;&#x1f31f;&#x1f31f; ☀️大家好&a…...

JAVA面试宝典: SpringCloud知识点(通俗易懂易背)

1、什么是 Spring Cloud&#xff1f; Spring Cloud 是基于 Spring Boot 的微服务架构开发工具箱&#xff0c;提供了在分布式系统中构建可靠的、弹性的、灵活的应用所需的大多数工具。Spring Cloud 中包含的子项目如下&#xff1a; Spring Cloud Config&#xff1a;配置管理工具…...

es学习笔记

集群环境下数据往哪个节点放? 路由计算&#xff1a;hash(id) %主分片的数量 集群环境下查数据怎么查&#xff1f; 分配控制&#xff1a;访问任何一个节点都能获取数据&#xff0c;随机访问到的这个节点称为协调节点&#xff08;访问了当前节点&#xff0c;不一定从当前节点…...

SAS学习第9章:卡方检验之适合性检验与独立性检验

卡方检验就是统计样本的实际观测值与理论推断值之间的偏离程度&#xff0c;实际观测值与理论推断值之间的偏离程度就决定卡方值的大小&#xff0c;如果卡方值越大&#xff0c;二者偏差程度越大&#xff1b;反之&#xff0c;二者偏差越小&#xff1b;若两个值完全相等时&#xf…...

马斯克爆料Twitter裁了八成员工;OpenAI CEO:GPT-5根本不存在;小鹏被曝年终奖打0.5折 | AI一周资讯

来源: AI前线 微信号&#xff1a;ai-front 整理 | 凌敏 微软宣布开源 Deep Speed Chat&#xff1b;消息称软银旗下 Arm 启动赴美 IPO&#xff1b;国家网信办出台生成式 AI 管理办法&#xff1b;前理想 AI 芯片一号位骄旸加入三星&#xff0c;负责组建 GPU 团队…… 资 讯 Op…...

ASEMI代理ADG1408YRUZ-REEL7原装ADI车规级ADG1408YRUZ-REEL7

编辑&#xff1a;ll ASEMI代理ADG1408YRUZ-REEL7原装ADI车规级ADG1408YRUZ-REEL7 型号&#xff1a;ADG1408YRUZ-REEL7 品牌&#xff1a;ADI /亚德诺 封装&#xff1a;TSSOP-16 批号&#xff1a;2023 安装类型&#xff1a;表面贴装型 引脚数量&#xff1a;16 类型&#…...

phpstudy本地环境搭建图文教程

作者&#xff1a;Eason_LYC 悲观者预言失败&#xff0c;十言九中。 乐观者创造奇迹&#xff0c;一次即可。 一个人的价值&#xff0c;在于他所拥有的。可以不学无术&#xff0c;但不能一无所有&#xff01; 技术领域&#xff1a;WEB安全、网络攻防 关注WEB安全、网络攻防。我的…...

【UE 控件蓝图】菜单及功能实现

素材资源连接&#xff1a;百度网盘 请输入提取码 密码&#xff1a;fvcw 效果 步骤 1. 创建蓝图&#xff0c;父类为“HUD” 命名为“MainMenuHUD”并打开 在事件图表中添加如下节点&#xff1a; 2. 创建控件蓝图&#xff0c;命名为“MainMenuWidget” 此时在“MainMenuHUD”的…...

Java 并发编程面试题——Future

目录 1.什么是 Future 模式&#xff1f;Java 中是如何实现的&#xff1f;2.Callable、Future 与 FutureTask 分别是什么&#xff1f;2.1.Callable 接口2.2.Future 接口2.3.FutureTask 类 3.CompletableFuture 类有什么用&#xff1f; 1.什么是 Future 模式&#xff1f;Java 中是…...

SpringBoot 介绍

1.简介 SpringBoot最开始基于Spring4.0设计&#xff0c;是由Pivotal公司提供的框架。 SpringBoot发展史&#xff1a; 2003年Rod Johnson成立Interface公司&#xff0c;产品是SpringFramework2004年&#xff0c;Spring框架开源&#xff0c;公司改名为Spring Source2008年&…...

自动驾驶作业手册

1 总 则 目的为保障港口内自动驾驶车辆安全使用,预防和减少事故,保护人民生命和财产安全,促进港口内业务开展。 含义和范围港口内自动驾驶车辆,是指电脑驾驶车辆,为一种运输动力的无人地面载具,与有人驾驶车辆不同,其具备不需要人类操作即可以感测其环境及导航功能,能…...

MySQL调优笔记——慢SQL优化记录(2)

今天调优的原因是&#xff0c;有一个统计报表业务&#xff0c;查询的时间太慢&#xff1b;同时由于数据库的压力是随机性的&#xff0c;这个业务的执行下限和上限相差近20倍&#xff1b;快的时候可以达到600ms&#xff0c;慢的时候有9秒之多&#xff1b; 接下来详细介绍&#x…...

二叉排序树的插入和删除操作(python实现)

二叉排序树的插入和删除操作都是在保持二叉排序树特性的前提下进行的。 插入操作&#xff1a; 在二叉排序树中插入一个新节点时&#xff0c;先比较新节点的值和当前节点的值的大小关系&#xff0c;若小于当前节点&#xff0c;则继续在当前节点的左子树中查找&#xff1b;若大…...

算法记录 | Day35 贪心算法

860.柠檬水找零 思路&#xff1a; 只需要维护三种金额的数量&#xff0c;5&#xff0c;10和20。 有如下三种情况&#xff1a; 情况一&#xff1a;账单是5&#xff0c;直接收下。情况二&#xff1a;账单是10&#xff0c;消耗一个5&#xff0c;增加一个10情况三&#xff1a;账…...

coinex // 撮合引擎 逻辑流程 (两种数据源 初始化源和前端源)

目录 1 生产者 数据源 1.1. match-server 一启动 初始化数据 自动查询数据库 查询level2要展示的数据 1.2 match-server接收 前端发给Exchange-server的数据 2. 将查询/接受的数据EntrustOrder 转成 Order 解耦 过滤掉不要的属性 3.Order转成 OrderEvent 4. 分配序号发布…...

CentOS7---部署LNMP数据存储到redis

一、部署LNMP及redis 1、部署LNMP&#xff0c;需要将 tengine-2.2.0.tar.gz 拷贝到虚拟机的 /root 目录下 步骤一&#xff1a;安装nginx 源码安装相关软件包 # pcre-devel做正则匹配&#xff0c;zlib-devel做数据压缩 [roottemplate ~]# yum -y install gcc pcre-devel zlib-de…...

Linux中的git命令行

Linux中的git命令行 目录 Linux中的git命令行引入1、Linux下的git工具起源2、gitee的使用.gitignore.git 3、git三板斧3.1 git add3.2 git commit3.3 git push 4、git操作4.1 查看提交日志4.2 查看状态4.3 远端同步4.4 删除文件4.5 修改文件名 引入 当多个开发者同时参与同一个…...

【C++】哈希表:开散列和闭散列

&#x1f4dd; 个人主页 &#xff1a;超人不会飞)&#x1f4d1; 本文收录专栏&#xff1a;《C的修行之路》&#x1f4ad; 如果本文对您有帮助&#xff0c;不妨点赞、收藏、关注支持博主&#xff0c;我们一起进步&#xff0c;共同成长&#xff01; 目录 前言一、基于哈希表的两个…...

C技能树:Hello World

Hello World 输出 "Hello, World!" 字符串&#xff0c;请选出错误答案。 小知识&#xff1a;Hello World究竟从何而来? Hello, World最早是由 Brian Kernighan 创建的。1978年&#xff0c;Brian Kernighan写了一本名叫《C程序设计语言》的编程书&#xff0c;在程…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...