Trò Chơi Bảo Vệ quả trứng

Giải thích :

from ursina import *

import random


def update(): #mọi khung hình của trò chơi và chịu trách nhiệm cập nhật trạng thái của trò chơi.

global run,t

#kiểm tra xem trò chơi có ở trạng thái đang chạy không.

#Nếu đúng như vậy, tỷ lệ bar_1tăng lên 0,5 lần so với thời gian đã trôi qua kể từ khung hình cuối cùng và

#tỷ lệ bar_2giảm theo cùng một lượng.

if run:

bar_1.scale_y +=0.5 * time.dt

bar_1.scale_y = clamp(bar_1.scale_y,0,maxscale)

bar_2.scale_y -=0.5 * time.dt

#kiểm tra xem phím cách có đang được nhấn hay tỷ lệ của bar_1lớn hơn hoặc bằng maxscale.

#Nếu một trong hai điều kiện được đáp ứng, trạng thái của trò chơi được đặt thành không chạy.

if held_keys['space'] or bar_1.scale_y >= maxscale:

run = False

#kiểm tra nếu trò chơi không chạy.

#Nếu không, tnó được tăng lên 30 lần thời gian đã trôi qua kể từ khung hình cuối cùng

#và được kẹp trong khoảng từ 0 đến 90. angleđược tính bằng số tlần pi chia cho 180.

if run == False:

t += 30*time.dt

t = clamp(t,0,90)

angle = t*(math.pi/180)

bar_1.origin = Vec3(0,0,0) #đặt nguồn gốc của bar_1trung tâm của đối tượng.

s1 = bar_1.scale_y/2 #tính toán quy mô bar_1chia cho 2

bar_1.x = s1 * math.cos(90*(math.pi/180) - angle)-3 ## đặt vị trí x và y bar_1dựa trên tỷ lệ của nó và góc hiện tại.

bar_1.y = s1 * math.sin((90*math.pi/180) - angle)-2.9 ##

bar_1.rotation_z = t #đặt góc quay bar_1quanh trục z thành giá trị hiện tại của t.


bar_2.origin = Vec3(0,0,0) #đặt nguồn gốc của bar_2trung tâm của đối tượng.

s2 = 6-bar_2.scale_y/2 - 0.1 #tính toán quy mô của bar_2với một phần bù nhỏ.

bar_2.x = s2 * math.cos(90*(math.pi/180) - angle)-3 ##ặt vị trí x và y bar_2dựa trên tỷ lệ của nó và góc hiện tại.

bar_2.y = s2 * math.sin((90*math.pi/180) - angle)-2.9 ##

bar_2.rotation_z = t #đặt góc quay bar_2quanh trục z thành giá trị hiện tại của t.


# Colission

if t >= 90:#kiểm tra xem tnó có lớn hơn hoặc bằng 90 không.

#Nếu đúng như vậy, vị trí của quả trứng sẽ được kiểm tra xem nó có bị vỡ hay không.

#kiểm tra xem thang đo của bar_1có lớn hơn hoặc bằng maxscale. Nếu đúng như vậy, quả trứng đã vỡ nếu nó đến

#bên phải của thang âm lớn nhất. Nếu quả trứng không vỡ, NotBreak()chức năng được gọi.

if bar_1.scale_y >= maxscale:

if egg.x-egg.scale_x/2 > -3 + maxscale:#kiểm tra xem bên trái của quả trứng có ở bên phải của thang đo tối đa của thanh hay không.

NotBreak()

else:

EggBreak()


else:

#kiểm tra xem quả trứng có nằm giữa hai vạch hay không bằng cách so sánh mặt

#trái và mặt phải của quả trứng với vị trí và tỷ lệ của hai vạch.

if egg.x-egg.scale_x/2 > -3+bar_1.scale_y and \

egg.x + egg.scale_x/2 < bar_2.x - bar_2.scale_y/2:

NotBreak()

else:

EggBreak()

# tạo biểu tượng cảm xúc "hạnh phúc" và tạo hoạt ảnh cho biểu tượng đó di chuyển xuống dưới rồi mờ dần.

# Nó cũng gọi reset()chức năng để thiết lập lại trò chơi.

def NotBreak():

emoji = Entity(model='quad',texture = 'happy.png')

emoji.animate_z(-2,duration = 1, loop = False)

invoke(Func(emoji.fade_out,duration=1))

reset()


#tạo ra một biểu tượng cảm xúc "tức giận",

#thay đổi kết cấu của quả trứng thành một quả trứng bị vỡ và tạo hiệu ứng động

#cho nó di chuyển xuống dưới rồi mờ dần đi. Nó cũng hiển thị dòng chữ "Bạn đã thua, trò chơi kết thúc!"

def EggBreak():

emoji = Entity(model='quad',texture = 'angry.png')

egg.texture='broken_egg.png'

emoji.animate_z(-2,duration = 1, loop = False)

invoke(Func(emoji.fade_out,duration=1))

Text(text='You lost, game Over!',position=(0,0.2),origin=(0,0),background=True)

#Hàm reset()đặt tvà runvề các giá trị ban đầu của chúng,

#đặt vị trí x của quả trứng thành một giá trị ngẫu nhiên,

#đặt kết cấu của quả trứng trở lại kết cấu ban đầu, đặt vị trí

#và tỷ lệ của các thanh trở về giá trị ban đầu và đặt lại chuyển động quay của chúng.

def reset():

global run,t

t = 0

run = True

egg.x = random.uniform(-2,3)

egg.texture = 'egg.png'

bar_1.x = -3

bar_1.origin = (-0.5,-0.5)

bar_1.scale_y = 0

bar_1.rotation_z = 0


bar_2.x = -3

bar_2.y = 3

bar_2.origin = (-0.5,0.5)

bar_2.scale_y = maxscale-bar_1.scale_y

bar_2.rotation_z = 0

# Main game

app=Ursina() #tạo một phiên bản của công cụ trò chơi Ursina.


t = 0 ##đặt giá trị ban đầu của tvà run.

run = True ##

maxscale = 4.5 #đặt tỷ lệ tối đa của các thanh.


field = Entity(model='quad',color=color.violet,scale=(15,6)) #tạo ra một hình tứ giác màu tím làm trường của trò chơi.


#tạo một hình tứ giác có màu xanh lục làm thanh đầu tiên có tỷ lệ (0,2,0)

#và gốc là (-0,5,-0,5) , vị trí (-3,-2,9,-0,1) và z=-0,1

bar_1 = Entity(model='quad',color=color.green,scale=(0.2,0),

origin=(-0.5, -0.5), position = (-3,-2.9,-0.1),

z=-0.1)


#tạo một bản sao của bar_1 thành bar_2 và nó được định vị tại y=3 với gốc là (-0,5,0,5)

#và scale_y của nó được đặt thành hiệu của maxscale và bar_1.scale_y

bar_2 = duplicate(bar_1,y=3,origin=(-0.5,0.5),

scale_y = maxscale-bar_1.scale_y)


#tạo một hình tứ giác dưới dạng quả trứng với kết cấu 'egg.png' và tỷ lệ (0,8,1)

egg = Entity(model='quad',texture='egg.png', scale=(0.8,1),

position=(random.uniform(-2,3),-2.4,-0.1))

emoji = Entity(model='quad',z=0.1)


app.run()

ảnh: