• Python小游戏自己动手编写,你能写出几个(分享版)


    今天分享一个有趣的Python游戏库freegames,它里面包含经典小游戏,像贪吃蛇、吃豆人、等等。可以通过1行代码重温这些童年小游戏,后面还会分享源码,可以自己学习游戏编写,相信你会超有成就感!

    Paint 涂鸦 在屏幕上绘制线条和形状

    单击以标记形状的开始,然后再次单击以标记其结束;

    可以使用键盘选择不同的形状和颜色。

    !python -m freegames.paint # 如果在命令行,则去掉前面的 感叹号 !

    Snake 贪吃蛇 经典的街机小游戏

    使用键盘的方向键导航并吃绿色食物,每吃一次食物,蛇就会长一段;

    避免吃到自己或越界。

    !python -m freegames.snake

     

    这个游戏当时玩的时候,都是加速前进!


    或许你之前学习过一点编程,但若是你从没接触过游戏编程,那么你现在自己动手尝试模仿编写一下。

    选择合适的开发工具

    编写游戏之前得挑选一款合适的工具,这样简化程序编写工作。Python语言有很多第三方库都提供游戏编程功能,最有名的要属Pygame库,它提供了丰富的API来实现游戏的各种效果。

    设置开发环境

    由于Pgzero是Python的第三方库,它不能独立工作,必须在Python代码中来使用,因此我们首先需要安装Python开发环境。可以去Python官网下载最新的安装包进行安装,然后便可以使用Python提供的IDLE编辑器来编写代码了。

    准备好后,我们就要开始动手了!先分享一些简单操作的游戏。


    贪吃蛇

    玩法:童年经典,普通魔术也没啥意思,小时候玩的也是加速的。

     源码分享

    1. import cfg
    2. import sys
    3. import pygame
    4. from modules import *
    5.  
    6.  
    7. '''主函数'''
    8. def main(cfg):
    9.     # 游戏初始化
    10.     pygame.init()
    11.     screen = pygame.display.set_mode(cfg.SCREENSIZE)
    12.     pygame.display.set_caption('Greedy Snake —— 九歌')
    13.     clock = pygame.time.Clock()
    14.     # 播放背景音乐
    15.     pygame.mixer.music.load(cfg.BGMPATH)
    16.     pygame.mixer.music.play(-1)
    17.     # 游戏主循环
    18.     snake = Snake(cfg)
    19.     apple = Apple(cfg, snake.coords)
    20.     score = 0
    21.     while True:
    22.         screen.fill(cfg.BLACK)
    23.         # --按键检测
    24.         for event in pygame.event.get():
    25.             if event.type == pygame.QUIT:
    26.                 pygame.quit()
    27.                 sys.exit()
    28.             elif event.type == pygame.KEYDOWN:
    29.                 if event.key in [pygame.K_UP, pygame.K_DOWN, pygame.K_LEFT, pygame.K_RIGHT]:
    30.                     snake.setDirection({pygame.K_UP'up', pygame.K_DOWN'down', pygame.K_LEFT'left', pygame.K_RIGHT'right'}[event.key])
    31.         # --更新贪吃蛇和食物
    32.         if snake.update(apple):
    33.             apple = Apple(cfg, snake.coords)
    34.             score += 1
    35.         # --判断游戏是否结束
    36.         if snake.isgameover: break
    37.         # --显示游戏里必要的元素
    38.         drawGameGrid(cfg, screen)
    39.         snake.draw(screen)
    40.         apple.draw(screen)
    41.         showScore(cfg, score, screen)
    42.         # --屏幕更新
    43.         pygame.display.update()
    44.         clock.tick(cfg.FPS)
    45.     return endInterface(screen, cfg)
    46.  
    47.  
    48. '''run'''
    49. if __name__ == '__main__':
    50.     while True:
    51.         if not main(cfg):
    52.             break

    再来一个稍复杂的 !

    吃金币

     

    源码分享:

    1. import os
    2. import cfg
    3. import sys
    4. import pygame
    5. import random
    6. from modules import *
    7.  
    8.  
    9. '''游戏初始化'''
    10. def initGame():
    11.     # 初始化pygame, 设置展示窗口
    12.     pygame.init()
    13.     screen = pygame.display.set_mode(cfg.SCREENSIZE)
    14.     pygame.display.set_caption('catch coins —— 九歌')
    15.     # 加载必要的游戏素材
    16.     game_images = {}
    17.     for keyvalue in cfg.IMAGE_PATHS.items():
    18.         if isinstance(value, list):
    19.             images = []
    20.             for item in value: images.append(pygame.image.load(item))
    21.             game_images[key= images
    22.         else:
    23.             game_images[key= pygame.image.load(value)
    24.     game_sounds = {}
    25.     for keyvalue in cfg.AUDIO_PATHS.items():
    26.         if key == 'bgm'continue
    27.         game_sounds[key= pygame.mixer.Sound(value)
    28.     # 返回初始化数据
    29.     return screen, game_images, game_sounds
    30.  
    31.  
    32. '''主函数'''
    33. def main():
    34.     # 初始化
    35.     screen, game_images, game_sounds = initGame()
    36.     # 播放背景音乐
    37.     pygame.mixer.music.load(cfg.AUDIO_PATHS['bgm'])
    38.     pygame.mixer.music.play(-10.0)
    39.     # 字体加载
    40.     font = pygame.font.Font(cfg.FONT_PATH, 40)
    41.     # 定义hero
    42.     hero = Hero(game_images['hero'], position=(375520))
    43.     # 定义食物组
    44.     food_sprites_group = pygame.sprite.Group()
    45.     generate_food_freq = random.randint(1020)
    46.     generate_food_count = 0
    47.     # 当前分数/历史最高分
    48.     score = 0
    49.     highest_score = 0 if not os.path.exists(cfg.HIGHEST_SCORE_RECORD_FILEPATH) else int(open(cfg.HIGHEST_SCORE_RECORD_FILEPATH).read())
    50.     # 游戏主循环
    51.     clock = pygame.time.Clock()
    52.     while True:
    53.         # --填充背景
    54.         screen.fill(0)
    55.         screen.blit(game_images['background'], (00))
    56.         # --倒计时信息
    57.         countdown_text = 'Count down: ' + str((90000 - pygame.time.get_ticks()) // 60000+ ":" + str((90000 - pygame.time.get_ticks()) // 1000 % 60).zfill(2)
    58.         countdown_text = font.render(countdown_text, True, (000))
    59.         countdown_rect = countdown_text.get_rect()
    60.         countdown_rect.topright = [cfg.SCREENSIZE[0]-305]
    61.         screen.blit(countdown_text, countdown_rect)
    62.         # --按键检测
    63.         for event in pygame.event.get():
    64.             if event.type == pygame.QUIT:
    65.                 pygame.quit()
    66.                 sys.exit()
    67.         key_pressed = pygame.key.get_pressed()
    68.         if key_pressed[pygame.K_a] or key_pressed[pygame.K_LEFT]:
    69.             hero.move(cfg.SCREENSIZE, 'left')
    70.         if key_pressed[pygame.K_d] or key_pressed[pygame.K_RIGHT]:
    71.             hero.move(cfg.SCREENSIZE, 'right')
    72.         # --随机生成食物
    73.         generate_food_count += 1
    74.         if generate_food_count > generate_food_freq:
    75.             generate_food_freq = random.randint(1020)
    76.             generate_food_count = 0
    77.             food = Food(game_images, random.choice(['gold',] * 10 + ['apple']), cfg.SCREENSIZE)
    78.             food_sprites_group.add(food)
    79.         # --更新食物
    80.         for food in food_sprites_group:
    81.             if food.update(): food_sprites_group.remove(food)
    82.         # --碰撞检测
    83.         for food in food_sprites_group:
    84.             if pygame.sprite.collide_mask(food, hero):
    85.                 game_sounds['get'].play()
    86.                 food_sprites_group.remove(food)
    87.                 score += food.score
    88.                 if score > highest_score: highest_score = score
    89.         # --画hero
    90.         hero.draw(screen)
    91.         # --画食物
    92.         food_sprites_group.draw(screen)
    93.         # --显示得分
    94.         score_text = f'Score: {score}, Highest: {highest_score}'
    95.         score_text = font.render(score_text, True, (000))
    96.         score_rect = score_text.get_rect()
    97.         score_rect.topleft = [55]
    98.         screen.blit(score_text, score_rect)
    99.         # --判断游戏是否结束
    100.         if pygame.time.get_ticks() >= 90000:
    101.             break
    102.         # --更新屏幕
    103.         pygame.display.flip()
    104.         clock.tick(cfg.FPS)
    105.     # 游戏结束, 记录最高分并显示游戏结束画面
    106.     fp = open(cfg.HIGHEST_SCORE_RECORD_FILEPATH, 'w')
    107.     fp.write(str(highest_score))
    108.     fp.close()
    109.     return showEndGameInterface(screen, cfg, score, highest_score)
    110.  
    111.  
    112. '''run'''
    113. if __name__ == '__main__':
    114.     while main():
    115.         pass

    游戏虽好,但不要沉迷于此哦!暂时收集整理两个相对容易上手操作的小游戏。

    那么以上就是今天的分享,后面还会为大家更新其他的内容。

    如果你就得有用记得点赞收藏哦,毕竟我这么优秀以防找不到我~

    (以上图片及内容整理于网络,如有侵权联系删除)

  • 相关阅读:
    云原生安全应用场景有哪些?
    iNFTnews | 元宇宙的欢乐世界:别开生面的游戏、音乐会、主题公园和电影
    harbor的安装及使用
    ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)
    windows的commonfiles
    SpringBoot 中间件设计和开发
    前端el-select 单选和多选
    工作流_工作流平台 JNPF3.3 旗舰版 企业版 开发框架
    大数据实战之配置集群
    maven仓库的地址
  • 原文地址:https://blog.csdn.net/m0_69234258/article/details/127995518