Pygame如何实现一百层游戏
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要为大家展示了"Pygame如何实现一百层游戏",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Pygame如何实现一百层游戏"这篇文章吧。正文给整
千家信息网最后更新 2026年11月03日Pygame如何实现一百层游戏
这篇文章主要为大家展示了"Pygame如何实现一百层游戏",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Pygame如何实现一百层游戏"这篇文章吧。
正文
给整了一个一百层的闯关游戏!能完美通关的话孩子得玩很长一段时间,那我就解放了!!
主要分为二部分:
import pygamefrom pygame.locals import *from sys import exit FOUR_NEIGH = {"left": (0, -1), "right": (0, 1), "up": (-1, 0), "down": (1, 0)}EIGHT_NEIGH = list(FOUR_NEIGH.values()) + [(1, 1), (1, -1), (-1, 1), (-1, -1)]DIRECTION = {pygame.K_UP: "up", pygame.K_LEFT: "left", pygame.K_RIGHT: "right", pygame.K_DOWN: "down"} def hex2rgb(color): b = color % 256 color = color >> 8 g = color % 256 color = color >> 8 r = color % 256 return (r, g, b) class Game(object): def __init__(self, title, size, fps=30): self.size = size pygame.init() self.screen = pygame.display.set_mode(size, 0, 32) pygame.display.set_caption(title) self.keys = {} self.keys_up = {} self.clicks = {} self.timer = pygame.time.Clock() self.fps = fps self.score = 0 self.end = False self.fullscreen = False self.last_time = pygame.time.get_ticks() self.is_pause = False self.is_draw = True self.score_font = pygame.font.SysFont("Calibri", 130, True) def bind_key(self, key, action): if isinstance(key, list): for k in key: self.keys[k] = action elif isinstance(key, int): self.keys[key] = action def bind_key_up(self, key, action): if isinstance(key, list): for k in key: self.keys_up[k] = action elif isinstance(key, int): self.keys_up[key] = action def bind_click(self, button, action): self.clicks[button] = action def pause(self, key): self.is_pause = not self.is_pause def set_fps(self, fps): self.fps = fps def handle_input(self, event): if event.type == pygame.QUIT: pygame.quit() exit() if event.type == pygame.KEYDOWN: if event.key in self.keys.keys(): self.keys[event.key](event.key) if event.key == pygame.K_F11: # F11全屏 self.fullscreen = not self.fullscreen if self.fullscreen: self.screen = pygame.display.set_mode(self.size, pygame.FULLSCREEN, 32) else: self.screen = pygame.display.set_mode(self.size, 0, 32) if event.type == pygame.KEYUP: if event.key in self.keys_up.keys(): self.keys_up[event.key](event.key) if event.type == pygame.MOUSEBUTTONDOWN: if event.button in self.clicks.keys(): self.clicks[event.button](*event.pos) def run(self): while True: for event in pygame.event.get(): self.handle_input(event) self.timer.tick(self.fps) self.update(pygame.time.get_ticks()) self.draw(pygame.time.get_ticks()) def draw_score(self, color, rect=None): score = self.score_font.render(str(self.score), True, color) if rect is None: r = self.screen.get_rect() rect = score.get_rect(center=r.center) self.screen.blit(score, rect) def is_end(self): return self.end def update(self, current_time): pass def draw(self, current_time): pass class Test(Game): def __init__(self, title, size, fps=30): super(Test, self).__init__(title, size, fps) self.bind_key(pygame.K_RETURN, self.press_enter) def press_enter(self): print("press enter") def draw(self, current_time): pass def press_space(key): print("press space.") def click(x, y): print(x, y) def main(): print(hex2rgb(0xfcf040)) game = Test("game", (640, 480)) game.bind_key(pygame.K_SPACE, press_space) game.bind_click(1, click) game.run()其二: import pygameimport gamefrom random import choice, randint SCORE = 0SOLID = 1FRAGILE = 2DEADLY = 3BELT_LEFT = 4BELT_RIGHT = 5BODY = 6 GAME_ROW = 40GAME_COL = 28OBS_WIDTH = GAME_COL // 4SIDE = 13SCREEN_WIDTH = SIDE*GAME_COLSCREEN_HEIGHT = SIDE*GAME_ROWCOLOR = {SOLID: 0x00ffff, FRAGILE: 0xff5500, DEADLY: 0xff2222, SCORE: 0xcccccc, BELT_LEFT: 0xffff44, BELT_RIGHT: 0xff99ff, BODY: 0x00ff00}CHOICE = [SOLID, SOLID, SOLID, FRAGILE, FRAGILE, BELT_LEFT, BELT_RIGHT, DEADLY] class Barrier(object): def __init__(self, screen, opt=None): self.screen = screen if opt is None: self.type = choice(CHOICE) else: self.type = opt self.frag_touch = False self.frag_time = 12 self.score = False self.belt_dire = 0 self.belt_dire = pygame.K_LEFT if self.type == BELT_LEFT else pygame.K_RIGHT left = randint(0, SCREEN_WIDTH - 7 * SIDE - 1) top = SCREEN_HEIGHT - SIDE - 1 self.rect = pygame.Rect(left, top, 7*SIDE, SIDE) def rise(self): if self.frag_touch: self.frag_time -= 1 if self.frag_time == 0: return False self.rect.top -= 2 return self.rect.top >= 0 def draw_side(self, x, y): if self.type == SOLID: rect = pygame.Rect(x, y, SIDE, SIDE) self.screen.fill(COLOR[SOLID], rect) elif self.type == FRAGILE: rect = pygame.Rect(x+2, y, SIDE-4, SIDE) self.screen.fill(COLOR[FRAGILE], rect) elif self.type == BELT_LEFT or self.type == BELT_RIGHT: rect = pygame.Rect(x, y, SIDE, SIDE) pygame.draw.circle(self.screen, COLOR[self.type], rect.center, SIDE // 2 + 1) elif self.type == DEADLY: p1 = (x + SIDE//2 + 1, y) p2 = (x, y + SIDE) p3 = (x + SIDE, y + SIDE) points = [p1, p2, p3] pygame.draw.polygon(self.screen, COLOR[DEADLY], points) def draw(self): for i in range(7): self.draw_side(i*SIDE+self.rect.left, self.rect.top) class Hell(game.Game): def __init__(self, title, size, fps=60): super(Hell, self).__init__(title, size, fps) self.last = 6 * SIDE self.dire = 0 self.barrier = [Barrier(self.screen, SOLID)] self.body = pygame.Rect(self.barrier[0].rect.center[0], 200, SIDE, SIDE) self.bind_key([pygame.K_LEFT, pygame.K_RIGHT], self.move) self.bind_key_up([pygame.K_LEFT, pygame.K_RIGHT], self.unmove) self.bind_key(pygame.K_SPACE, self.pause) def move(self, key): self.dire = key def unmove(self, key): self.dire = 0 def show_end(self): self.draw(0, end=True) self.end = True def move_man(self, dire): if dire == 0: return True rect = self.body.copy() if dire == pygame.K_LEFT: rect.left -= 1 else: rect.left += 1 if rect.left < 0 or rect.left + SIDE >= SCREEN_WIDTH: return False for ba in self.barrier: if rect.colliderect(ba.rect): return False self.body = rect return True def get_score(self, ba): if self.body.top > ba.rect.top and not ba.score: self.score += 1 ba.score = True def to_hell(self): self.body.top += 2 for ba in self.barrier: if not self.body.colliderect(ba.rect): self.get_score(ba) continue if ba.type == DEADLY: self.show_end() return self.body.top = ba.rect.top - SIDE - 2 if ba.type == FRAGILE: ba.frag_touch = True elif ba.type == BELT_LEFT or ba.type == BELT_RIGHT: # self.body.left += ba.belt_dire self.move_man(ba.belt_dire) break top = self.body.top if top < 0 or top+SIDE >= SCREEN_HEIGHT: self.show_end() def create_barrier(self): solid = list(filter(lambda ba: ba.type == SOLID, self.barrier)) if len(solid) < 1: self.barrier.append(Barrier(self.screen, SOLID)) else: self.barrier.append(Barrier(self.screen)) self.last = randint(3, 5) * SIDE def update(self, current_time): if self.end or self.is_pause: return self.last -= 1 if self.last == 0: self.create_barrier() for ba in self.barrier: if not ba.rise(): if ba.type == FRAGILE and ba.rect.top > 0: self.score += 1 self.barrier.remove(ba) self.move_man(self.dire) self.move_man(self.dire) self.to_hell() def draw(self, current_time, end=False): if self.end or self.is_pause: return self.screen.fill(0x000000) self.draw_score((0x3c, 0x3c, 0x3c)) for ba in self.barrier: ba.draw() if not end: self.screen.fill(COLOR[BODY], self.body) else: self.screen.fill(COLOR[DEADLY], self.body) pygame.display.update() if __name__ == '__main__': hell = Hell("一百层", (SCREEN_WIDTH, SCREEN_HEIGHT)) hell.run()效果图如下:
以上是"Pygame如何实现一百层游戏"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
内容
篇文章
学习
帮助
孩子
效果
效果图
时间
易懂
更多
条理
正文
知识
编带
行业
资讯
资讯频道
频道
二部
研究
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网与科技
互联网新科技
广州大一互联网络科技有限公司
互联网科技产业
为想互联网科技怎么样
互联网通讯科技
科技互联网政务服务
互联网品科技
上海互联网科技有限公司
互联网科技公司电话
重庆科技学院互联网
滨湖区互联网智能科技产品供应
银川新华互联网科技职业技术培训学校图片
昭通互联网科技选哪家
杭州壁岐互联网科技有限公司
互联网金融科技元年
广西科技产业互联网是什么
求路客互联网科技电话
现代科技的标志之一的互联网
恒生科技互联网指数十大成分股
今日互联网科技
迪茉互联网科技
融势互联网科技
菲比寻常互联网科技
衡水科技产业互联网平台
中国互联网有什么科技含量
成都互联网科技公司100强
移动互联网科技股
卓翼科技产业互联网合作
互联网科技职业技能培训学校