likes
comments
collection
share

喜欢打游戏?手把手教你用python实现

作者站长头像
站长
· 阅读数 12

前言

昨天分享了一波,用python实现小游戏的一些视频,今天我们简单的看一下

1.用python实现蔡徐坤打篮球小游戏

源码

  import pygame
  import sys
  import traceback
  import CXK
  import enemy
  import bullet
  import supply
  form pygame.locals import *
  form random import *

  # 初始化pygame
  pygame.init()
  # 初始化pygame的音频模块
  pygame.mixer.init()

  # 定义背景尺寸宽和高
  bg_size = wigth,height = 480,700
  # 初始化窗口
  screen = pygame.display.set_mode(bg_size)
  # 设置显示在窗口上的名称
  pygame.display.set_caption(''CXK打篮球'')

  # 初始化背景图片
  background = pygame.image.load(''images/backgroud.png'').convert()

  # 定义RGB颜色
  BLACK = (0,0,0)
  GREEN = (0,255,0)
  RED = (255,0,0)

  # 载入背景音乐
  pygame.mixer.music.load(''sound/game_music.ogg'')
  pygame.mixer.music.set_volume(0.2)

  # 载入游戏音效
  background_sound = pygame.mixer.sound(''sound/background_sound.wav'')
  background_sound.set_volume(0.1)
  enemy3_fly_sound = pygame.mixer.sound(''sound/organic Rhythm Assault.wav'')
  background_sound.set_volume(0.2)
  enemy3_fly_sound = pygame.mixer.sound(''sound/爆炸.wav'')
  background_sound.set_volume(0.2)
  bomb_sound = pygame.mixer.sound(''sound/bomb_sound.wav'')
  bomb_sound.set_volume(0.2)
  get_supply_sound = pygame.mixer.sound(''sound/get_bullet_sound.wav'')
  get_supply_sound.set_volume(0.2)

  # 定义增加小型敌人的函数
  def add_small_enemies(group1,group2,num):
      for i in range(num)
          e1 = enemy.SmallEnemy(bg_size)
          group1.add(e1)
          group2.add(e1)

  #  定义增加中型敌人的函数
  def add_mid_enemies(group1,group2,num):
      for i in range(num)
          e2 = enemy.MidEnemy(bg_size)
          group1.add(e2)
          group2.add(e2)

  #  定义增加大型敌人的函数
  def add_mid_enemies(group1,group2,num):
      for i in range(num)
          e3 = enemy.BigEnemy(bg_size)
          group1.add(e3)
          group2.add(e3)
  # 定义增加敌人移动速度的函数
  def inc_speed(target,inc):
      for each in tatget:
          each.speed+=inc

  # 游戏主界面
  def ui():
      # 循环播放背景音乐
      pygame.mixer.music.play(-1)

      # 初始化界面按键图片并获取图片的矩形位置
      start_game_image = pygame.image.load(''images/start_game.png'').convert_alpha()
      start_game_image_rect = start_game_image.get_rect()
      game_rules_image = pygame.image.load(''images/game_rules.png'').convert_alpha()
      game_rules_image_rect = game_rules_image.get.rect()
      game_quit_image = pygame.image.load(''image/game_quit.png'').convert_alpha()
      game_quit_image_rect = game_quit_image.get_rect()
      
      # 初始化游戏规则图片并获取图片的矩形位置
      rules_image = pygame.image.load(''images/游戏玩法.png'').conver_talpha()
      back_image = pygame.image.load(''image/back.png'').convert_alpha()
      back_image_rect = back_image.get_rect()
     
      # 标志是否在主界面
      is_ui = True
  
      # 帧率
      clock = pygame.time.Clock()
   
      # 主界面循环
      while True:
          # 获取事件信息
          for event in pygame.event.get():
              # 如果点击右上角退出
              if event.type = = QUTT:
                 # 退出程序
                 pygame.quit()
                 sys.exit()

          # 如果是主界面
          if is_ui:
             # 绘制背景
             screen.blit(background,(0,0))
             
             # 更改主界面按键图片的矩形位置并绘制主界面按键
             start_game_image_rect.left,start_game_image_rect.top = (width - statr_game_image_rect.width)//2,height
             screen.blit(start_game_image,start_game_image_rect)

             game_rules_image_rect = game_rules_image.get_rect()
             game_rules_image_rect.left,game_rules_image_rect.top = (width - game_rules_image_rect.width)//2,start_game
             screen.blit(game_rules_image,game_rules_image_rect)

             game_quit_image_rect.left,game_quit_image_rect.top = (width - game_quit_image_rect.width)//2,game_rules
             screen.blit(game_quit_image,game_quit_image_rect)

             # 检测用户的鼠标操作
             # 如果用户按下鼠标左键
             if pygame.mouse.get_pressed()[0]:
                # 获取鼠标坐标
                pos = pygame.mouse.get_pos()
                # 如果用户点击''开始游戏''
                if start_game_image_rect.left < pos[0] < start_game_image_rect.right and start_game_image_rect.top < pos[0]
                   # 调用主函数
                   main()
                # 如果用户点击''退出游戏''
                if game_quit_image_rect.left <pos[0] <game_quit_image_rect.right and game_quit_image_rect.top < pos[0]
                   pygame.quit()
                   sys.exit()
                # 如果用户点击''游戏规则''
                if game_rules_image_rect.left < pos[0] <game_rules_image_rect.right and game_rules_image_rect.top< pos[0]
                    # 李凯主界面
                    if_ui = False
 
          # 进入游戏规则界面
          else:
               # 绘制游戏规则图片
               screen.blit(rulse_image,(0,0))
          
               # 停止播放背景音乐
               pygame.mixer.music.stop()
               # 循环播放游戏规则音效
               background_sound.play(-1)

               # 更改返回键的矩形位置并绘制返回按键
               back_image_rect.left,game_quit_image_rect.top = width - back_image_rect.width - 10,10
               screen.blit(back_image,(width - back_image_rect.width - 10,10))
 
               if pygame.mouse.get_pressed()[0]:
                  # 获取鼠标坐标
                  pos = pygame.mouse.get_pos()
                  # 如果用户点击返回图片
                  pygame.mixer.stop()
                  ui()
          # 刷新屏幕
          pygame.display.flip()
          ....
          代码省略部分
  if_ _name_ _ = =''_ _main_ _'':
       try:
           ui()
       except systemExit:
           pass
       # 异常处理
       except:
           traceback.print_exc()
           pygame.quit()
           os.system(''pause'')

由于主程序的源码有整整的1000行左右,中间省略了部分,需要的可以:

关注公众号:python技术训练营 ~~~~解锁下主程序的源码以及其他工程

运行之后看看效果:

喜欢打游戏?手把手教你用python实现

运行主界面还附带了鸽鸽的标志性背景音乐鸡你太美”

游戏效果

喜欢打游戏?手把手教你用python实现

游戏结束

喜欢打游戏?手把手教你用python实现

2.用python实现俄罗斯方块小游戏

import sys
import random,copy
import pygame as pg
from pygame.locals import *

# 常量声明
EMPTY_CELL = 0 # 空区标识,表示没有方块
FALLING_BLOCK = 1 # 下落中的方块标识,也就是活动方块
STATIC_BLOCK = 2 # 固体方块标识

' ' '
全局变量声明
变量值以sysInit函数中初始化后的结果为准
' ' '
defaultFont = None # 默认字体
screen = None # 屏幕输出对象
backsurface = None #  图像输出缓冲画板
score = 0 # 玩家得分记录
clearLinescore = 0 # 玩家清除的方块行数
level = 1 # 关卡等级
clock = None # 游戏始终
nowBlock = None # 当前下落中的方块
nextblock = None # 下一个将出现的方块
fallspeed = 10 # 当前方块下落速度
beginFallspeed = fallspeed # 游戏初始时方块下落速度
speedBuff = 0 # 下落速度缓冲变量
keyBuff = None # 上一次按键记录
maxBlockwidth = 10 # 舞台堆叠区X轴最大可容纳基础方块数
maxBlockHeight = 18 # 舞台堆叠区Y轴最大可容纳基础方块数
blockwidth = 30 # 以像素为单位的基础方块宽度
blockHeight = 30 # 以像素为单位的基础方块高度
blocks = [] # 方块形状矩形四维列表。第一维为不同的方块形状,第二维为每个方块形状不同的方向(以0标起始,一共四个方向),第三维为Y轴方块形状占用情况,第四维为X轴方块形状占用情况
stage = [] # 舞台堆叠去矩形二维列表,第一维为Y轴方块占用情况,第二维为X轴方块占用情况。矩阵中0表示没有方块,1表示有固实方块,2表示有活动方块。
gameover = False # 游戏结束标志
pause = False # 游戏暂停标志

def printTxt(content,x,y,font,screen,color=(255,255,255)):
    '''显示文本
    args:
         content:待显示文本内容
         x,y:显示坐标
         font:字体
         screen:输出的screen
         color:颜色
     '''
     imgTxt = font.render(content,True,color)
     screen.blit(imgTxt,(x,y))

class point(object):
     '''平面坐标点类
     attributes:
        x,y:坐标值
     '''
     def _ _init _ _(self,x,y):
         self._ _x = x
         self._ _y = y
     
     def getx(self):
         return self. _ _x

     def setx(self,x)
         self._ _x = x
   
     x = property(getx,setx)

     def gety(self):
         ruturn self. _ _y
    
     def sety(self,y):
         self. _ _y = y
     
     y = property(gety,sety)

     def _ _str_ _(self):
         rutunrn ''{x:'' + ''{:.of}''.format(self._ _x) + '',y:''{:.of}''.format(self._ _y) + '' }''
 
class blocksprite(object):
      '''
      方块形状精灵类
      下落方块的定义全靠它了。
      attributes:
          shape:方块形状编号
          direction:方块方向编号
          xy,方块形状左上角方块坐标
          block:方块形状矩形
      '''
      def _ _init_ _(self,shape,direction,xy):
          self.shape = shape
          self.direction = direction 
          self.xy = xy

      def chgDirection(self,direction):
          '''
          改变方块的方向
          args:
               direction:1为向右转,0为向左转
          '''
          dirNumb = len(block[self.shape]) - 1
          if direction = = 1:
             self.direction + =1
             if self.dirction > dirNumb:
                self.direction = dirNumb
      
      def clone(self):
          '''
          克隆本体
          return:
                返回自身的克隆
          '''
          return blocksprite(self.shape,self.direction,point(self.xy.x,self.xy.y)) 
    
      def _getBlock(self):
          return blocks[self.shape][self.direction]
   
      block = property(_getBlock)

def getconf(fileName):
    '''
    从配置文件中读取方块形状数据
     每个方块以4*4矩阵表示形状,配置文件每行代表一个方块,用分号分隔矩阵行,用逗号分隔矩列阵,0表示没有方块,1表示有方块
     因为此程序只针对俄罗斯方块的经典版,所以方块矩阵大小以硬编码的形式写为4*4
     args:
           fileName:配置文件名
     '''
     global blocks # blocks记录方块形状
     with open(fileName,'rt')as fp:
          for temp in fp.readlines()
              blocks.append([])
              blocksNumb = len(blocks) - 1 
              ....
              省略部分
if _ _name_ _ = ='' _ _main_ _'':
    main()

运行玩游戏喜欢打游戏?手把手教你用python实现

由于主程序的源码有整整的600行左右,中间省略了部分,:

3.猜数字游戏

电脑随机给一个数,让你去猜,猜大了会提示你数字猜大了,猜小了会提示你猜小了,如果刚刚是电脑给出的数字,就会提醒你赢了

import random

# 模拟电脑随机生成1~100的整数
computer = random.randint(1,101)

while True:
    number = int(input(''请输入100以内的整数:‘’))
    if (number > computer):
         print(''你猜大了'')
    elif (number < computer) :
         print(''你猜小了'')
    else:
         print(''恭喜你赢了'')
         break

玩起来喜欢打游戏?手把手教你用python实现

关注公众号:python技术训练营 ~~~~解锁下主程序的源码以及其他工程

除此之外还有:

  • python版开心消消乐 喜欢打游戏?手把手教你用python实现

  • python实现简易五子棋 喜欢打游戏?手把手教你用python实现

  • 热血足球 喜欢打游戏?手把手教你用python实现

  • 全民大战飞机 喜欢打游戏?手把手教你用python实现

如果你有更好玩的关于python好玩的欢迎讨论。

关注公众号:python技术训练营 ~~~~解锁下主程序的源码以及其他工程