今天分享一个有趣的Python游戏库freegames,它里面包含经典小游戏,像贪吃蛇、吃豆人、等等。可以通过1行代码重温这些童年小游戏,后面还会分享源码,可以自己学习游戏编写,相信你会超有成就感!
Paint 涂鸦 在屏幕上绘制线条和形状
单击以标记形状的开始,然后再次单击以标记其结束;
可以使用键盘选择不同的形状和颜色。
!python -m freegames.paint # 如果在命令行,则去掉前面的 感叹号 !
Snake 贪吃蛇 经典的街机小游戏
使用键盘的方向键导航并吃绿色食物,每吃一次食物,蛇就会长一段;
避免吃到自己或越界。
!python -m freegames.snake
这个游戏当时玩的时候,都是加速前进!
或许你之前学习过一点编程,但若是你从没接触过游戏编程,那么你现在自己动手尝试模仿编写一下。
选择合适的开发工具
编写游戏之前得挑选一款合适的工具,这样简化程序编写工作。Python语言有很多第三方库都提供游戏编程功能,最有名的要属Pygame库,它提供了丰富的API来实现游戏的各种效果。
设置开发环境
由于Pgzero是Python的第三方库,它不能独立工作,必须在Python代码中来使用,因此我们首先需要安装Python开发环境。可以去Python官网下载最新的安装包进行安装,然后便可以使用Python提供的IDLE编辑器来编写代码了。
准备好后,我们就要开始动手了!先分享一些简单操作的游戏。
贪吃蛇
玩法:童年经典,普通魔术也没啥意思,小时候玩的也是加速的。
源码分享:
-
import cfg
-
import sys
-
import pygame
-
from modules
import *
-
-
-
'''主函数'''
-
def
main(
cfg):
-
# 游戏初始化
-
pygame.init()
-
screen = pygame.display.set_mode(cfg.SCREENSIZE)
-
pygame.display.set_caption(
'Greedy Snake —— 九歌')
-
clock = pygame.time.Clock()
-
# 播放背景音乐
-
pygame.mixer.music.load(cfg.BGMPATH)
-
pygame.mixer.music.play(-
1)
-
# 游戏主循环
-
snake = Snake(cfg)
-
apple = Apple(cfg, snake.coords)
-
score =
0
-
while
True:
-
screen.fill(cfg.BLACK)
-
# --按键检测
-
for event
in pygame.event.get():
-
if event.
type == pygame.QUIT:
-
pygame.quit()
-
sys.exit()
-
elif event.
type == pygame.KEYDOWN:
-
if event.key
in [pygame.K_UP, pygame.K_DOWN, pygame.K_LEFT, pygame.K_RIGHT]:
-
snake.setDirection({pygame.K_UP:
'up', pygame.K_DOWN:
'down', pygame.K_LEFT:
'left', pygame.K_RIGHT:
'right'}[event.key])
-
# --更新贪吃蛇和食物
-
if snake.update(apple):
-
apple = Apple(cfg, snake.coords)
-
score +=
1
-
# --判断游戏是否结束
-
if snake.isgameover:
break
-
# --显示游戏里必要的元素
-
drawGameGrid(cfg, screen)
-
snake.draw(screen)
-
apple.draw(screen)
-
showScore(cfg, score, screen)
-
# --屏幕更新
-
pygame.display.update()
-
clock.tick(cfg.FPS)
-
return endInterface(screen, cfg)
-
-
-
'''run'''
-
if __name__ ==
'__main__':
-
while
True:
-
if
not main(cfg):
-
break
再来一个稍复杂的 !
吃金币
源码分享:
-
import os
-
import cfg
-
import sys
-
import pygame
-
import random
-
from modules
import *
-
-
-
'''游戏初始化'''
-
def
initGame():
-
# 初始化pygame, 设置展示窗口
-
pygame.init()
-
screen = pygame.display.set_mode(cfg.SCREENSIZE)
-
pygame.display.set_caption(
'catch coins —— 九歌')
-
# 加载必要的游戏素材
-
game_images = {}
-
for key, value
in cfg.IMAGE_PATHS.items():
-
if
isinstance(value,
list):
-
images = []
-
for item
in value: images.append(pygame.image.load(item))
-
game_images[key] = images
-
else:
-
game_images[key] = pygame.image.load(value)
-
game_sounds = {}
-
for key, value
in cfg.AUDIO_PATHS.items():
-
if key ==
'bgm':
continue
-
game_sounds[key] = pygame.mixer.Sound(value)
-
# 返回初始化数据
-
return screen, game_images, game_sounds
-
-
-
'''主函数'''
-
def
main():
-
# 初始化
-
screen, game_images, game_sounds = initGame()
-
# 播放背景音乐
-
pygame.mixer.music.load(cfg.AUDIO_PATHS[
'bgm'])
-
pygame.mixer.music.play(-
1,
0.0)
-
# 字体加载
-
font = pygame.font.Font(cfg.FONT_PATH,
40)
-
# 定义hero
-
hero = Hero(game_images[
'hero'], position=(
375,
520))
-
# 定义食物组
-
food_sprites_group = pygame.sprite.Group()
-
generate_food_freq = random.randint(
10,
20)
-
generate_food_count =
0
-
# 当前分数/历史最高分
-
score =
0
-
highest_score =
0
if
not os.path.exists(cfg.HIGHEST_SCORE_RECORD_FILEPATH)
else
int(
open(cfg.HIGHEST_SCORE_RECORD_FILEPATH).read())
-
# 游戏主循环
-
clock = pygame.time.Clock()
-
while
True:
-
# --填充背景
-
screen.fill(
0)
-
screen.blit(game_images[
'background'], (
0,
0))
-
# --倒计时信息
-
countdown_text =
'Count down: ' +
str((
90000 - pygame.time.get_ticks()) //
60000) +
":" +
str((
90000 - pygame.time.get_ticks()) //
1000 %
60).zfill(
2)
-
countdown_text = font.render(countdown_text,
True, (
0,
0,
0))
-
countdown_rect = countdown_text.get_rect()
-
countdown_rect.topright = [cfg.SCREENSIZE[
0]-
30,
5]
-
screen.blit(countdown_text, countdown_rect)
-
# --按键检测
-
for event
in pygame.event.get():
-
if event.
type == pygame.QUIT:
-
pygame.quit()
-
sys.exit()
-
key_pressed = pygame.key.get_pressed()
-
if key_pressed[pygame.K_a]
or key_pressed[pygame.K_LEFT]:
-
hero.move(cfg.SCREENSIZE,
'left')
-
if key_pressed[pygame.K_d]
or key_pressed[pygame.K_RIGHT]:
-
hero.move(cfg.SCREENSIZE,
'right')
-
# --随机生成食物
-
generate_food_count +=
1
-
if generate_food_count > generate_food_freq:
-
generate_food_freq = random.randint(
10,
20)
-
generate_food_count =
0
-
food = Food(game_images, random.choice([
'gold',] *
10 + [
'apple']), cfg.SCREENSIZE)
-
food_sprites_group.add(food)
-
# --更新食物
-
for food
in food_sprites_group:
-
if food.update(): food_sprites_group.remove(food)
-
# --碰撞检测
-
for food
in food_sprites_group:
-
if pygame.sprite.collide_mask(food, hero):
-
game_sounds[
'get'].play()
-
food_sprites_group.remove(food)
-
score += food.score
-
if score > highest_score: highest_score = score
-
# --画hero
-
hero.draw(screen)
-
# --画食物
-
food_sprites_group.draw(screen)
-
# --显示得分
-
score_text =
f'Score: {score}, Highest: {highest_score}'
-
score_text = font.render(score_text,
True, (
0,
0,
0))
-
score_rect = score_text.get_rect()
-
score_rect.topleft = [
5,
5]
-
screen.blit(score_text, score_rect)
-
# --判断游戏是否结束
-
if pygame.time.get_ticks() >=
90000:
-
break
-
# --更新屏幕
-
pygame.display.flip()
-
clock.tick(cfg.FPS)
-
# 游戏结束, 记录最高分并显示游戏结束画面
-
fp =
open(cfg.HIGHEST_SCORE_RECORD_FILEPATH,
'w')
-
fp.write(
str(highest_score))
-
fp.close()
-
return showEndGameInterface(screen, cfg, score, highest_score)
-
-
-
'''run'''
-
if __name__ ==
'__main__':
-
while main():
-
pass
游戏虽好,但不要沉迷于此哦!暂时收集整理两个相对容易上手操作的小游戏。
那么以上就是今天的分享,后面还会为大家更新其他的内容。
如果你就得有用记得点赞收藏哦,毕竟我这么优秀以防找不到我~
(以上图片及内容整理于网络,如有侵权联系删除)
转载:https://blog.csdn.net/m0_69234258/article/details/127995518