Professional Documents
Culture Documents
*DPHGHYHORSHUVKDYHDOZD\VSXVKHGWKHOLPLWVRIWKHKDUGZDUHZKHQLWFRPHVWRJUDSKLFVDQGVRXQGEXW,
WKLQNZHDOODJUHHWKDWZKHQLW
VWLPHWRLPSOHPHQWDUWLILFLDOLQWHOOLJHQFHIRUDJDPH$,DOZD\VJHWVWKHVKRUW
HQGRIWKHVWLFN,QWKLVDUWLFOHZHDUHJRLQJWRVWXG\DSRWSRXUULRI$,WRSLFVUDQJLQJIURPWKHVLPSOHWRWKH
FRPSOH[
$ORQJWKHZD\ZHDUHJRLQJWRWU\RXWDIHZGHPRVWKDWXVHDYHU\UXGLPHQWDU\JUDSKLFVLQWHUIDFHWR
LOOXVWUDWHVRPHRIWKHVLPSOHUFRQFHSWV+RZHYHUPRVWRIRXUGLVFXVVLRQZLOOEHTXDVLWKHRUHWLFDODQG
DEVWUDFW7KLVLVEHFDXVH$,LVQRWDVVLPSOHDVDQDOJRULWKPDGDWDVWUXFWXUHRUVLPLODUWKLQJV$UWLILFLDO
LQWHOOLJHQFHLVDIOXLGFRQFHSWWKDWPXVWEHVKDSHGE\WKHJDPHLWLVWREHXVHGRQ*UDQWHG\RXPD\XVHWKH
VDPHIXQGDPHQWDOWHFKQLTXHVRQP\ULDGJDPHVEXWWKHIRUPDQGLPSOHPHQWDWLRQPD\EHUDGLFDOO\GLIIHUHQW
/HW
VEHJLQRXUGLVFXVVLRQZLWKVRPHVLPSOHVWDWHPHQWVWKDWGHILQHZKDW$,LVLQWKHFRQWH[WRIJDPHV
$UWLILFLDOLQWHOOLJHQFHLQWKHDUHQDRIFRPSXWHUJDPHVLPSOLHVWKDWWKHFRPSXWHUFRQWUROOHGRSSRQHQWVDQG
JDPHREMHFWVVHHPWRVKRZVRPHNLQGRIFRJQLWLYHSURFHVVZKHQWDNLQJDFWLRQVRUUHDFWLQJWRWKHSOD\HU
V
DFWLRQV7KHVHDFWLRQVPD\EHLPSOHPHQWHGLQDPLOOLRQGLIIHUHQWZD\VEXWWKHERWWRPOLQHIURPDQ
REVHUYHUVSRLQWRIYLHZLVWKDWWKH\VHHPWRVKRZLQWHOOLJHQFH
7KLVEULQJVXVWRWKHIXQGDPHQWDOGHILQLWLRQRILQWHOOLJHQFH)RURXUSXUSRVHVLQWHOOLJHQFHLVVLPSO\WKHDELOLW\
WRVXUYLYHDQGSHUIRUPWDVNVLQDQHQYLURQPHQW7KHWDVNVPD\EHWRKXQWGRZQDQGGHVWUR\WKHSOD\HUILQG
IRRGQDYLJDWHDQDVWHURLGILHOGRUZKDWHYHU1HYHUWKHOHVVWKLVZLOOEHRXUORRVHGHILQLWLRQRILQWHOOLJHQFH
1RZWKDWZHKDYHDQLGHDRIZKDWZHDUHWU\LQJWRDFFRPSOLVKZKHUHRQHDUWKVKRXOGZHEHJLQ":HZLOO
EHJLQE\XVLQJKXPDQVDVRXUPRGHOVRILQWHOOLJHQFHEHFDXVHWKH\VHHPWREHUHDVRQDEO\LQWHOOLJHQWIRU
FDUERQXQLWV,IZHREVHUYHDKXPDQLQDQHQYLURQPHQWZHFDQH[WUDSRODWHDIHZNH\EHKDYLRUVRI
LQWHOOLJHQFHWKDWZHFDQPRGHOXVLQJIDLUO\VLPSOHFRPSXWHUDOJRULWKPVDQGWHFKQLTXHV
7KHVHEHKDYLRUVDUHEOLQGUHIOH[HVUDQGRPVHOHFWLRQXVHRINQRZQSDWWHUQVHQYLURQPHQWDODQDO\VLV
PHPRU\EDVHGVHOHFWLRQVDQGVHTXHQWLDOEHKDYLRUVWKDWPD\HQFRPSDVVVRPHRUDOORIWKHRWKHUEHKDYLRUV
:H
OOWDNHDORRNDWDOORIWKHVHEHKDYLRUVDQGH[SORUHKRZZHPLJKWLPSOHPHQWWKHPLQDFRPSXWHUJDPH
EXWILUVWOHW
VWDONDERXWWKHJUDSKLFVPRGXOHZHDUHJRLQJWRXVHIRUVRPHRIWKHGHPRV
7KH*UDSKLFV0RGXOH
+DOIWKHZRUOGXVHV0LFURVRIW&DQG&FRPSLOHUVDQGWKHRWKHUKDOIXVHV%RUODQG&DQG&FRPSLOHUVVR
LW
VDOZD\VDSUREOHPSXEOLVKLQJGHPRVWKDWGHSHQGRQWKHXVHRIHLWKHU+HQFHZHDUHJRLQJWRZULWH&FRGH
WKDWLVWRWDOO\FRPSLOHULQGHSHQGHQWEDVHGRQDJUDSKLFVLQWHUIDFHWKDWZHDUHJRLQJWRZULWHRXUVHOYHVDQG
WKDWZLOOZRUNRQERWKFRPSLOHUV7KHJUDSKLFVLQWHUIDFHZLOOEHEDVHGRQJUDSKLFVPRGHKZKLFKLVE\
SL[HOVZLWKFRORUV)RUWKHVLPSOHGHPRVZHDUHJRLQJWRZULWHDOOZHZDQWWRGRLVSODFHWKH
9*$69*$FDUGLQPRGHKDQGSORWVLQJOHSL[HOVRQWKHVFUHHQ7KXVZHQHHGWZRIXQFWLRQV
Set_Video_Mode(int mode);
DQG
:HZLOOXVHWKHYLGHR%,26IXQFWLRQKWRVHWWKHYLGHRPRGHEXWKRZFDQZHSORWSL[HOV"3ORWWLQJSL[HOVLQ
PRGHKLVYHU\VLPSOHEHFDXVHWKHJUDSKLFVDUHIXOO\PHPRU\PDSSHG%DVLFDOO\PRGHKLVDWRWDOO\
OLQHDUDUUD\RIPHPRU\WKDWUHSUHVHQWVHDFKSL[HOZLWKDVLQJOHE\WH)XUWKHUWKLVYLGHRPHPRU\VWDUWVDW
ORFDWLRQ$DQGFRQVLVWVRIURZVDQGFROXPQV7KHUHIRUHWRFRPSXWHWKHDGGUHVVRIDQ\
SL[HODW[\ZHVLPSO\PXOWLSO\WKH<FRPSRQHQWE\DQGDGGWKH;2ULQRWKHUZRUGV
$GGLQJWKLVPHPRU\RIIVHWWR$JLYHVXVWKHILQDOPHPRU\ORFDWLRQWRDFFHVVWKHGHVLUHGVFUHHQ
SL[HO+HQFHLIZHDOLDVD)$5SRLQWHUWRWKHYLGHRPHPRU\OLNHWKLV
7KHQZHFDQDFFHVVWKHYLGHRPHPRU\XVLQJDV\QWD[OLNH
video_buffer[y*320+x] = color;
$QGWKDW
VLW6RXVLQJWKDWLQIRUPDWLRQZHFDQWKHQZULWHDVLPSOHSL[HOSORWWLQJIXQFWLRQDQG
JUDSKLFVPRGHIXQFWLRQ7KHVHWZRIXQFWLRQVVKRXOGEHDGGHGWRHDFKGHPRVRWKDWWKHGHPRVFDQSHUIRUP
WKHJUDSKLFVUHODWHGIXQFWLRQVZLWKRXWKHOSIURPWKHFRPSLOHUGHSHQGHQWJUDSKLFVOLEUDU\:H
UHDOVRJRLQJWR
DGGDOLWWOHWLPHGHOD\IXQFWLRQEDVHGRQWKH3&
VLQWHUQDOWLPHU7KHIXQFWLRQLVFDOOHG7LPHB'HOD\DQG
WDNHVDVLQJOHSDUDPHWHUZKLFKLVWKHQXPEHURIFOLFNVWRZDLWIRU/LVWLQJVKRZVWKHFRPSOHWHJUDSKLFV
LQWHUIDFHQDPHG*02'+IRUWKHGHPRVFRQWDLQHGZLWKLQWKLVDUWLFOH6LPSO\LQFOXGHWKHFRGHRIWKHJUDSKLFV
PRGXOHZLWKHDFKGHPRDQGHYHU\WKLQJVKRXOGZRUNILQH1RZWKDWZHKDYHWKHVRIWZDUHZHQHHGWRGR
JUDSKLFVOHW
VEHJLQRXUGLVFXVVLRQRI$,
/LVWLQJ7KH*UDSKLFV0RGXOH*02'+
} // end Plot_Pixel
} // end Set_Graphics_Mode
// when the current time minus the starting time >= the requested delay then
// the function can exit
while(labs(*clock - start_time) < (long)clicks){}
} // end Time_Delay
'HWHUPLQLVWLF$OJRULWKPV
'HWHUPLQLVWLFDOJRULWKPVDUHWKHVLPSOHVWRIWKH$,WHFKQLTXHVXVHGLQJDPHV7KHVHDOJRULWKPVXVHDVHWRI
YDULDEOHVDVWKHLQSXWDQGWKHQXVHVRPHVLPSOHUXOHVWRGULYHWKHFRPSXWHUFRQWUROOHGHQHPLHVRUJDPH
REMHFWVEDVHGRQWKHVHLQSXWV:HFDQWKLQNRIGHWHUPLQLVWLFDOJRULWKPVDVUHIOH[HVRUYHU\ORZOHYHOLQVWLQFWV
$FWLYDWHGE\VRPHVHWRIFRQGLWLRQVLQWKHHQYLURQPHQWWKHDOJRULWKPVWKHQSHUIRUPWKHGHVLUHGEHKDYLRU
UHOHQWOHVVO\ZLWKRXWFRQFHUQIRUWKHRXWFRPHWKHSDVWRUIXWXUHHYHQWV
7KHFKDVHDOJRULWKPLVDFODVVLFH[DPSOHRIDGHWHUPLQLVWLFDOJRULWKP7KHFKDVHDOJRULWKPLVEDVLFDOO\D
PHWKRGRILQWHOOLJHQFHXVHGWRKXQWGRZQWKHSOD\HURUVRPHRWKHUREMHFWRILQWHUHVWLQDJDPHE\DSSO\LQJ
WKHVSDWLDOFRRUGLQDWHVRIWKHFRPSXWHUFRQWUROOHGREMHFWDQGWKHREMHFWWREHWUDFNHG,PDJLQHDJDPHZLWK
DWRSGRZQYLHZRIDEDWWOHJURXQGRQZKLFKWKUHHFRPSXWHUFRQWUROOHGEDGJX\VDQGRQHSOD\HUDUHILJKWLQJ
7KHTXHVWLRQLVKRZFDQZHPDNHWKHFRPSXWHUFRQWUROOHGEDGJX\VWUDFNDQGPRYHWRZDUGWKHSOD\HU"2QH
ZD\LVWRXVHWKHFRRUGLQDWHVRIWKHEDGJX\VDQGWKHFRRUGLQDWHVRIWKHSOD\HUDVLQSXWVLQWRDGHWHUPLQLVWLF
DOJRULWKPWKDWRXWSXWVGLUHFWLRQFKDQJHVRUGLUHFWLRQYHFWRUVIRUWKHEDGJX\VLQUHDOWLPH
/HW
VXVHEDGJX\RQHDVWKHH[DPSOH:HVHHWKDWKHLVORFDWHGDWFRRUGLQDWHVE[E\DQGWKHSOD\HULV
ORFDWHGDWFRRUGLQDWHVS[S\7KHUHIRUHDVLPSOHDOJRULWKPWRPDNHWKHEDGJX\PRYHWRZDUGWKHSOD\HU
ZRXOGEH
// process x-coords
if (px>bx1) bx1++;
else
if (px<bx1) bx1--;
// process y-coords
if (py>by1) by1++;
else
if (py<by1) by1--;
7KDW
VDOOWKHUHLVWRLW,IZHZDQWHGWRUHYHUVHWKHORJLFDQGPDNHWKHEDGJX\UXQWKHQWKHFRQGLWLRQDOORJLF
FRXOGEHLQYHUWHGRUWKHRXWFRPHLQFUHPHQWRSHUDWRUVFRXOGEHLQYHUWHG$VDQH[DPSOHRIGHWHUPLQLVWLF
ORJLF/LVWLQJLVDFRPSOHWHSURJUDPWKDWZLOOPDNHDOLWWOHFRPSXWHUFRQWUROOHGGRWFKDVHDSOD\HUFRQWUROOHG
GRW8VHWKHQXPHULFNH\SDGWRFRQWURO\RXUSOD\HUDQGSUHVV(6&WRH[LWWKHSURJUDP
/LVWLQJ$'HPRRI'HWHUPLQLVWLF/RJLF
#include <io.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <bios.h>
#include <math.h>
#include <string.h>
int main(void)
{
if ((py-=2)<0)
py+=200;
} break;
if ((py+=2)>=200)
py-=200;
} break;
} break;
if ((px-=2)<0)
px+=320;
} break;
} // end switch
} // end if
if (py>by)
by++;
else
if (py<by)
by-;
// wait a bit
Time_Delay(1);
} // end main
1RZOHW
VPRYHRQWRDQRWKHUW\SLFDOEHKDYLRUZKLFKZHFDQFDWHJRUL]HDVUDQGRPORJLF
5DQGRP/RJLF
6RPHWLPHVDQLQWHOOLJHQWFUHDWXUHH[KLELWVDOPRVWUDQGRPEHKDYLRUV7KHVHUDQGRPEHKDYLRUVPD\EHWKH
UHVXOWRIDQ\RQHRIDQXPEHURILQWHUQDOSURFHVVHVEXWWKHUHDUHWZRPDLQRQHVWKDWZHVKRXOGWRXFK
XSRQODFNRILQIRUPDWLRQDQGGHVLUHGUDQGRPQHVV
7KHILUVWSUHPLVHLVDQREYLRXVRQH0DQ\WLPHVDQLQWHOOLJHQWFUHDWXUHGRHVQRWKDYHHQRXJKLQIRUPDWLRQWR
PDNHDGHFLVLRQRUPD\QRWKDYHDQ\LQIRUPDWLRQDWDOO7KHFUHDWXUHWKHQVLPSO\GRHVWKHEHVWLWFDQZKLFK
LVWRVHOHFWDUDQGRPEHKDYLRULQKRSHVWKDWLWPLJKWEHWKHFRUUHFWRQHIRUWKHVLWXDWLRQ)RUH[DPSOHOHW
V
VD\\RXZHUHGURSSHGLQWRDGXQJHRQDQGSUHVHQWHGZLWKIRXULGHQWLFDOGRRUV.QRZLQJWKDWDOOEXWRQH
PHDQWFHUWDLQGHDWK\RXZRXOGVLPSO\KDYHWRUDQGRPO\VHOHFWRQH
7KHVHFRQGSUHPLVHWKDWEULQJVRQDUDQGRPVHOHFWLRQLVLQWHQWLRQDO)RUH[DPSOHVD\\RXDUHDVS\WU\LQJWR
PDNHDJHWDZD\DIWHUDFTXLULQJVRPHVHFUHWGRFXPHQWVWKLVKDSSHQVWRPHDOOWKHWLPH1RZLPDJLQH\RX
KDYHEHHQVHHQDQGWKHEDGJX\VVWDUWVKRRWLQJDW\RX,I\RXUXQLQDVWUDLJKWOLQHFKDQFHVDUH\RXDUH
JRLQJWRJHWVKRW+RZHYHULIGXULQJ\RXUHVFDSH\RXPDNHPDQ\UDQGRPGLUHFWLRQFKDQJHVDQG]LJ]DJDELW
\RXZLOOJHWDZD\HYHU\WLPH
:KDWZHOHDUQIURPWKDWH[DPSOHLVWKDWPDQ\WLPHVUDQGRPORJLFDQGVHOHFWLRQVDUHJRRGEHFDXVHLWPDNHV
LWKDUGHUIRUWKHSOD\HUWRGHWHUPLQHZKDWWKHEDGJX\VDUHJRLQJWRGRQH[WDQGLW
VDJRRGZD\WRKHOSWKH
EDGJX\VPDNHDVHOHFWLRQZKHQWKHUHLVQ
WHQRXJKLQIRUPDWLRQWRXVHDGHWHUPLQLVWLFDOJRULWKP0RWLRQ
FRQWUROLVDW\SLFDOSODFHWRDSSO\UDQGRPORJLFLQEDGJX\$,<RXFDQXVHDUDQGRPQXPEHURUSUREDELOLW\
WRVHOHFWDQHZGLUHFWLRQIRUWKHEDGJX\DVDIXQFWLRQRIWLPH/HW
VHQYLVLRQDPXOWLSOD\HUJDPHZLWKD
VLQJOHFRPSXWHUFRQWUROOHGEDGJX\VXUURXQGHGE\IRXUKXPDQSOD\HUV7KLVLVDJUHDWSODFHWRDSSO\
UDQGRPPRWLRQXVLQJWKHIROORZLQJORJLF
7KHSRVLWLRQRIWKHEDGJX\LVWUDQVODWHGE\DUDQGRPDPRXQWLQERWK;DQG<ZKLFKLQWKLVFDVHLV
SL[HOVRUXQLWV
2IFRXUVHZHFDQXVHUDQGRPORJLFIRUDORWRIRWKHUWKLQJVEHVLGHVGLUHFWLRQFKDQJHV6WDUWLQJSRVLWLRQV
SRZHUOHYHOVDQGSUREDELOLW\RIILULQJZHDSRQVDUHDOOJRRGSODFHVWRDSSO\UDQGRPORJLF,W
VGHILQLWHO\D
JRRGWHFKQLTXHWKDWDGGVDELWRIXQSUHGLFWDELOLW\WRJDPH$,/LVWLQJLVDGHPRRIUDQGRPORJLFXVHGWR
FRQWUROPRWLRQ7KHGHPRFUHDWHVDQDUUD\RIIOLHVDQGXVHVUDQGRPORJLFWRPRYHWKHPDURXQG3UHVV(6&WR
H[LWWKHGHPR
/LVWLQJ$%XQFKRI'XPE)OLHV
#include <io.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <bios.h>
#include <math.h>
#include <string.h>
int main(void)
{
// draw flies
for (index=0; index<NUM_FLIES;
index++)
Plot_Pixel(flys[index].x,flys[index].y,10);
// wait a bit
Time_Delay(2);
} // end main
1RZOHW
VWDONDERXWSDWWHUQV
(QFRGHG/LVW3URFHVVLQJ
0DQ\LQWHOOLJHQWFUHDWXUHVKDYHSUHUHFRUGHGSDWWHUQVRUOLVWVRIEHKDYLRUVWKDWWKH\KDYHHLWKHUOHDUQHGIURP
H[SHULHQFHRUDUHLQVWLQFWLYH:HFDQWKLQNRIDSDWWHUQDVDVHTXHQFHRIVWHSVZHSHUIRUPWRDFFRPSOLVKD
WDVN*UDQWHGWKLVVHTXHQFHPD\EHLQWHUUXSWHGLIVRPHWKLQJKDSSHQVGXULQJWKHVHTXHQFHWKDWQHHGV
DWWHQWLRQ%XWLQJHQHUDOLIZHIRUJHWDERXWLQWHUUXSWLRQVWKHQZHFDQWKLQNRISDWWHUQVDVDOLVWRIHQFRGHG
LQVWUXFWLRQVWKDWDQLQWHOOLJHQWFUHDWXUHFRQVXPHVWRDFFRPSOLVKVRPHWDVN
)RUH[DPSOHZKHQ\RXGULYHWRZRUNVFKRRORU\RXUJLUOIULHQG
VRUER\IULHQG
VKRXVH\RXDUHIROORZLQJD
SDWWHUQ<RXJHWLQWR\RXUFDUVWDUWLWGULYHWRWKHGHVWLQDWLRQVWRSWKHFDUWXUQLWRIIJHWRXWDQGILQDOO\GR
ZKDWHYHULWLV\RX
UHJRLQJWRGR7KLVLVDSDWWHUQRIEHKDYLRU$OWKRXJKGXULQJWKHHQWLUHH[SHULHQFHDELOOLRQ
WKLQJVPD\KDYHJRQHWKURXJK\RXUKHDGWKHREVHUYHGEHKDYLRUZDVDFWXDOO\YHU\VLPSOH+HQFHSDWWHUQV
DUHDJRRGZD\WRLPSOHPHQWVHHPLQJO\FRPSOH[WKRXJKWSURFHVVHVLQJDPH$,,QIDFWPDQ\JDPHVWRGD\
VWLOOXVHSDWWHUQVIRUPXFKRIWKHJDPHORJLF
6RKRZFDQZHLPSOHPHQWSDWWHUQVIRUJDPH$,"6LPSO\E\XVLQJDQLQSXWDUUD\WRDOLVWSURFHVVRU7KH
RXWSXWRIWKHSURFHVVRULVWKHFRQWURORIDJDPHREMHFWRUEDGJX\,QWKLVFDVHWKHHQFRGHGOLVWKDVWKH
IROORZLQJVHWRIYDOLGLQVWUXFWLRQV
Turn right
Turn left
Move forward
Move backward
Sit still
Fire weapon
(YHQWKRXJKZHRQO\KDYHVL[VHOHFWLRQVZHFDQFRQVWUXFWTXLWHDIHZSDWWHUQVZLWKDVKRUWLQSXWOLVWRI
HOHPHQWVDVLQWKHH[DPSOH,QIDFWWKHUHDUHGLIIHUHQWSRVVLEOHSDWWHUQVRUURXJKO\WULOOLRQGLIIHUHQW
EHKDYLRUV,WKLQNWKDW
VHQRXJKWRPDNHVRPHWKLQJORRNLQWHOOLJHQW6RKRZFDQZHXVHHQFRGHGOLVWVDQG
SDWWHUQVLQDJDPHIRUWKH$,"2QHVROLGZD\LVWRXVHWKHPWRFRQWUROWKHPRWLRQRIDEDGJX\RUJDPH
REMHFW)RUH[DPSOHDGHWHUPLQLVWLFDOJRULWKPPLJKWGHFLGHLW
VWLPHWRPDNHDEDGJX\SHUIRUPVRPH
FRPSOH[PRWLRQWKDWZRXOGEHGLIILFXOWLIZHXVHGVWDQGDUGFRQGLWLRQDOORJLF7KXVZHFRXOGXVHWKDWSDWWHUQ
ZKLFKVLPSO\UHDGVDQHQFRGHGOLVWGLUHFWLQJWKHEDGJX\WRPDNHVRPHWULFN\PRYHV)RUH[DPSOHZHPLJKW
KDYHDVLPSOHDOJRULWKPOLNHWKLV
<RX
OOQRWLFHWKDWWKHHQFRGHGSDWWHUQLVPDGHXSVLPSO\RI;DQG<WUDQVODWLRQV7KHSDWWHUQFRXOGMXVWDV
ZHOOKDYHFRQWDLQHGFRPSOH[UHFRUGVZLWKDPXOWLWXGHRIGDWDILHOGV,
YHZULWWHQGHWDLOHGFRGHWKDWZLOOFUHDWH
DQH[DPSOHRISDWWHUQVDQGOLVWSURFHVVLQJDGHPRRIDQDQWWKDWFDQSURFHVVRQHRIIRXUSDWWHUQVVHOHFWHG
E\WKHNH\V8QIRUWXQDWHO\LW
VWRRORQJWRSULQWKHUH*RWRWKH*DPH'HYHORSHUIWSVLWHDQG\RXFDQ
GRZQORDGLWWKHUH
1RZZH
UHVWDUWLQJWRJHWVRPHZKHUHEXWZHQHHGDQRYHUDOOFRQWUROXQLWZLWKVRPHIRUPRIPHPRU\DQGZH
PXVWVHOHFWWKHDSSURSULDWHW\SHVRIEHKDYLRUV
)LQLWH6WDWH0DFKLQHV
)LQLWHVWDWHPDFKLQHVRU)60VDUHDEVWUDFWPRGHOVWKDWFDQEHLPSOHPHQWHGHLWKHULQKDUGZDUHRUVRIWZDUH
)60VDUHQRWUHDOO\PDFKLQHVLQWKHPHFKDQLFDOVHQVHRIWKHZRUGEXWUDWKHUDEVWUDFWPRGHOVZLWKDVHWRI
VWDWHVWKDWFDQEHWUDYHUVHG:LWKLQWKHVHVWDWHVWKH)60QRWRQO\KDVDVSHFLDOVHWRIRXWSXWVEXW
UHPHPEHUVWKHVWDWHDQGFDQWUDQVLWLRQWRDQRWKHUVWDWHLIDQGRQO\LIDVHWRILQSXWVRUSUHPLVHVDUHPHW
6D\ZHKDYHDW\SLFDOILQLWHVWDWHPDFKLQHLQZKLFKWKHUHDUHDVHWRIVWDWHVODEHOHG666DQG6QDQG
ZLWKLQHDFKVWDWHLVDVHWRIRXWSXWV7KHVHRXWSXWVFDQEHDQ\WKLQJZHZLVKIURPPRWLRQFRQWUROVIRUD
JDPH
VEDGJX\VWRKDUGGLVNFRPPDQGV+RZGRZHPRGHODQ)60LQVRIWZDUHDQGXVHLWWRFRQWUROWKH
JDPH$,"/HW
VEHJLQZLWKWKHILUVWTXHVWLRQ
:HFDQPRGHODQ)60ZLWKDVLQJOHYDULDEOHDQGDVHWRIORJLFDOFRQGLWLRQVXVHGWRPDNHVWDWHWUDQVLWLRQV
DORQJZLWKWKHRXWSXWIRUHDFKVWDWH)RUH[DPSOHOHW
VDFWXDOO\EXLOGDVLPSOHVRIWZDUHVWDWHPDFKLQHWKDW
FRQWUROVDFRPSXWHUEDGJX\GLIIHUHQWO\EDVHGRQWKHEDGJX\
VGLVWDQFHWRWKHSOD\HU7KHVWDWHPDFKLQHZLOO
KDYHWKHIROORZLQJIRXUVWDWHV
6WDWH6HOHFWQHZVWDWH 67$7(B1(:
6WDWH0RYHUDQGRPO\ 67$7(B5$1'20
6WDWH7UDFNSOD\HU 67$7(B75$&.
6WDWH8VHDSDWWHUQ 67$7(B3$77(51
7KH)60
VWUDQVLWLRQVKRXOGEHVHWXSVRWKDWLIWKHEDGJX\LVZLWKLQXQLWVRIWKHSOD\HUWKHQWKHEDGJX\
PRYHVLQWR6WDWHDQGVLPSO\DWWDFNV,IWKHEDGJX\LVLQWKHUDQJHRIWRXQLWVIURPWKHSOD\HUWKHQ
WKHEDGJX\JRHVLQWR6WDWHDQGPRYHVLQDSDWWHUQ)LQDOO\LIWKHEDGJX\LVIDUWKHUWKDQXQLWVIURP
WKHSOD\HUWKHQFKDQFHVDUHWKHEDGJX\FDQ
WHYHQVHHWKHSOD\HULQWKHLPDJLQDU\FRPSXWHUXQLYHUVH,Q
WKDWFDVHWKHEDGJX\PRYHVLQWR6WDWHZKLFKLVUDQGRPPRWLRQ
6RKRZFDQZHLPSOHPHQWWKLVVLPSOH)60PDFKLQH"$OOZHQHHGLVDYDULDEOHWRUHFRUGWKHFXUUHQWVWDWHDQG
VRPHFRQGLWLRQDOORJLFWRSHUIRUPWKHVWDWHWUDQVLWLRQVDQGRXWSXWV/LVWLQJVKRZVDURXJKDOJRULWKPWKDW
ZLOOGRDOOWKLV
/LVWLQJ7KH&RUH)60/RJLF
//FSM loop
for(;;){
switch (currentState)
{
case new:
else {
if (theDistance > Tracking_Threshold) {
currentState = pattern;
}
else {
currentState = track;
}
}
break;
case track:
DoTrackBehavior();
currentState = new;
break;
case pattern:
DoPatternBehavior();
currentState = new;
break;
case random:
DoRandomBehavior();
currentState = new;
break;
case default:
cerr<<"state machine has entered an unknown
state\n";
assert(FAIL);
}
}
$OWKRXJKWKLVUHTXLUHVWZRF\FOHVWKURXJKWKH)60ORRSWRFUHDWHRQHEHKDYLRULW
VZHOOZRUWKLW,QWKHFDVH
RIDVPDOO)60WKHHQWLUHORRSFDQVWD\LQWKHFDFKHDQGLQWKHFDVHRIDODUJH)60ORRSWKHORFDOL]DWLRQRI
WKHWUDQVLWLRQORJLFZLOOPRUHWKDQSD\IRUWKHSHUIRUPDQFHSHQDOW\,I\RXDEVROXWHO\UHIXVHWRGRXEOHORRS
\RXFDQKDQGFUDIWWKHWUDQVLWLRQVEHWZHHQVWDWHV$ILQLWHVWDWHPDFKLQHGLDJUDPZLOOYLYLGO\LOOXVWUDWHLQWKH
IRUPRIVSDJKHWWLWUDQVLWLRQVZKHQ\RXUWUDQVLWLRQORJLFLVRXWRIFRQWURO
1RZWKDWZHKDYHDQRYHUDOOWKRXJKWFRQWUROOHUWKDWLVDQ)60ZHVKRXOGGLVFXVVVLPXODWLQJVHQVRU\
H[FLWDWLRQLQDYLUWXDOZRUOG
(QYLURQPHQWDO6HQVLQJ
2QHSUREOHPWKDWSODJXHV$,JDPHSURJUDPPLQJLVWKDWLWFDQEHYHU\XQIDLUDWOHDVWWRWKHSOD\HU7KH
UHDVRQIRUWKLVLVWKDWWKHSOD\HUFDQRQO\VHHZKDW
VRQWKHFRPSXWHUVFUHHQZKHUHDVWKHFRPSXWHU$,
V\VWHPKDVDFFHVVWRDOOYDULDEOHVDQGGDWDWKDWWKHSOD\HUFDQ
WDFFHVV
7KLVEULQJVXVWRWKHFRQFHSWRIVLPXODWHGVHQVRU\RUJDQVIRUWKHEDGJX\VDQGJDPHREMHFWV)RUH[DPSOH
LQDWKUHHGLPHQVLRQDOWDQNJDPHWKDWWDNHVSODFHRQDIODWSODLQWKHSOD\HUFDQRQO\VHHVRIDUEDVHGRQKLV
RUKHUILHOGRIYLHZ)XUWKHUWKHSOD\HUFDQ
WVHHWKURXJKURFNVEXLOGLQJVDQGREVWDFOHV+RZHYHUEHFDXVH
WKHJDPHORJLFKDVDFFHVVWRDOOWKHV\VWHPYDULDEOHVDQGGDWDVWUXFWXUHVLWLVWHPSWLQJIRULWWRXVHWKLV
H[WUDGDWDWRKHOSZLWKWKH$,IRUWKHEDGJX\V
7KHTXHVWLRQLVLVWKLVIDLUWRWKHSOD\HU":HOORIFRXUVHQRW6RKRZFDQZHPDNHVXUHZHVXSSO\WKH$,
HQJLQHRIWKHEDGJX\VDQGJDPHREMHFWVZLWKWKHVDPHLQIRUPDWLRQWKHSOD\HUKDV":HPXVWXVHVLPXODWHG
VHQVRU\LQSXWVVXFKDVYLVLRQKHDULQJYLEUDWLRQDQGWKHOLNH(DFKRSSRQHQWDQGWKHSOD\HUKDVDFRQHRI
YLVLRQDVVRFLDWHGZLWKLW%RWKWKHEDGJX\VDQGWKHSOD\HUFDQRQO\VHHREMHFWVZLWKLQWKLVFRQH7KHSOD\HU
FDQRQO\VHHZLWKLQWKLVFRQHDVDIXQFWLRQRIWKH'JUDSKLFVHQJLQHEXWWKHEDGJX\VFDQRQO\VHHZLWKLQ
WKLVFRQHDVDIXQFWLRQRIWKHLU$,SURJUDP/HW
VEHDOLWWOHPRUHVSHFLILFDERXWWKLV
6LQFHZHNQRZWKDWZHPXVWEHIDLUWRWKHSOD\HUZKDWZHFDQGRLVZULWHDVLPSOHDOJRULWKPWKDWVFDQVWKH
DUHDLQIURQWRIHDFKEDGJX\DQGGHWHUPLQHVLIWKHSOD\HULVZLWKLQYLHZ7KLVVFDQQLQJLVVLPLODUWRWKHSOD\HU
YLHZLQJWKHYLHZSRUWRUORRNLQJRXWWKHYLUWXDOZLQGRZ2IFRXUVHZHGRQ
WQHHGWRSHUIRUPDIXOO
WKUHHGLPHQVLRQDOVFDQZLWKUD\WUDFLQJRUWKHOLNHZHFDQVLPSO\PDNHVXUHWKHSOD\HULVZLWKLQWKHYLHZ
DQJOHRIWKHEDGJX\LQTXHVWLRQE\XVLQJWULJRQRPHWU\RIDQ\WHFKQLTXHZHZLVK
%DVHGRQWKHLQIRUPDWLRQREWDLQHGIURPHDFKEDGJX\VFDQWKHSURSHU$,GHFLVLRQFDQEHPDGHLQDPRUH
XQLIRUPDQGIDLUPDQQHU2IFRXUVHZHPD\ZDQWWRJLYHWKHFRPSXWHUFRQWUROOHG$,V\VWHPPRUHDGYDQWDJH
WKDQWKHKXPDQSOD\HUWRPDNHXSIRUWKH$,V\VWHPLWVHOIEHLQJUDWKHUSULPLWLYHZKHQFRPSDUHGWRWKH
ELOOLRQFHOOQHXUDOQHWZRUNLWLVFRPSHWLQJDJDLQVWEXW\RXJHWWKHLGHD
)LQDOO\ZHPLJKWDVN&DQZHSHUIRUPRWKHUNLQGVRIVHQVLQJ"<HV:HFDQFUHDWHVLPXODWHGOLJKWGHWHFWRUV
VRXQGGHWHFWRUVDQGVRIRUWK,KDYHEHHQH[SHULPHQWLQJZLWKDQXQGHUZDWHUJDPHHQJLQHDQGLQWRWDO
GDUNQHVVWKHRQO\ZD\WKHHQHP\FUHDWXUHVFDQVHH\RXLVWROLVWHQWR\RXUSURSXOVLRQXQLWV%DVHGRQWKH
SRZHUOHYHORIWKHSOD\HU
VHQJLQHVWKHJDPH$,GHWHUPLQHVWKHVRXQGOHYHOWKDWWKHEDGJX\VKHDUDQG
PRYHVWKHPWRZDUGWKHVRXQGVRXUFHRUVRXUFHV
0HPRU\DQG/HDUQLQJ
7KHILQDOWRSLFZH
UHJRLQJWRWRXFKXSRQLVPHPRU\DQGOHDUQLQJ0HPRU\LVHDV\HQRXJKWRXQGHUVWDQGEXW
OHDUQLQJLVDELWPRUHQHEXORXV/HDUQLQJDVIDUDVZHDUHFRQFHUQHGLVWKHDELOLW\WRLQWHUDFWLQDQ
HQYLURQPHQWLQVXFKDZD\WKDWEHKDYLRUVWKDWVHHPWRZRUNEHWWHUWKDQRWKHUVXQGHUFHUWDLQFRQGLWLRQVDUH
PHPRUL]HGDQGXVHGPRUHRIWHQ,QHVVHQFHOHDUQLQJLVEDVHGRQPHPRU\RISDVWDFWLRQVEHLQJJRRGRU
EDGRUZKDWHYHU,PDJLQHWKDWZHKDYHZULWWHQDIDLUO\FRPSOH[JDPHFRPSRVHGRIFRPSXWHUFRQWUROOHG
DOLHQV7KHVHDOLHQVXVHDQ)60EDVHG$,HQJLQHDQGHQYLURQPHQWDOVHQVLQJ7KHSUREOHPLVWKDWRQHRIWKH
UHVRXUFHVLQWKHJDPHLVHQHUJLRQFXEHVDQGWKHSOD\HUDQGDOLHQVPXVWFRPSHWHIRUWKHVHFXEHV
$VWKHSOD\HULVPRYLQJDURXQGLQWKHHQYLURQPHQWKHRUVKHFDQFUHDWHDPHQWDOPDSRIZKHUHHQHUJLRQ
FXEHVVHHPWREHSOHQWLIXOEXWWKHDOLHQFUHDWXUHVKDYHQRVXFKDELOLW\WKH\FDQRQO\VWDQGDQGDUHDWD
GLVDGYDQWDJH&DQZHJLYHWKHPDPHPRU\DQGWHDFKWKHPZKHUHWKHVHHQHUJLRQFXEHVDUH"2IFRXUVHZH
FDQZHDUHF\EHUJRGV
2QHVXFKLPSOHPHQWDWLRQZRXOGZRUNDVIROORZV:HFRXOGXVHDVLPSOHGDWDVWUXFWXUHWKDWZRXOGWUDFNWKH
QXPEHURIWLPHVDQDOLHQIRXQGHQHUJLRQLQHDFKJHRJUDSKLFDOUHJLRQRIWKHJDPH7KHQZKHQDQDOLHQZDV
SRZHUKXQJU\LQVWHDGRIUDQGRPO\ERXQFLQJDURXQGWKHDOLHQZRXOGUHIHUWRWKLVPHPRU\GDWDVWUXFWXUHDQG
VHOHFWWKHJHRJUDSKLFDOUHJLRQZLWKWKHKLJKHVWSUREDELOLW\RIILQGLQJHQHUJLRQDQGVHWLWVWUDMHFWRU\IRUWKLV
UHJLRQ
7KHSUHYLRXVH[DPSOHLVDVLPSOHRQHEXWDVZHFDQVHHPHPRU\DQGOHDUQLQJDUHDFWXDOO\YHU\HDV\WR
LPSOHPHQW0RUHRYHUZHFDQPDNHWKHFRPSXWHU$,OHDUQPXFKPRUHWKDQZKHUHHQHUJLRQLV,WFRXOGOHDUQ
WKHPRVWFRPPRQGHIHQVLYHPRYHVRIWKHSOD\HUDQGXVHWKLVLQIRUPDWLRQDJDLQVWWKHSOD\HU
:HOOWKDW
VHQRXJKIRUEDVLF$,WHFKQLTXHV/HW
VWDNHDTXLFNORRNDWKRZZHFDQSXWLWDOOWRJHWKHU
%XLOGLQJ0RQVWHUVIURPWKH,G
:HKDYHTXLWHDUHSHUWRLUHRIFRPSXWHU$,WULFNVDWRXUILQJHUWLSVVRKRZVKRXOGZHXVHLWDOO"%DVLFDOO\
ZKHQ\RXZULWHDJDPHDQGDUHLPSOHPHQWLQJWKH$,\RXVKRXOGOLVWWKHW\SHVRIEHKDYLRUVWKDWHDFKJDPH
REMHFWRUEDGJX\QHHGVWRH[KLELW6LPSOHFUHDWXUHVVKRXOGXVHGHWHUPLQLVWLFORJLFUDQGRPQHVVDQG
SDWWHUQV&RPSOH[FUHDWXUHVWKDWZLOOLQWHUDFWZLWKWKHSOD\HUVKRXOGXVHDQ)60EDVHG$,HQJLQH$QGWKH
PDLQJDPHREMHFWVWKDWKDUDVVDQGWHVWWKHSOD\HUVKRXOGXVHDQ)60DQGVHQVRU\LQSXWVDQGPHPRU\
7KH)XWXUH
,VHH$,DVWKHQH[WIURQWLHUWRH[SORUH:LWKRXWDGRXEWPRVWJDPHSURJUDPPHUVKDYHIRFXVHGVRPXFKRQ
JUDSKLFVWKDW$,KDVQ
WEHHQUHVHDUFKHGPXFK7KHLURQ\LVWKDWUHVHDUFKHUVKDYHEHHQPDNLQJOHDSVDQG
ERXQGVLQ$,UHVHDUFKDQG$UWLILFLDO/LIHRU$/LIH
,
PVXUH\RX
YHKHDUGWKHFRPPRQWHUPVJHQHWLFDOJRULWKPVDQGQHXUDOQHWZRUNV*HQHWLFDOJRULWKPVDUH
VLPSO\DPHWKRGRIUHSUHVHQWLQJVRPHDVSHFWRIDFRPSXWHUEDVHG$,PRGHOZLWKDVHWRIJHQHVZKLFKFDQ
UHSUHVHQWZKDWHYHUZHZLVKDJJUHVVLYHQHVVPD[LPXPVSHHGPD[LPXPYLVLRQGLVWDQFHDQGVRRQ7KHQD
SRSXODWLRQRIFUHDWXUHVLVJHQHUDWHGXVLQJDQDOJRULWKPWKDWDGGVDOLWWOHUDQGRPQHVVLQHDFKRIWKHRXWSXW
FUHDWXUHV
JHQHV
2XUJDPHZRUOGLVWKHQSRSXODWHGZLWKWKHVHJHQHEDVHGFUHDWXUHV$VWKHFUHDWXUHVLQWHUDFWLQWKH
HQYLURQPHQWWKH\DUHNLOOHGVXUYLYHDQGDUHUHERUQ7KHELRORJLFDODQDORJFRPHVLQWRSOD\GXULQJWKH
UHELUWKLQJSKDVH(LWKHUPDQXDOO\RUE\VRPHRWKHUPHDQVWKHFRPSXWHU$,HQJLQHPDWHVYDULRXVSDLUVRI
FUHDWXUHVDQGPL[HVWKHLUJHQHV7KHUHVXOWLQJRIIVSULQJWKHQVXUYLYHDQRWKHUJHQHUDWLRQDQGWKHSURFHVV
FRQWLQXHV7KLVFDXVHVWKHFUHDWXUHVWRHYROYHVRWKDWWKH\DUHPRVWDGDSWHGIRUWKHJLYHQHQYLURQPHQW
1HXUDOQHWZRUNVRQWKHRWKHUKDQGDUHFRPSXWHUDEVWUDFWLRQVRIDFROOHFWLRQRIEUDLQFHOOVWKDWKDYHILULQJ
WKUHVKROGV<RXFDQHQKDQFHRUGLPLQLVKWKHVHWKUHVKROGVDQGWKHFRQQHFWLRQVEHWZHHQFHOOV%\WHDFKLQJD
QHXUDOQHWZRUNRUVWUHQJWKHQLQJDQGZHDNHQLQJWKHVHFRQQHFWLRQVWKHQHXUDOQHWFDQOHDUQVRPHWKLQJ6R
ZHFDQXVHWKHVHQHWVWRKHOSPDNHGHFLVLRQVDQGHYHQFRPHXSZLWKQHZPHWKRGV
$QGUH/D0RWKHLVWKHDXWKRURIWKHEHVWVHOOLQJ7ULFNVRIWKH*DPH3URJUDPPLQJ*XUXV6$06
3XEOLVKLQJDQG7HDFK<RXUVHOI*DPH3URJUDPPLQJLQ'D\V6$063XEOLVKLQJ
+LVODWHVWFUHDWLRQLVWKH%ODFN$UWRI'*DPH3URJUDPPLQJ:DLWH*URXS3UHVV