|

楼主 |
发表于 2023-4-23 00:39:46
|
显示全部楼层
用ursina开发一个打乒乓球的游戏
- from ursina import *
- import random as rd
-
- scorea=scoreb=0
-
- def update():
- global dx,dz,scorea,scoreb
- paddle_B.x-=held_keys["left arrow"]*time.dt
- paddle_B.x+=held_keys["right arrow"]*time.dt
- paddle_A.x-=held_keys["a"]*time.dt
- paddle_A.x+=held_keys["d"]*time.dt
- if paddle_A.x>0.35:
- paddle_A.x=0.35
- elif paddle_A.x<-0.35:
- paddle_A.x=-0.35
- if paddle_B.x>0.35:
- paddle_B.x=0.35
- elif paddle_B.x<-0.35:
- paddle_B.x=-0.35
- ball.x+=dx*time.dt
- ball.z+=dz*time.dt
- t.text=f"Player A : Player B {scorea} : {scoreb}"
- hit_info=ball.intersects()
- if hit_info.hit:
- if hit_info.entity==paddle_A:
- dz=-dz
- if dz>-0.05:
- dz-=rd.uniform(0.1,0.3)
- else:
- dz-=rd.uniform(-0.05,0.2)
- if hit_info.entity==paddle_B:
- dz=-dz
- if dz<0.05:
- dz+=rd.uniform(0.1,0.3)
- else:
- dz+=rd.uniform(-0.05,0.2)
- if abs(ball.x)>0.4:
- dx=-dx
- if ball.z>0.25:
- scoreb+=1
- ball.x=0
- ball.z=-0.2
- dx=rd.uniform(-0.4,0.15) if rd.randint(0,1)==0 else rd.uniform(0.15,0.4)
- dz=rd.uniform(-0.5,0.2) if rd.randint(0,1)==0 else rd.uniform(0.2,0.5)
- if ball.z<-0.65:
- scorea+=1
- ball.x=0
- ball.z=-0.2
- dx=rd.uniform(-0.4,0.15) if rd.randint(0,1)==0 else rd.uniform(0.15,0.4)
- dz=rd.uniform(-0.5,0.2) if rd.randint(0,1)==0 else rd.uniform(0.2,0.5)
-
- app=Ursina()
-
- window.color=color.cyan
-
- table=Entity(model="cube",color=color.orange,scale=(10,0.5,14),position=(0,0,0),texture="white_cube")
-
- paddle_A=Entity(parent=table,color=color.black,model="cube",scale=(0.2,0.03,0.05),position=(0,3.7,0.22),collider="box")
- paddle_B=duplicate(paddle_A,z=-0.62)
-
- t=Text(text=f"Player A : Player B {scorea} : {scoreb}", position=(-0.85, 0.45), scale=2,color=color.orange)
-
- camera.position=(0,15,-26)
- camera.rotation_x=30
-
- Text(text="Player A",scale=2,position=(-0.1,0.32),color=color.orange)
- Text(text="Player B",scale=2,position=(-0.1,-0.4),color=color.orange)
-
- line=Entity(parent=table,model="quad",scale=(0.88,0.2,0.1),position=(0,3.5,-0.2))
- ball=Entity(parent=table,model="sphere",color=color.gold,scale=.05,position=(0,3.7,-0.2),collider="box")
-
- dx=rd.uniform(-0.4,0.15) if rd.randint(0,1)==0 else rd.uniform(0.15,0.4)
- dz=rd.uniform(-0.5,0.2) if rd.randint(0,1)==0 else rd.uniform(0.2,0.5)
-
- app.run()
复制代码 |
|