import sys, os
sys.path.append(os.getcwd())
# coding:UTF-8
import pygame,sys
import os
from pygame.locals import*
import time
pygame.init()
# 设置一个长为1250,宽为700的窗口
os.environ[ 'SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (10, 30)
canvas = pygame.display.set_mode((1250, 750))
framerate = pygame.time.Clock()
canvas.fill([0, 255, 255])
pygame.key.set_repeat(10)
# 设置窗口标题
pygame.display.set_caption("超级玛丽")
# 加载图片
bg = pygame.image.load('images/bg.jpg')
mario2 = pygame.image.load('images/mario2.png')
mario1 = pygame.image.load('images/mario1.png')
mario1_1 = pygame.image.load('images/mario3.png')
mush1 = pygame.image.load('images/mush1.png')
mush2 = pygame.image.load('images/mush2.png')
flag1 = pygame.image.load('images/flag1.png')
flag2 = pygame.image.load('images/flag2.png')
rocket1 = pygame.image.load('images/rocket1.png')
rocket2 = pygame.image.load('images/rocket2.png')
winner = pygame.image.load('images/win1.png')
#音乐
bgm=pygame.mixer.Sound('media/bgm.wav')
jump=pygame.mixer.Sound('media/jump.wav')
lose=pygame.mixer.Sound('media/lose.wav')
coin=pygame.mixer.Sound('media/coin.wav')
win=pygame.mixer.Sound('media/win.wav')
bgm.play(3)
def handleEvent():
global x, y, player_jumping, jump_vel, flag, player_walk, start_time
for event in pygame.event.get():
if event.type == pygame.QUIT or event.type == KEYDOWN and event.key == K_ESCAPE :
pygame.quit()
sys.exit()
#键盘控制马里奥移动
keys = pygame.key.get_pressed()
if keys[K_LEFT]:
mario.x = mario.x - 8
mario.img = mario1_1
if keys[K_RIGHT]:
mario.x = mario.x + 8
mario.img = mario1
#定义Mario类
class Mario():
def __init__(self,x,y,width,height,img):
self.x = x
self.y = y
self.width = width
self.height = height
self.img = img
#添加控制跳跃属性
self.player_startY = 530
self.player_jumping = True
self.jump_vel = -30
#添加画图片方法
def paint(self):
canvas.blit(self.img,(self.x,self.y))
#添加jump方法
def jump(self):
if self.player_jumping == True:
if self.jump_vel < 0:
self.jump_vel += 1
elif self.jump_vel >= 0:
self.jump_vel += 2.5
self.y += self.jump_vel
if self.y >= 530:
self.y = 530
self.jump_vel = -30
if self.y == 530:
jump.play()
#移出马里奥
if life == 0:
self.player_jumping = False
self.y = self.y + 20
#添加游戏场景
flagY = 520
#设置火箭初始坐标
rocketX1 = 0
rocketY1 = 120
rocketX2 = 1250
rocketY2 = 430
def prop():
global flagY,rocketX1,rocketY1,rocketX2,rocketY2
canvas.blit(bg,(0,0))
canvas.blit(flag1,(1100,260))
canvas.blit(mario2,(20,20))
canvas.blit(flag2,(1070,flagY))
#设置火箭移动
canvas.blit(rocket1,(rocketX1,rocketY1))
canvas.blit(rocket2,(rocketX2,rocketY2))
rocketX1 = rocketX1 + 3
rocketX2 = rocketX2 - 3
if rocketX1 >= 1250:
rocketX1 = 0
if rocketX2 <= 0:
rocketX2 = 1250
#添加蘑菇跳跃变量
xm = -100
ym = 600
mush_jumping = True
mush_vel = -25
#添加创建蘑菇方法
def createMush():
global xm,ym,mush_vel,mush_jumping
if mush_jumping == True:
if mush_vel < 0:
mush_vel += 1
elif mush_vel >= 0:
mush_vel += 2.5
ym += mush_vel
if ym >= 600:
mush_vel = -25
if xm >= -100:
xm = xm + 5
if xm == 1300:
xm = -100
canvas.blit(mush1,(xm,ym))
#添加蘑菇掉落方法
if mush_jumping == False:
canvas.blit(mush2,(xm,ym))
ym = ym + 40
xm = xm + 15
if ym > 750:
mush_jumping = True
xm = -100
ym = 600
#显示生命值
life = 1
def showLife():
global life
TextFont = pygame.font.Font('media/font.ttf',60)
TextLife = TextFont.render("X "+str(life), True, (229,229,229))
canvas.blit(TextLife,(100,30))
#创建碰撞检测方法
def check():
global mush_jumping,life,flagY
if rocketX1+50 >= mario.x and rocketX1 <= mario.x+100 and \
rocketY1+20 >= mario.y and rocketY1 <= mario.y+100:
life = 0
bgm.stop()
lose.play()
#检测马里奥和第二个火箭 撞
if rocketX2+50 >= mario.x and rocketX2 <= mario.x+100 and \
rocketY2+20 >= mario.y and rocketY2 <= mario.y+100:
life = 0
bgm.stop()
lose.play()
#判断马里奥和蘑菇碰撞
if life != 0:
if mario.y+120 >= ym and mario.y+120 <= ym+50 and \
mario.x+125 >= xm and mario.x <= xm+50:
mush_jumping = False
flagY = flagY - 20
mario.y = mario.y - 20
coin.play()
if flagY <= 290:
flagY = 290
#检测游戏胜利
if flagY == 290 and life == 1:
win.play()
bgm.stop()
life = 2
if life == 2:
canvas.blit(winner,(450,250))
#定义gameover方法
def gameover():
TextFont = pygame.font.Font('media/font.ttf',70)
TextOver = TextFont.render("Game Over",True,(229,229,229))
canvas.blit(TextOver,(400,300))
#创建mario对象
mario = Mario(500,530,120,80,mario1)
#定义游戏控制方法
link = 1
def controlState():
global link
if link == 1:
prop()
showLife()
if flagY != 290:
mario.paint()
#调用起跳方法
mario.jump()
#调用添加蘑菇方法
createMush()
#调用碰撞方法和游戏结束方法
if life != 0:
check()
elif life == 0:
gameover()
while True:
#调用游戏控制方法
controlState()
pygame.display.update()
time.sleep(0.03)
handleEvent()
平平科技工作室-Python-超级玛丽
176 浏览量
2024-05-04
09:34:09
上传
评论
收藏 15.92MB ZIP 举报
平平科技工作室
- 粉丝: 237
- 资源: 16