喜欢打游戏?手把手教你用python实现
前言
昨天分享了一波,用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技术训练营 ~~~~解锁下主程序的源码以及其他工程
运行之后看看效果:
运行主界面还附带了鸽鸽的标志性背景音乐鸡你太美”
游戏效果:
游戏结束:
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()
运行玩游戏:
由于主程序的源码有整整的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技术训练营 ~~~~解锁下主程序的源码以及其他工程
转载自:https://juejin.cn/post/7226269485903593529