用户:
屑雷神索尔查看:0 回复:2 评论:0 创建时间:2020-07-12T20:04:05
【作品展示】

【作品介绍】
好吧。。。用pyrhon做的一个低仿UNDERTALE。。。你是饶恕还是攻击?(开场欧皇能追上绿子弹,可以帮你持续加血,当你坚持100秒后……你就要做出选择了。。)方向键控制,请自备素材。
【作品源代码】
from arcade import *
from sys import exit
import time
LEFT = 65361 # 向左方向箭头按键码
UP = 65362 # 向上方向箭头按键码
RIGHT = 65363 # 向右方向箭头按键码
DOWN = 653喵
#子弹类
class bullets():
def __init__(self,x,y,speed1,speed2):
self.x=x
self.y=y
self.xspeed=speed1
self.yspeed=speed2
self.size=random.randint(30,100)
def update(self):
self.x+=self.xspeed
self.y+=self.yspeed
def draw(self):
draw_rectangle_filled(self.x,self.y,self.size,self.size,color=color.RED)
#回血类
class heal():
def __init__(self,a):
self.x = random.randint(0,800)
self.y = random.randint(0,600)
self.xspeed = random.randint(-4,10)
self.yspeed = random.randint(-4,10)
self.size = random.randint(10, 30)
def update(self):
self.x += self.xspeed
self.y += self.yspeed
def draw(self):
draw_rectangle_filled(self.x,self.y,self.size,self.size,color=color.GREEN)
#游戏类
class game(Window):
def __init__(self,width,height,title):
self.heals=[]#print(width)
super().__init__(width,height,title)
self.setup()
def print_len(self,a):
print(len(self.bullets))
#改变sans坐标
def xy(self,a):
self.pos2=[random.randint(0,800),random.randint(0,600)]
def print_hp(self,a):
print(self.hp)
#回血
def heal_(self,b):
self.hp+=1
def time_(self,a):
self.second+=1
#生成治疗
def heal(self,a):
self._heal=heal(a)
self._heal=None
self._heal=heal(a)
#设置
def setup(self):
self.second=0
schedule(self.time_,1)
self.heal('none')
schedule(self.shoot_bullet,0.25)
self.hp=100
self.hp2=100
self.pos=[100,100]
self.pos2=[500,100]
self.attack=False
self.bullets=[]
self.xspeed=0
self.yspeed=0
self.san_2=Sprite('sans2.jpg')
self.san_2.center_x=400
self.san_2.center_y=300
self.is_end=False
#schedule(self.print_len,4)
schedule(self.xy,3)
#schedule(self.print_hp,5)
#图片,声音
self.heart=Sprite('heart.jpg')
self.heart.center_x=600
self.heart.center_y=500
self.hurt=load_sound('attack.wav')
self.sans=Sprite('sans.jpg')
self.sans.center_x=self.pos2[0]
self.sans.center_y=self.pos2[1]
self.player = Sprite('heart.jpg')
self.player.center_x = self.pos[0]
self.player.center_y = self.pos[1]
#绘制各角色
def on_draw(self):
set_background_color(color.BLACK_LEATHER_JACKET)
draw_rectangle_filled(400,300,800,600,color=color.BLACK)
#draw_rectangle_filled(self.pos[0],self.pos[1],30,30,color=color.BLUE)
draw_rectangle_filled(
self.pos2[0], self.pos2[1], 10, 10, color=color.RED)
for _bullet in self.bullets:
_bullet.draw()
self.heart.draw()
draw_text('x'+str(self.hp),650,500,color.WHITE,50)
self.sans.draw()
self.player.draw()
for _heal in self.heals:
_heal.draw()
self._heal.draw()
if self.is_end:
self.san_2.draw()
#发射按钮函数
def shoot_bullet(self,none):
l1=[a for a in range(1,20)]
l2 =[a for a in range(-1, -20, -1)]
l1=l1+l2
#print(random.choice(l1))
self.bullets.append(
bullets(self.pos2[0], self.pos2[1], random.choice(l1), random.choice(l1)))
#逻辑和按钮
def on_update(self,delta_time):
print(self.heals)
self.sans.center_x = self.pos2[0]
self.sans.center_y = self.pos2[1]
self.player.center_x = self.pos[0]
self.player.center_y = self.pos[1]
if self.attack:
self.bullets.append(bullets(self.pos[0],self.pos[1],10,0))
self.attack=False
for _bullet in self.bullets:
_bullet.update()
if _bullet.x>800 or _bullet.x<0 or _bullet.y>600 or _bullet.y<0:
self.bullets.remove(_bullet)
self.pos[0]+=self.xspeed
self.pos[1]+=self.yspeed
for _heal in self.heals:
_heal.update()
#传送回00
if self.pos[0]<0 or self.pos[0]>800 or self.pos[1]<0 or self.pos[1]>600:
self.pos[0],self.pos[1]=400,300
#判断碰撞
for _bullet in self.bullets:
dis=math.hypot(_bullet.x-self.pos[0],_bullet.y-self.pos[1])
if dis<=_bullet.size:
self.hp-=1
play_sound(self.hurt)
if self.hp<=0:
print('you died!!')
print('if there are any bugs,please tell 2DS雷神索尔.')
print('the end-------')
exit()
#更新治疗
self._heal.update()
dis=math.hypot(self.pos[0]-self._heal.x,self.pos[1]-self._heal.y)
if dis<=self._heal.size:
self._heal.x=喵0
schedule(self.heal_,1)
#判断输赢
if self.second>=100:
print('you win!!!!')
self.is_end=True
self.on_draw()
self.on_draw()
print('sans:well......I just want to be your friend.....')
time.sleep(1)
print('sans:please!!!!merci me!!!!')
time.sleep(1)
answer=input('y/n?')
if answer=='y':
print('you:Of course I will sans!We"re friends now!')
exit()
else:
print('sans:you will never,never defeat me!')
print('I am gonna use my"special" attack!!')
time.sleep(10000)
#移动
def on_key_release(self,symbol,modifiers):
if symbol==65307:#ESC键
self.attack=True
if symbol==UP or symbol==DOWN:
self.yspeed=0
if symbol==LEFT or symbol==RIGHT:
self.xspeed=0
def on_key_press(self,symbol,modifiers):
if symbol==UP:
self.yspeed=16
if symbol==DOWN:
self.yspeed=-16
if symbol==LEFT:
self.xspeed=-16
if symbol==RIGHT:
self.xspeed=16
g=game(800,600,'none')
run()
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn