作者:小K
来源: 麦叔编程
国庆过完之后上班有没有感觉好累?根本不想上班的节奏?
作为摸鱼弟的小K,今天再次给大家带来了一个摸鱼神器,哦不,学习神器!
这次推荐的是拥有29款高端游戏的Games库,在github上4.1k拥有stars的开源项目。
链接我就不放了,怕被和谐掉,如果想看官方文档,在github上搜cpgames就能搜到。
推荐原因还记得上次的摸鱼攻略给大家推荐的freegames库吗?
摸鱼传送门>>Python摸鱼攻略【#093】<<
相比freegames库,这次Games给我们带来的简直就是大作。
freegames库中的贪吃蛇:
Games库中的贪吃蛇:
虽说玩起来也差不多,但实际体验上Games的贪吃蛇有计分板和游戏BGM,体验还是有所提升的~~
其中我最喜欢的大作: 愤怒的小鸟
直接把操作的物理引擎拉满,是我玩过最符合牛顿力学的Python游戏。
游戏目录使用攻略❝
最大的推荐理由:安装方便,有Python环境就能用!
❞
上文说了一大堆他的好,好像忘记如何教大家使用了。
如果你的电脑上有安装Python环境,只需要两步就能进入游戏了。
第一步 安装pip install cpgames
一条命令安装Games库,不作过多的解释。
第二步 运行脚本进入游戏github上的脚本不能让我自由地选择玩啥游戏,而是随机给我分配,这肯定会让我不爽的。
import random
from cpgames import cpgames
game_client = cpgames.CPGames()
all_supports = game_client.getallsupported()
game_client.execute(random.choice(list(all_supports.values())))
于是我在他的代码上进行了修改,改成了我想玩啥就选啥。
修改后:
import sys
from cpgames import cpgames
game_client = cpgames.CPGames()
all_supports = game_client.getallsupported()
games = dict(enumerate(list(all_supports.values()),start=1))
print("-"*64)
for i, element in games.items():
print(f"-- 游戏编号: {i} -- 游戏名称: {element} -- ")
print("-"*64)
try:
game_code = int(input("请输出游戏编号,回车后开始游戏:"))
if game_code > len(games):
print("请重新运行脚本并输入正确的游戏编号。。")
sys.exit()
except Exception as e:
print("请重新运行脚本并输入正确的游戏编号。。")
sys.exit()
game_client.execute(games[game_code])
运行脚本之后,会让你选择想玩的游戏,输入对应的游戏编号即可,
Pygame 2.1.2 (SDL 2.0.18, Python 3.9.9)
Hello from the pygame community. https://www.pygame.org/contribute.html
----------------------------------------------------------------
-- 游戏编号:1 -- 游戏名称: ski --
-- 游戏编号:2 -- 游戏名称: maze --
......
-- 游戏编号:28 -- 游戏名称: twozerofoureight --
-- 游戏编号:29 -- 游戏名称: voicecontrolpikachu --
----------------------------------------------------------------
请输出游戏编号,回车后开始游戏:
入门Python游戏开发
如果你已经看到这,说明你对Python制作的游戏有一定的兴趣的。
这个库对于想入门Python游戏开发或者其他语言的游戏开发来说,简直就是一个宝藏。
29款游戏基本覆盖了很多主流游戏的基本逻辑。
就像上文中我提到,那款愤怒的小鸟,“物理引擎”非常的棒,我也很好奇他是如何实现的。
我就可以去查看他的源码是如何实现这个游戏的。
令我没想到的是,这个愤怒的小鸟的代码量只有100行,抛开配置信息,游戏主逻辑只有50多行。
'''
Function:
愤怒的小鸟
'''
import os
import pygame
from ...utils import QuitGame
from ..base import PygameBaseGame
from .modules import GameLevels, Pig, Bird, Block, Slingshot, Slab, Button, Label
'''配置类'''
class Config():
# 根目录
rootdir = os.path.split(os.path.abspath(__file__))[0]
# FPS
FPS = 60
# 屏幕大小
SCREENSIZE = (1800, 700)
# 标题
TITLE = '愤怒的小鸟 —— Charles的皮卡丘'
# 一些颜色定义
BACKGROUND_COLOR = (51, 51, 51)
# 背景音乐路径
BGM_PATH = os.path.join(rootdir, 'resources/audios/bgm.ogg')
# 游戏图片路径
IMAGE_PATHS_DICT = {
'pig': [
os.path.join(rootdir, 'resources/images/pig_1.png'),
os.path.join(rootdir, 'resources/images/pig_2.png'),
os.path.join(rootdir, 'resources/images/pig_damaged.png'),
],
'bird': [
os.path.join(rootdir, 'resources/images/bird.png'),
],
'wall': [
os.path.join(rootdir, 'resources/images/wall_horizontal.png'),
os.path.join(rootdir, 'resources/images/wall_vertical.png'),
],
'block': [
os.path.join(rootdir, 'resources/images/block.png'),
os.path.join(rootdir, 'resources/images/block_destroyed.png'),
]
}
# 字体路径
FONT_PATHS_DICT_NOINIT = {
'Comic_Kings': os.path.join(rootdir, 'resources/fonts/Comic_Kings.ttf'),
'arfmoochikncheez': os.path.join(rootdir, 'resources/fonts/arfmoochikncheez.ttf'),
}
'''愤怒的小鸟'''
class AngryBirdsGame(PygameBaseGame):
game_type = 'angrybirds'
def __init__(self, **kwargs):
self.cfg = Config
super(AngryBirdsGame, self).__init__(config=self.cfg, **kwargs)
'''运行游戏'''
def run(self):
# 初始化
screen, resource_loader, cfg = self.screen, self.resource_loader, self.cfg
# 播放背景音乐
resource_loader.playbgm()
# 开始游戏
def startgame():
game_levels = GameLevels(cfg, resource_loader, screen)
game_levels.start()
# 开始界面
components = pygame.sprite.Group()
title_label = Label(screen, 700, 100, 400, 200)
title_label.addtext('ANGRY BIRDS', 80, cfg.FONT_PATHS_DICT_NOINIT['arfmoochikncheez'], (236, 240, 241))
components.add(title_label)
start_btn = Button(screen, 500, 400, 300, 100, startgame, (244, 208, 63), (247, 220, 111))
start_btn.addtext('START GAME', 60, cfg.FONT_PATHS_DICT_NOINIT['arfmoochikncheez'], cfg.BACKGROUND_COLOR)
components.add(start_btn)
quit_btn = Button(screen, 1000, 400, 300, 100, QuitGame, (241, 148, 138), (245, 183, 177))
quit_btn.addtext('QUIT', 60, cfg.FONT_PATHS_DICT_NOINIT['arfmoochikncheez'], cfg.BACKGROUND_COLOR)
components.add(quit_btn)
charles_label = Label(screen, cfg.SCREENSIZE[0] - 300, cfg.SCREENSIZE[1] - 80, 300, 100)
charles_label.addtext('CHARLES', 60, cfg.FONT_PATHS_DICT_NOINIT['arfmoochikncheez'], (41, 41, 41))
components.add(charles_label)
clock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
QuitGame()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
QuitGame()
elif event.type == pygame.MOUSEBUTTONDOWN:
if start_btn.selected():
start_btn.action()
elif quit_btn.selected():
quit_btn.action()
screen.fill(cfg.BACKGROUND_COLOR)
for component in components: component.draw()
pygame.display.update()
clock.tick(cfg.FPS)
友情提示
该库中的游戏基本上都有BGM,而且声音还不小。
如果摸鱼使用,请关闭声音外放!!!!
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved