用户:王大宝c839查看:0 回复:1 评论:0 创建时间:2020-08-26T20:07:29
【作品展示】

【作品介绍】
玩一下
【作品源代码】
#coding:utf-8
import pygame, sys, random, time, easygui,os
from pygame.locals import *
# 初始化pygame环境
pygame.init()
os.environ["SDL_VIDEO_WINDOW_POS"] = "%d, %d" % (100,30)
# 创建一个长宽分别为480/650窗口
canvas = pygame.display.set_mode((1600, 1000))
canvas.fi喵))
pygame.display.set_caption("火柴人吃豆豆")
bg = pygame.image.load("C:/Users/he/Desktop/火柴人吃豆豆/images/bg.png")
player = pygame.image.load("C:/Users/he/Desktop/火柴人吃豆豆/images/player.png")
food = pygame.image.load("C:/Users/he/Desktop/火柴人吃豆豆/images/food.png")
cut = pygame.image.load("C:/Users/he/Desktop/火柴人吃豆豆/images/cut.png")
desk = pygame.image.load("C:/Users/he/Desktop/火柴人吃豆豆/images/desk.png")
die = pygame.image.load("C:/Users/he/Desktop/火柴人吃豆豆/images/die.png")
win = pygame.image.load("C:/Users/he/Desktop/火柴人吃豆豆/images/win.png")
button = pygame.image.load("C:/Users/he/Desktop/火柴人吃豆豆/images/button.png")
# 创建游戏退出事件处理方法
def handleEvent():
key_pressed = pygame.key.get_pressed()
if Game.p.state2 == 0 or Game.p.state2 == 2:
if key_pressed[pygame.K_RIGHT]:
Game.p.x += 14
if Game.p.state2 == 0 or Game.p.state2 == 1:
if key_pressed[pygame.K_LEFT]:
Game.p.x -= 14
for event in pygame.event.get():
if event.type == pygame.QUIT or event.type == KEYDOWN and event.key == K_ESCAPE:
pygame.quit()
sys.exit()
if event.type == KEYDOWN and event.key == K_UP:
if Game.p.state == 0:
Game.p.state = 1
if Game.p.state == 2:
Game.p.y+=20
# 添加时间间隔的方法
def isActionTime(lastTime, interval):
if lastTime == 0:
return True
currentTime = time.time()
return currentTime - lastTime >= interval
class Player():
def __init__(self,x):
self.width = 63
self.height = 95
self.x = x
self.y = 975 - self.height
self.life = 1
self.state = 0
self.state2 = 0
self.state3 = 0
self.img = player
self.shootLastTime1 = 0
self.shootInterval1 = 6
self.shootLastTime2 = 0
self.shootInterval2 = 6
def paint(self):
canvas.blit(self.img,(self.x,self.y))
def hit(self,c):
return c.x > self.x - c.width and c.x < self.x + self.width and \
c.y >= self.y + self.height and c.y <= self.y + self.height+c.height
def hit2(self,c):
return c.x > self.x - c.width and c.x < self.x + self.width and \
c.y > self.y - c.height and c.y < self.y + self.height
def hit3(self,d):
if not (d.x > self.x - d.width and d.x < self.x + self.width):
return True
def step(self):
if self.state == 0:
for d in Game.desks:
if self.y+self.height == d.y and Game.p.hit3(d) and self.y != 880:
self.state3 = 1
if self.state == 1:
for a in range(175):
self.y-=1.25
for d in Game.desks:
if Game.p.hit2(d):
self.state = 2
if self.state == 2:
break
for b in range(75):
self.y-=0.55
for d in Game.desks:
if Game.p.hit2(d):
self.state = 2
if self.state == 2:
break
for c in range(40):
self.y-=0.25
for d in Game.desks:
if Game.p.hit2(d):
self.state = 2
if self.state == 2:
break
for d in range(15):
self.y-=0.15
for d in Game.desks:
if Game.p.hit2(d):
self.state = 2
if self.state == 2:
break
for e in range(1000):
self.y -= 0.005
for d in Game.desks:
if Game.p.hit2(d):
self.state = 2
if self.state == 2:
break
self.state = 0
self.state3 = 1
elif self.state3 == 1:
if self.y >= 920:
self.state3 = 0
self.state = 0
self.y+=8
for d in Game.desks:
if Game.p.hit(d):
self.state = 0
self.state2 = 0
self.y += d.y-self.y-self.height
self.state3 = 0
for d in Game.desks:
if Game.p.hit2(d):
if abs(Game.p.x-d.x) < abs(Game.p.x-d.x-d.width):
self.state2 = 1
self.state = 2
else:
self.state2 = 2
self.state = 2
else:
self.state == 2
def step2(self):
if self.state == 0:
for d in Game.desks:
if self.y+self.height == d.y and Game.p.hit3(d) and self.y != 880:
self.state = 2
if self.state == 1:
for a in range(175):
self.y-=1.25
for d in Game.desks:
if Game.p.hit2(d):
self.state = 2
if self.state == 2:
break
for b in range(75):
self.y-=0.55
for d in Game.desks:
if Game.p.hit2(d):
self.state = 2
if self.state == 2:
break
for c in range(40):
self.y-=0.25
for d in Game.desks:
if Game.p.hit2(d):
self.state = 2
if self.state == 2:
break
for d in range(15):
self.y-=0.15
for d in Game.desks:
if Game.p.hit2(d):
self.state = 2
if self.state == 2:
break
for e in range(1000):
self.y -= 0.005
for d in Game.desks:
if Game.p.hit2(d):
self.state = 2
if self.state == 2:
break
self.state = 2
elif self.state == 2:
if self.y >= 920:
self.state3 = 0
self.state = 0
self.y+=8
for d in Game.desks:
if Game.p.hit(d):
self.state = 0
self.state2 = 0
self.y += d.y-self.y-self.height
self.state3 = 0
for d in Game.desks:
if Game.p.hit2(d):
if abs(Game.p.x-d.x) < abs(Game.p.x-d.x-d.width):
self.state2 = 1
self.state = 2
else:
self.state2 = 2
self.state = 2
else:
self.state == 2
def out(self):
if self.x <= 0:
self.x += 50
elif self.x + self.width >= 1600:
self.x -= 50
def shoot(self):
if Game.state == 'running':
if not isActionTime(self.shootLastTime1,self.shootInterval1):
return
self.shootLastTime1 = time.time()
print('aa')
Game.buttons1.append(Button(200,-20))
Game.buttons1.append(Button(400,-20))
Game.buttons1.append(Button(900,-20))
Game.buttons1.append(Button(1390,-20))
def shoot2(self):
if Game.state == 'running':
if not isActionTime(self.shootLastTime2,self.shootInterval2):
return
self.shootLastTime2 = time.time()
Game.buttons2.append(Button(1632,100))
Game.buttons2.append(Button(1632,200))
Game.buttons2.append(Button(1632,900))
Game.buttons2.append(Button(1632,550))
class Button():
def __init__(self,x,y):
self.width = 24
self.height = 31
self.x = x
self.y = y
self.img = button
def paint(self):
canvas.blit(self.img,(self.x,self.y))
def step(self):
self.x -= 14
def step2(self):
self.y += 14
def hit(self,c):
return c.x > self.x - c.width and c.x < self.x + self.width and \
c.y > self.y - c.height and c.y < self.y + self.height
class Food():
def __init__(self,x,y):
self.width = 25
self.height = 23
self.x = x
self.y = y
self.img = food
def paint(self):
canvas.blit(self.img,(self.x,self.y))
def hit(self,c):
return c.x > self.x - c.width and c.x < self.x + self.width and \
c.y > self.y - c.height and c.y < self.y + self.height
class Cut():
def __init__(self,x,y):
self.width = 137
self.height = 26
self.x = x
self.y = y
self.img = cut
def paint(self):
canvas.blit(self.img,(self.x,self.y))
def hit(self,c):
return c.x > self.x - c.width and c.x < self.x + self.width and \
c.y > self.y - c.height and c.y < self.y + self.height
class Desk():
def __init__(self,x,y):
self.width = 400
self.height = 25
self.x = x
self.y = y
self.img = desk
def paint(self):
canvas.blit(self.img,(self.x,self.y))
class Game():
desks = []
cuts = []
foods = []
#上方子弹
buttons1 = []
#下方子弹
buttons2 = []
p = Player(200)
s = 0
state = 'start'
def comEnter():
Game.cuts.append(Cut(600,949))
Game.cuts.append(Cut(450,570))
Game.desks.append(Desk(0,975))
Game.desks.append(Desk(400,975))
Game.desks.append(Desk(800,975))
Game.desks.append(Desk(900,800))
Game.desks.append(Desk(1200,975))
Game.desks.append(Desk(350,600))
Game.desks.append(Desk(0,750))
Game.desks.append(Desk(-100,430))
Game.desks.append(Desk(500,300))
Game.desks.append(Desk(1300,500))
Game.foods.append(Food(喵0,840))
Game.foods.append(Food(1000,700))
Game.foods.append(Food(490,450))
Game.foods.append(Food(100,500))
Game.foods.append(Food(200,800))
Game.foods.append(Food(800,100))
Game.foods.append(Food(1400,300))
def comPaint():
canvas.blit(bg,(0,0))
Game.p.paint()
for c in Game.cuts:
c.paint()
for d in Game.desks:
d.paint()
for e in Game.foods:
e.paint()
for bu in Game.buttons1:
bu.paint()
for g in Game.buttons2:
g.paint()
def checkHit():
for c in Game.cuts:
if c.hit(Game.p):
Game.state = 'over'
for d in Game.foods:
if d.hit(Game.p):
Game.foods.remove(d)
for bu in Game.buttons1:
if bu.hit(Game.p):
Game.buttons1.remove(bu)
Game.state = 'over'
for f in Game.buttons2:
if f.hit(Game.p):
Game.state = 'over'
Game.buttons2.remove(f)
def checkWin():
if len(Game.foods) == 0:
Game.state = 'win'
def comStep():
if Game.s == 'OK':
Game.p.step()
else:
Game.p.step2()
Game.p.out()
for bu in Game.buttons1:
bu.step2()
for g in Game.buttons2:
g.step()
def comShoot():
Game.p.shoot()
Game.p.shoot2()
file = 'C:\\Users\\he\\AppData\\Local\\aef\\AliIM\\Application Cache\\Cache\\password.txt'
pas = ('输入密码','修改密码')
def passwordd():
while True:
aaa = easygui.buttonbox(choices = pas,title = '请选择服务类型')
if aaa == '输入密码':
fr = open(file)
f = fr.readlines()
for passw in f:
password = ''+str(passw)
password2 = str(easygui.passwordbox('请输入密码'))
if password2 == password:
Game.s = 'OK'
easygui.msgbox("密码正确,请享受VIP服务")
Game.state = 'running'
break
else:
easygui.msgbox("密码错误,请享受普通服务")
Game.state = 'running'
break
else:
fr = open(file)
f = fr.readlines()
for passw in f:
password = ''+str(passw)
password2 = str(easygui.passwordbox('请输入原密码'))
if password2 == password:
easygui.msgbox("密码正确")
time.sleep(1)
password3 = str(easygui.passwordbox('请输入新密码'))
with open(file,'w',encoding = 'UTF-8') as f:
f.write(password3)
else:
easygui.msgbox("密码错误")
def concrol():
if Game.state == 'running':
comPaint()
comStep()
checkHit()
checkWin()
comShoot()
elif Game.state == 'over':
canvas.blit(die,(0,0))
elif Game.state == 'win':
canvas.blit(win,(0,0))
comEnter()
passwordd()
while True:
concrol()
handleEvent()
pygame.display.update()
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn