用Pygame制作Undertale AU(我也是第一次)

前言

之前看CSDN关于Pygame的文章,所讲的制作的游戏都是像贪吃蛇之类的游戏。这次,我要挑战教程做Undertale AU。

制作准备

首先得下载Pygame,在cmd中输入以下指令:

pip install pygame

然后就等带它下载好。具体过程可以网上查,这里就不细讲了。

导入

这次我们需要三个库:Pygame(这个不用说了吧),sys(关闭后台),math(三角函数调用)

代码如下:

#导入
import pygame,sys,math

封装基本函数

精灵

这个嘛……首先,肯定要封装精灵类。精灵类是什么?就是相当于图形化编程的“精灵”的定义,总之就是很抽象。那么,接下来就让我们来封装吧。

初始化

一个精灵需要图片,坐标可上下左右边界,color_key等。所以,我们要将它们初始化:

    def __init__(self,path,init_x=0,init_y=0,color_key=(0,0,0)):
	    self.deg = 0
	    self.image = pygame.image.load(path)
	    self.image.set_colorkey(color_key)
	    self.x = init_x
	    self.y = init_y
	    self.rect = self.image.get_rect()
	    self.hei = self.rect.top - self.rect.bottom
	    self.wed = self.rect.right - self.rect.left
    	self.up = self.y
	    self.down = self.y-self.hei
	    self.left = self.x
	    self.right = self.x+self.wed
	    self.a = self.hei
	    self.b = self.wed

构造函数,初始化Player对象。接收图像路径、初始坐标和颜色键作为参数。设置了初始角度为0,并加载图像文件。使用颜色键将图像的指定颜色设置为透明色。初始化了位置和尺寸等属性。

Pygame用pygame.image.load()来加载图片,用color_key来设置要去掉的颜色,可以用颜色单词,也可以用RBG三元组(这里就是RBG)。

上面代码中get_rect是获取边界的方法。但为了提高运行速度,这里选择只调用一次,后续直接上下左右边界同时改变一个量就行了。

缩放函数
	def mag(self,a,b):
		self.image = pygame.transform.scale(self.image,(a,b))
		self.rect = self.image.get_rect()
		self.get()

 将图像缩放到指定的尺寸。通过调用pygame库的transform模块中的scale()方法来实现。根据指定的宽度和高度参数,将图像缩放到新的尺寸。更新了相应的属性。

其中a是图像缩放后的长度,b是是缩放后的宽度。这都不用记的,直接在网上查就可以了。

旋转函数
	def turn(self,deg,color_key=(0,0,0)):
		self.deg += deg
		self.image = pygame.transform.rotate(self.image,deg)
		self.image.set_colorkey(color_key)
		self.rect = self.image.get_rect()
		self.hei = self.rect.top - self.rect.bottom
		self.weg = self.rect.right - self.rect.left
		self.up = self.y
		self.down = self.y-self.hei
		self.left = self.x
		self.right = self.x+self.weg

 旋转图像指定的角度。通过调用pygame库的transform模块中的rotate()方法来实现。根据指定的角度参数,将图像旋转相应的角度。使用颜色键将指定颜色设置为透明色。更新了相应的属性。

但是,这有一个问题。就是要判定碰撞的话如果角度不是90度的倍数就没法判定了。具体原因等会儿再将(为什么不改?主要是懒得改了,这样也能用)

获取边界的坐标
	def get(self):
		self.hei = self.rect.top - self.rect.bottom
		self.wed = self.rect.right - self.rect.left
		self.up = self.y
		self.down = self.y-self.hei
		self.left = self.x
		self.right = self.x+self.wed

更新图像的属性。根据图像的当前状态和位置,更新了边界、高度和宽度等属性。

这个就不用说了吧,和初始化的一样,hei是图像(Rect)的高度,wed是宽度。这个应该能直接看懂的(注意,Pygame采用的是笛卡尔坐标系,x轴往右是正方向,y轴往下是正方向)。

更换造型函数
	def changeImage(self,path,color_key=(0,0,0)):
		self.image = pygame.image.load(path)
		self.image.set_colorkey(color_key)
		self.rect = self.image.get_rect()
		self.get()

这个和初始化一样,不细讲了。

渲染函数
	def put(self):
		screen.blit(self.image,(self.x,self.y))

更改图像。加载指定的图像文件,并使用颜色键将指定颜色设置为透明色。更新了相应的属性。

在屏幕上显示图像。使用screen.blit()方法将图像绘制在屏幕上,位置为当前位置。

精灵移动
	def move(self,m,n):
		self.x+=m
		self.y+=n
		self.get()

 移动位置。将当前位置的x和y坐标分别增加m和n,实现在指定方向上移动。

	def goto(self,x,y):
		self.x=x
		self.y=y
		self.get()

设置位置。将当前位置的x和y坐标设置为指定的坐标,实现位置的直接跳转。

	def fwd(self,deg,s):
		self.move(math.sin(math.radians(deg)) * s, math.cos(math.radians(deg)) * s)

向前移动。根据指定的角度和速度参数,计算出x和y方向上的位移量,并调用move()方法移动位置。计算x和y方向上的位移量时使用了三角函数sin和cos。

完整代码
class Player:
	def __init__(self,path,init_x=0,init_y=0,color_key=(0,0,0)):
		self.deg = 0
		self.image = pygame.image.load(path)
		self.image.set_colorkey(color_key)
		self.x = init_x
		self.y = init_y
		self.rect = self.image.get_rect()
		self.hei = self.rect.top - self.rect.bottom
		self.wed = self.rect.right - self.rect.left
		self.up = self.y
		self.down = self.y-self.hei
		self.left = self.x
		self.right = self.x+self.wed
		self.a = self.hei
		self.b = self.wed
	def mag(self,a,b):
		self.image = pygame.transform.scale(self.image,(a,b))
		self.rect = self.image.get_rect()
		self.get()
		#放大至
	def turn(self,deg,color_key=(0,0,0)):
		self.deg += deg
		self.image = pygame.transform.rotate(self.image,deg)
		self.image.set_colorkey(color_key)
		self.rect = self.image.get_rect()
		self.hei = self.rect.top - self.rect.bottom
		self.weg = self.rect.right - self.rect.left
		self.up = self.y
		self.down = self.y-self.hei
		self.left = self.x
		self.right = self.x+self.weg
	def get(self):
		self.hei = self.rect.top - self.rect.bottom
		self.wed = self.rect.right - self.rect.left
		self.up = self.y
		self.down = self.y-self.hei
		self.left = self.x
		self.right = self.x+self.wed
	def changeImage(self,path,color_key=(0,0,0)):
		self.image = pygame.image.load(path)
		self.image.set_colorkey(color_key)
		self.rect = self.image.get_rect()
		self.get()
	def put(self):
		screen.blit(self.image,(self.x,self.y))
	def move(self,m,n):
		self.x+=m
		self.y+=n
		self.get()
	def goto(self,x,y):
		self.x=x
		self.y=y
		self.get()
	def fwd(self,deg,s):
		self.move(math.sin(math.radians(deg)) * s, math.cos(math.radians(deg)) * s)

文字渲染函数

这个我是直接看着网上的教程做的。

#文字显示函数(仅支持英文)
def write(s,pos=(100,100),size=0.5,color=(0,0,0)):
	myfont = pygame.font.Font(None,60)
	a = myfont.render(str(s),True,color)
	b = new_text = pygame.transform.rotozoom(a,0,size)
	screen.blit(b,pos)
  • write(s, pos=(100,100), size=0.5, color=(0,0,0)): 函数的参数包括文字内容s、位置pos、大小size和颜色color。默认情况下,文字位置为(100,100),大小为0.5,颜色为黑色。

  • myfont = pygame.font.Font(None, 60): 创建一个字体对象myfont,使用pygame库的font模块中的Font类。字体文件路径设置为None,表示使用默认字体。字体大小为60。

  • a = myfont.render(str(s), True, color): 使用字体对象myfont的render()方法生成一个文字图像对象a。将传入的文字内容s转换为字符串形式,在屏幕上显示时记得转换后的内容。

  • b = new_text = pygame.transform.rotozoom(a, 0, size): 使用pygame库的transform模块中的rotozoom()方法,将文字图像对象a按照指定的缩放比例size进行缩放。角度参数设置为0,表示不进行旋转。将缩放后的图像对象赋值给变量b,并同时将其赋值给变量new_text。

  • screen.blit(b, pos): 使用screen.blit()方法将缩放后的文字图像b绘制在屏幕上,位置为pos。这样就在屏幕上显示了文字。

碰撞函数

def coll(a,b):
	 m = a.up<b.down and a.down>b.up
	 n = a.left<b.right and a.right>b.left
	 return m and n

很简单,就是之前力扣做到过的如何判断两个矩形有碰撞。

GB类

这个……玩过的都知道这是什么玩意……

class Gb:
	def __init__(self):
		self.Flag = True
		self.cnt=0
		self.deg = 0
		self.flag = False
		self.line = Player("GB3.jpg")
		self.GB = Player("GB1.jpg")
		self.GB.goto(100,100)
		self.GB.mag(100,100)
		self.target_x = 0
		self.target_y = 0
	def set_target(self,x,y,deg,isset=True):
		playSound("shoot1.wav")
		self.target_x,self.target_y=x,y
		if isset:
			self.deg = deg
		self.GB.turn(deg)
	def move(self):
		if not (abs(self.GB.x-self.target_x)<1 and abs(self.GB.y-self.target_y)<1):
			self.GB.move(-(self.GB.x-self.target_x)*0.02,-(self.GB.y-self.target_y)*0.02)
		else:
			self.GB.goto(self.target_x,self.target_y)
	def put(self):
		global hp
		if self.Flag:
			self.GB.put()
			if self.flag:
				self.line.put()
	def shoot(self):
		global hp,jud
		if self.cnt == 0:
			playSound("shoot2.wav")
			self.flag = True
			self.GB.changeImage("GB2.jpg")
			self.GB.mag(100,100)
			self.GB.turn(self.deg)
			self.line.turn(self.deg)
			self.line.goto(self.target_x,self.target_y)
			self.line.fwd(-self.deg+90,30)
			self.line.fwd(-self.deg,1300)
			self.cnt += 1
		elif self.cnt < 150:
			self.cnt += 1
			self.GB.fwd(self.deg,4)
			self.line.fwd(self.deg,4)
			if coll(self.line,jud):
				hp -= 0.25
				playSound("hurtsound.wav")
		else:
			self.Flag = False
  • __init__ 方法用于初始化 Gb 对象的各种属性,包括位置、图像、目标坐标等。
  • set_target 方法设置 Gb 对象的目标坐标和旋转角度。它还播放一个音效。
  • move 方法将 Gb 对象移动到目标坐标。
  • put 方法通过调用与其关联的 Player 对象的 put 方法,将 Gb 对象放置在游戏屏幕上。
  • shoot 方法模拟 Gb 对象的射击行为。它更改 Gb 对象的图像,移动它和与之关联的 Player 对象,并检查与名为 jud 的另一个对象的碰撞。

(写不下去了。。。)


决心移动函数


def move_heart(color):
	global move_speed,keys,heart,jud
	if color == "red":
		if keys[pygame.K_UP] and heart.y>kuang.y:heart.move(0,-0.5)
		if keys[pygame.K_DOWN] and heart.y<kuang.y+200:heart.move(0,0.5)
		if keys[pygame.K_LEFT] and heart.x>kuang.x:heart.move(-0.5,0)
		if keys[pygame.K_RIGHT] and heart.x<kuang.x+200:heart.move(0.5,0)
	if color == "blue":
		if keys[pygame.K_LEFT] and heart.x>kuang.x:heart.move(-0.5,0)
		if keys[pygame.K_RIGHT] and heart.x<kuang.x+200:heart.move(0.5,0)
		if move_speed == 2:
			if keys[pygame.K_UP]:
				move_speed -= 0.01
		elif move_speed > 0:
			if keys[pygame.K_UP]:
				heart.move(0,-move_speed)
				move_speed -= 0.01
			else:
				move_speed = 0
		elif heart.y<580:
			heart.move(0,-move_speed)
			move_speed -= 0.01

		else:
			move_speed = 2
	jud.goto((heart.left+heart.right)/2,(heart.up+heart.down)/2)

jud用了中点公式。。。

刷新函数

def ud():
	global hp
	pygame.display.flip()
	for event in pygame.event.get():
		if event.type == pygame.QUIT:
			say(".................")
			pygame.quit()
			sys.exit()
			say("Naive, you really think you can turn me off")
	if hp<=0:
		pygame.quit()
		sys.exit()

...本来这个退出很变态的,改了一下

说话函数

keys = pygame.key.get_pressed()
def say(text,text_pos = (570,40)):
	global cnt
	l = len(text)
	step = -1
	a = 0
	l = len(text)
	while step <= l:
		if a%10==0:
			playSound("voice.wav")
		screen.fill((0, 0, 0))
		talk.put()
		kuang.put()
		put_hp()
		Ink_Sans["leg"].put()
		Ink_Sans["body"].put()
		Ink_Sans["head"].put()
		heart.put()
		draw_xt()
		xxk.put()
		cnt += 1
		if cnt<500:
			Ink_Sans["head"].move(0,cnt/(delta*1.5))
			Ink_Sans["body"].move(0,cnt/(delta<<1))
		elif cnt>500 and cnt<1000:
			Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
			Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
		elif cnt==1000:
			cnt = 0
		step+=0.2
		a+=1
		Say(text[:int(step)],text_pos)
		#move_heart("red")
		ud()
	keys = pygame.key.get_pressed()
	while not keys[pygame.K_z]:
		screen.fill((0, 0, 0))
		put_hp()
		draw_xt()
		talk.put()
		heart.put()
		kuang.put()
		xxk.put()
		Ink_Sans["leg"].put()
		Ink_Sans["body"].put()
		Ink_Sans["head"].put()
		cnt += 1
		if cnt<500:
			Ink_Sans["head"].move(0,cnt/(delta*1.5))
			Ink_Sans["body"].move(0,cnt/(delta<<1))
		elif cnt>500 and cnt<1000:
			Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
			Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
		elif cnt==1000:
			cnt = 0
		Say(str(text),text_pos)
		#move_heart("red")
		keys = pygame.key.get_pressed()
		ud()
	while keys[pygame.K_z]:
		screen.fill((0, 0, 0))
		xxk.put()
		talk.put()
		kuang.put()
		put_hp()
		Ink_Sans["leg"].put()
		Ink_Sans["body"].put()
		Ink_Sans["head"].put()
		draw_xt()
		heart.put()
		cnt += 1
		if cnt<500:
			Ink_Sans["head"].move(0,cnt/(delta*1.5))
			Ink_Sans["body"].move(0,cnt/(delta<<1))
		elif cnt>500 and cnt<1000:
			Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
			Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
		elif cnt==1000:
			cnt = 0
		Say(text,text_pos)
		#move_heart("red")
		keys = pygame.key.get_pressed()
		ud()
  • 首先,使用 pygame.key.get_pressed() 函数获取当前键盘按键的状态,并将其存储在 keys 变量中。
  • 然后,通过调用 say 函数来显示一段文本,文本内容存储在 text 变量中。say 函数根据文本的长度和 step 变量来逐步显示文本,并播放声音。
  • 在 while 循环中,检查按下的键是否为 Z 键。如果不是,则继续显示对话框和其他游戏元素。该循环用于等待玩家按下 Z 键结束对话。
  • 在按下 Z 键后,进入第二个 while 循环中。该循环用于等待玩家释放 Z 键,同时继续显示对话框和其他游戏元素。
  • 在两个 while 循环中,代码还会更新角色的动画,显示血条和其他游戏元素。

算了,完整代码附上

#导入
import pygame,sys,math

#初始化
pygame.init()
size = (1000,800)#宽和高
global screen
global hp
screen = pygame.display.set_mode(size)#创建窗口
pygame.display.set_caption("Ink!Sans fight")#设置标题

def playSound(src):
	a = pygame.mixer.Sound(src)
	a.play()

#角色导入函数
class Player:
	def __init__(self,path,init_x=0,init_y=0,color_key=(0,0,0)):
		self.deg = 0
		self.image = pygame.image.load(path)
		self.image.set_colorkey(color_key)
		self.x = init_x
		self.y = init_y
		self.rect = self.image.get_rect()
		self.hei = self.rect.top - self.rect.bottom
		self.wed = self.rect.right - self.rect.left
		self.up = self.y
		self.down = self.y-self.hei
		self.left = self.x
		self.right = self.x+self.wed
		self.a = self.hei
		self.b = self.wed
	def mag(self,a,b):
		self.image = pygame.transform.scale(self.image,(a,b))
		self.rect = self.image.get_rect()
		self.get()
		#放大至
	def turn(self,deg,color_key=(0,0,0)):
		self.deg += deg
		self.image = pygame.transform.rotate(self.image,deg)
		self.image.set_colorkey(color_key)
		self.rect = self.image.get_rect()
		self.hei = self.rect.top - self.rect.bottom
		self.weg = self.rect.right - self.rect.left
		self.up = self.y
		self.down = self.y-self.hei
		self.left = self.x
		self.right = self.x+self.weg
	def get(self):
		self.hei = self.rect.top - self.rect.bottom
		self.wed = self.rect.right - self.rect.left
		self.up = self.y
		self.down = self.y-self.hei
		self.left = self.x
		self.right = self.x+self.wed
	def changeImage(self,path,color_key=(0,0,0)):
		self.image = pygame.image.load(path)
		self.image.set_colorkey(color_key)
		self.rect = self.image.get_rect()
		self.get()
	def put(self):
		screen.blit(self.image,(self.x,self.y))
	def move(self,m,n):
		self.x+=m
		self.y+=n
		self.get()
	def goto(self,x,y):
		self.x=x
		self.y=y
		self.get()
	def fwd(self,deg,s):
		self.move(math.sin(math.radians(deg)) * s, math.cos(math.radians(deg)) * s)
#文字显示函数(仅支持英文)
def write(s,pos=(100,100),size=0.5,color=(0,0,0)):
	myfont = pygame.font.Font(None,60)
	a = myfont.render(str(s),True,color)
	b = new_text = pygame.transform.rotozoom(a,0,size)
	screen.blit(b,pos)
#检测碰撞函数
global hp
global coll
def coll(a,b):
	 m = a.up<b.down and a.down>b.up
	 n = a.left<b.right and a.right>b.left
	 return m and n
hp=92
#结尾刷新函数


#播放音乐函数
def playMusic(path):
	pygame.mixer.init()
	pygame.mixer.music.load(path)
	pygame.mixer.music.play(-1)


#设定帧数
clock = pygame.time.Clock()
clock.tick(115)#故意的


#自定义设定
global jud
jud = Player("jud.png")
xxk = Player("0.png")
xxk.goto(130,700)
xxk.mag(700,60)

heart = Player("heart1.png",init_x=500,init_y=500)
heart.mag(32,32)

Ink_Sans = {
	"head" : Player("head.png"),
	"body" : Player("body.png"),
	"leg" : Player("leg.png")
}
kuang = Player("kuang0.png")
kuang.goto(350,380)


bones = []
step = 0

fight_box = Player("Fight_box0.png")
fight_box.goto(270,400)

global show_hp
show_hp = [Player("hp9.png"),Player("hp9.png")]
show_hp[0].goto(674,647)
show_hp[1].goto(700,647)

slice = Player("slice1.png")
slice.goto(480,170)

def put_hp():
	show_hp[0].changeImage("hp"+str(int(hp//10))+".png")
	show_hp[1].changeImage("hp"+str(int(hp%10))+".png")
	show_hp[0].mag(23,32)
	show_hp[1].mag(23,32)
	show_hp[0].put()
	show_hp[1].put()


class Gb:
	def __init__(self):
		self.Flag = True
		self.cnt=0
		self.deg = 0
		self.flag = False
		self.line = Player("GB3.jpg")
		self.GB = Player("GB1.jpg")
		self.GB.goto(100,100)
		self.GB.mag(100,100)
		self.target_x = 0
		self.target_y = 0
	def set_target(self,x,y,deg,isset=True):
		playSound("shoot1.wav")
		self.target_x,self.target_y=x,y
		if isset:
			self.deg = deg
		self.GB.turn(deg)
	def move(self):
		if not (abs(self.GB.x-self.target_x)<1 and abs(self.GB.y-self.target_y)<1):
			self.GB.move(-(self.GB.x-self.target_x)*0.02,-(self.GB.y-self.target_y)*0.02)
		else:
			self.GB.goto(self.target_x,self.target_y)
	def put(self):
		global hp
		if self.Flag:
			self.GB.put()
			if self.flag:
				self.line.put()
	def shoot(self):
		global hp,jud
		if self.cnt == 0:
			playSound("shoot2.wav")
			self.flag = True
			self.GB.changeImage("GB2.jpg")
			self.GB.mag(100,100)
			self.GB.turn(self.deg)
			self.line.turn(self.deg)
			self.line.goto(self.target_x,self.target_y)
			self.line.fwd(-self.deg+90,30)
			self.line.fwd(-self.deg,1300)
			self.cnt += 1
		elif self.cnt < 150:
			self.cnt += 1
			self.GB.fwd(self.deg,4)
			self.line.fwd(self.deg,4)
			if coll(self.line,jud):
				hp -= 0.25
				playSound("hurtsound.wav")
		else:
			self.Flag = False

delta = 5000
global flag
global keys
#循环条件变量
flag = True
fight = Player("fight0.png")
fight.mag(20,200)
Sans = Player("Sans.gif")

move_speed = 0

def move_heart(color):
	global move_speed,keys,heart,jud
	if color == "red":
		if keys[pygame.K_UP] and heart.y>kuang.y:heart.move(0,-0.5)
		if keys[pygame.K_DOWN] and heart.y<kuang.y+200:heart.move(0,0.5)
		if keys[pygame.K_LEFT] and heart.x>kuang.x:heart.move(-0.5,0)
		if keys[pygame.K_RIGHT] and heart.x<kuang.x+200:heart.move(0.5,0)
	if color == "blue":
		if keys[pygame.K_LEFT] and heart.x>kuang.x:heart.move(-0.5,0)
		if keys[pygame.K_RIGHT] and heart.x<kuang.x+200:heart.move(0.5,0)
		if move_speed == 2:
			if keys[pygame.K_UP]:
				move_speed -= 0.01
		elif move_speed > 0:
			if keys[pygame.K_UP]:
				heart.move(0,-move_speed)
				move_speed -= 0.01
			else:
				move_speed = 0
		elif heart.y<580:
			heart.move(0,-move_speed)
			move_speed -= 0.01

		else:
			move_speed = 2
	jud.goto((heart.left+heart.right)/2,(heart.up+heart.down)/2)

def ud():
	global hp
	pygame.display.flip()
	for event in pygame.event.get():
		if event.type == pygame.QUIT:
			say(".................")
			pygame.quit()
			sys.exit()
			say("Naive, you really think you can turn me off")
	if hp<=0:
		pygame.quit()
		sys.exit()

global cnt
cnt = 0
def Say(saytext,pos,color=(0,0,0),max_len=20,si=0.5):
	x,y=pos[0],pos[1]
	st = ""
	cnt = 0
	l = len(saytext)
	for i in range(l):
		st+=saytext[i]
		if (i+1)%(max_len+1)==0 or i==l-1:
			write(st,(x,y+cnt*40*si),size=si,color=color)
			st=""
			cnt += 1
keys = pygame.key.get_pressed()
def say(text,text_pos = (570,40)):
	global cnt
	l = len(text)
	step = -1
	a = 0
	l = len(text)
	while step <= l:
		if a%10==0:
			playSound("voice.wav")
		screen.fill((0, 0, 0))
		talk.put()
		kuang.put()
		put_hp()
		Ink_Sans["leg"].put()
		Ink_Sans["body"].put()
		Ink_Sans["head"].put()
		heart.put()
		draw_xt()
		xxk.put()
		cnt += 1
		if cnt<500:
			Ink_Sans["head"].move(0,cnt/(delta*1.5))
			Ink_Sans["body"].move(0,cnt/(delta<<1))
		elif cnt>500 and cnt<1000:
			Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
			Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
		elif cnt==1000:
			cnt = 0
		step+=0.2
		a+=1
		Say(text[:int(step)],text_pos)
		#move_heart("red")
		ud()
	keys = pygame.key.get_pressed()
	while not keys[pygame.K_z]:
		screen.fill((0, 0, 0))
		put_hp()
		draw_xt()
		talk.put()
		heart.put()
		kuang.put()
		xxk.put()
		Ink_Sans["leg"].put()
		Ink_Sans["body"].put()
		Ink_Sans["head"].put()
		cnt += 1
		if cnt<500:
			Ink_Sans["head"].move(0,cnt/(delta*1.5))
			Ink_Sans["body"].move(0,cnt/(delta<<1))
		elif cnt>500 and cnt<1000:
			Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
			Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
		elif cnt==1000:
			cnt = 0
		Say(str(text),text_pos)
		#move_heart("red")
		keys = pygame.key.get_pressed()
		ud()
	while keys[pygame.K_z]:
		screen.fill((0, 0, 0))
		xxk.put()
		talk.put()
		kuang.put()
		put_hp()
		Ink_Sans["leg"].put()
		Ink_Sans["body"].put()
		Ink_Sans["head"].put()
		draw_xt()
		heart.put()
		cnt += 1
		if cnt<500:
			Ink_Sans["head"].move(0,cnt/(delta*1.5))
			Ink_Sans["body"].move(0,cnt/(delta<<1))
		elif cnt>500 and cnt<1000:
			Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
			Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
		elif cnt==1000:
			cnt = 0
		Say(text,text_pos)
		#move_heart("red")
		keys = pygame.key.get_pressed()
		ud()
global xt
xt = {
	"zhe":Player("Lv.png",color_key=(255,0,0),init_x=80,init_y=640),
	"di":Player("xt3.png",init_x=459,init_y=650),
	"xt":Player("xt2.png",init_x=420,init_y=650)
}

xt["zhe"].mag(800,45)
xt["di"].mag(180,35)
xt["xt"].mag(180,35)
def draw_xt():
	xt["xt"].goto(hp*1.5+321,650)
	xt["di"].put()
	xt["xt"].put()
	xt["zhe"].put()

talk = Player("talk.png",530,00)

Ink_Sans["head"].goto(440,100)
Ink_Sans["body"].goto(395,130)
Ink_Sans["leg"].goto(430,215)


#说话

say("Kid...")

say("You know that,None of this is quite right...")

say("Well, I know, it's all your doing")

say("Unless I do something, you're not going back")

say("Then let this never-ending battle begin")

gb  = Gb()
gb.set_target(650,470,90)

Sans.goto(400,132)

for i in range(50):
	screen.fill((0, 0, 0))
	xxk.put()
	kuang.put()
	put_hp()
	heart.put()
	#Sans.put()
	Ink_Sans["leg"].put()
	Ink_Sans["body"].put()
	Ink_Sans["head"].put()
	draw_xt()
	cnt += 1
	Ink_Sans["head"].move(-1,0)
	Ink_Sans["body"].move(-1,0)
	Ink_Sans["leg"].move(-1,0)
	if cnt<500:
		Ink_Sans["head"].move(0,cnt/(delta*1.5))
		Ink_Sans["body"].move(0,cnt/(delta<<1))
	elif cnt>500 and cnt<1000:
		Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
		Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
	elif cnt==1000:
		cnt = 0
	keys = pygame.key.get_pressed()

	if keys[pygame.K_UP] and heart.y>kuang.y:heart.move(0,-0.5)
	if keys[pygame.K_DOWN] and heart.y<kuang.y+200:heart.move(0,0.5)
	if keys[pygame.K_LEFT] and heart.x>kuang.x:heart.move(-0.5,0)
	if keys[pygame.K_RIGHT] and heart.x<kuang.x+200:heart.move(0.5,0)
	ud()
for i in range(50):
	screen.fill((0, 0, 0))
	xxk.put()
	kuang.put()
	heart.put()
	Sans.put()
	put_hp()
	Sans.move(1.5,0)
	Ink_Sans["leg"].put()
	Ink_Sans["body"].put()
	Ink_Sans["head"].put()
	draw_xt()
	cnt += 1
	Ink_Sans["head"].move(-1,0)
	Ink_Sans["body"].move(-1,0)
	Ink_Sans["leg"].move(-1,0)
	if cnt<500:
		Ink_Sans["head"].move(0,cnt/(delta*1.5))
		Ink_Sans["body"].move(0,cnt/(delta<<1))
	elif cnt>500 and cnt<1000:
		Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
		Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
	elif cnt==1000:
		cnt = 0
	keys = pygame.key.get_pressed()
	if keys[pygame.K_UP] and heart.y>kuang.y:heart.move(0,-0.5)
	if keys[pygame.K_DOWN] and heart.y<kuang.y+200:heart.move(0,0.5)
	if keys[pygame.K_LEFT] and heart.x>kuang.x:heart.move(-0.5,0)
	if keys[pygame.K_RIGHT] and heart.x<kuang.x+200:heart.move(0.5,0)
	ud()
#heart.changeImage("heart2.png")
while flag:
	'''
	if hp<=10:
		hp=100 #锁血
		'''
	screen.fill((0, 0, 0))
	#hp = 5
	gb.put()
	xxk.put()
	kuang.put()
	heart.put()
	Sans.put()
	put_hp()
	Ink_Sans["leg"].put()
	Ink_Sans["body"].put()
	Ink_Sans["head"].put()
	draw_xt()
	cnt += 1
	if cnt<500:
		Ink_Sans["head"].move(0,cnt/(delta*1.5))
		Ink_Sans["body"].move(0,cnt/(delta<<1))
	elif cnt>500 and cnt<1000:
		Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
		Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
	elif cnt==1000:
		cnt = 0
	keys = pygame.key.get_pressed()
	'''
	if keys[pygame.K_UP] and heart.y>kuang.y:heart.move(0,-0.5)
	if keys[pygame.K_DOWN] and heart.y<kuang.y+200:heart.move(0,0.5)
	if keys[pygame.K_LEFT] and heart.x>kuang.x:heart.move(-0.5,0)
	if keys[pygame.K_RIGHT] and heart.x<kuang.x+200:heart.move(0.5,0)
	jud.goto((heart.left+heart.right)/2,(heart.up+heart.down)/2)
	'''
	move_heart("red")
	jud.goto((heart.left+heart.right)/2,(heart.up+heart.down)/2)
	step+=1
	if step == 1:
		playSound("bone.wav")
		for i in range(10):
			bones.append(Player("bone2.png"))
			bones[i].goto(-200*i,503)
		for i in range(10,20):
			bones.append(Player("bone2.png"))
			bones[i].goto(200*i-1000,383)
			bones[i].turn(180)
	if step < 2200:
		gb.move()
		for i in range(10):
			bones[i].move(1.2,0)
			bones[i].put()
			if coll(bones[i],jud):
				hp-=0.5
				playSound("hurtsound.wav")
		for i in range(10,20):
			bones[i].move(-1.2,0)
			#bones[i].turn(2)
			bones[i].put()
			if coll(bones[i],jud):
				hp-=0.5
				playSound("hurtsound.wav")
	elif step<2700:
		gb.shoot()
	else:
		flag = False
	ud()
GBs = list()
global ground


for i in range(100):
	screen.fill((0, 0, 0))
    #write("hp")
	kuang.put()
	xxk.put()
	heart.put()
	put_hp()
	#Sans.put()
	Ink_Sans["leg"].put()
	Ink_Sans["body"].put()
	Ink_Sans["head"].put()
	draw_xt()
	cnt += 1
	Ink_Sans["head"].move(1,0)
	Ink_Sans["body"].move(1,0)
	Ink_Sans["leg"].move(1,0)
	if cnt<500:
		Ink_Sans["head"].move(0,cnt/(delta*1.5))
		Ink_Sans["body"].move(0,cnt/(delta<<1))
	elif cnt>500 and cnt<1000:
		Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
		Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
	elif cnt==1000:
		cnt = 0
	keys = pygame.key.get_pressed()
	if keys[pygame.K_UP] and heart.y>kuang.y:heart.move(0,-0.5)
	if keys[pygame.K_DOWN] and heart.y<kuang.y+200:heart.move(0,0.5)
	if keys[pygame.K_LEFT] and heart.x>kuang.x:heart.move(-0.5,0)
	if keys[pygame.K_RIGHT] and heart.x<kuang.x+200:heart.move(0.5,0)
	ud()
Ink_Sans["head"].changeImage("head2.png")
say("hahaha,release the water.....")

say("Don't try to get closer, or you'll be baptized with fireworks")

ground = 0

xx = 1
key_flag = True
playMusic("bgm.mp3")
Ink_Sans["head"].changeImage("head3.png")
while True:
	ground += 1
	flag = True
	cng = 0
	kuang.goto(350,380)
	while cng<35:
		screen.fill((0, 0, 0))
		#Sans.put()
		kuang.put()
		put_hp()
		xxk.put()
		Ink_Sans["leg"].put()
		Ink_Sans["body"].put()
		Ink_Sans["head"].put()
		draw_xt()
		cnt += 1
		if cnt < 500:
			Ink_Sans["head"].move(0,cnt/(delta*1.5))
			Ink_Sans["body"].move(0,cnt/(delta<<1))
		elif cnt > 500 and cnt < 1000:
			Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
			Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
		elif cnt == 1000:
			cnt = 0
		cng+=1
		kuang.changeImage("kuang"+str(int(cng/5))+".png")
		if cng%5==0:
			kuang.move(-40,0)
		ud()

	write_text = "*The gaze of the abyss... ..."
	write_cnt = 0
	l = len(write_text)
	while keys[pygame.K_z]:

		screen.fill((0, 0, 0))
		#Sans.put()
		kuang.put()
		xxk.put()
		put_hp()
		heart.put()
		Ink_Sans["leg"].put()
		Ink_Sans["body"].put()
		Ink_Sans["head"].put()
		draw_xt()
		cnt += 1
		if cnt < 500:
			Ink_Sans["head"].move(0,cnt/(delta*1.5))
			Ink_Sans["body"].move(0,cnt/(delta<<1))
		elif cnt > 500 and cnt < 1000:
			Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
			Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
		elif cnt == 1000:
			cnt = 0
		keys = pygame.key.get_pressed()
		if keys[pygame.K_LEFT]:
			if key_flag:
				if xx==1:
					xx=4
				else:
					xx-=1
				playSound("click1.wav")
			key_flag = False
		elif keys[pygame.K_RIGHT]:
			if key_flag:
				if xx==4:
					xx=1
				else:
					xx+=1
				playSound("click1.wav")
			key_flag = False
		else:
			key_flag = True
		xxk.changeImage(str(xx)+".png")
		xxk.mag(700,60)
		heart.goto(140+(xx-1)*178,716)
		if write_cnt<l*10:
			if write_cnt%20==0:
				playSound("write.wav")
			Say(write_text[:int(write_cnt/10)],pos=(100,400),color=(255,255,255),max_len=40,si=1)
			write_cnt+=1
		else:
			Say(write_text,pos=(100,400),color=(255,255,255),max_len=40,si = 1.0)
		ud()

	while not keys[pygame.K_z]:

		screen.fill((0, 0, 0))
		#Sans.put()
		kuang.put()
		xxk.put()
		heart.put()
		put_hp()
		Ink_Sans["leg"].put()
		Ink_Sans["body"].put()
		Ink_Sans["head"].put()
		draw_xt()
		cnt += 1
		if cnt < 500:
			Ink_Sans["head"].move(0,cnt/(delta*1.5))
			Ink_Sans["body"].move(0,cnt/(delta<<1))
		elif cnt > 500 and cnt < 1000:
			Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
			Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
		elif cnt == 1000:
			cnt = 0
		keys = pygame.key.get_pressed()
		if keys[pygame.K_LEFT]:
			if key_flag:
				if xx==1:
					xx=4
				else:
					xx-=1
				playSound("click1.wav")
			key_flag = False
		elif keys[pygame.K_RIGHT]:
			if key_flag:
				if xx==4:
					xx=1
				else:
					xx+=1
				playSound("click1.wav")
			key_flag = False
		else:
			key_flag = True
		xxk.changeImage(str(xx)+".png")
		xxk.mag(700,60)
		heart.goto(140+(xx-1)*178,716)
		if write_cnt<l*10:
			if write_cnt%20==0:
				playSound("write.wav")
			Say(write_text[:int(write_cnt/10)],pos=(100,400),color=(255,255,255),max_len=40,si=1)
			write_cnt+=1
		else:
			Say(write_text,pos=(100,400),color=(255,255,255),max_len=40,si = 1.0)
		ud()
	playSound("click2.wav")
	if xx==4:
		write_text = "*Do you really want to do it?"
		write_cnt = 0
		l = len(write_text)
		while keys[pygame.K_z]:
			keys = pygame.key.get_pressed()
			screen.fill((0, 0, 0))
			#Sans.put()
			kuang.put()
			xxk.put()
			put_hp()
			#heart.put()
			Ink_Sans["leg"].put()
			Ink_Sans["body"].put()
			Ink_Sans["head"].put()
			draw_xt()
			cnt += 1
			if cnt < 500:
				Ink_Sans["head"].move(0,cnt/(delta*1.5))
				Ink_Sans["body"].move(0,cnt/(delta<<1))
			elif cnt > 500 and cnt < 1000:
				Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
				Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
			elif cnt == 1000:
				cnt = 0
			if write_cnt<l*10:
				if write_cnt%20==0:
					playSound("write.wav")
				Say(write_text[:int(write_cnt/10)],pos=(100,400),color=(255,255,255),max_len=35,si=1)
				write_cnt+=1
			else:
				Say(write_text,pos=(100,400),color=(255,255,255),max_len=35,si = 1.0)
			ud()
		while not keys[pygame.K_z]:
			keys = pygame.key.get_pressed()
			screen.fill((0, 0, 0))
			#Sans.put()
			kuang.put()
			xxk.put()
			put_hp()
			#heart.put()
			Ink_Sans["leg"].put()
			Ink_Sans["body"].put()
			Ink_Sans["head"].put()
			draw_xt()
			cnt += 1
			if cnt < 500:
				Ink_Sans["head"].move(0,cnt/(delta*1.5))
				Ink_Sans["body"].move(0,cnt/(delta<<1))
			elif cnt > 500 and cnt < 1000:
				Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
				Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
			elif cnt == 1000:
				cnt = 0
			if write_cnt<l*10:
				if write_cnt%20==0:
					playSound("write.wav")
				Say(write_text[:int(write_cnt/10)],pos=(100,400),color=(255,255,255),max_len=35,si=1)
				write_cnt+=1
			else:
				Say(write_text,pos=(100,400),color=(255,255,255),max_len=35,si = 1.0)
			ud()
		write_text = "*Let go of your hypocritical kindness!"
		write_cnt = 0
		l = len(write_text)
		while keys[pygame.K_z]:
			keys = pygame.key.get_pressed()
			screen.fill((0, 0, 0))
			#Sans.put()
			kuang.put()
			xxk.put()
			put_hp()
			#heart.put()
			Ink_Sans["leg"].put()
			Ink_Sans["body"].put()
			Ink_Sans["head"].put()
			draw_xt()
			cnt += 1
			if cnt < 500:
				Ink_Sans["head"].move(0,cnt/(delta*1.5))
				Ink_Sans["body"].move(0,cnt/(delta<<1))
			elif cnt > 500 and cnt < 1000:
				Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
				Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
			elif cnt == 1000:
				cnt = 0
			if write_cnt<l*10:
				if write_cnt%20==0:
					playSound("write.wav")
				Say(write_text[:int(write_cnt/10)],pos=(100,400),color=(255,0,0),max_len=35,si=1)
				write_cnt+=1
			else:
				Say(write_text,pos=(100,400),color=(255,0,0),max_len=35,si = 1.0)
			ud()
		while not keys[pygame.K_z]:
			keys = pygame.key.get_pressed()
			screen.fill((0, 0, 0))
			#Sans.put()
			kuang.put()
			xxk.put()
			put_hp()
			#heart.put()
			Ink_Sans["leg"].put()
			Ink_Sans["body"].put()
			Ink_Sans["head"].put()
			draw_xt()
			cnt += 1
			if cnt < 500:
				Ink_Sans["head"].move(0,cnt/(delta*1.5))
				Ink_Sans["body"].move(0,cnt/(delta<<1))
			elif cnt > 500 and cnt < 1000:
				Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
				Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
			elif cnt == 1000:
				cnt = 0
			if write_cnt<l*10:
				if write_cnt%20==0:
					playSound("write.wav")
				Say(write_text[:int(write_cnt/10)],pos=(100,400),color=(255,0,0),max_len=35,si=1)
				write_cnt+=1
			else:
				Say(write_text,pos=(100,400),color=(255,0,0),max_len=35,si = 1.0)
			ud()
	elif xx==1:
		heart.goto(100,400)
		while keys[pygame.K_z]:
			screen.fill((0, 0, 0))
			xxk.put()
			kuang.put()
			put_hp()
			Ink_Sans["leg"].put()
			Ink_Sans["body"].put()
			Ink_Sans["head"].put()
			draw_xt()
			heart.put()
			cnt += 1
			if cnt<500:
				Ink_Sans["head"].move(0,cnt/(delta*1.5))
				Ink_Sans["body"].move(0,cnt/(delta<<1))
			elif cnt>500 and cnt<1000:
				Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
				Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
			elif cnt==1000:
				cnt = 0
			write("    *Ink!Sans",pos=(100,400),color=(255,255,255),size=1)
			keys = pygame.key.get_pressed()
			ud()
		while not keys[pygame.K_z]:
			screen.fill((0, 0, 0))
			xxk.put()
			kuang.put()
			put_hp()
			Ink_Sans["leg"].put()
			Ink_Sans["body"].put()
			Ink_Sans["head"].put()
			draw_xt()
			heart.put()
			cnt += 1
			if cnt<500:
				Ink_Sans["head"].move(0,cnt/(delta*1.5))
				Ink_Sans["body"].move(0,cnt/(delta<<1))
			elif cnt>500 and cnt<1000:
				Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
				Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
			elif cnt==1000:
				cnt = 0
			write("    *Ink!Sans",pos=(100,400),color=(255,255,255),size=1)
			keys = pygame.key.get_pressed()
			ud()
		playSound("click2.wav")
		fight_box.goto(300,400)
		while cng<=60:
			screen.fill((0, 0, 0))
			#Sans.put()
			kuang.put()
			put_hp()
			fight_box.put()

			xxk.put()
			Ink_Sans["leg"].put()
			Ink_Sans["body"].put()
			Ink_Sans["head"].put()
			draw_xt()
			cnt += 1
			if cnt < 500:
				Ink_Sans["head"].move(0,cnt/(delta*1.5))
				Ink_Sans["body"].move(0,cnt/(delta<<1))
			elif cnt > 500 and cnt < 1000:
				Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
				Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
			elif cnt == 1000:
				cnt = 0
			cng+=1
			fight_box.changeImage("Fight_box"+str(12-int(cng/5))+".png")
			fight_box.mag(50*int(cng/5),200)
			if cng%5==0:
				fight_box.move(-20,0)
			ud()
		fight.goto(100,400)
		while keys[pygame.K_z] and fight.x<900:
			screen.fill((0, 0, 0))
			xxk.put()
			kuang.put()
			put_hp()
			
			fight_box.put()
			fight.put()
			Ink_Sans["leg"].put()
			Ink_Sans["body"].put()
			Ink_Sans["head"].put()
			draw_xt()
			#heart.put()
			fight.move(2,0)
			cnt += 1
			if cnt<500:
				Ink_Sans["head"].move(0,cnt/(delta*1.5))
				Ink_Sans["body"].move(0,cnt/(delta<<1))
			elif cnt>500 and cnt<1000:
				Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
				Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
			elif cnt==1000:
				cnt = 0
			keys = pygame.key.get_pressed()
			ud()
		while not keys[pygame.K_z] and fight.x<900:
			screen.fill((0, 0, 0))
			xxk.put()
			kuang.put()
			put_hp()
			
			fight_box.put()
			fight.put()
			Ink_Sans["leg"].put()
			Ink_Sans["body"].put()
			Ink_Sans["head"].put()
			draw_xt()
			#heart.put()
			fight.move(2,0)
			cnt += 1
			if cnt<500:
				Ink_Sans["head"].move(0,cnt/(delta*1.5))
				Ink_Sans["body"].move(0,cnt/(delta<<1))
			elif cnt>500 and cnt<1000:
				Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
				Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
			elif cnt==1000:
				cnt = 0
			keys = pygame.key.get_pressed()
			ud()
		cng = 25
		playSound("swipe.wav")
		for i in range(70):
			screen.fill((0, 0, 0))
		    #write("hp")
			kuang.put()
			xxk.put()
			fight_box.put()
			fight.put()
			fight.changeImage("fight"+str((i%35)&1)+".png",color_key=(1,0,0))
			slice.changeImage("slice"+str(cng//25)+".png",color_key=(1,0,0))
			fight.mag(20,200)
			put_hp()
			#Sans.put()
			Ink_Sans["leg"].put()
			Ink_Sans["body"].put()
			Ink_Sans["head"].put()
			slice.put()
			draw_xt()
			cnt += 1
			cng += 1
			Ink_Sans["head"].move(-3,0)
			Ink_Sans["body"].move(-3,0)
			Ink_Sans["leg"].move(-3,0)
			if cnt<500:
				Ink_Sans["head"].move(0,cnt/(delta*1.5))
				Ink_Sans["body"].move(0,cnt/(delta<<1))
			elif cnt>500 and cnt<1000:
				Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
				Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
			elif cnt==1000:
				cnt = 0
			ud()
		for i in range(70):
			screen.fill((0, 0, 0))
		    #write("hp")
			kuang.put()
			xxk.put()
			put_hp()
			fight_box.put()
			slice.changeImage("slice"+str(cng//25)+".png",color_key=(1,0,0))
			fight.put()
			#Sans.put()
			Ink_Sans["leg"].put()
			Ink_Sans["body"].put()
			Ink_Sans["head"].put()
			draw_xt()
			slice.put()
			fight.changeImage("fight"+str((i%35)&1)+".png",color_key=(1,0,0))
			fight.mag(20,200)
			cng+=1
			cnt += 1
			Ink_Sans["head"].move(3,0)
			Ink_Sans["body"].move(3,0)
			Ink_Sans["leg"].move(3,0)
			if cnt<500:
				Ink_Sans["head"].move(0,cnt/(delta*1.5))
				Ink_Sans["body"].move(0,cnt/(delta<<1))
			elif cnt>500 and cnt<1000:
				Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
				Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
			elif cnt==1000:
				cnt = 0
			ud()
	elif xx==2:
		heart.goto(100,400)
		while keys[pygame.K_z]:
			screen.fill((0, 0, 0))
			xxk.put()
			kuang.put()
			put_hp()
			Ink_Sans["leg"].put()
			Ink_Sans["body"].put()
			Ink_Sans["head"].put()
			draw_xt()
			heart.put()
			cnt += 1
			if cnt<500:
				Ink_Sans["head"].move(0,cnt/(delta*1.5))
				Ink_Sans["body"].move(0,cnt/(delta<<1))
			elif cnt>500 and cnt<1000:
				Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
				Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
			elif cnt==1000:
				cnt = 0
			write("    check",pos=(100,400),color=(255,255,255),size=1)
			keys = pygame.key.get_pressed()
			ud()
		while not keys[pygame.K_z]:
			screen.fill((0, 0, 0))
			xxk.put()
			kuang.put()
			put_hp()
			Ink_Sans["leg"].put()
			Ink_Sans["body"].put()
			Ink_Sans["head"].put()
			draw_xt()
			heart.put()
			cnt += 1
			if cnt<500:
				Ink_Sans["head"].move(0,cnt/(delta*1.5))
				Ink_Sans["body"].move(0,cnt/(delta<<1))
			elif cnt>500 and cnt<1000:
				Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
				Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
			elif cnt==1000:
				cnt = 0
			write("    check",pos=(100,400),color=(255,255,255),size=1)
			keys = pygame.key.get_pressed()
			ud()
		playSound("click2.wav")

		write_text = "*Ink!Sans FIGHT ??? DEF ???"
		write_cnt = 0
		l = len(write_text)
		while keys[pygame.K_z]:
			keys = pygame.key.get_pressed()
			screen.fill((0, 0, 0))
			#Sans.put()
			kuang.put()
			xxk.put()
			put_hp()
			#heart.put()
			Ink_Sans["leg"].put()
			Ink_Sans["body"].put()
			Ink_Sans["head"].put()
			draw_xt()
			cnt += 1
			if cnt < 500:
				Ink_Sans["head"].move(0,cnt/(delta*1.5))
				Ink_Sans["body"].move(0,cnt/(delta<<1))
			elif cnt > 500 and cnt < 1000:
				Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
				Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
			elif cnt == 1000:
				cnt = 0
			if write_cnt<l*10:
				if write_cnt%20==0:
					playSound("write.wav")
				Say(write_text[:int(write_cnt/10)],pos=(100,400),color=(255,255,255),max_len=35,si=1)
				write_cnt+=1
			else:
				Say(write_text,pos=(100,400),color=(255,255,255),max_len=35,si = 1.0)
			ud()
		while not keys[pygame.K_z]:
			keys = pygame.key.get_pressed()
			screen.fill((0, 0, 0))
			#Sans.put()
			kuang.put()
			xxk.put()
			put_hp()
			#heart.put()
			Ink_Sans["leg"].put()
			Ink_Sans["body"].put()
			Ink_Sans["head"].put()
			draw_xt()
			cnt += 1
			if cnt < 500:
				Ink_Sans["head"].move(0,cnt/(delta*1.5))
				Ink_Sans["body"].move(0,cnt/(delta<<1))
			elif cnt > 500 and cnt < 1000:
				Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
				Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
			elif cnt == 1000:
				cnt = 0
			if write_cnt<l*10:
				if write_cnt%20==0:
					playSound("write.wav")
				Say(write_text[:int(write_cnt/10)],pos=(100,400),color=(255,255,255),max_len=35,si=1)
				write_cnt+=1
			else:
				Say(write_text,pos=(100,400),color=(255,255,255),max_len=35,si = 1.0)
			ud()
		write_text = "*Continuing to attack, he had no way out"
		write_cnt = 0
		l = len(write_text)
		while keys[pygame.K_z]:
			keys = pygame.key.get_pressed()
			screen.fill((0, 0, 0))
			#Sans.put()
			kuang.put()
			xxk.put()
			put_hp()
			#heart.put()
			Ink_Sans["leg"].put()
			Ink_Sans["body"].put()
			Ink_Sans["head"].put()
			draw_xt()
			cnt += 1
			if cnt < 500:
				Ink_Sans["head"].move(0,cnt/(delta*1.5))
				Ink_Sans["body"].move(0,cnt/(delta<<1))
			elif cnt > 500 and cnt < 1000:
				Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
				Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
			elif cnt == 1000:
				cnt = 0
			if write_cnt<l*10:
				if write_cnt%20==0:
					playSound("write.wav")
				Say(write_text[:int(write_cnt/10)],pos=(100,400),color=(255,0,0),max_len=35,si=1)
				write_cnt+=1
			else:
				Say(write_text,pos=(100,400),color=(255,0,0),max_len=35,si = 1.0)
			ud()
		while not keys[pygame.K_z]:
			keys = pygame.key.get_pressed()
			screen.fill((0, 0, 0))
			#Sans.put()
			kuang.put()
			xxk.put()
			put_hp()
			#heart.put()
			Ink_Sans["leg"].put()
			Ink_Sans["body"].put()
			Ink_Sans["head"].put()
			draw_xt()
			cnt += 1
			if cnt < 500:
				Ink_Sans["head"].move(0,cnt/(delta*1.5))
				Ink_Sans["body"].move(0,cnt/(delta<<1))
			elif cnt > 500 and cnt < 1000:
				Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
				Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
			elif cnt == 1000:
				cnt = 0
			if write_cnt<l*10:
				if write_cnt%20==0:
					playSound("write.wav")
				Say(write_text[:int(write_cnt/10)],pos=(100,400),color=(255,0,0),max_len=35,si=1)
				write_cnt+=1
			else:
				Say(write_text,pos=(100,400),color=(255,0,0),max_len=35,si = 1.0)
			ud()
	elif xx==3:
		write_text = "*You're out of food anymore..."
		write_cnt = 0
		l = len(write_text)
		while keys[pygame.K_z]:
			keys = pygame.key.get_pressed()
			screen.fill((0, 0, 0))
			#Sans.put()
			kuang.put()
			xxk.put()
			put_hp()
			#heart.put()
			Ink_Sans["leg"].put()
			Ink_Sans["body"].put()
			Ink_Sans["head"].put()
			draw_xt()
			cnt += 1
			if cnt < 500:
				Ink_Sans["head"].move(0,cnt/(delta*1.5))
				Ink_Sans["body"].move(0,cnt/(delta<<1))
			elif cnt > 500 and cnt < 1000:
				Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
				Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
			elif cnt == 1000:
				cnt = 0
			if write_cnt<l*10:
				if write_cnt%20==0:
					playSound("write.wav")
				Say(write_text[:int(write_cnt/10)],pos=(100,400),color=(255,255,255),max_len=35,si=1)
				write_cnt+=1
			else:
				Say(write_text,pos=(100,400),color=(255,255,255),max_len=35,si = 1.0)
			ud()
		while not keys[pygame.K_z]:
			keys = pygame.key.get_pressed()
			screen.fill((0, 0, 0))
			#Sans.put()
			kuang.put()
			xxk.put()
			put_hp()
			#heart.put()
			Ink_Sans["leg"].put()
			Ink_Sans["body"].put()
			Ink_Sans["head"].put()
			draw_xt()
			cnt += 1
			if cnt < 500:
				Ink_Sans["head"].move(0,cnt/(delta*1.5))
				Ink_Sans["body"].move(0,cnt/(delta<<1))
			elif cnt > 500 and cnt < 1000:
				Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
				Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
			elif cnt == 1000:
				cnt = 0
			if write_cnt<l*10:
				if write_cnt%20==0:
					playSound("write.wav")
				Say(write_text[:int(write_cnt/10)],pos=(100,400),color=(255,255,255),max_len=35,si=1)
				write_cnt+=1
			else:
				Say(write_text,pos=(100,400),color=(255,255,255),max_len=35,si = 1.0)
			ud()
		write_text = "*Didn't you bring it on yourself?!!!!!!!!!!!!"
		write_cnt = 0
		l = len(write_text)
		while keys[pygame.K_z]:
			keys = pygame.key.get_pressed()
			screen.fill((0, 0, 0))
			#Sans.put()
			kuang.put()
			xxk.put()
			put_hp()
			#heart.put()
			Ink_Sans["leg"].put()
			Ink_Sans["body"].put()
			Ink_Sans["head"].put()
			draw_xt()
			cnt += 1
			if cnt < 500:
				Ink_Sans["head"].move(0,cnt/(delta*1.5))
				Ink_Sans["body"].move(0,cnt/(delta<<1))
			elif cnt > 500 and cnt < 1000:
				Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
				Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
			elif cnt == 1000:
				cnt = 0
			if write_cnt<l*10:
				if write_cnt%20==0:
					playSound("write.wav")
				Say(write_text[:int(write_cnt/10)],pos=(100,400),color=(255,0,0),max_len=35,si=1)
				write_cnt+=1
			else:
				Say(write_text,pos=(100,400),color=(255,0,0),max_len=35,si = 1.0)
			ud()
		while not keys[pygame.K_z]:
			keys = pygame.key.get_pressed()
			screen.fill((0, 0, 0))
			#Sans.put()
			kuang.put()
			xxk.put()
			put_hp()
			#heart.put()
			Ink_Sans["leg"].put()
			Ink_Sans["body"].put()
			Ink_Sans["head"].put()
			draw_xt()
			cnt += 1
			if cnt < 500:
				Ink_Sans["head"].move(0,cnt/(delta*1.5))
				Ink_Sans["body"].move(0,cnt/(delta<<1))
			elif cnt > 500 and cnt < 1000:
				Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
				Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
			elif cnt == 1000:
				cnt = 0
			if write_cnt<l*10:
				if write_cnt%20==0:
					playSound("write.wav")
				Say(write_text[:int(write_cnt/10)],pos=(100,400),color=(255,0,0),max_len=35,si=1)
				write_cnt+=1
			else:
				Say(write_text,pos=(100,400),color=(255,0,0),max_len=35,si = 1.0)
			ud()
	xxk.changeImage("0.png")
	xxk.mag(700,60)
	cng = 0
	heart.goto(500,500)
	while cng<35:
		screen.fill((0, 0, 0))
		#Sans.put()
		kuang.put()
		put_hp()
		xxk.put()
		Ink_Sans["leg"].put()
		Ink_Sans["body"].put()
		Ink_Sans["head"].put()
		draw_xt()
		cnt += 1
		if cnt < 500:
			Ink_Sans["head"].move(0,cnt/(delta*1.5))
			Ink_Sans["body"].move(0,cnt/(delta<<1))
		elif cnt > 500 and cnt < 1000:
			Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
			Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
		elif cnt == 1000:
			cnt = 0
		cng+=1
		kuang.changeImage("kuang"+str(7-int(cng/5))+".png")
		if cng%5==0:
			kuang.move(40,0)
		ud()

	if ground == 1:
		say("You ruined all the other AUs, do you really think it's fun?!")
		heart.changeImage("heart2.png")
	elif ground == 2:
		say("I ...... I really don't want to be like this...")
		heart.changeImage("heart1.png")
	else:
		heart.changeImage("heart1.png")
	flag = True
	step=0
	bones[:] = []
	GBs[:] = []
	Sans.goto(400,132)
	for i in range(50):
		screen.fill((0, 0, 0))
		xxk.put()
		kuang.put()
		put_hp()
		heart.put()
		#Sans.put()
		Ink_Sans["leg"].put()
		Ink_Sans["body"].put()
		Ink_Sans["head"].put()
		draw_xt()
		cnt += 1
		Ink_Sans["head"].move(-1,0)
		Ink_Sans["body"].move(-1,0)
		Ink_Sans["leg"].move(-1,0)
		if cnt<500:
			Ink_Sans["head"].move(0,cnt/(delta*1.5))
			Ink_Sans["body"].move(0,cnt/(delta<<1))
		elif cnt>500 and cnt<1000:
			Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
			Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
		elif cnt==1000:
			cnt = 0
		keys = pygame.key.get_pressed()
		if keys[pygame.K_UP] and heart.y>kuang.y:heart.move(0,-0.5)
		if keys[pygame.K_DOWN] and heart.y<kuang.y+200:heart.move(0,0.5)
		if keys[pygame.K_LEFT] and heart.x>kuang.x:heart.move(-0.5,0)
		if keys[pygame.K_RIGHT] and heart.x<kuang.x+200:heart.move(0.5,0)
		ud()
	for i in range(50):
		screen.fill((0, 0, 0))
		xxk.put()
		kuang.put()
		heart.put()
		Sans.put()
		put_hp()
		Sans.move(1.5,0)
		Ink_Sans["leg"].put()
		Ink_Sans["body"].put()
		Ink_Sans["head"].put()
		draw_xt()
		cnt += 1
		Ink_Sans["head"].move(-1,0)
		Ink_Sans["body"].move(-1,0)
		Ink_Sans["leg"].move(-1,0)
		if cnt<500:
			Ink_Sans["head"].move(0,cnt/(delta*1.5))
			Ink_Sans["body"].move(0,cnt/(delta<<1))
		elif cnt>500 and cnt<1000:
			Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
			Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
		elif cnt==1000:
			cnt = 0
		keys = pygame.key.get_pressed()
		if keys[pygame.K_UP] and heart.y>kuang.y:heart.move(0,-0.5)
		if keys[pygame.K_DOWN] and heart.y<kuang.y+200:heart.move(0,0.5)
		if keys[pygame.K_LEFT] and heart.x>kuang.x:heart.move(-0.5,0)
		if keys[pygame.K_RIGHT] and heart.x<kuang.x+200:heart.move(0.5,0)
		ud()
	while flag:
		#hp = 5
		screen.fill((0, 0, 0))
		gb.put()
		xxk.put()
		kuang.put()
		heart.put()
		Sans.put()
		put_hp()
		Ink_Sans["leg"].put()
		Ink_Sans["body"].put()
		Ink_Sans["head"].put()
		draw_xt()
		cnt += 1
		if cnt<500:
			Ink_Sans["head"].move(0,cnt/(delta*1.5))
			Ink_Sans["body"].move(0,cnt/(delta<<1))
		elif cnt>500 and cnt<1000:
			Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
			Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
		elif cnt==1000:
			cnt = 0
		keys = pygame.key.get_pressed()
		if ground == 1:
			move_heart("blue")
		else:
			move_heart("red")
		step+=1
		if ground == 1:
			if step == 1:
				for i in range(25):
					bones.append(Player("bone3.png"))
					bones[i].goto(-100*i,580)
				for i in range(25,50):
					bones.append(Player("bone3.png"))
					bones[i].goto(920+100*(i-25),580)
			elif step < 5000:
				for i in range(25):
					bones[i].move(0.7,0)
					bones[i].put()
					if coll(bones[i],jud):
						hp-=0.5
						playSound("hurtsound.wav")
				for i in range(25,50):
					bones[i].move(-0.7,0)
					bones[i].put()
					if coll(bones[i],jud):
						hp-=0.5
						playSound("hurtsound.wav")
			else:
				flag = False
		elif ground == 2:
			if step == 1:
				for i in range(10):
					GBs.append(Gb())
					GBs[i].set_target(700,i*100,90)
			elif step < 600:
				for i in range(10):
					GBs[i].put()
					GBs[i].move()
			elif step < 1000:
				for i in range(10):
					GBs[i].shoot()
					GBs[i].put()
			else:
				flag = False
		else:
			if step == 1:
				for i in range(10):
					GBs.append(Gb())
					GBs[i].set_target(700,i*100,90)
			elif step < 600:
				for i in range(10):
					GBs[i].put()
					GBs[i].move()
			elif step < 1000:
				for i in range(10):
					GBs[i].shoot()
					GBs[i].put()
			else:
				flag = False
		ud()
	for i in range(100):
		screen.fill((0, 0, 0))
	    #write("hp")
		kuang.put()
		xxk.put()
		heart.put()
		put_hp()
		#Sans.put()
		Ink_Sans["leg"].put()
		Ink_Sans["body"].put()
		Ink_Sans["head"].put()
		draw_xt()
		cnt += 1
		Ink_Sans["head"].move(1,0)
		Ink_Sans["body"].move(1,0)
		Ink_Sans["leg"].move(1,0)
		if cnt<500:
			Ink_Sans["head"].move(0,cnt/(delta*1.5))
			Ink_Sans["body"].move(0,cnt/(delta<<1))
		elif cnt>500 and cnt<1000:
			Ink_Sans["head"].move(0,-(cnt-500)/(delta*1.5))
			Ink_Sans["body"].move(0,-(cnt-500)/(delta<<1))
		elif cnt==1000:
			cnt = 0
		keys = pygame.key.get_pressed()
		if keys[pygame.K_UP] and heart.y>kuang.y:heart.move(0,-0.5)
		if keys[pygame.K_DOWN] and heart.y<kuang.y+200:heart.move(0,0.5)
		if keys[pygame.K_LEFT] and heart.x>kuang.x:heart.move(-0.5,0)
		if keys[pygame.K_RIGHT] and heart.x<kuang.x+200:heart.move(0.5,0)
		ud()
pygame.quit()
sys.exit()

彻底失去耐心,未完成……

  • 11
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
好的,下面是一个简单的数字推盘小游戏的代码示例,使用 Pygame 库实现。 首先,需要安装 Pygame 库。可以使用以下命令进行安装: ``` pip install pygame ``` 然后,创建一个名为 `number_puzzle.py` 的 Python 文件,并将以下代码复制到文件中: ```python import pygame import random # 游戏区域大小 WIDTH = 400 HEIGHT = 400 # 方格大小 CELL_SIZE = WIDTH // 4 # 颜色定义 WHITE = (255, 255, 255) BLACK = (0, 0, 0) GRAY = (128, 128, 128) # 初始化 Pygame pygame.init() # 创建游戏窗口 screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("Number Puzzle") # 加载数字图片 numbers = [] for i in range(1, 16): image = pygame.image.load(f"images/{i}.png").convert_alpha() image = pygame.transform.scale(image, (CELL_SIZE, CELL_SIZE)) numbers.append(image) # 加载空白图片 blank_image = pygame.image.load("images/blank.png").convert_alpha() blank_image = pygame.transform.scale(blank_image, (CELL_SIZE, CELL_SIZE)) # 创建数字列表 numbers_list = [i for i in range(1, 16)] blank_index = 15 random.shuffle(numbers_list) # 游戏循环标志 running = True while running: # 处理事件 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: running = False elif event.key == pygame.K_UP: if blank_index >= 4: numbers_list[blank_index], numbers_list[blank_index - 4] = numbers_list[blank_index - 4], numbers_list[blank_index] blank_index -= 4 elif event.key == pygame.K_DOWN: if blank_index <= 11: numbers_list[blank_index], numbers_list[blank_index + 4] = numbers_list[blank_index + 4], numbers_list[blank_index] blank_index += 4 elif event.key == pygame.K_LEFT: if blank_index % 4 != 0: numbers_list[blank_index], numbers_list[blank_index - 1] = numbers_list[blank_index - 1], numbers_list[blank_index] blank_index -= 1 elif event.key == pygame.K_RIGHT: if blank_index % 4 != 3: numbers_list[blank_index], numbers_list[blank_index + 1] = numbers_list[blank_index + 1], numbers_list[blank_index] blank_index += 1 # 绘制游戏界面 screen.fill(WHITE) for i in range(16): x = (i % 4) * CELL_SIZE y = (i // 4) * CELL_SIZE if i == blank_index: screen.blit(blank_image, (x, y)) else: screen.blit(numbers[numbers_list[i] - 1], (x, y)) if numbers_list[i] != i + 1: pygame.draw.rect(screen, GRAY, (x, y, CELL_SIZE, CELL_SIZE), 3) # 更新屏幕 pygame.display.flip() # 退出 Pygame pygame.quit() ``` 在代码中,首先定义了游戏区域的大小、方格大小和颜色等常量。然后使用 Pygame 加载数字图片和空白图片,并创建数字列表并打乱顺序。在游戏循环中,处理键盘事件,并根据空白方格的位置更新数字列表。最后绘制游戏界面并更新屏幕。 需要注意的是,该示例中使用了 15 张数字图片和 1 张空白图片,需要将这些图片保存在名为 `images` 的文件夹中。 可以使用以下命令运行游戏: ``` python number_puzzle.py ``` 效果如下图所示: ![number_puzzle.png](https://i.loli.net/2022/01/04/kwJdR7K3xQG6Mcp.png)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值