假期用Python写8个小游戏(附源码)

本文分享了8款使用Python编写的趣味小游戏,包括小恐龙、消消乐、俄罗斯方块等,每款游戏都有详细的玩法介绍及源码提供。无论是休闲娱乐还是学习实践,这些游戏都是不错的选择。
摘要由CSDN通过智能技术生成

假期玩嗨了吧,我给你准备了六个小游戏,有胆子来玩一玩吗?我自己是玩了很多遍的,所以想让大家一起玩,独乐乐不如众乐乐。代码放在下面了,动手操作吧。

在这里插入图片描述

1、小恐龙

玩法:上下控制起跳躲避

源码分享:

Python学习交流Q群:906715085###
import cfg
import sys
import random
import pygame
from modules import *


'''main'''
def main(highest_score):
   # 游戏初始化
   pygame.init()
   screen = pygame.display.set_mode(cfg.SCREENSIZE)
   pygame.display.set_caption('九歌')
   # 导入所有声音文件
   sounds = {
   }
   for key, value in cfg.AUDIO_PATHS.items():
       sounds[key] = pygame.mixer.Sound(value)
   # 游戏开始界面
   GameStartInterface(screen, sounds, cfg)
   # 定义一些游戏中必要的元素和变量
   score = 0
   score_board = Scoreboard(cfg.IMAGE_PATHS['numbers'], position=(534, 15), bg_color=cfg.BACKGROUND_COLOR)
   highest_score = highest_score
   highest_score_board = Scoreboard(cfg.IMAGE_PATHS['numbers'], position=(435, 15), bg_color=cfg.BACKGROUND_COLOR, is_highest=True)
   dino = Dinosaur(cfg.IMAGE_PATHS['dino'])
   ground = Ground(cfg.IMAGE_PATHS['ground'], position=(0, cfg.SCREENSIZE[1]))
   cloud_sprites_group = pygame.sprite.Group()
   cactus_sprites_group = pygame.sprite.Group()
   ptera_sprites_group = pygame.sprite.Group()
   add_obstacle_timer = 0
   score_timer = 0
   # 游戏主循环
   clock = pygame.time.Clock()
   while True:
       for event in pygame.event.get():
           if event.type == pygame.QUIT:
               pygame.quit()
               sys.exit()
           elif event.type == pygame.KEYDOWN:
               if event.key == pygame.K_SPACE or event.key == pygame.K_UP:
                   dino.jump(sounds)
               elif event.key == pygame.K_DOWN:
                   dino.duck()
           elif event.type == pygame.KEYUP and event.key == pygame.K_DOWN:
               dino.unduck()
       screen.fill(cfg.BACKGROUND_COLOR)
       # --随机添加云
       if len(cloud_sprites_group) < 5 and random.randrange(0, 300) == 10:
           cloud_sprites_group.add(Cloud(cfg.IMAGE_PATHS['cloud'], position=(cfg.SCREENSIZE[0], random.randrange(30, 75))))
       # --随机添加仙人掌/飞龙
       add_obstacle_timer += 1
       if add_obstacle_timer > random.randrange(50, 150):
           add_obstacle_timer = 0
           random_value = random.randrange(0, 10)
           if random_value >= 5 and random_value <= 7:
               cactus_sprites_group.add(Cactus(cfg.IMAGE_PATHS['cacti']))
           else:
               position_ys = [cfg.SCREENSIZE[1]*0.82, cfg.SCREENSIZE[1]*0.75, cfg.SCREENSIZE[1]*0.60, cfg.SCREENSIZE[1]*0.20]
               ptera_sprites_group.add(Ptera(cfg.IMAGE_PATHS['ptera'], position=(600, random.choice(position_ys))))
       # --更新游戏元素
       dino.update()
       ground.update()
       cloud_sprites_group.update()
       cactus_sprites_group.update()
       ptera_sprites_group.update()
       score_timer += 1
       if score_timer > (cfg.FPS//12):
           score_timer = 0
           score += 1
           score = min(score, 99999)
           if score > highest_score:
               highest_score = score
           if score % 100 == 0:
               sounds['point'].play()
           if score % 1000 == 0:
               ground.speed -= 1
               for item in cloud_sprites_group:
                   item.speed -= 1
               for item in cactus_sprites_group:
                   item.speed -= 1
               for item in ptera_sprites_group:
                   item.speed -= 1
       # --碰撞检测
       for item in cactus_sprites_group:
           if pygame.sprite.collide_mask(dino, item):
               dino.die(sounds)
       for item in ptera_sprites_group:
           if pygame.sprite.collide_mask(dino, item):
               dino.die(sounds)
       # --将游戏元素画到屏幕上
       dino.draw(screen)
       ground.draw(screen)
       cloud_sprites_group.draw(screen)
       cactus_sprites_group.draw(screen)
       ptera_sprites_group.draw(screen)
       score_board.set(score)
       highest_score_board.set(highest_score)
       score_board.draw(screen)
       highest_score_board.draw(screen)
       # --更新屏幕
       pygame.display.update()
       clock.tick(cfg.FPS)
       # --游戏是否结束
       if dino.is_dead:
           break
   # 游戏结束界面
   return GameEndInterface(screen, cfg), highest_score


'''run'''
if __name__ == '__main__':
   highest_score = 0
   while True:
       flag, highest_score = main(highest_score)
       if not flag: break

在这里插入图片描述

2、消消乐

玩法:三个相连就能消除

源码分享:

import os
import sys
import cfg
import pygame
from modules import *
 
 
'''游戏主程序'''
def main():
    pygame.init()
    screen = pygame.display.set_mode(cfg.SCREENSIZE)
    pygame.display.set_caption('Gemgem —— 九歌')
    # 加载背景音乐
    pygame.mixer.init()
    pygame.mixer.music.load(os.path.join(cfg.ROOTDIR, "resources/audios/bg.mp3"))
    pygame.mixer.music.set_volume(0.6)
    pygame.mixer.music.play(-1)
    # 加载音效
    sounds = {
   }
    sounds['mismatch'] = pygame.mixer.Sound(os.path.join(cfg.ROOTDIR, 'resources/audios/badswap.wav'))
    sounds['match'] = []
    for i in range(6):
        sounds['match'].append(pygame.mixer.Sound(os.path.join(cfg.ROOTDIR, 'resources/audios/match%s.wav' % i)))
    # 加载字体
    font = pygame.font.Font(os.path.join(cfg.ROOTDIR, 'resources/font/font.TTF'), 25)
    # 图片加载
    gem_imgs = []
    for i in range(1, 8):
        gem_imgs.append(os.path.join(cfg.ROOTDIR, 'resources/images/gem%s.png' % i))
    # 主循环
    game = gemGame(screen, sounds, font, gem_imgs, cfg)
    while True:
        score = game.start()
        flag = False
        # 一轮游戏结束后玩家选择重玩或者退出
        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT or (event.type == pygame.KEYUP and event.key == pygame.K_ESCAPE):
                    pygame.quit()
                    sys.exit()
                elif event.type == pygame.KEYUP and event.key == pygame.K_r:
                    flag = True
            if flag:
                break
            screen.fill((135, 206, 235))
            text0 = 'Final score: %s' % score
            text1 = 'Press <R> to restart the game.'
            text2 = 'Press <Esc> to quit the game.'
            y = 150
            for idx, text in enumerate([text0, text1, text2]):
                text_render = font.render(text, 1, (85, 65, 0))
                rect = text_render.get_rect()
                if idx == 0:
                    rect.left, rect.top = (212, y)
                elif idx == 1:
                    rect.left, rect.top = (122.5, y)
                else:
                    rect.left, rect.top = (126.5, y)
                y += 100
                screen.blit(text_render, rect)
            pygame.display.update()
        game.reset()
 
 
'''run'''
if __name__ == '__main__':
    main()

在这里插入图片描述

3、俄罗斯方块

玩法:童年经典,普通模式没啥意思,小时候我们都是玩加速的。

源码分享:

import os
import sys
import random
from modules import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
 
 
'''定义俄罗斯方块游戏类'''
class TetrisGame(QMainWindow):
    def __init__(
  • 9
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 好的,我来给你介绍一个简单的 Python 小游戏:猜数字游戏。 这个游戏的规则是程序随机生成一个数字,然后玩家需要猜这个数字。程序会告诉玩家猜的数字是大了还是小了,直到玩家猜对为止。 下面是代码的实现: ``` import random # 生成一个随机数,范围是1~100 answer = random.randint(1, 100) while True: # 读入玩家猜的数字 guess = int(input("请输入你猜的数字:")) if guess < answer: print("你猜的数字小了") elif guess > answer: print("你猜的数字大了") else: print("恭喜你猜对了!") break ``` 这段代码中,我们使用了 `random` 模块中的 `randint` 函数来生成一个随机数。然后我们使用了一个死循环(`while True`)来不断读入玩家的猜测,并判断是否猜对。 希望这个例子能帮到你! ### 回答2: Python是一种简单易学的编程语言,非常适合制作小游戏。我们可以利用Python的各种库和模块来实现不同类型的小游戏。 首先,我们可以利用Pygame库来创建一个基本的游戏窗口。然后,通过监听用户的键盘输入,我们可以控制游戏中的一个小人物在窗口中移动。我们可以使用键盘上的方向键来控制小人物的移动方向,根据按下的方向键来改变小人物的坐标,并在窗口中重新绘制小人物的位置。 接下来,我们可以在窗口中添加一些障碍物或敌人,使得小人物需要躲避或攻击它们。我们可以使用碰撞检测来判断小人物是否碰到了障碍物或敌人,如果是,则游戏结束。 为了使游戏更有趣,我们可以添加一些特效或音效。例如,在小人物移动的同时,添加一些粒子效果或条纹特效,使得游戏画面更加生动。同时,我们还可以在游戏中添加一些背景音乐或音效,以增加游戏的氛围。 此外,我们还可以通过添加计分系统或关卡系统来增加游戏的挑战性。例如,每次小人物成功避开敌人或通过障碍物,都会得到一定的分数,并进入下一个更难的关卡。 总之,Python是一个非常适合编小游戏的语言。通过利用Python的各种库和模块,我们可以创造出各种有趣和令人上瘾的小游戏。无论是动作类游戏、益智类游戏还是冒险类游戏,Python都可以满足我们的需求。 ### 回答3: 当然可以用Python一个小游戏Python是一种易学易用的编程语言,适合初学者上手使用。 首先,你可以选择一个游戏的主题或者玩法。比如,你可以一个猜数字游戏,让玩家猜一个随机生成的数字,然后给出猜测的结果,直到玩家猜对为止。 接下来,你可以使用Python的随机数生成器模块random来生成一个随机数。你可以将这个随机数保存在一个变量中,作为答案。 然后,你可以使用一个循环来让玩家重复猜测数字。在每次循环中,你可以询问玩家输入一个数字,并将其保存在一个变量中。然后,你可以使用条件语句判断玩家的猜测是太小、太大还是正确。根据猜测的结果,你可以打印出相应的提示信息。 最后,当玩家猜对答案时,你可以打印出祝贺信息,并结束游戏。 在编游戏时,你可以使用Python的基本语法和功能,如变量、循环、条件语句和打印函数。你也可以自定义一些函数来组织代码,使其更加清晰和易读。 总之,用Python一个小游戏不仅有趣,而且可以让你巩固和应用所学的编程知识。希望这些提示对你有帮助,祝你游戏愉快!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值