TRON game

Post Reply
User avatar
phase
Posts: 17
Joined: Thu Dec 20, 2012 6:16 pm
Location: Хабаровск

TRON game

Post by phase »

Привет всем.
Делал игру tron. Катание на светоциклах. По правилам нужно поставить стену перед вражеским светоциклом чтобы он в неё врезался, ещё можно загнать в ловушку чтобы он сам в себя врезался.
Затормозил на этапе написания интеллекта. Боты тупые, уворачиваются но не атакуют.

Code: Select all

// tron 0.3.7 (trace[n],traces,effect)
h=get_window_ysize
w=get_window_xsize
log=new_pixi(w,h)
traces=.//result
key=0 maxcount=4 count=maxcount
str=0
trace=new_array(count)
x=. y=. fi=. c=. v=. 
n=0 while(n!=count){
v[n]=1 trace[n]=new_pixi(w,h)
n+1} n=0
c[0]=RED
c[1]=BLUE
c[2]=GREEN
c[3]=YELLOW  
dfi=90    //degrees //0 deg - left
x[0]=w/4 y[0]=h/4
x[1]=-w/4 y[1]=-h/4
x[2]=-w/4 y[2]=h/4
x[3]=w/4 y[3]=-h/4
fi[0]=270 fi[1]=90
fi[2]=270 fi[3]=90

run:
lightcycle1
lightcycle2
lightcycle3
lightcycle4
set_screen(traces)
clear(0)
box(-w/2,-h/2,w-1,h-1,#000010)//границы
n=0 while(n!=maxcount){pixi(trace[n]) n+1}
set_screen(0)
transp(32)
clear(BLACK)
transp(256)
pixi(traces)
pixi(log)
frame(50)
if count=1
{n=0 while (v[n]!=1){n+1} cn=c[n]
 print("#$cn win! n=$n",-w/2,-h/2+str*10,c[n])
 frame stop}
go run

proection:
_dx=r*ccos((dir)*256/360)/127
_dy=r*csin((dir)*256/360)/127
_x=x[n]+_dx
_y=y[n]+_dy
ret

set_dir:  //set_dir(key)
if key=267 //turn right
 {fi[n]=fi[n]+dfi}
else {
if key=266 //turn left
 {fi[n]=fi[n]-dfi}}
if fi[n]<0 {fi[n]=360-dfi}
if fi[n]>360 {fi[n]=dfi} 
ret

engine: //engine(n,dir)
if v[n]>0 {
set_screen(traces)
dx=v[n]*ccos((fi[n]*256)/360)/127
dy=v[n]*csin((fi[n]*256)/360)/127
x[n]=x[n]+dx
y[n]=y[n]+dy
if get_dot(x[n],y[n])=0
{set_screen(trace[n]) 
 dot(x[n],y[n],c[n])}
else
{remove_pixi(trace[n])
v[n]=0 count-1 cn=c[n]
set_screen(log)
print("#$cn stoped n=$n count=$count",-w/2,-h/2+str*10,c[n]) str+1}
}
ret

lightcycle1:
n=0
handle_hard_keys({key=get_hard_key set_dir})
engine
ret

lightcycle2:
n=1 
ai
engine
ret

lightcycle3:
n=2
ai
engine
ret

lightcycle4:
n=3
ai
engine
ret

ai:  //ai(n)
_x=0 _y=0
avoid
//attack
ret

avoid:
set_screen(traces)
r=2 dir=fi[n]
proection
_a=get_dot(_x,_y)//спереди
// если впереди препятствие...
if _a!=0 {
dir=fi[n]+dfi proection
_b=get_dot(_x,_y)//справа
dir=fi[n]-dfi proection
_c=get_dot(_x,_y)//слева
if _b!=0 {key=266 set_dir }//turn left
if _c!=0 {key=267 set_dir }//turn right
if (_b+_c)=0 {key=266+(rand&1) set_dir } }
//... то повернуть, если возможно
ret
Может кто поможет здесь разобраться с ai. Как лучше заставить ботов атаковать?
User avatar
NightRadio
Site Admin
Posts: 3941
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: TRON game

Post by NightRadio »

Вот бы ее еще на новом Pixilang запустить.
User avatar
phase
Posts: 17
Joined: Thu Dec 20, 2012 6:16 pm
Location: Хабаровск

Re: TRON game

Post by phase »

Попробую перекодить на новый язык.
Post Reply