#贪吃蛇
import viz
import math
import vizact
import vizmat
import random
import vizcam
import viztask
import vizshape
import vizproximity
import vizinfo
viz.setMultiSample(4)
viz.fov(60)
viz.go()
viz.phys.enable()
d=0
grid = vizshape.addGrid()#网格
grid.color(viz.RED)
grid.setAxisAngle(0,0,0,90)
grid.setPosition(0,d,0)
world_axes = vizshape.addAxes()#坐标轴
world_axes.setPosition(0,d,0)
world_axes.alpha(0.4)
#背景
ground=viz.addChild('tut_ground.wrl')
ground.collidePlane()
ground.setPosition(0,d,0,)
viz.MainView.setPosition([0, 4, 0])
viz.MainView.setAxisAngle(1,0,0,90)
#固定视角
viz.mouse.setScale( 0, 0)
#定义蛇的头部及其运动
snake_speed=10
snake = viz.add('white_ball.wrl')
snake.setPosition(0,d,0)
#snake.setScale(0.2,0.2,0.2)
#snake.enable(viz.COLLIDE_NOTIFY)
snake.enable(viz.ROTATE_NONE)
snake.color(viz.RED)
def move_up():
moveForward = vizact.move(0,0,snake_speed,0.005)
snake.runAction(moveForward)
def move_down():
moveForward = vizact.move(0,0,-snake_speed,0.005)
snake.runAction(moveForward)
def move_right():
moveForward = vizact.move(snake_speed,0,0,0.005)
snake.runAction(moveForward)
def move_left():
moveForward = vizact.move(-snake_speed,0,0,0.005)
snake.runAction(moveForward)
vizact.whilekeydown(viz.KEY_UP,move_up,)
vizact.whilekeydown(viz.KEY_DOWN,move_down,)
vizact.whilekeydown(viz.KEY_RIGHT,move_right,)
vizact.whilekeydown(viz.KEY_LEFT,move_left,)
foods=[]
pos_foods=[]
foodsRunAction=[]
n=10#球数
def random_pos_create():
x=(random.random()-0.5)*4
z=(random.random()-0.5)*4
return [x,d,z]
for i in range(n):
pos=random_pos_create()
newTarget = viz.addChild('white_ball.wrl')
newTarget.setPosition(pos)
foods.append(newTarget)
foodsRunAction.append(newTarget.runAction)
pos_foods.append(pos)
#显示得分
import vizinfo
scorePanel = vizinfo.InfoPanel('Score: 0', icon=False)
scorePanel.score = 0
def snake_grow():
while 1:
yield viz.waitTime(0.001)
for i in snake_list:
#print "###",i
i.runAction(vizact.moveTo(snake.getPosition(viz.ABS_GLOBAL),speed=1))
viztask.schedule(snake_grow())
snake_list=[]
def snake_append(i):#蛇的身体,除了头部以外
snake.runAction(vizact.moveTo([0,0,1],speed=1))#speed不能省略
snake_list.append(foods[i])
def delete_and_create(i):
snake_append(i)
#foods[i].remove()#先删除该小球,再重新随机一个新的小球
#print "###",i,snake.getPosition(viz.ABS_GLOBAL)[0]-foods[i].getPosition(viz.ABS_GLOBAL)[0]
x=(random.random()-0.5)*4
z=(random.random()-0.5)*4
pos=[x,d,z]
newTarget = viz.add('white_ball.wrl')
newTarget.setPosition(pos)
foods.pop(i)
pos_foods.pop(i)
print 'remove',i
foods.insert(i,newTarget)
pos_foods.insert(i,pos)
scorePanel.score += 1
scorePanel.setText('Score: {}'.format(scorePanel.score))
def collide():
list=[]#记录被吃小球的下标的列表
while 1:
pos_snake=snake.getPosition(viz.ABS_GLOBAL)
for i in foods:
if math.sqrt((pos_foods[foods.index(i)][0]-pos_snake[0])**2+(pos_foods[foods.index(i)][2]-pos_snake[2])**2)<0.2:
list.append(foods.index(i))#记录被接触球在列表中的下标
for i in list:
delete_and_create(i)
list=[]#小球已经被吃,列表清空
yield viz.waitTime(0.001)
viztask.schedule(collide())
贪吃2.0
猜你喜欢
转载自blog.csdn.net/weixin_58465955/article/details/121347320
今日推荐
周排行