%XLOGLQJ%UDLQVLQWR
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
Plot_Pixel(int x, int y,unsigned char color); :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
memory offset = y*320+x; $GGLQJWKLVPHPRU\RIIVHWWR$JLYHVXVWKHILQDOPHPRU\ORFDWLRQWRDFFHVVWKHGHVLUHGVFUHHQ SL[HO+HQFHLIZHDOLDVD)$5SRLQWHUWRWKHYLGHRPHPRU\OLNHWKLV
unsigned char far* video_buffer = (unsigned char far*)A0000000L; 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'+
// GMOD.H graphics module for demos unsigned char far *video_buffer = (unsigned char far *)0xA0000000L; void Plot_Pixel(int x,int y,int color) { // plots the pixel in the desired color a little quicker using binary shifting // to accomplish the multiplications video_buffer[((y<<8) + (y<<6)) + x] = (unsigned char )color; } // end Plot_Pixel void Set_Graphics_Mode(int mode) { // use the video interrupt 10h and the C interrupt function to set // the video mode union REGS inregs,outregs; inregs.h.ah = 0; // set video mode sub-function inregs.h.al = (unsigned char)mode; // video mode to change to int86(0x10, &inregs, &outregs); } // end Set_Graphics_Mode void Time_Delay(int clicks) { // this function uses the internal timer to wait a specified number of "clicks" // the actual amount of real time is the number of clicks * (time per click) // usually the time per click is set to 1/18th of a second or 55ms long far *clock = (long far *)0x0000046CL, // address of timer start_time; // starting time // get current time start_time = *clock; // 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 (pxby1) by1++; else if (py
/LVWLQJ$'HPRRI'HWHUPLQLVWLF/RJLF
// Deterministic chasing algorithm demo // use numeric keypad to move player #include #include #include #include #include #include #include #include
<stdio.h> <stdlib.h> <dos.h> <math.h> <string.h>
#include "gmod.h" // include our graphics module int main(void) { int px=160, // starting position of player py=100, bx=0, // starting position of bad guy by=0, done=0; // exit flag // set the video mode to 13h Set_Graphics_Mode(0x13); // main event loop while(!done) { // perform player logic // get input from keyboard if (kbhit()) // which way is player moving? switch(getch()) { case '8': // up { if ((py-=2)<0) py+=200; } break; case '2': // down { if ((py+=2)>=200) py-=200; } break; case '6': // right {
if ((px+=2)>=320) px-=320; } break; case '4': // left { if ((px-=2)<0) px+=320; } break; case 27: // exit { done=1; } break; } // end switch } // end if // perform bad guy logic if (px>bx) bx++; else if (pxby) by++; else if (py
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\DIWHUDFTXLULQJVRPHVHFUHWGRFXPHQWVWKLVKDSSHQVWRPHDOOWKHWLPH 1RZLPDJLQH\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\$,
// select bx1 = bx1 // select by1 = by1
a + a +
random translation for X axis rand()%11 - 5; random translation for Y axis rand()%11 - 5;
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
// Random logic demo // moves a flock of flies around // hit any key to exit #include #include #include #include #include #include #include #include
<stdio.h> <stdlib.h> <dos.h> <math.h> <string.h>
#include "gmod.h" // include our graphics module #define NUM_FLIES 64 // start off with 64 flies typedef struct fly_typ { int x,y; // position of fly } fly; int main(void) { fly flys[NUM_FLIES]; // the array of flies int index; // looping variable // set the video mode to 13h Set_Graphics_Mode(0x13); // initialize all flies to random position for (index=0; index
Plot_Pixel(flys[index].x,flys[index].y,0); // perform fly logic, translate each fly +-2 pixels for (index=0; index
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
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
int move_x[16] = {-2,0,0,0,3,3,2,1,0, -2,-2,-,0,1,2,3,4}; int move_y[16] = {0,0,0,1,1,1,0,0,-1,-1, 2,3,4,0,0.-1}; // encoded pattern logic for a 16 element list
for (index=0; index<16; index++) { bx1+=move_x[index]; by1+=move_y[index]; } // end for index
)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 6WDWH0RYHUDQGRPO\ 6WDWH7UDFNSOD\HU 6WDWH8VHDSDWWHUQ
67$7(B1(: 67$7(B5$1'20
67$7(B75$&. 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
typedef unsigned short DISTANCE; const DISTANCE Tracking_Threshold = 50; const DISTANCE Random_Threshold = 100; DISTANCE theDistance; //Define states and initialize enum states{new, random, track, pattern}; states currentState = new; //FSM loop for(;;){ switch (currentState) { case new: //Note: Switchbox only, causes no behavior theDistance = CalcDistanceToPlayer(); if (theDistance > Random_Threshold){ currentState = random; } 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); } }
1RWHWKDW6WKHQHZVWDWH GRHVQRWWULJJHUDQ\EHKDYLRURQWKHSDUWRIWKHRSSRQHQW5DWKHULWDFWVDVD VWDWHVZLWFKER[WRZKLFKDOOVWDWHVH[FHSWLWVHOI WUDQVLWLRQ7KLVDOORZV\RXWRORFDOL]HLQDVLQJOHFRQWURO EORFNDOOWKHGHFLVLRQPDNLQJDERXWWUDQVLWLRQV $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"
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
$QGUH/D0RWKHLVWKHDXWKRURIWKHEHVWVHOOLQJ7ULFNVRIWKH*DPH3URJUDPPLQJ*XUXV6$06 3XEOLVKLQJ DQG7HDFK
Related Documents