赞
踩
昨天分享了一波,用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技术训练营 ~~~~解锁下主程序的源码以及其他工程
运行之后看看效果:
运行主界面还附带了鸽鸽的标志性背景音乐**“鸡你太美”**
游戏效果:
游戏结束:
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()
运行玩游戏:
由于主程序的源码有整整的600行左右,中间省略了部分,:
电脑随机给一个数,让你去猜,猜大了会提示你数字猜大了,猜小了会提示你猜小了,如果刚刚是电脑给出的数字,就会提醒你赢了
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技术训练营 ~~~~解锁下主程序的源码以及其他工程
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。