Pygame如何实现一百层游戏
发表于:2025-11-14 作者:千家信息网编辑
千家信息网最后更新 2025年11月14日,这篇文章主要为大家展示了"Pygame如何实现一百层游戏",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Pygame如何实现一百层游戏"这篇文章吧。正文给整
千家信息网最后更新 2025年11月14日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安全错误
数据库的锁怎样保障安全
软件开发费摊销
万方数据库李军强
现在的互联网科技发展有哪些
网上独立服务器
加入我们 软件开发
国家网络安全周2020届
庄河红光宾馆网络安全
织梦远程服务器
数据库和java链接步骤
数据库在物理上的应用
计算机等级三级考试网络技术
戴尔网络安全部门
vfp数据库与java
妄想山海可以转换服务器吗
学网络安全属于终端吗
张家港营销网络技术包括什么
学网络安全的怎么实战
快捷指令无法连接服务器怎么回事
网络安全教育小学第二节
网络安全手抄报画的内容
云音响服务器连接失败怎么解决
共建网络安全的英语作文
大华停车服务器怎么启动
学软件开发买电脑
欧卡服务器
有线电视服务器断开
电脑服务器硬盘可以用台式机吗
vb6如何打开读取数据库
惠普服务器点亮不了显示器
基带软件开发高级工程师