Python 有那么神吗?
作者:卡卷网发布时间:2024-12-01 20:04浏览数量:100次评论数量:0次
废话不多说直接展示
目录:
1.坦克大战
'''
添加音效
1.创建我方坦克
2.我方坦克发射子弹
'''
import pygame,time,random
from pygame.sprite import Sprite
#定义常量
SCREEN_WIDTH = 750
SCREEN_HEIGHT= 500
BG_COLOR = pygame.Color(0,0,0)
TEXT_COLOR = pygame.Color(255,0,0)
#创建精灵基类
class BaseItem(Sprite):
pass
class MainGame():
window = None
myTank = None
enemyCount = 5
enemyList = []
#定义我方坦克发射的子弹列表
myBulletList = []
#定义敌方坦克发射的子弹列表
enemyBulletList = []
#定义存储爆炸效果类列表
explodeList =[]
#定义墙壁列表
wallList = []
#初始化方法
def __init__(self) -> None:
pass
#创建敌方坦克
def createEnemyTank(self):
top = 100
for i in range(MainGame.enemyCount):
left = random.randint(0,600)
speed = random.randint(1,4)
enemyTank = EnemyTank(left,top,speed)
#添加到列表
MainGame.enemyList.append(enemyTank)
#加载敌方坦克
def displayEnemyTank(self):
for enemyTank in MainGame.enemyList:
#判断敌方坦克是否存活
if enemyTank.live:
enemyTank.displayTank()
#调用move进行移动
enemyTank.randMove()
#初始化敌方坦克发射的子弹
#调用检测敌方坦克是否与墙壁发生碰撞
enemyTank.tank_hit_wall()
#调用检测敌方坦克是否与我方坦克发生碰撞
if MainGame.myTank and MainGame.myTank.live:
enemyTank.enemyTank_hit_myTank()
enemyBullet = enemyTank.shot()
#判断子弹是否有值
if enemyBullet:
MainGame.enemyBulletList.append(enemyBullet)
else:#当前敌方坦克已经死亡,从敌方坦克列表移除
MainGame.enemyList.remove(enemyTank)
#显示我方坦克发射的子弹
def displayMyBullet(self):
for myBullet in MainGame.myBulletList:
#判断子弹是否存活
if myBullet.live :
myBullet.displayBullet()
#调用子弹的移动方法
myBullet.move()
#调用我方子弹是否与敌方坦克碰撞
myBullet.myBullet_hit_enemyTank()
#调用检测我方子弹是否与墙壁发生碰撞
myBullet.bullet_hit_wall()
else:
#从子弹列表中删除子弹
MainGame.myBulletList.remove(myBullet)
#显示敌方坦克发射的子弹
def displayEnemyBullet(self):
for enemyBullet in MainGame.enemyBulletList:
#判断子弹是否存活
if enemyBullet.live:
enemyBullet.displayBullet()
#调用子弹移动的方法
enemyBullet.move()
#调用敌方子弹与我方坦克碰撞检测
enemyBullet.enemyBullet_hit_myTank()
#调用检测敌方子弹是否与墙壁发生碰撞
enemyBullet.bullet_hit_wall()
else:
#从子弹列表删除
MainGame.enemyBulletList.remove(enemyBullet)
#循环遍历爆炸效果列表展示爆炸效果
def displayExplodeList(self):
for explode in MainGame.explodeList:
#判断是否存活
if explode.live:
#展示
explode.displayExplode()
else:
#从爆炸效果列表中移除
MainGame.explodeList.remove(explode)
#创建我方坦克
def createMyTank(self):
MainGame.myTank = MyTank(350,300)
#添加音效
music = Music('./img/start.wav')
#播放
music.playMusic()
#创建墙壁
def createWall(self):
top = 220
for i in range(6):
#初始化墙壁
wall = Wall(i*130,top)
#添加到墙壁列表
MainGame.wallList.append(wall)
#加载墙壁
def displayWallList(self):
#循环遍历墙壁列表
for wall in MainGame.wallList:
if wall.live:
wall.displayWall()
else:
#从墙壁列表中移除
MainGame.wallList.remove(wall)
#开始游戏
def startGame(self):
#初始化窗口
pygame.display.init()
#设置窗口大小
MainGame.window = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT))
#设置窗口的标题
pygame.display.set_caption('坦克大战1.05')
#初始化我方坦克
self.createMyTank()
#调用创建敌方坦克
self.createEnemyTank()
#创建墙壁
self.createWall()
while True:
time.sleep(0.02)
#给窗口设置填充色
MainGame.window.fill(BG_COLOR)
#添加文字信息提示
textSurface = self.getTextSurface('敌方坦克剩余数量%d'%len(MainGame.enemyList))
#主窗口显示文字信息
MainGame.window.blit(textSurface,(10,10))
#添加事件监听
self.getEvent()
#调用坦克的显示方法
if MainGame.myTank and MainGame.myTank.live:
MainGame.myTank.displayTank()
else:
#删除我方坦克
del MainGame.myTank
MainGame.myTank = None
#调用坦克移动的方法
if MainGame.myTank and MainGame.myTank.live :
if not MainGame.myTank.stop:
MainGame.myTank.move()
#调用检测我方坦克是否与墙壁发生碰撞
MainGame.myTank.tank_hit_wall()
#调用检测我方坦克是否与敌方坦克发生碰撞
MainGame.myTank.myTank_hit_enemyTank()
#加载敌方坦克
self.displayEnemyTank()
#加载我方坦克发射的子弹
self.displayMyBullet()
#加载敌方坦克发射的子弹
self.displayEnemyBullet()
#加载爆炸效果
self.displayExplodeList()
#加载墙壁
self.displayWallList()
pygame.display.update()
#结束游戏
def endGame(self):
print('谢谢使用,欢迎再次使用')
exit()
#添加文字信息提示
def getTextSurface(self,text):
#初始化字体模块
pygame.font.init()
#获取所有字体
# print(pygame.font.get_fonts())
#获取字体对象
font = pygame.font.SysFont('kaiti',18)
#绘制文字信息
textSurface = font.render(text,True,TEXT_COLOR)
return textSurface
#添加事件监听
def getEvent(self):
#获取所有的事件
eventList = pygame.event.get()
#遍历事件
for event in eventList:
#判断按下是否是关闭
if event.type == pygame.QUIT:
self.endGame()
#判断是否是键盘事件
if event.type == pygame.KEYDOWN:
#判断我方坦克是否消亡
if not MainGame.myTank:
#判断键盘按下的是Esc键
if event.key == pygame.K_ESCAPE:
#调用创建我方坦克的方法
self.createMyTank()
if MainGame.myTank and MainGame.myTank.live:
#判断按下的是上 下 左 右
if event.key == pygame.K_LEFT:
print('按下左键,坦克向左移动')
#修改我方坦克的方向
MainGame.myTank.direction='L'
#修改坦克移动开关
MainGame.myTank.stop=False
elif event.key == pygame.K_RIGHT:
print('按下右键,坦克向右移动')
#修改我方坦克的方向
MainGame.myTank.direction='R'
#修改坦克移动开关
MainGame.myTank.stop=False
elif event.key == pygame.K_UP:
print('按下上键,坦克向上移动')
#修改我方坦克的方向
MainGame.myTank.direction='U'
#修改坦克移动开关
MainGame.myTank.stop=False
elif event.key == pygame.K_DOWN:
print('按下下键,坦克向下移动')
#修改我方坦克的方向
MainGame.myTank.direction='D'
#修改坦克移动开关
MainGame.myTank.stop=False
elif event.key == pygame.K_SPACE:
print('发射子弹')
#子弹列表的数量如果小于3,可以初始化子弹
if len(MainGame.myBulletList)<3:
#初始化子弹
myBullet = Bullet(MainGame.myTank)
MainGame.myBulletList.append(myBullet)
#添加音效
music = Music('./img/fire.wav')
music.playMusic()
#判断键盘键是否松开
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_UP or event.key == pygame.K_RIGHT or event.key == pygame.K_DOWN:
if MainGame.myTank and MainGame.myTank.live:
MainGame.myTank.stop = True
class Tank(BaseItem):
def __init__(self,left,top) -> None:
#保存加载的图片
self.images = {
'U':pygame.image.load('./img/p1tankU.gif'),
'D':pygame.image.load('./img/p1tankD.gif'),
'L':pygame.image.load('./img/p1tankL.gif'),
'R':pygame.image.load('./img/p1tankR.gif'),
}
#设置坦克的方向
self.direction = 'D'
#根据坦克方向,获取加载的图片
self.image = self.images.get(self.direction)
#根据图片获取图片的矩形区域
self.rect = self.image.get_rect()
#设置区域的left和top
self.rect.left = left
self.rect.top = top
#速度
self.speed = 5
#坦克移动开关
self.stop = True
#生存状态
self.live = True
#移动之前的位置
self.oldleft = self.rect.left
self.oldtop = self.rect.top
#展示坦克的方法
def displayTank(self):
self.image = self.images.get(self.direction)
#调用blit方法展示坦克
MainGame.window.blit(self.image,self.rect)
#移动坦克
def move(self):
#记录移动之前的位置
self.oldleft = self.rect.left
self.oldtop = self.rect.top
#判断坦克的方向
if self.direction == 'L':
if self.rect.left>0:
self.rect.left -= self.speed
elif self.direction == 'R':
if self.rect.left+self.rect.height<SCREEN_WIDTH:
self.rect.left += self.speed
elif self.direction == 'U':
if self.rect.top >0:
self.rect.top -= self.speed
elif self.direction == 'D':
if self.rect.top+self.rect.height<SCREEN_HEIGHT:
self.rect.top += self.speed
#射击
def shot(self):
pass
#设置坦克位置为移动之前的位置
def stay(self):
self.rect.left = self.oldleft
self.rect.top = self.oldtop
#检测坦克是否与墙壁发生碰撞
def tank_hit_wall(self):
#循环遍历墙壁列表
for wall in MainGame.wallList:
if pygame.sprite.collide_rect(self,wall):
#设置坦克的坐标为移动之前的位置
self.stay()
#我方坦克
class MyTank(Tank):
#初始化方法
def __init__(self,left,top) -> None:
#调用父类的初始方法
super(MyTank,self).__init__(left,top)
#检测我方坦克是否与敌方坦克发生碰撞
def myTank_hit_enemyTank(self):
#循环遍历敌方坦克列表
for enemyTank in MainGame.enemyList:
if pygame.sprite.collide_rect(self,enemyTank):
self.stay()
#敌方坦克
class EnemyTank(Tank):
def __init__(self,left,top,speed) -> None:
#调用父类的初始化方法
super(EnemyTank,self).__init__(left,top)
#加载保存的图片集
self.images= {
'U':pygame.image.load('./img/enemy1U.gif'),
'D':pygame.image.load('./img/enemy1D.gif'),
'L':pygame.image.load('./img/enemy1L.gif'),
'R':pygame.image.load('./img/enemy1R.gif'),
}
#设置敌方坦克方向
self.direction = self.randDirection()
#根据方向获取图片
self.image = self.images.get(self.direction)
#获取矩形区域
self.rect = self.image.get_rect()
#设置left top
self.rect.left = left
self.rect.top = top
self.speed = speed
#步数
self.step = 60
#随机生成方向
def randDirection(self):
num = random.randint(1,4)
if num == 1:
return 'U'
elif num == 2:
return 'D'
elif num == 3:
return 'L'
elif num == 4:
return 'R'
#随机移动的方法
def randMove(self):
if self.step <=0:
#修改敌方坦克的方向
self.direction = self.randDirection()
#让步数复位
self.step = 60
else:
self.move()
#步数递减
self.step-=1
def shot(self):
#随机生成100以内的数
num = random.randint(0,100)
if num<10:
return Bullet(self)
#检测敌方坦克是否与我方坦克发生碰撞
def enemyTank_hit_myTank(self):
if pygame.sprite.collide_rect(self,MainGame.myTank):
self.stay()
#子弹类
class Bullet(BaseItem):
def __init__(self,tank) -> None:
#加载图片
self.image = pygame.image.load('./img/enemymissile.gif')
#子弹的方向
self.direction = tank.direction
#根据图片获取区域
self.rect = self.image.get_rect()
#设置left top
if self.direction == 'U':
self.rect.left = tank.rect.left + tank.rect.width/2 - self.rect.width/2
self.rect.top = tank.rect.top - self.rect.height
elif self.direction == 'D':
self.rect.left = tank.rect.left + tank.rect.width / 2 - self.rect.width / 2
self.rect.top = tank.rect.top + tank.rect.height
elif self.direction == 'L':
self.rect.left = tank.rect.left - self.rect.width / 2 - self.rect.width / 2
self.rect.top = tank.rect.top + tank.rect.width / 2 - self.rect.width / 2
elif self.direction == 'R':
self.rect.left = tank.rect.left + tank.rect.width
self.rect.top = tank.rect.top + tank.rect.width / 2 - self.rect.width / 2
#子弹的速度
self.speed = 6
#是否存活
self.live = True
#展示子弹
def displayBullet(self):
#将图片加载到窗口
MainGame.window.blit(self.image,self.rect)
#移动
def move(self):
if self.direction == 'U':
if self.rect.top>0:
self.rect.top -= self.speed
else: #碰到墙壁
self.live = False
elif self.direction == 'D':
if self.rect.top + self.rect.height < SCREEN_HEIGHT:
self.rect.top += self.speed
else:
self.live = False
elif self.direction == 'L':
if self.rect.left>0:
self.rect.left -= self.speed
else:
self.live = False
elif self.direction == 'R':
if self.rect.left + self.rect.width < SCREEN_WIDTH:
self.rect.left += self.speed
else:
self.live = False
#我方子弹与敌方坦克碰撞检测
def myBullet_hit_enemyTank(self):
#循环遍历敌方坦克列表
for enemyTank in MainGame.enemyList:
if pygame.sprite.collide_rect(self,enemyTank):
#修改敌方坦克与我方子弹的生存状态
enemyTank.live = False
self.live = False
#初始化爆炸效果类
explode = Explode(enemyTank)
#添加爆炸效果类到爆炸效果列表中
MainGame.explodeList.append(explode)
#敌方子弹与我方坦克发生碰撞
def enemyBullet_hit_myTank(self):
if MainGame.myTank and MainGame.myTank.live:
if pygame.sprite.collide_rect(self,MainGame.myTank):
#产生爆炸效果
explode = Explode(MainGame.myTank)
#将爆炸效果添加到爆炸效果列表
MainGame.explodeList.append(explode)
#修改敌方子弹与我方坦克的生存状态
self.live = False
MainGame.myTank.live = False
#检测子弹是否与墙壁发生碰撞
def bullet_hit_wall(self):
#循环遍历墙壁列表
for wall in MainGame.wallList:
if pygame.sprite.collide_rect(self,wall):
#设置子弹生存状态修改
self.live = False
#让墙壁的生命值减减
wall.hp -=1
#判断墙壁生命值是否小于等于0
if wall.hp<=0:
#设置墙壁的生存状态
wall.live = False
#墙壁类
class Wall():
def __init__(self,left,top) -> None:
#加载墙壁图片
self.image = pygame.image.load('./img/steels.gif')
#根据图片获取区域
self.rect = self.image.get_rect()
#设置left top
self.rect.left = left
self.rect.top = top
#生存状态
self.live = True
#生命值
self.hp = 3
#展示墙壁方法
def displayWall(self):
MainGame.window.blit(self.image,self.rect)
#爆炸效果类
class Explode():
def __init__(self,tank) -> None:
#爆炸的位置是当前子弹击中坦克的位置
self.rect = tank.rect
self.images = [
pygame.image.load('./img/blast0.gif'),
pygame.image.load('./img/blast1.gif'),
pygame.image.load('./img/blast2.gif'),
pygame.image.load('./img/blast3.gif'),
pygame.image.load('./img/blast4.gif'),
]
self.step = 0
self.image = self.images[self.step]
#生存状态
self.live = True
#展示爆炸效果
def displayExplode(self):
if self.step<len(self.images):
self.image = self.images[self.step]
self.step+=1
#添加到主窗口
MainGame.window.blit(self.image,self.rect)
else:
#修改存活状态
self.live = False
self.step = 0
#音效类
class Music():
def __init__(self,filename) -> None:
self.filename = filename
#初始化混合器
pygame.mixer.init()
#加载音乐
pygame.mixer.music.load(self.filename)
#播放音乐
def playMusic(self):
pygame.mixer.music.play()
#主方法
if __name__ == '__main__':
#调用主类中startGame()
MainGame().startGame()
# MainGame().getTextSurface('aa')
2.吃豆豆
import os
import sys
import pygame
import Levels
'''定义一些必要的参数'''
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
BLUE = (0, 0, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
YELLOW = (255, 255, 0)
PURPLE = (255, 0, 255)
SKYBLUE = (0, 191, 255)
BGMPATH = os.path.join(os.getcwd(), 'resources/sounds/bg.mp3')
ICONPATH = os.path.join(os.getcwd(), 'resources/images/icon.png')
FONTPATH = os.path.join(os.getcwd(), 'resources/font/ALGER.TTF')
HEROPATH = os.path.join(os.getcwd(), 'resources/images/pacman.png')
BlinkyPATH = os.path.join(os.getcwd(), 'resources/images/Blinky.png')
ClydePATH = os.path.join(os.getcwd(), 'resources/images/Clyde.png')
InkyPATH = os.path.join(os.getcwd(), 'resources/images/Inky.png')
PinkyPATH = os.path.join(os.getcwd(), 'resources/images/Pinky.png')
'''开始某一关游戏'''
def startLevelGame(level, screen, font):
clock = pygame.time.Clock()
SCORE = 0
wall_sprites = level.setupWalls(SKYBLUE)
gate_sprites = level.setupGate(WHITE)
hero_sprites, ghost_sprites = level.setupPlayers(HEROPATH, [BlinkyPATH, ClydePATH, InkyPATH, PinkyPATH])
food_sprites = level.setupFood(YELLOW, WHITE)
is_clearance = False
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit(-1)
pygame.quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
for hero in hero_sprites:
hero.changeSpeed([-1, 0])
hero.is_move = True
elif event.key == pygame.K_RIGHT:
for hero in hero_sprites:
hero.changeSpeed([1, 0])
hero.is_move = True
elif event.key == pygame.K_UP:
for hero in hero_sprites:
hero.changeSpeed([0, -1])
hero.is_move = True
elif event.key == pygame.K_DOWN:
for hero in hero_sprites:
hero.changeSpeed([0, 1])
hero.is_move = True
if event.type == pygame.KEYUP:
if (event.key == pygame.K_LEFT) or (event.key == pygame.K_RIGHT) or (event.key == pygame.K_UP) or (event.key == pygame.K_DOWN):
hero.is_move = False
screen.fill(BLACK)
for hero in hero_sprites:
hero.update(wall_sprites, gate_sprites)
hero_sprites.draw(screen)
for hero in hero_sprites:
food_eaten = pygame.sprite.spritecollide(hero, food_sprites, True)
SCORE += len(food_eaten)
wall_sprites.draw(screen)
gate_sprites.draw(screen)
food_sprites.draw(screen)
for ghost in ghost_sprites:
# 幽灵随机运动()
'''
res = ghost.update(wall_sprites, None)
while not res:
ghost.changeSpeed(ghost.randomDirection())
res = ghost.update(wall_sprites, None)
'''
# 指定幽灵运动路径
if ghost.tracks_loc[1] < ghost.tracks[ghost.tracks_loc[0]][2]:
ghost.changeSpeed(ghost.tracks[ghost.tracks_loc[0]][0: 2])
ghost.tracks_loc[1] += 1
else:
if ghost.tracks_loc[0] < len(ghost.tracks) - 1:
ghost.tracks_loc[0] += 1
elif ghost.role_name == 'Clyde':
ghost.tracks_loc[0] = 2
else:
ghost.tracks_loc[0] = 0
ghost.changeSpeed(ghost.tracks[ghost.tracks_loc[0]][0: 2])
ghost.tracks_loc[1] = 0
if ghost.tracks_loc[1] < ghost.tracks[ghost.tracks_loc[0]][2]:
ghost.changeSpeed(ghost.tracks[ghost.tracks_loc[0]][0: 2])
else:
if ghost.tracks_loc[0] < len(ghost.tracks) - 1:
loc0 = ghost.tracks_loc[0] + 1
elif ghost.role_name == 'Clyde':
loc0 = 2
else:
loc0 = 0
ghost.changeSpeed(ghost.tracks[loc0][0: 2])
ghost.update(wall_sprites, None)
ghost_sprites.draw(screen)
score_text = font.render("Score: %s" % SCORE, True, RED)
screen.blit(score_text, [10, 10])
if len(food_sprites) == 0:
is_clearance = True
break
if pygame.sprite.groupcollide(hero_sprites, ghost_sprites, False, False):
is_clearance = False
break
pygame.display.flip()
clock.tick(10)
return is_clearance
'''显示文字'''
def showText(screen, font, is_clearance, flag=False):
clock = pygame.time.Clock()
msg = 'Game Over!' if not is_clearance else 'Congratulations, you won!'
positions = [[235, 233], [65, 303], [170, 333]] if not is_clearance else [[145, 233], [65, 303], [170, 333]]
surface = pygame.Surface((400, 200))
surface.set_alpha(10)
surface.fill((128, 128, 128))
screen.blit(surface, (100, 200))
texts = [font.render(msg, True, WHITE),
font.render('Press ENTER to continue or play again.', True, WHITE),
font.render('Press ESCAPE to quit.', True, WHITE)]
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
pygame.quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RETURN:
if is_clearance:
if not flag:
return
else:
main(initialize())
else:
main(initialize())
elif event.key == pygame.K_ESCAPE:
sys.exit()
pygame.quit()
for idx, (text, position) in enumerate(zip(texts, positions)):
screen.blit(text, position)
pygame.display.flip()
clock.tick(10)
'''初始化'''
def initialize():
pygame.init()
icon_image = pygame.image.load(ICONPATH)
pygame.display.set_icon(icon_image)
screen = pygame.display.set_mode([606, 606])
pygame.display.set_caption('吃豆人')
return screen
'''主函数'''
def main(screen):
pygame.mixer.init()
pygame.mixer.music.load(BGMPATH)
pygame.mixer.music.play(-1, 0.0)
pygame.font.init()
font_small = pygame.font.Font(FONTPATH, 18)
font_big = pygame.font.Font(FONTPATH, 24)
for num_level in range(1, Levels.NUMLEVELS+1):
if num_level == 1:
level = Levels.Level1()
is_clearance = startLevelGame(level, screen, font_small)
if num_level == Levels.NUMLEVELS:
showText(screen, font_big, is_clearance, True)
else:
showText(screen, font_big, is_clearance)
'''test'''
if __name__ == '__main__':
main(initialize())
3.飞机大战
#-*- coding:utf-8 -*-
import pygame
import sys
from sprites import *
class PlaneGame(object):
"""飞机大战主游戏"""
def __init__(self):
# print("游戏初始化")
# 1. 创建游戏窗口
self.screen = pygame.display.set_mode(SCREEN_RECT.size)
# 2. 创建游戏的时钟
self.clock = pygame.time.Clock()
# 3. 调用私有方法,精灵和精灵组的创建
self.__create_sprites()
# 4. 设定定时器事件,创建敌机 1s创建一个
pygame.time.set_timer(CREATE_ENEMY_EVENT, 1000)
# 5. 设定子弹的定时器时间,每0.4s发射一颗子弹
pygame.time.set_timer(HERO_FIRE_EVENT, 400)
# 6. 设置定时器事件,创建敌机2 4s创建一个
pygame.time.set_timer(CREATE_ENEMY2_EVENT, 4000)
# 初始化记分牌,来获取玩家的得分情况
self.count_die_enemy = 0
self.hero_life = 3
def __create_sprites(self):
# 创建背景精灵和精灵组
bg1 = Background()
bg2 = Background(True)
self.back_group = pygame.sprite.Group(bg1, bg2)
# 创建敌机的精灵组
self.enemy_group = pygame.sprite.Group()
# 英雄初始化
self.hero = Hero()
self.hero_group = pygame.sprite.Group(self.hero)
def start_game(self):
# print("游戏开始")
while True:
# 1. 设置刷新帧率
self.clock.tick(FRAME_PER_SEC)
# 2. 事件监听
self.__event_handler()
# 3. 碰撞检测
self.__check_collide()
# 4. 更新精灵组
self.__update_sprites()
# 5. 更新屏幕显示
pygame.display.update()
def __event_handler(self):
for event in pygame.event.get():
# 判断是否退出游戏
if event.type == pygame.QUIT:
self.__game_over()
elif event.type == CREATE_ENEMY_EVENT:
# print("敌机出场")
# 创建敌机精灵
enemy = Enemy()
# 将敌机精灵添加到敌机精灵组里面去
self.enemy_group.add(enemy)
elif event.type == HERO_FIRE_EVENT:
# 判断是否是英雄开火的事件,如果是,就开火
self.hero.fire()
elif event.type == CREATE_ENEMY2_EVENT:
# print("敌机2出场")
# 创建敌机精灵
enemy2 = Enemy()
# 这里要更换敌机2的图片
enemy2.image = pygame.image.load("./images/enemy2.png")
self.enemy_group.add(enemy2)
keys_pressed = pygame.key.get_pressed()
if keys_pressed[pygame.K_RIGHT]:
self.hero.speed = 3
self.hero.goto = 1
elif keys_pressed[pygame.K_LEFT]:
self.hero.speed = -3
self.hero.goto = 1
elif keys_pressed[pygame.K_UP]:
self.hero.speed = -3
self.hero.goto = 2
elif keys_pressed[pygame.K_DOWN]:
self.hero.speed = 3
self.hero.goto = 2
else:
self.hero.speed = 0
def __check_collide(self):
# 1. 子弹摧毁敌机--参数都是精灵组
cal_num = pygame.sprite.groupcollide(self.hero.bullets, self.enemy_group, True, True)
if len(cal_num) > 0:
self.count_die_enemy += 1
if self.count_die_enemy > 30 and self.count_die_enemy <= 90:
pygame.time.set_timer(CREATE_ENEMY_EVENT, 500)
pygame.time.set_timer(CREATE_ENEMY2_EVENT, 2000)
elif self.count_die_enemy > 90 and self.count_die_enemy <= 150:
pygame.time.set_timer(CREATE_ENEMY_EVENT, 250)
pygame.time.set_timer(CREATE_ENEMY2_EVENT, 1000)
elif self.count_die_enemy > 150:
print("游戏结束,你通关了")
time.sleep(2)
sys.exit()
# 2. 敌机撞毁英雄-这里会返回精灵组的一个列表-如果没有发生碰撞,列表为空列表
enemies = pygame.sprite.spritecollide(self.hero, self.enemy_group, True)
if len(enemies) > 0:
self.hero_life -= 1
if self.hero_life == 0:
print("The Game Over, Your Score is :【%s】" % self.count_die_enemy)
time.sleep(1)
self.hero.kill()
# 结束游戏
self.__game_over()
def __update_sprites(self):
self.back_group.update()
self.back_group.draw(self.screen)
self.enemy_group.update()
self.enemy_group.draw(self.screen)
self.hero_group.update()
self.hero_group.draw(self.screen)
self.hero.bullets.update()
self.hero.bullets.draw(self.screen)
def __game_over(self):
# print("游戏结束")
pygame.quit()
sys.exit()
if __name__ == '__main__':
# 创建游戏对象
game = PlaneGame()
# 启动游戏
game.start_game()
4.象棋
import pygame
import time
import constants
from button import Button
import pieces
import computer
class MainGame():
window = None
Start_X = constants.Start_X
Start_Y = constants.Start_Y
Line_Span = constants.Line_Span
Max_X = Start_X + 8 * Line_Span
Max_Y = Start_Y + 9 * Line_Span
player1Color = constants.player1Color
player2Color = constants.player2Color
Putdownflag = player1Color
piecesSelected = None
button_go = None
piecesList = []
def start_game(self):
MainGame.window = pygame.display.set_mode([constants.SCREEN_WIDTH, constants.SCREEN_HEIGHT])
pygame.display.set_caption("天青-中国象棋")
MainGame.button_go = Button(MainGame.window, "重新开始", constants.SCREEN_WIDTH - 100, 300) # 创建开始按钮
self.piecesInit()
while True:
time.sleep(0.1)
# 获取事件
MainGame.window.fill(constants.BG_COLOR)
self.drawChessboard()
#MainGame.button_go.draw_button()
self.piecesDisplay()
self.VictoryOrDefeat()
self.Computerplay()
self.getEvent()
pygame.display.update()
pygame.display.flip()
def drawChessboard(self):
mid_end_y = MainGame.Start_Y + 4 * MainGame.Line_Span
min_start_y = MainGame.Start_Y + 5 * MainGame.Line_Span
for i in range(0, 9):
x = MainGame.Start_X + i * MainGame.Line_Span
if i==0 or i ==8:
y = MainGame.Start_Y + i * MainGame.Line_Span
pygame.draw.line(MainGame.window, constants.BLACK, [x, MainGame.Start_Y], [x, MainGame.Max_Y], 1)
else:
pygame.draw.line(MainGame.window, constants.BLACK, [x, MainGame.Start_Y], [x, mid_end_y], 1)
pygame.draw.line(MainGame.window, constants.BLACK, [x, min_start_y], [x, MainGame.Max_Y], 1)
for i in range(0, 10):
x = MainGame.Start_X + i * MainGame.Line_Span
y = MainGame.Start_Y + i * MainGame.Line_Span
pygame.draw.line(MainGame.window, constants.BLACK, [MainGame.Start_X, y], [MainGame.Max_X, y], 1)
speed_dial_start_x = MainGame.Start_X + 3 * MainGame.Line_Span
speed_dial_end_x = MainGame.Start_X + 5 * MainGame.Line_Span
speed_dial_y1 = MainGame.Start_Y + 0 * MainGame.Line_Span
speed_dial_y2 = MainGame.Start_Y + 2 * MainGame.Line_Span
speed_dial_y3 = MainGame.Start_Y + 7 * MainGame.Line_Span
speed_dial_y4 = MainGame.Start_Y + 9 * MainGame.Line_Span
pygame.draw.line(MainGame.window, constants.BLACK, [speed_dial_start_x, speed_dial_y1], [speed_dial_end_x, speed_dial_y2], 1)
pygame.draw.line(MainGame.window, constants.BLACK, [speed_dial_start_x, speed_dial_y2],
[speed_dial_end_x, speed_dial_y1], 1)
pygame.draw.line(MainGame.window, constants.BLACK, [speed_dial_start_x, speed_dial_y3],
[speed_dial_end_x, speed_dial_y4], 1)
pygame.draw.line(MainGame.window, constants.BLACK, [speed_dial_start_x, speed_dial_y4],
[speed_dial_end_x, speed_dial_y3], 1)
def piecesInit(self):
MainGame.piecesList.append(pieces.Rooks(MainGame.player2Color, 0,0))
MainGame.piecesList.append(pieces.Rooks(MainGame.player2Color, 8, 0))
MainGame.piecesList.append(pieces.Elephants(MainGame.player2Color, 2, 0))
MainGame.piecesList.append(pieces.Elephants(MainGame.player2Color, 6, 0))
MainGame.piecesList.append(pieces.King(MainGame.player2Color, 4, 0))
MainGame.piecesList.append(pieces.Knighs(MainGame.player2Color, 1, 0))
MainGame.piecesList.append(pieces.Knighs(MainGame.player2Color, 7, 0))
MainGame.piecesList.append(pieces.Cannons(MainGame.player2Color, 1, 2))
MainGame.piecesList.append(pieces.Cannons(MainGame.player2Color, 7, 2))
MainGame.piecesList.append(pieces.Mandarins(MainGame.player2Color, 3, 0))
MainGame.piecesList.append(pieces.Mandarins(MainGame.player2Color, 5, 0))
MainGame.piecesList.append(pieces.Pawns(MainGame.player2Color, 0, 3))
MainGame.piecesList.append(pieces.Pawns(MainGame.player2Color, 2, 3))
MainGame.piecesList.append(pieces.Pawns(MainGame.player2Color, 4, 3))
MainGame.piecesList.append(pieces.Pawns(MainGame.player2Color, 6, 3))
MainGame.piecesList.append(pieces.Pawns(MainGame.player2Color, 8, 3))
MainGame.piecesList.append(pieces.Rooks(MainGame.player1Color, 0, 9))
MainGame.piecesList.append(pieces.Rooks(MainGame.player1Color, 8, 9))
MainGame.piecesList.append(pieces.Elephants(MainGame.player1Color, 2, 9))
MainGame.piecesList.append(pieces.Elephants(MainGame.player1Color, 6, 9))
MainGame.piecesList.append(pieces.King(MainGame.player1Color, 4, 9))
MainGame.piecesList.append(pieces.Knighs(MainGame.player1Color, 1, 9))
MainGame.piecesList.append(pieces.Knighs(MainGame.player1Color, 7, 9))
MainGame.piecesList.append(pieces.Cannons(MainGame.player1Color, 1, 7))
MainGame.piecesList.append(pieces.Cannons(MainGame.player1Color, 7, 7))
MainGame.piecesList.append(pieces.Mandarins(MainGame.player1Color, 3, 9))
MainGame.piecesList.append(pieces.Mandarins(MainGame.player1Color, 5, 9))
MainGame.piecesList.append(pieces.Pawns(MainGame.player1Color, 0, 6))
MainGame.piecesList.append(pieces.Pawns(MainGame.player1Color, 2, 6))
MainGame.piecesList.append(pieces.Pawns(MainGame.player1Color, 4, 6))
MainGame.piecesList.append(pieces.Pawns(MainGame.player1Color, 6, 6))
MainGame.piecesList.append(pieces.Pawns(MainGame.player1Color, 8, 6))
def piecesDisplay(self):
for item in MainGame.piecesList:
item.displaypieces(MainGame.window)
#MainGame.window.blit(item.image, item.rect)
def getEvent(self):
# 获取所有的事件
eventList = pygame.event.get()
for event in eventList:
if event.type == pygame.QUIT:
self.endGame()
elif event.type == pygame.MOUSEBUTTONDOWN:
pos = pygame.mouse.get_pos()
mouse_x = pos[0]
mouse_y = pos[1]
if (
mouse_x > MainGame.Start_X - MainGame.Line_Span / 2 and mouse_x < MainGame.Max_X + MainGame.Line_Span / 2) and (
mouse_y > MainGame.Start_Y - MainGame.Line_Span / 2 and mouse_y < MainGame.Max_Y + MainGame.Line_Span / 2):
# print( str(mouse_x) + "" + str(mouse_y))
# print(str(MainGame.Putdownflag))
if MainGame.Putdownflag != MainGame.player1Color:
return
click_x = round((mouse_x - MainGame.Start_X) / MainGame.Line_Span)
click_y = round((mouse_y - MainGame.Start_Y) / MainGame.Line_Span)
click_mod_x = (mouse_x - MainGame.Start_X) % MainGame.Line_Span
click_mod_y = (mouse_y - MainGame.Start_Y) % MainGame.Line_Span
if abs(click_mod_x - MainGame.Line_Span / 2) >= 5 and abs(
click_mod_y - MainGame.Line_Span / 2) >= 5:
# print("有效点:x="+str(click_x)+" y="+str(click_y))
# 有效点击点
self.PutdownPieces(MainGame.player1Color, click_x, click_y)
else:
print("out")
if MainGame.button_go.is_click():
#self.restart()
print("button_go click")
else:
print("button_go click out")
def PutdownPieces(self, t, x, y):
selectfilter=list(filter(lambda cm: cm.x == x and cm.y == y and cm.player == MainGame.player1Color,MainGame.piecesList))
if len(selectfilter):
MainGame.piecesSelected = selectfilter[0]
return
if MainGame.piecesSelected :
#print("1111")
arr = pieces.listPiecestoArr(MainGame.piecesList)
if MainGame.piecesSelected.canmove(arr, x, y):
self.PiecesMove(MainGame.piecesSelected, x, y)
MainGame.Putdownflag = MainGame.player2Color
else:
fi = filter(lambda p: p.x == x and p.y == y, MainGame.piecesList)
listfi = list(fi)
if len(listfi) != 0:
MainGame.piecesSelected = listfi[0]
def PiecesMove(self,pieces, x , y):
for item in MainGame.piecesList:
if item.x ==x and item.y == y:
MainGame.piecesList.remove(item)
pieces.x = x
pieces.y = y
print("move to " +str(x) +" "+str(y))
return True
def Computerplay(self):
if MainGame.Putdownflag == MainGame.player2Color:
print("轮到电脑了")
computermove = computer.getPlayInfo(MainGame.piecesList)
#if computer==None:
#return
piecemove = None
for item in MainGame.piecesList:
if item.x == computermove[0] and item.y == computermove[1]:
piecemove= item
self.PiecesMove(piecemove, computermove[2], computermove[3])
MainGame.Putdownflag = MainGame.player1Color
#判断游戏胜利
def VictoryOrDefeat(self):
txt =""
result = [MainGame.player1Color,MainGame.player2Color]
for item in MainGame.piecesList:
if type(item) ==pieces.King:
if item.player == MainGame.player1Color:
result.remove(MainGame.player1Color)
if item.player == MainGame.player2Color:
result.remove(MainGame.player2Color)
if len(result)==0:
return
if result[0] == MainGame.player1Color :
txt = "失败!"
else:
txt = "胜利!"
MainGame.window.blit(self.getTextSuface("%s" % txt), (constants.SCREEN_WIDTH - 100, 200))
MainGame.Putdownflag = constants.overColor
def getTextSuface(self, text):
pygame.font.init()
# print(pygame.font.get_fonts())
font = pygame.font.SysFont('kaiti', 18)
txt = font.render(text, True, constants.TEXT_COLOR)
return txt
def endGame(self):
print("exit")
exit()
if __name__ == '__main__':
MainGame().start_game()
5.扫雷
6.五子棋
7.200行贪吃蛇
8.150行贪吃蛇
9.拼图
10.滑雪小游戏
11.俄罗斯方块
12.植物大战僵尸
import pygame
import random
#1 配置图片地址
IMAGE_PATH = 'imgs/'
#1 设置页面宽高
scrrr_width=800
scrrr_height =560
#1 创建控制游戏结束的状态
GAMEOVER = False
#4 图片加载报错处理
LOG = '文件:{}中的方法:{}出错'.format(__file__,__name__)
#3 创建地图类
class Map():
#3 存储两张不同颜色的图片名称
map_names_list = [IMAGE_PATH + 'map1.png', IMAGE_PATH + 'map2.png']
#3 初始化地图
def __init__(self, x, y, img_index):
self.image = pygame.image.load(Map.map_names_list[img_index])
self.position = (x, y)
# 是否能够种植
self.can_grow = True
#3 加载地图
def load_map(self):
MainGame.window.blit(self.image,self.position)
#4 植物类
class Plant(pygame.sprite.Sprite):
def __init__(self):
super(Plant, self).__init__()
self.live=True
# 加载图片
def load_image(self):
if hasattr(self, 'image') and hasattr(self, 'rect'):
MainGame.window.blit(self.image, self.rect)
else:
print(LOG)
#5 向日葵类
class Sunflower(Plant):
def __init__(self,x,y):
super(Sunflower, self).__init__()
self.image = pygame.image.load('imgs/sunflower.png')
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
self.price = 50
self.hp = 100
#5 时间计数器
self.time_count = 0
#5 新增功能:生成阳光
def produce_money(self):
self.time_count += 1
if self.time_count == 25:
MainGame.money += 5
self.time_count = 0
#5 向日葵加入到窗口中
def display_sunflower(self):
MainGame.window.blit(self.image,self.rect)
#6 豌豆射手类
class PeaShooter(Plant):
def __init__(self,x,y):
super(PeaShooter, self).__init__()
# self.image 为一个 surface
self.image = pygame.image.load('imgs/peashooter.png')
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
self.price = 50
self.hp = 200
#6 发射计数器
self.shot_count = 0
#6 增加射击方法
def shot(self):
#6 记录是否应该射击
should_fire = False
for zombie in MainGame.zombie_list:
if zombie.rect.y == self.rect.y and zombie.rect.x < 800 and zombie.rect.x > self.rect.x:
should_fire = True
#6 如果活着
if self.live and should_fire:
self.shot_count += 1
#6 计数器到25发射一次
if self.shot_count == 25:
#6 基于当前豌豆射手的位置,创建子弹
peabullet = PeaBullet(self)
#6 将子弹存储到子弹列表中
MainGame.peabullet_list.append(peabullet)
self.shot_count = 0
#6 将豌豆射手加入到窗口中的方法
def display_peashooter(self):
MainGame.window.blit(self.image,self.rect)
#7 豌豆子弹类
class PeaBullet(pygame.sprite.Sprite):
def __init__(self,peashooter):
self.live = True
self.image = pygame.image.load('imgs/peabullet.png')
self.damage = 50
self.speed = 10
self.rect = self.image.get_rect()
self.rect.x = peashooter.rect.x + 60
self.rect.y = peashooter.rect.y + 15
def move_bullet(self):
#7 在屏幕范围内,实现往右移动
if self.rect.x < scrrr_width:
self.rect.x += self.speed
else:
self.live = False
#7 新增,子弹与僵尸的碰撞
def hit_zombie(self):
for zombie in MainGame.zombie_list:
if pygame.sprite.collide_rect(self,zombie):
#打中僵尸之后,修改子弹的状态,
self.live = False
#僵尸掉血
zombie.hp -= self.damage
if zombie.hp <= 0:
zombie.live = False
self.nextLevel()
#7闯关方法
def nextLevel(self):
MainGame.score += 20
MainGame.remnant_score -=20
for i in range(1,100):
if MainGame.score==100*i and MainGame.remnant_score==0:
MainGame.remnant_score=100*i
MainGame.shaoguan+=1
MainGame.produce_zombie+=50
def display_peabullet(self):
MainGame.window.blit(self.image,self.rect)
#9 僵尸类
class Zombie(pygame.sprite.Sprite):
def __init__(self,x,y):
super(Zombie, self).__init__()
self.image = pygame.image.load('imgs/zombie.png')
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
self.hp = 1000
self.damage = 2
self.speed = 1
self.live = True
self.stop = False
#9 僵尸的移动
def move_zombie(self):
if self.live and not self.stop:
self.rect.x -= self.speed
if self.rect.x < -80:
#8 调用游戏结束方法
MainGame().gameOver()
#9 判断僵尸是否碰撞到植物,如果碰撞,调用攻击植物的方法
def hit_plant(self):
for plant in MainGame.plants_list:
if pygame.sprite.collide_rect(self,plant):
#8 僵尸移动状态的修改
self.stop = True
self.eat_plant(plant)
#9 僵尸攻击植物
def eat_plant(self,plant):
#9 植物生命值减少
plant.hp -= self.damage
#9 植物死亡后的状态修改,以及地图状态的修改
if plant.hp <= 0:
a = plant.rect.y // 80 - 1
b = plant.rect.x // 80
map = MainGame.map_list[a][b]
map.can_grow = True
plant.live = False
#8 修改僵尸的移动状态
self.stop = False
#9 将僵尸加载到地图中
def display_zombie(self):
MainGame.window.blit(self.image,self.rect)
#1 主程序
class MainGame():
#2 创建关数,得分,剩余分数,钱数
shaoguan = 1
score = 0
remnant_score = 100
money = 500
#3 存储所有地图坐标点
map_points_list = []
#3 存储所有的地图块
map_list = []
#4 存储所有植物的列表
plants_list = []
#7 存储所有豌豆子弹的列表
peabullet_list = []
#9 新增存储所有僵尸的列表
zombie_list = []
count_zombie = 0
produce_zombie = 100
#1 加载游戏窗口
def init_window(self):
#1 调用显示模块的初始化
pygame.display.init()
#1 创建窗口
MainGame.window = pygame.display.set_mode([scrrr_width,scrrr_height])
#2 文本绘制
def draw_text(self, content, size, color):
pygame.font.init()
font = pygame.font.SysFont('kaiti', size)
text = font.render(content, True, color)
return text
#2 加载帮助提示
def load_help_text(self):
text1 = self.draw_text('1.按左键创建向日葵 2.按右键创建豌豆射手', 26, (255, 0, 0))
MainGame.window.blit(text1, (5, 5))
#3 初始化坐标点
def init_plant_points(self):
for y in range(1, 7):
points = []
for x in range(10):
point = (x, y)
points.append(point)
MainGame.map_points_list.append(points)
print("MainGame.map_points_list", MainGame.map_points_list)
#3 初始化地图
def init_map(self):
for points in MainGame.map_points_list:
temp_map_list = list()
for point in points:
# map = None
if (point[0] + point[1]) % 2 == 0:
map = Map(point[0] * 80, point[1] * 80, 0)
else:
map = Map(point[0] * 80, point[1] * 80, 1)
# 将地图块加入到窗口中
temp_map_list.append(map)
print("temp_map_list", temp_map_list)
MainGame.map_list.append(temp_map_list)
print("MainGame.map_list", MainGame.map_list)
#3 将地图加载到窗口中
def load_map(self):
for temp_map_list in MainGame.map_list:
for map in temp_map_list:
map.load_map()
#6 增加豌豆射手发射处理
def load_plants(self):
for plant in MainGame.plants_list:
#6 优化加载植物的处理逻辑
if plant.live:
if isinstance(plant, Sunflower):
plant.display_sunflower()
plant.produce_money()
elif isinstance(plant, PeaShooter):
plant.display_peashooter()
plant.shot()
else:
MainGame.plants_list.remove(plant)
#7 加载所有子弹的方法
def load_peabullets(self):
for b in MainGame.peabullet_list:
if b.live:
b.display_peabullet()
b.move_bullet()
# v1.9 调用子弹是否打中僵尸的方法
b.hit_zombie()
else:
MainGame.peabullet_list.remove(b)
#8事件处理
def deal_events(self):
#8 获取所有事件
eventList = pygame.event.get()
#8 遍历事件列表,判断
for e in eventList:
if e.type == pygame.QUIT:
self.gameOver()
elif e.type == pygame.MOUSEBUTTONDOWN:
# print('按下鼠标按键')
print(e.pos)
# print(e.button)#左键1 按下滚轮2 上转滚轮为4 下转滚轮为5 右键 3
x = e.pos[0] // 80
y = e.pos[1] // 80
print(x, y)
map = MainGame.map_list[y - 1][x]
print(map.position)
#8 增加创建时候的地图装填判断以及金钱判断
if e.button == 1:
if map.can_grow and MainGame.money >= 50:
sunflower = Sunflower(map.position[0], map.position[1])
MainGame.plants_list.append(sunflower)
print('当前植物列表长度:{}'.format(len(MainGame.plants_list)))
map.can_grow = False
MainGame.money -= 50
elif e.button == 3:
if map.can_grow and MainGame.money >= 50:
peashooter = PeaShooter(map.position[0], map.position[1])
MainGame.plants_list.append(peashooter)
print('当前植物列表长度:{}'.format(len(MainGame.plants_list)))
map.can_grow = False
MainGame.money -= 50
#9 新增初始化僵尸的方法
def init_zombies(self):
for i in range(1, 7):
dis = random.randint(1, 5) * 200
zombie = Zombie(800 + dis, i * 80)
MainGame.zombie_list.append(zombie)
#9将所有僵尸加载到地图中
def load_zombies(self):
for zombie in MainGame.zombie_list:
if zombie.live:
zombie.display_zombie()
zombie.move_zombie()
# v2.0 调用是否碰撞到植物的方法
zombie.hit_plant()
else:
MainGame.zombie_list.remove(zombie)
#1 开始游戏
def start_game(self):
#1 初始化窗口
self.init_window()
#3 初始化坐标和地图
self.init_plant_points()
self.init_map()
#9 调用初始化僵尸的方法
self.init_zombies()
#1 只要游戏没结束,就一直循环
while not GAMEOVER:
#1 渲染白色背景
MainGame.window.fill((255, 255, 255))
#2 渲染的文字和坐标位置
MainGame.window.blit(self.draw_text('当前钱数$: {}'.format(MainGame.money), 26, (255, 0, 0)), (500, 40))
MainGame.window.blit(self.draw_text(
'当前关数{},得分{},距离下关还差{}分'.format(MainGame.shaoguan, MainGame.score, MainGame.remnant_score), 26,
(255, 0, 0)), (5, 40))
self.load_help_text()
#3 需要反复加载地图
self.load_map()
#6 调用加载植物的方法
self.load_plants()
#7 调用加载所有子弹的方法
self.load_peabullets()
#8 调用事件处理的方法
self.deal_events()
#9 调用展示僵尸的方法
self.load_zombies()
#9 计数器增长,每数到100,调用初始化僵尸的方法
MainGame.count_zombie += 1
if MainGame.count_zombie == MainGame.produce_zombie:
self.init_zombies()
MainGame.count_zombie = 0
#9 pygame自己的休眠
pygame.time.wait(10)
#1 实时更新
pygame.display.update()
#10 程序结束方法
def gameOver(self):
MainGame.window.blit(self.draw_text('游戏结束', 50, (255, 0, 0)), (300, 200))
print('游戏结束')
pygame.time.wait(400)
global GAMEOVER
GAMEOVER = True
#1 启动主程序
if __name__ == '__main__':
game = MainGame()
game.start_game()
码到这里感觉有点多,代码+配套文档+视频都有
免责声明:本文由卡卷网编辑并发布,但不代表本站的观点和立场,只提供分享给大家。
相关推荐

你 发表评论:
欢迎