1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- # Simula virtualmente um robo
- from robot import Robot
- from tag import TagClient
- from random import randint, random
- import signal, sys
- import math
- import time
- from numpy.linalg import norm
- import numpy as np
- rid = randint(100, 1000)
- run = False
- board = None
- tagplayer = -1
- client = TagClient('localhost', 10318)
- client.info(rid, 14, 19, 7, 13.5)
- px, py, course = None, None, None
- # Sinal de ctrl-c
- def signal_handler(signal, frame):
- client.stop()
- sys.exit(0)
- signal.signal(signal.SIGINT, signal_handler)
- players = {}
- while not client.quit:
- # nao recebeu informacoes do campo
- if client.getFieldInfo() is None:
- continue
- elif px is None:
- board = client.getFieldInfo()
- px, py = board[0]*random(), board[1]*random()
- course = math.pi*2.0*random()
- client.setPosition(px, py, course)
- # jogo esta parado
- if client.getStatus() is False:
- players = {}
- continue
- # jogo esta parado
- if client.isPause() is True:
- time.sleep(5)
- client.setPause()
- # nao recebeu informacoes do pegador
- if client.getTagInfo() is None:
- continue
- # verifica se ha posicoes novas
- newposs = client.getPosition()
- for info in newposs:
- posx, posy, course, idd, xsize, ysize, xtag, ytag = info
- if idd != rid:
- players[idd] = [posx, posy]
- tag, interval = client.getTagInfo()
- pos = [players[p] for p in players]
- if time.time() <= interval:
- # comportamento de fuga
- if tag in players and tag != rid:
- # foge se nao for pegador
- px = px + (px-players[tag][0])/180.0
- py = py + (py-players[tag][1])/180.0
- course = course+(random()-0.5)/5.0
- client.setPosition(px, py, course)
- else:
- if len(pos) >= 1 and tag == rid:
- move = np.array([px-pos[0][0], py-pos[0][1]])
- move = move/norm(move)*0.5
- px = px - move[0]
- py = py - move[1]
- if tag != rid:
- px = px+(random()-0.5)
- py = py+(random()-0.5)
- course = course+(random()-0.5)/5.0
- client.setPosition(px, py, course)
|