From ba30e92f1b9a96533b08f63509b446d1ea18b435 Mon Sep 17 00:00:00 2001 From: creme Date: Tue, 11 Feb 2020 13:52:34 +0000 Subject: [PATCH] init source v1.3.0 --- COPYING | 334 +++++++++++ Makefile | 44 ++ README | 36 ++ ai.c | 383 ++++++++++++ ai.o | Bin 0 -> 20160 bytes changelog | 13 + common.h | 69 +++ starlanes | Bin 0 -> 107432 bytes starlanes.6 | 425 +++++++++++++ starlanes.c | 1570 +++++++++++++++++++++++++++++++++++++++++++++++++ starlanes.man | 396 +++++++++++++ starlanes.o | Bin 0 -> 172736 bytes 12 files changed, 3270 insertions(+) create mode 100644 COPYING create mode 100644 Makefile create mode 100644 README create mode 100644 ai.c create mode 100644 ai.o create mode 100644 changelog create mode 100644 common.h create mode 100755 starlanes create mode 100644 starlanes.6 create mode 100644 starlanes.c create mode 100644 starlanes.man create mode 100644 starlanes.o diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..5e48515 --- /dev/null +++ b/COPYING @@ -0,0 +1,334 @@ +GNU GENERAL PUBLIC LICENSE + +Version 2, June 1991 + +Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 +Mass Ave, Cambridge, MA 02139, USA + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + +Preamble + +The licenses for most software are designed to take away your freedom to +share and change it. By contrast, the GNU General Public License is intended +to guarantee your freedom to share and change free software--to make sure +the software is free for all its users. This General Public License applies +to most of the Free Software Foundation's software and to any other program +whose authors commit to using it. (Some other Free Software Foundation +software is covered by the GNU Library General Public License instead.) You +can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our +General Public Licenses are designed to make sure that you have the freedom +to distribute copies of free software (and charge for this service if you +wish), that you receive source code or can get it if you want it, that you +can change the software or use pieces of it in new free programs; and that +you know you can do these things. + +To protect your rights, we need to make restrictions that forbid anyone to +deny you these rights or to ask you to surrender the rights. These +restrictions translate to certain responsibilities for you if you distribute +copies of the software, or if you modify it. + +For example, if you distribute copies of such a program, whether gratis or +for a fee, you must give the recipients all the rights that you have. You +must make sure that they, too, receive or can get the source code. And you +must show them these terms so they know their rights. + +We protect your rights with two steps: (1) copyright the software, and (2) +offer you this license which gives you legal permission to copy, distribute +and/or modify the software. + +Also, for each author's protection and ours, we want to make certain that +everyone understands that there is no warranty for this free software. If +the software is modified by someone else and passed on, we want its +recipients to know that what they have is not the original, so that any +problems introduced by others will not reflect on the original authors' +reputations. + +Finally, any free program is threatened constantly by software patents. We +wish to avoid the danger that redistributors of a free program will +individually obtain patent licenses, in effect making the program +proprietary. To prevent this, we have made it clear that any patent must be +licensed for everyone's free use or not licensed at all. + +The precise terms and conditions for copying, distribution and modification +follow. + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License applies to any program or other work which contains a notice +placed by the copyright holder saying it may be distributed under the terms +of this General Public License. The "Program", below, refers to any such +program or work, and a "work based on the Program" means either the Program +or any derivative work under copyright law: that is to say, a work +containing the Program or a portion of it, either verbatim or with +modifications and/or translated into another language. (Hereinafter, +translation is included without limitation in the term "modification".) Each +licensee is addressed as "you". + +Activities other than copying, distribution and modification are not covered +by this License; they are outside its scope. The act of running the Program +is not restricted, and the output from the Program is covered only if its +contents constitute a work based on the Program (independent of having been +made by running the Program). Whether that is true depends on what the +Program does. + +1. You may copy and distribute verbatim copies of the Program's source code +as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +License and to the absence of any warranty; and give any other recipients of +the Program a copy of this License along with the Program. + +You may charge a fee for the physical act of transferring a copy, and you +may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Program or any portion of it, +thus forming a work based on the Program, and copy and distribute such +modifications or work under the terms of Section 1 above, provided that you +also meet all of these conditions: + + * a) You must cause the modified files to carry prominent notices stating + that you changed the files and the date of any change. + + * b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any part + thereof, to be licensed as a whole at no charge to all third parties + under the terms of this License. + + * c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the most ordinary way, to print or display an announcement including + an appropriate copyright notice and a notice that there is no warranty + (or else, saying that you provide a warranty) and that users may + redistribute the program under these conditions, and telling the user + how to view a copy of this License. (Exception: if the Program itself + is interactive but does not normally print such an announcement, your + work based on the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If identifiable +sections of that work are not derived from the Program, and can be +reasonably considered independent and separate works in themselves, then +this License, and its terms, do not apply to those sections when you +distribute them as separate works. But when you distribute the same sections +as part of a whole which is a work based on the Program, the distribution of +the whole must be on the terms of this License, whose permissions for other +licensees extend to the entire whole, and thus to each and every part +regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your +rights to work written entirely by you; rather, the intent is to exercise +the right to control the distribution of derivative or collective works +based on the Program. + +In addition, mere aggregation of another work not based on the Program with +the Program (or with a work based on the Program) on a volume of a storage +or distribution medium does not bring the other work under the scope of this +License. + +3. You may copy and distribute the Program (or a work based on it, under +Section 2) in object code or executable form under the terms of Sections 1 +and 2 above provided that you also do one of the following: + + * a) Accompany it with the complete corresponding machine-readable source + code, which must be distributed under the terms of Sections 1 and 2 + above on a medium customarily used for software interchange; or, + + * b) Accompany it with a written offer, valid for at least three years, + to give any third party, for a charge no more than your cost of + physically performing source distribution, a complete machine-readable + copy of the corresponding source code, to be distributed under the + terms of Sections 1 and 2 above on a medium customarily used for + software interchange; or, + + * c) Accompany it with the information you received as to the offer to + distribute corresponding source code. (This alternative is allowed only + for noncommercial distribution and only if you received the program in + object code or executable form with such an offer, in accord with + Subsection b above.) + +The source code for a work means the preferred form of the work for making +modifications to it. For an executable work, complete source code means all +the source code for all modules it contains, plus any associated interface +definition files, plus the scripts used to control compilation and +installation of the executable. However, as a special exception, the source +code distributed need not include anything that is normally distributed (in +either source or binary form) with the major components (compiler, kernel, +and so on) of the operating system on which the executable runs, unless that +component itself accompanies the executable. + +If distribution of executable or object code is made by offering access to +copy from a designated place, then offering equivalent access to copy the +source code from the same place counts as distribution of the source code, +even though third parties are not compelled to copy the source along with +the object code. + +4. You may not copy, modify, sublicense, or distribute the Program except as +expressly provided under this License. Any attempt otherwise to copy, +modify, sublicense or distribute the Program is void, and will automatically +terminate your rights under this License. However, parties who have received +copies, or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + +5. You are not required to accept this License, since you have not signed +it. However, nothing else grants you permission to modify or distribute the +Program or its derivative works. These actions are prohibited by law if you +do not accept this License. Therefore, by modifying or distributing the +Program (or any work based on the Program), you indicate your acceptance of +this License to do so, and all its terms and conditions for copying, +distributing or modifying the Program or works based on it. + +6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these terms +and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. You are not responsible +for enforcing compliance by third parties to this License. + +7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot distribute so +as to satisfy simultaneously your obligations under this License and any +other pertinent obligations, then as a consequence you may not distribute +the Program at all. For example, if a patent license would not permit +royalty-free redistribution of the Program by all those who receive copies +directly or indirectly through you, then the only way you could satisfy both +it and this License would be to refrain entirely from distribution of the +Program. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply and +the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents +or other property right claims or to contest validity of any such claims; +this section has the sole purpose of protecting the integrity of the free +software distribution system, which is implemented by public license +practices. Many people have made generous contributions to the wide range of +software distributed through that system in reliance on consistent +application of that system; it is up to the author/donor to decide if he or +she is willing to distribute software through any other system and a +licensee cannot impose that choice. + +This section is intended to make thoroughly clear what is believed to be a +consequence of the rest of this License. + +8. If the distribution and/or use of the Program is restricted in certain +countries either by patents or by copyrighted interfaces, the original +copyright holder who places the Program under this License may add an +explicit geographical distribution limitation excluding those countries, so +that distribution is permitted only in or among countries not thus excluded. +In such case, this License incorporates the limitation as if written in the +body of this License. + +9. The Free Software Foundation may publish revised and/or new versions of +the General Public License from time to time. Such new versions will be +similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + +10. If you wish to incorporate parts of the Program into other free programs +whose distribution conditions are different, write to the author to ask for +permission. For software which is copyrighted by the Free Software +Foundation, write to the Free Software Foundation; we sometimes make +exceptions for this. Our decision will be guided by the two goals of +preserving the free status of all derivatives of our free software and of +promoting the sharing and reuse of software generally. + +NO WARRANTY + +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR +THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO +THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM +PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR +CORRECTION. + +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO +LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR +THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible +use to the public, the best way to achieve this is to make it free software +which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey the +exclusion of warranty; and each file should have at least the "copyright" +line and a pointer to where the full notice is found. + +one line to give the program's name and an idea of what it does. +Copyright (C) 19yy name of author + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this when +it starts in an interactive mode: + +Gnomovision version 69, Copyright (C) 19yy name of author +Gnomovision comes with ABSOLUTELY NO WARRANTY; for details +type `show w'. This is free software, and you are welcome +to redistribute it under certain conditions; type `show c' +for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may be +called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + +Yoyodyne, Inc., hereby disclaims all copyright +interest in the program `Gnomovision' +(which makes passes at compilers) written +by James Hacker. + +signature of Ty Coon, 1 April 1989 +Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General Public +License instead of this License. + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d68866c --- /dev/null +++ b/Makefile @@ -0,0 +1,44 @@ +# +# Makefile for Starlanes +# +CC=/usr/bin/gcc +#CCOPTS=-Wall +CCOPTS=-O2 +CURSESLIB=ncurses +INSTALLDIR=/usr/local + +all: starlanes + +clean: *.o starlanes + rm -f *.o starlanes + +ai.o: ai.c common.h + $(CC) -g $(CCOPTS) -c ai.c + +starlanes.o: starlanes.c ai.c common.h + $(CC) -g $(CCOPTS) -c starlanes.c + +starlanes: starlanes.o ai.o + $(CC) -g starlanes.o ai.o -o starlanes -l$(CURSESLIB) + +install: + cp starlanes $(INSTALLDIR)/bin + cp starlanes.6 $(INSTALLDIR)/man/man6/ + chown bin:bin $(INSTALLDIR)/bin/starlanes + chown root:root $(INSTALLDIR)/man/man6/starlanes.6 + chmod 755 $(INSTALLDIR)/bin/starlanes + chmod 444 $(INSTALLDIR)/man/man6/starlanes.6 + +# fakeinstall just echos the install commands: +fakeinstall: + @echo cp starlanes $(INSTALLDIR)/bin + @echo cp starlanes.6 $(INSTALLDIR)/man/man6 + @echo chown bin:bin $(INSTALLDIR)/bin/starlanes + @echo chown root:root $(INSTALLDIR)/man/man6/starlanes.6 + @echo chmod 755 $(INSTALLDIR)/bin/starlanes + @echo chmod 444 $(INSTALLDIR)/man/man6/starlanes.6 + + + + + diff --git a/README b/README new file mode 100644 index 0000000..bb56aa8 --- /dev/null +++ b/README @@ -0,0 +1,36 @@ +Type "make" to build the starlanes binaries, then sign on as root +an type "make fakeinstall" +which will, uh, pretend to install everything. If all the commands that +it's going to execute look correct, go ahead and type "make install" (as +root) to install the goods. + +I would like to claim that the reason there is no +configure file is because for a small program +a configure file would be overkill but the +truth is that I don't as yet know how to make +one. Hence the make file may need adjusting. +For instance sometimes the curses program is +called plain curses and sometimes ncurses +It also expects there to be a /man/man6/ directory +in which case you should + +Please, if you have any problems while installing +let me, David, know ("dejvid@zamir.net" and +"dejvid@barnsdle.demon.co.uk") even if you +solve them. + +Of course you can always just change to the directory where +you installed starlanes and type "./starlanes" + +David +"dejvid@zamir.net" and "dejvid@barnsdle.demon.co.uk" + +This is a port to C from a version of Starlanes for the Osborne 1. The +original source is from a First Osborne Group (FOG) disk that I probably +picked up in 1982. The author isn't identified. Based on comments in +a TRS-80 version I picked up off the web, it would appear that it was +first published in Creative Computing magazine. + +-Beej +beej@ecst.csuchico.edu + diff --git a/ai.c b/ai.c new file mode 100644 index 0000000..7022b4c --- /dev/null +++ b/ai.c @@ -0,0 +1,383 @@ +/* Artificial Inteligence -anything in relation to non human players */ + +/* +** This program is free software; you can redistribute it and/or +** modify it under the terms of the GNU General Public License +** as published by the Free Software Foundation; either version 2 +** of the License, or (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program; if not, write to the Free Software +** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include +#include +#include +#include "common.h" + + + +/* +int move; +char map[120]; */ + + +/* +**void generate_nme(nme) +**used in place of getting name from humans +*/ +#define up_obj(move) (((move)-MAPX < 0)?OFFMAP:map[(move)-MAPX]) +#define down_obj(move) (((move)+MAPX >= MAPX*MAPY)?OFFMAP:map[(move)+MAPX]) +#define left_obj(move) (((move)%MAPX)?map[(move)-1]:OFFMAP) +#define right_obj(move) (((move)%MAPX == MAPX-1)?OFFMAP:map[(move)+1]) + +void generate_nme(char *nme) +{ + static int nmeNmr=0; + + switch(nmeNmr) { + case 0: strcpy(nme, "Vorg");break; + case 1: strcpy(nme, "Zhara");break; + case 2: strcpy(nme, "Dushan");break; + case 3: strcpy(nme, "Peko Pekovich");break; + case 4: strcpy(nme, "Agram Anastija");break; + default: strcpy(nme, "Man with no name");break; + }; + nmeNmr++; +} + +enum compass { North,East ,West,South } ;//type; + +enum farcompass {NorthW , FNorth, NorthE, FEast ,SouthE ,FSouth, SouthW ,FWest};// type; + +enum investstatus { none,small ,signif,main };// type; + +/* getfarmove gets the charecter value of a location 2 steps away. +** It makes no distiction between an empty space and an off map +** location +*/ +char getfarmove(enum farcompass fcom, char *map, int loc) +{ + static int MAPX=Mx ; + static int MAPY=My; + char ch; + switch(fcom) { + case NorthW: if ((loc-1*MAPX )< 0) ch=SPACE; + else { + ch=left_obj(loc-1*MAPX); + } + break; + case FNorth: if ((loc-2*MAPX )< 0) ch=SPACE; else ch=map[loc-2*MAPX];break; + case NorthE: if ((loc-1*MAPX )< 0) ch=SPACE; + else { + ch=right_obj(loc-1*MAPX); + } + break; + case FEast: if ((loc%MAPX)!=((loc+2)%MAPX)) ch=map[loc+2]; + else ch=SPACE ; + break; + case SouthE: if ((loc+MAPX )> (MAPX*MAPY)) ch=SPACE; + else { + ch=right_obj(loc+1*MAPX); + } + case FSouth: if ((loc+2*MAPX) > (MAPX*MAPY)) ch=SPACE; else ch=map[loc-2*MAPX];break; +/*(((loc)+2*MAPX > MAPX*MAPY)?SPACE:map[(loc)+2*MAPX]);break;*/ + case SouthW: if ((loc+MAPX )> (MAPX*MAPY)) ch=SPACE; + else { + ch=left_obj(loc+1*MAPX); + } + case FWest: if ((loc%MAPX)!=((loc-2)%MAPX)) ch=map[loc-2]; + else ch=SPACE ; + break; +/*if ((loc%MAPX)!=(loc-2)%MAPX))) ch=map[(loc)-2];else ch=SPACE;break;*/ + default: ch= '?';break; + }; + return ch; +} + +enum compass revdir(enum compass dir) +{ + enum compass rev; + switch(dir) { + case North:rev=South; break; + case East:rev=West; break; + case West:rev=East; break; + case South:rev=North; break; + } +return rev; +} + +int onestep(enum compass dir, int loc) +{ + int newloc; + switch(dir) { + case North:if ((loc)-Mx < 0) newloc=-1; + else newloc=loc-Mx; + break; + case South:if ((loc)+Mx > Mx*My) newloc=-1; + else newloc=loc+Mx; + break; + case West: if ((loc)%Mx ==0)newloc=-1; + else newloc=loc-1; + break; + case East: if ((loc)%Mx ==Mx-1)newloc=-1; + else newloc=loc+1; + break; + } + return newloc; +} + + +/* +** placemove( move) +** place move is passed the location of the numbers +** that appear on the screen to humans and selects one of these +** locations for the computer players move +*/ + +char placemove(PLAYER *pla,int *move, COMPANY *co, int turn,char *map, int Difficulty) +{ + static int MAPX=Mx ,MAPY=My; + char mvch; long moveval[NUMMOVES]; int neighb[4];int nc, ncom; + enum compass dir; + enum investstatus curst[NUMCO]; + double coholdings[NUMCO]; double tothold[NUMCO];int curpl; + char locs[South]; + int seed,intchar ,mvop,curCo,curMax, + smallC,bigC; /*this is for the implications of each move */ + long bgain,sgain; /* gains in mergers */ + + mvch= '1'; + curMax=-1000; + if ((Difficulty>1 )||(rand()%100>50)) + for (curCo=0;curCo<=NUMCO;curCo++){ + tothold[curCo] =0; + /*finds the proportion of holdings relativ to other players*/ + for (curpl=0;curpl0) curst[curCo]=signif; + else curst[curCo]=none; + } + if ((Difficulty>1 )||(rand()%100>50)) + for (mvop=0;mvop<=4;mvop++){ + seed=0; + locs[North] = up_obj(move[mvop]); + locs[South] = down_obj(move[mvop]); + locs[West] = left_obj(move[mvop]); + locs[East] = right_obj(move[mvop]); + moveval[mvop]=NEWCOCOST; + ncom=0; + for(dir=North;dir<=South;dir++){ + if (locs[dir]== STAR) moveval[mvop]=moveval[mvop]+STARCOST ; + if (locs[dir]== BLACKHOLE) moveval[mvop]=moveval[mvop]+BLACKHOLECOST ; + if (locs[dir]== NEWCO) { + moveval[mvop]=moveval[mvop]+NEWCOCOST ; + } + if iscompany(locs[dir]) { + nc=locs[dir]-'A'; + if ((ncom==0)||(nc!=neighb[1])){ + ncom++; /* todo add for cases when 3 co ajacent*/ + neighb[ncom]= nc; + } + } + } + if (ncom==0) if (moveval[mvop]>100) moveval[mvop]*=FOUNDER_BONUS; else moveval[mvop]=0 ; + /*need to check here whether company eliminated by black hole */ + else if (ncom==1){ + /*if company next door and holding is minimal then value will be reversed*/ + moveval[mvop]=moveval[mvop]*( coholdings[neighb[1]]-0.25)*tothold[ncom]; + } + else if (ncom>1){ + /*calculate value of merger*/ + smallC=1; + bigC=1; + for (curCo=2;curCo<=ncom;curCo++){ + if (co[neighb[curCo]].priceco[neighb[bigC]].price) + bigC= curCo; + } + sgain=co[neighb[smallC]].price*tothold[neighb[smallC]]* + (coholdings[neighb[smallC]]-0.25)/2;/*bonus*/ + sgain+=co[bigC].price*tothold[neighb[smallC]]* + (coholdings[neighb[smallC]]-0.25); + bgain=(moveval[mvop]+co[neighb[smallC]].price)* + tothold[neighb[bigC]]*(coholdings[neighb[bigC]]-0.25); + moveval[mvop]=sgain+bgain; + + } + if (moveval[mvop]>curMax) { + intchar= mvop +(int)'1'; + mvch= (char) intchar; + curMax=moveval[mvop] ; + } + } + else mvch=1; + return mvch; +} + + +/* +** distantblackhole starts at the black hole, moves two away and then +** looks at the three ajacent points for companies. It then increases +** the risk factor for any companies found. It isn't +** always able to detect when the route between the black hole +** and company is blocked so sometimes sees a risk that isn't there. +*/ + +void distantblackhole(COMPANY *co,char *map,int loc) +{ + int step,cloc; + enum compass dir,end; + int neighb[4], ncom, new,isnew,curCo; + + for (dir=North;dir<=South;dir++){ + step =onestep(dir, loc); + if (step>-1) if (map[step]==SPACE){ + step =onestep(dir, step); + ncom=0; + if (step>-1) if (!(iscompany(map[step]))) for (end=North;end<=South;end++) + if (end!=revdir(dir)){ /*point ajacent bh checked elsewhere*/ + cloc= onestep(end, step); + if iscompany(map[cloc]) { + new=map[cloc]-'A'; + isnew=1; + curCo=0; + while ((curCo<=ncom) && (isnew==1)){ + if (curCo==ncom) /* no need to check if co already found if first */ + neighb[curCo]=new; + else if (neighb[curCo]==new) isnew=0; + curCo++; + } + if (isnew==1) { + ncom++; + neighb[curCo]=new; + } + } + } + curCo=1; + while (curCo<=ncom){ + co[neighb[curCo]].risk+= BLACKHOLECOST/2; + curCo++; + } + } + } +} + +/* +**ai_buy_sell not only choses the most promising investments but +**actually executes the sales +*/ + +void ai_buy_sell(PLAYER *pl, COMPANY *co, int turn,char *map, int Difficulty) +{ + int curloc,curCo,BuyCo,SecCo,amt ; + static int MAPX=Mx , MAPY=My; + int localpt, localris; + enum compass dir; + int neighb[4]; + int nc, ncom,smallC,bigC; + char locs[South]; + + for(curCo=0;curCo2 )||(rand()%100>50)) + if (locs[dir]== BLACKHOLE) + localris=localris+BLACKHOLECOST;/*loss from the point*/ + if (locs[dir]== NEWCO) localpt=localpt+NEWCOCOST ; + } + } + ncom=0; + for(dir=North;dir<=South;dir++){ /*Then add those values to the potetial of companies*/ + if (iscompany(locs[dir])) { /*that are in the vicinity */ + nc=locs[dir]-'A'; + if ((ncom==0)||(nc!=neighb[1])){ + ncom++; /* todo add for cases when 3 co ajacent*/ + neighb[ncom]= nc; + } + } + } + if (ncom==1 ){ + co[nc].potential=co[nc].potential+localpt; + co[nc].risk=co[nc].risk+localris; + } + else if (ncom>1){ + smallC=1; + bigC=1; + for (curCo=2;curCo<=ncom;curCo++){ + if (co[neighb[curCo]].priceco[neighb[bigC]].price) + bigC= curCo; + } + /* bonus ignored for now*/ + co[neighb[bigC]].potential=co[neighb[bigC]].potential+(co[neighb[smallC]].price); + co[neighb[smallC]].potential=co[neighb[smallC]].potential+co[neighb[bigC]].price/2; + } + } + + SecCo=BuyCo=-1 ; + for(curCo=0;curCo0) { + co[curCo].netpot=(co[curCo].potential+co[curCo].risk)/ + (co[curCo].price); + if ((co[curCo].netpot>0)){ + if (BuyCo==-1) BuyCo=curCo; + else { + if (co[curCo].netpot>co[BuyCo].netpot) { + SecCo=BuyCo; + BuyCo=curCo; + } + else { + if (SecCo==-1) SecCo=curCo; + else if (co[curCo].netpot>co[SecCo].netpot) + SecCo=curCo; + } + } + } + } + if ((Difficulty>2 )||((Difficulty>1 )&&(rand()%100>50)) ) + for(curCo=0;curCo-1){ /*now buy shares in the company with the best prospects*/ + if (co[BuyCo].risk<0) { /*don't put all your eggs into one basket*/ + amt= pl[turn].cash/(co[BuyCo].price*2); + pl[turn].cash += (-amt * co[BuyCo].price); + pl[turn].holdings[BuyCo] += amt; + if (SecCo>-1){ + amt= pl[turn].cash/co[SecCo].price; + pl[turn].cash += (-amt * co[SecCo].price); + pl[turn].holdings[SecCo] += amt; + } + } + else { + amt= pl[turn].cash/co[BuyCo].price; + pl[turn].cash += (-amt * co[BuyCo].price); + pl[turn].holdings[BuyCo] += amt; + } + } +} diff --git a/ai.o b/ai.o new file mode 100644 index 0000000000000000000000000000000000000000..7420b732f8952e34fd1af7e70c1a2d37302ee794 GIT binary patch literal 20160 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 P^uJH>zna!mgs%TTiGQiy literal 0 HcmV?d00001 diff --git a/changelog b/changelog new file mode 100644 index 0000000..75bcf08 --- /dev/null +++ b/changelog @@ -0,0 +1,13 @@ +Version 1.3.0 released 2004 by David Barnsdale +dejvid@barnsdle.demon.co.uk and dejvid@zamir.net + +AI implemented. All AI related stuff placed in "ai.c". + +Information screen giving holdings of all players added. + +Bug caused by player earning excess money removed. + + + +Version 1.2.2 released 1997 by Brian "Beej" Hall +"beej@ecst.csuchico.edu" diff --git a/common.h b/common.h new file mode 100644 index 0000000..e7b4ff9 --- /dev/null +++ b/common.h @@ -0,0 +1,69 @@ +/* +** This program is free software; you can redistribute it and/or +** modify it under the terms of the GNU General Public License +** as published by the Free Software Foundation; either version 2 +** of the License, or (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program; if not, write to the Free Software +** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#define OFFMAP '-' /* space character */ +#define SPACE '.' /* space character */ +#define NEWCO '+' /* new company character */ +#define STAR '*' /* star character */ +#define BLACKHOLE '@' /* black hole character */ + +#define NUMCO 5 /* number of companies (don't change) */ +#define INIT_CO_COST 100 /* initial company start cost */ +#define FOUNDER_BONUS 5 /* founder gets this much stock */ +#define NUMMOVES 5 /* number of moves options a player gets */ +#define MAXPLAYERS 4 /* total number of players a game can have */ +#define STARCOST 500 /* company's price increase near star */ +#define BLACKHOLECOST -500 /* price increase near black hole */ +#define NEWCOCOST 100 /* company's price increase near new co */ + + +#define Mx 12 /* x dimension of map */ +#define My 10 /* y dimension of map */ + +/* macros to look at surrounding spaces on the map: */ + + +#define iscompany(c) ((c)>='A'&&(c)<='Z') +#define ripe(c) ((c)==STAR||(c)==NEWCO) +#define co_near(move) (iscompany(up_obj(move))||iscompany(down_obj(move))||iscompany(left_obj(move))||iscompany(right_obj(move))) +#define s_or_bh(c) ((c)==SPACE||(c)==BLACKHOLE) + + + + + +/* player and company structures: */ + +typedef struct { + char name[100]; + int holdings[NUMCO]; + long int svalue; /* stock value -- not always accurate!! */ + long int cash; + int ishuman; +} PLAYER; + +typedef struct { + char name[100]; + int price; + int size; + int potential; + int risk; /* value related to chance of being swallowed by Black Hole */ + int netpot; /* potential - risk */ +} COMPANY; + + + + diff --git a/starlanes b/starlanes new file mode 100755 index 0000000000000000000000000000000000000000..ad867a64669337a845638739664b4ae2fe5bba0d GIT binary patch literal 107432 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 F{OUZz0MhE_{RA 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 literal 0 HcmV?d00001 diff --git a/starlanes.6 b/starlanes.6 new file mode 100644 index 0000000..09f8e66 --- /dev/null +++ b/starlanes.6 @@ -0,0 +1,425 @@ +.TH STARLANES 6 "29 March 1996" "Starlanes V1.2.2" +.SH NAME +starlanes \- the game of starlanes +.SH SYNOPSIS +.BR "starlanes " [ -v | c | m ] +.SH DESCRIPTION +.B Starlanes +is a game of interstellar commerce for 1 to 4 players. Players take +two-phase turns: the first phase is movement, the second is trading. +.PP +The object of the game is to become as wealthy as possible by trading +and merging companies whilst out-smarting your friends and enemies. +.SH OPTIONS +.TP 5 +-v +Print version information +.TP 5 +-c +Force the game to play in color mode +.TP 5 +-m +Force the game to play in mono mode +.SH PLAYING STARLANES +.SS The Starlanes User Interface +.B Starlanes +is written using color ncurses, but will detect a black and white +screen and will modify its output accordingly. On Linux, setting +.B TERM=console +or +.B TERM=linux +either on a virtual console or in a +.B color_xterm +window works well. +.PP +After the initial player determination screen, you will be presented +with the main +.B Starlanes +screen. This screen is split into three individual windows: the +.BR "map window" , +the +.BR "company window" , +and the +.BR "general info window" . +.PP +The +.B map window +shows the terrain of the universe. The legend is: +.PP +.RS +.BR * " - Star" +.br +.BR @ " - Black hole" +.br +.BR + " - Infant company" +.br +.BR . " - Empty space" +.br +.BR A +- Company A (Altair Starways) +.RE +.PP +The companies are +.BR "Altair Starways" , +.BR "Beetlejuice Ltd." , +.BR "Capella Freight Co." , +.BR "Denebola Shippers" , +and +.BR "Eridani Expediters" . +On the map, the companies are represented by the first letter of their +name. +.PP +The +.B company window +shows information concerning the currently existing companies, +including the company name, its price per share, and the current +player's holdings. +.PP +The +.B general info window +will prompt the user for input if the player is waiting to move or +trade, but will also display special announcements as they come up. +During a player's turn, that player's name is displayed in the title +bar of the window, along with his cash holdings. +.PP +Also, mention should be made of two other windows: the +.B player standings window +and the +.B company detail window +(not to be confused with the +.BR "company info window" .) +.PP +The +.B player standings window +can be brought up during the player's move by pressing the +.RB ' s ' +key. This window shows all the player's names, stock holdings, cash, +and total worth, sorted by total worth. It also shows the number of +sectors that remain to be filled by companies before the game ends. +.PP +The +.B company detail window +is invoked with the +.RB ' c ' +key. It shows, for each active company, its name, price per share, +size, and total worth (all player's shares * price per share). The +company size and total worth are useful in determining the result of a +.B merger +(see below.) +.PP +If a screen redraw is necessary, pressing +.RB ' ^L ' +at almost any of the prompts will accomplish that. +.PP +Finally, if the players want to +.B quit +before the game before is over, press +.RB ' q ' +or +.RB ' ^C ' +and a quit verification window will pop up. If +.RB ' y ' +is pressed, the final game standings will be displayed, and the +program will end. +.SS Player Movement +During the first phase of a player's turn, the computer will prompt +for a move from a choice of 5. These moves are chosen randomly (for +the most part). Upon making your move, there are several things that +might happen. (NOTE: it is important to remember that two objects on +the map are adjacent +.I only +if they are orthogonally adjacent. Diagonals +.B don't +count!) +.PP +If you move into a sector that is completely surrounded by empty space +.RB ( . ), +that sector will then contain an infant company +.RB ( + ). +.PP +If you move next to an existing company +.RB ( A - E ), +that company will expand into that sector of the map. If the new +extension of the company touches an infant company +.RB ( + ), +that infant company will also be assimilated. +.PP +Given that you're not moving next to an existing company, if you move next +to a star +.RB ( * ) +or an infant company +.RB ( + ), +a new company will be formed. You, as company founder, will receive +.B 5 +shares in the company for free. For calculating how much a company +will be worth, see +.BR "Company Pricing" , +below. +.PP +If you happen to move next to a black hole +.RB ( @ ), +one of many things could happen, depending on the circumstances. See +.BR "Black Holes" , +below. +.SS Company Pricing +Determining a company's price per share is fairly simple. Generally +speaking, a company is worth +.B $100 +for every sector it occupies (as given on the +.B "company info window" +under ``Size''), plus +.BR $500 +for every sector it occupies which is adjacent to a star +.RB ( * ), +minus +.BR $500 +for every sector it occupies which is adjacent to a black hole +.RB ( @ ). +If a +company's price per share drops to 0 or less, the company vanishes +(see +.BR "Black Holes" , +below.) Also note that you will not be able to visually estimate a +company's price per share if that company has undergone a stock split +(see +.BR "Stock Splits" , +below.) +.SS Holding Bonus +Immediately after a player's move, he is awarded a cash bonus equal to +.B 5% +of the total worth of his complete holdings. This bonus is awarded +even if the game ends directly following the move (see +.BR "Game's End" , +below.) This is the cash that the player will then use during the +trading phase (see +.BR Trading , +below.) +.SS Trading +If any companies exist after a player moves on the map, that player +will be given the chance to buy and sell stock. This is where the +game is really played. One must determine which companies are going +to earn the highest profits in the next round and invest in those +companies more heavily than ones that only have a small chance of turning a +profit. (See +.BR Strategy , +below.) The current player's cash value is printed next to his name +in the +.B general info window +title. +.PP +Use the arrow keys to select a company you wish to trade stock in, +then press +.BR return . +You will be asked for an amount to trade. Enter the number of shares +you wish to purchase in this company. (Just press +.B return +again or enter +.RB `` 0 '' +if you don't really want to trade with this company.) +Choose a negative amount if you want to sell shares (at +.B 100% +of their value.) At this point, the user can also press the +.RB ' m ' +key to purchase the maximum number of shares possible, or press the +.RB ' n ' +key to sell all of his holdings in this company. +.PP +Once the player has completed trading, he can press +.B escape +to end his turn, thereby transferring control to the next player. +.SS Mergers +When a player chooses a sector of the map that would cause two or +more companies to touch, a +.B merger +occurs. +.PP +First, the companies sizes are checked +and the company with the larger size absorbs the smaller. +.PP +If the companies are the same size, the company with the highest total +worth absorbs the smaller. +(The user can view company size and company total worth on the +.BR "company detail window" , +see above.) +.PP +Finally, if both company sizes and total worths match, the companies +will merge at random. +.PP +If a three or four-way +.B merger +occurs, the merges will take place one at a time, in an order that is +somewhat clockwise. +.PP +After a +.BR merger , +each player will have half the number of shares of +held in the vanquished company added to the number of shares held in the +still-existing company. The value of the still-existing company's +price per share will increase by the vanquished company's +price per share. +.PP +Additionally, each player receives a cash bonus equal to +.PP +.RS +.RB "10 * " "stock price" " * " "holdings percentage" , +.RE +.PP +where +.B stock price +is the old price per share of the vanquished company and +.B holdings percentage +is the percentage of total stock once owned in the vanquished company. +For example, imagine that +.B Altair Starways +(worth +.B $500 +per share) is merged into +.BR "Denebola Shippers" . +Also, assume that the player owned +.B 50% +of the total shares in +.BR "Altair Starways" . +Using the formula, that player would receive a bonus of +.PP +.RS +.RB "10 * " $500 " * " 50% " = " $2,500 . +.RE +.PP +For more hints on how to deal with +.BR mergers , +see +.BR Strategy , +below. +.SS Stock Splits +When a company's price per share climbs above +.BR $3,000 , +a +.B stock split +occurs. All player holdings in that company are doubled, and the +price per share is halved. See +.BR Strategy , +below, for money making tips during and after stock splits. +.SS Black Holes +Since +.B black holes +drain +.B $500 +from any company that is in contact with them, it is possible that the +company's price per share will drop to 0 or less. If this happens, +the entire company is sucked out of space and all player holdings are +lost. +.PP +If a player attempts to place an infant company +.RB ( + ) +near a +.BR "black hole " ( @ ), +that infant company will be immediately sucked up, resulting again in +an empty sector. +.PP +Likewise, if a player attempts to start a new company that would +normally be worth $500 or less per share next to a +.BR "black hole" , +the sectors that the new company would have occupied all become empty +space +.RB ( . ). +.PP +For some ways to make +.B black holes +work to your advantage, see +.BR Strategy , +below. +.SS Game's End +The game ends when +.B 54% +of the map is filled with companies (about +.B 70 +sectors.) The player who made the final move receives his +.B 5% +holdings bonus (see +.BR "Holding Bonus" , +above) and the final standings window is displayed. The player with +the highest total worth is the winner. +.SS Strategy +In order to maximize your profits, you must wisely invent your cash. +For instance, if a company is near a black hole, it is likely that it +will lose $500 per share in the next few rounds. Likewise, if a +company is near a star, it might soon have a $500 gain. +.PP +Also, the +larger the company, the greater that chance that it will be added onto +(just because it takes up more room on the map.) If you own 300 +shares in a company, and its value goes up by $100 per share, that's a +$30,000 increase in your net worth. +.PP +Another thing to watch for is when companies are about to merge. +Remember that the number of shares you own in the smaller company will +be halved before being added to the bigger one when they merge. This +can be used to your advantage, especially if the smaller company is +worth significantly less than the larger. If the big company is worth +$2,000 per share, and the small is worth $200 per share, you can buy 10 +times as many shares in the smaller. When the companies merge, the +number of shares in the smaller company is halved, but it's still 5 +times the amount of stock you could've purchased in the larger company. +.PP +Don't forget that when two companies merge, the players receive a cash +bonus that depends on the percentage of stock they owned in the +smaller company (see +.BR Mergers , +above.) It is good to try to own a higher percentage than anyone +else. +.PP +A way to gain profit earning potential is to have a large number of +shares in a company when the stock splits two-for-one (see +.BR "Stock Splits" , +above.) Even though your initial net worth remains the same after a +stock split, you'll now increase your net worth by twice the value you +used to whenever the company's price per share rises. Also, if your +opponent has 100 shares and you have 150 before the split, that'll +change to 200 shares and 300 shares, effectively increasing your lead +in shares by 100%. +.PP +Black holes weren't present in the original game, but were added to +give players who have fallen behind a chance to shaft the leaders. If +your opponent owns 100 shares of Altair Starways and you only own 50, +you can extend the company against a black hole. Your opponent will +lose $50,000 from his net worth, but you'll only lose $25,000. +.PP +Finally, a reminder to invest as much money as you possible can each +round (unless it's too risky.) The reason for this is the 5% cash +bonus all players receive each round based on their holdings (see +.BR "Holdings Bonus" , +above.) Your cash earns you no interest. +.SH FILES +.I /usr/local/games/starlanes +.br +.I /usr/local/man/man6/starlanes.6 +.SH AUTHOR +This version of +.B Starlanes +was written and is Copyright (C) by Brian +.RB `` Beej '' +Hall 1995-1997. The author can be reached at +.BR beej@ecst.csuchico.edu . +.B Starlanes +comes with ABSOLUTELY NO WARRANTY. This is +free software, and you are welcome to redistribute it under certain +conditions; read the file +.I COPYING +for details. +.SH ACKNOWLEDGMENTS +I'd like to thank the unnamed authors of the original Starlanes for +creating such a thought provoking and fun to play text-based game. I +got my first copy on a First Osborne Group (FOG) disk in what must have +been 1982 or so, and used to spend endless hours playing against my +friends. For us, the game is just as fun as ever. To the original +authors, I salute you! +.SH BUGS +There are no computer controlled players. +.PP +Doesn't respond if ^Z is pressed to suspend the game. +.PP +If only one person is playing, he or she will frequently make enough +money to break the fixed-field-length windows and/or cause the +variable that holds player cash to overflow. Try to keep your +earnings under $2 billion until I convert these variables to long +doubles. :-) diff --git a/starlanes.c b/starlanes.c new file mode 100644 index 0000000..f8d51f3 --- /dev/null +++ b/starlanes.c @@ -0,0 +1,1570 @@ +/* +** starlanes v1.3.0 (29-Mar-1997) -- a space-age stock trading game +** +** Copyright (C) 1997 Brian "Beej" Hall +** with modifications by David Barnsdale 2004 +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of the GNU General Public License +** as published by the Free Software Foundation; either version 2 +** of the License, or (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program; if not, write to the Free Software +** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** For more information, contact "beej@ecst.csuchico.edu" +** or "dejvid@zamir.net" and "dejvid@barnsdle.demon.co.uk" +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "common.h" + + + +/* color stuff: */ + +#define BLUE_ON_BLACK COLOR_PAIR(1) +#define RED_ON_BLACK COLOR_PAIR(2) +#define GREEN_ON_BLACK COLOR_PAIR(3) +#define YELLOW_ON_BLACK COLOR_PAIR(4) +#define MAGENTA_ON_BLACK COLOR_PAIR(5) +#define CYAN_ON_BLACK COLOR_PAIR(6) +#define WHITE_ON_BLACK COLOR_PAIR(7) +#define YELLOW_ON_BLUE COLOR_PAIR(8) +#define WHITE_ON_BLUE COLOR_PAIR(9) +#define BLACK_ON_YELLOW COLOR_PAIR(10) +#define BLACK_ON_WHITE COLOR_PAIR(11) +#define BLACK_ON_RED COLOR_PAIR(12) +#define BLACK_ON_BLUE COLOR_PAIR(13) +#define BLACK_ON_GREEN COLOR_PAIR(14) + +#define MAP_TITLE (color?(BLACK_ON_WHITE):(A_REVERSE)) +#define MAP_BORDER (color?(WHITE_ON_BLACK|A_BOLD):(A_BOLD)) +#define MAP_SPACE (color?(WHITE_ON_BLACK):(A_NORMAL)) +#define MAP_STAR (color?(YELLOW_ON_BLACK|A_BOLD):(A_BOLD)) +#define MAP_NEWCO (color?(CYAN_ON_BLACK):(A_NORMAL)) +#define MAP_BLACKHOLE (A_NORMAL) +#define CO_A (color?(BLUE_ON_BLACK|A_BOLD):(A_NORMAL)) +#define CO_B (color?(GREEN_ON_BLACK):(A_NORMAL)) +#define CO_C (color?(YELLOW_ON_BLACK):(A_NORMAL)) +#define CO_D (color?(RED_ON_BLACK):(A_NORMAL)) +#define CO_E (color?(MAGENTA_ON_BLACK):(A_NORMAL)) + +#define GENERAL_TITLE (color?(WHITE_ON_BLUE|A_BOLD):(A_REVERSE)) +#define GENERAL_TITLE_BLINK (color?(WHITE_ON_BLUE|A_BOLD|A_BLINK):(A_REVERSE|A_BLINK)) +#define GENERAL_BORDER (color?(BLUE_ON_BLACK):(A_NORMAL)) +#define GENERAL_TEXT (A_NORMAL) + +#define COINFO_TITLE (color?(BLACK_ON_GREEN):(A_REVERSE)) +#define COINFO_TEXT (A_BOLD) + +#define STAND_TITLE (color?(YELLOW_ON_BLUE|A_BOLD):(A_REVERSE)) +#define STAND_BORDER (color?(BLUE_ON_BLACK):(A_BOLD)) +#define STAND_HEADER (color?(WHITE_ON_BLUE):(A_REVERSE)) + +#define MORE_COINFO_TITLE (color?(YELLOW_ON_BLUE|A_BOLD):(A_REVERSE)) +#define MORE_COINFO_BORDER (color?(BLUE_ON_BLACK):(A_BOLD)) +#define MORE_COINFO_HEADER (color?(WHITE_ON_BLUE):(A_REVERSE)) + +#define QUIT_TITLE (color?(BLACK_ON_RED):(A_REVERSE)) +#define QUIT_BORDER (color?(RED_ON_BLACK):(A_BOLD)) +#define QUIT_TEXT (color?(YELLOW_ON_BLACK|A_BOLD):(A_NORMAL)) + +/* macros to look at surrounding spaces on the map: */ + +#define up_obj(move) (((move)-MAPX < 0)?SPACE:map[(move)-MAPX]) +#define down_obj(move) (((move)+MAPX >= MAPX*MAPY)?SPACE:map[(move)+MAPX]) +#define left_obj(move) (((move)%MAPX)?map[(move)-1]:SPACE) +#define right_obj(move) (((move)%MAPX == MAPX-1)?SPACE:map[(move)+1]) + + +/* misc stuff: */ + + +#define INIT_CO_COST 100 /* initial company start cost */ +#define INIT_CASH 6000 /* initial player cash */ +#define SPLIT_PRICE 3000 /* when stocks split 2-1 */ + + +/* #define NUMMOVES 5 number of different moves a player gets */ + +#define END_PERCENT 54 /* end when this much of the map is full */ +#define DEF_LINES 25 /* default number of lines on screen */ +#define DEF_COLUMNS 80 /* default number of columns on screen */ + +#define CR 13 /* various keys */ +#define LF 10 +#define BS 8 +#define DEL 127 +#define ESC 27 +#define CTRL_L 12 +#define CTRL_C 3 +#define CTRL_Z 26 + + + + + +/* function prototypes: */ + +extern void generate_nme(char *nme); +extern char placemove( PLAYER *pla,int *move, COMPANY *co, int turn,char *map, int Difficulty); +extern void ai_buy_sell(PLAYER *pla, COMPANY *com, int turn,char *map, int Difficulty); + +void initialize(void); +void color_setup(void); +void get_num_players(void); +void showmap(void); +void drawmap(int loc, char c); +int get_move(void); /*called by main */ +void show_coinfo(void); +void more_coinfo(void); +void do_move(int move); +void do_merge(int *c1, int *c2, int *o1, int *o2); +void holding_bonus(void); +void holding_bonus(void); +void buy_sell(void); +int check_endgame(void); +int count_used_sectors(void); +void calc_cost(int cnum, int move, int n, int s, int w, int e); +void new_co_announce(int newc); +void suck_announce(int conum, int grown); +void merge_announce(int c1, int c2); +void xaction_announce(int c1, int c2); +void split_announce(int conum); +int co_avail(void); +void clear_general(char *s,int blink); +void center(WINDOW *win, int width, int row, char *s); +int my_mvwgetstr(WINDOW *win, int y, int x, int max, int restricted, char *s); +void redraw(void); +void show_standings(char *title); +void show_company_holdings(char *title); +int order_compare(const void *v1, const void *v2); +void quit_yn(void); +void shutdown(void); +void usage(void); +/* ai functions + typedef char nme[100]; + void generate_nme( char *nme); +char placemove(); */ +/* global variables */ + +char *VERSION = "1.3.0"; +char *VERSION_DATE = "1-June-2004"; +char *ident = "$Id: starlanes.c 1.2.2 29-Mar-1997 beej@ecst.csuchico.edu $"; + + +/* These two varibles must be cordinated with ai.c */ +/* These probably could be constants but untill I'm +sure they stay as variables. */ +int MAPX = Mx; /* x dimension of map */ +int MAPY = My; /* y dimension of map */ + +int LINES; /* lines in screen */ +int COLUMNS; /* columns in screen */ +char *map; /* pointer to the map data */ +char *mapc; /* copy of map for ai */ +PLAYER *pl; /* pointer to array of players */ +COMPANY *co; /* pointer to array of companies */ +int numplayers,turn; /* number of players, whose turn it is */ +WINDOW *mapwin,*general,*coinfo; /* pointers to the windows */ +int color; /* true if we want color */ +int sologame; /* set to true if nmr of playes is 0*/ +int Difficulty; + +int main(int argc, char *argv[]) +{ + int done = 0,move, colorforce=0, monoforce=0; + switch(argc) + { + case 1: break; + case 2: if (argv[1][1] == 'v') { + fprintf(stderr,"Starlanes for ncurses v%s Copyright (C) by Brian \"Beej\" Hall %s\n",VERSION,VERSION_DATE); + fprintf(stderr,"\nStarlanes comes with ABSOLUTELY NO WARRANTY. This is free\n"); + fprintf(stderr,"software, and you are welcome to redistribute it under\n"); + fprintf(stderr,"certain conditions. See the file COPYING for details.\n"); + exit(1); + } + else if (argv[1][1] == 'c') + colorforce = 1; + else if (argv[1][1] == 'm') + monoforce = 1; + else + usage(); + break; + default:usage(); + } + + /* initscr */ + initscr(); + start_color(); + + if (colorforce) + color = 1; + else if (monoforce) + color = 0; + else + color = has_colors(); + + if (color) color_setup(); + + raw(); + + /* init map, stocks */ + srand(time(NULL)); + initialize(); + + /* num players */ + get_num_players(); + + clear(); + attron(color?(YELLOW_ON_BLUE|A_BOLD):A_REVERSE); + mvprintw(0,0," StarLanes "); + attroff(color?(YELLOW_ON_BLUE|A_BOLD):A_REVERSE); + attron(color?BLUE_ON_BLACK:A_NORMAL); + printw("====================================================================="); + attroff(color?BLUE_ON_BLACK:A_NORMAL); + wnoutrefresh(stdscr); + showmap(); + show_coinfo(); + + do { + move = get_move(); + do_move(move); + holding_bonus(); + if ((done = check_endgame()) != 1) { + if (pl[turn].ishuman==1) buy_sell(); + else { + *mapc=*map ; + ai_buy_sell(pl,co,turn,map,Difficulty); + } + turn = (++turn)%numplayers; + } + } while (!done); + + shutdown(); + + return 0; +} + +/* +** initialize() - sets up the map, players, and companies +*/ + +void initialize(void) +{ + int i,j; + char *lines, *columns; + + /* get the size of the screen: */ + + if ((lines=getenv("LINES"))==NULL || (columns=getenv("COLUMNS"))==NULL) { + LINES = DEF_LINES; + COLUMNS = DEF_COLUMNS; + } else { + LINES = atoi(lines); + COLUMNS = atoi(columns); + } + + /* allocate space for everything: */ + + if ((map=malloc(MAPX*MAPY)) == NULL) { + fprintf(stderr,"starlanes: error mallocing space for map\n"); + exit(1); + } + if ((mapc=malloc(MAPX*MAPY)) == NULL) { + fprintf(stderr,"starlanes: error mallocing space for copy of map\n"); + exit(1); + } + + if ((co=calloc(1,NUMCO * sizeof(COMPANY))) == NULL) { + fprintf(stderr,"starlanes: error mallocing space for companies\n"); + exit(1); + } + + if ((pl=calloc(1,MAXPLAYERS * sizeof(PLAYER))) == NULL) { + fprintf(stderr,"starlanes: error mallocing space for players\n"); + exit(1); + } + + /* set up the map: */ + + for(i=0;i MAXPLAYERS); + addch(c+'0'); + + numplayers = (int)c; + if (numplayers == 0){ + numplayers=4; + sologame=1; + sprintf(s,"Please enter level (1 easiest,3 hardest)"); + center(stdscr,COLUMNS ,11,s); + refresh(); + noecho();raw(); + do { + Difficulty = getch()-'0'; + } while (Difficulty < 1 || Difficulty > 3); + addch(Difficulty+'0'); + } + else sologame =0; + + srand(getpid()); /* reseed the dumb random number generator */ + turn = rand()%numplayers; + + nl(); + for(plnmr=0;plnmr0){ + pl[plnmr].ishuman=0 /* here computer will generate a name */; + generate_nme(pl[plnmr].name); + } + else { + sprintf(s,"Player %d, enter your name: ",plnmr+1); + center(stdscr,COLUMNS-8 ,12+sologame+plnmr,s); + refresh(); + my_mvwgetstr(stdscr,plnmr+12+sologame,49,20,0,pl[plnmr].name); + /*getstr(pl[plnmr].name);*/ + if (pl[plnmr].name[0] == '\0') plnmr--; + } + } + nonl(); +} + + +/* +** showmap() -- draws the map in the map window +*/ + +void showmap(void) +{ + int i,j,attrs; + + wattron(mapwin,MAP_BORDER); + box(mapwin,'|','-'); + wattroff(mapwin,MAP_BORDER); + + wattron(mapwin,MAP_TITLE); + center(mapwin,MAPX*3+2,0," Map "); + wattroff(mapwin,MAP_TITLE); + + for(i=0;iNUMMOVES); + echo(); + + for(i=0;i SPLIT_PRICE) + split_announce(newc_type-'A'); + else + show_coinfo(); + } + } +} + +/* +** do_merge() -- does all the nasty business behind a merge +*/ + +void do_merge(int *c1, int *c2, int *o1, int *o2) +{ + int t,i,cb,cs,doswap=0; + + cb = *c1 - 'A'; + cs = *c2 - 'A'; + + if (co[cs].size == co[cb].size) { /* if same size, check prices */ + int pb=0,ps=0; + for(i=0;i pb) /* if smaller co has higher worth, swap 'em */ + doswap = 1; + else if (ps == pb) /* if same price, choose rand */ + doswap = rand()%2; + } + + if (co[cs].size > co[cb].size || doswap) { /* cb = merger, cs = mergee */ + t = cs; + cs = cb; + cb = t; + } + + for(i=0;i SPLIT_PRICE) + split_announce(cb); +} + +/* +** calc_cost() -- adds value to a company based on surroundings and converts +** NEWCOs to the company +*/ + +void calc_cost(int cnum, int move, int n, int s, int w, int e) +{ + if (n == STAR) co[cnum].price += STARCOST; /* stars */ + if (s == STAR) co[cnum].price += STARCOST; + if (w == STAR) co[cnum].price += STARCOST; + if (e == STAR) co[cnum].price += STARCOST; + + if (n == BLACKHOLE) co[cnum].price += BLACKHOLECOST; /* black holes */ + if (s == BLACKHOLE) co[cnum].price += BLACKHOLECOST; + if (w == BLACKHOLE) co[cnum].price += BLACKHOLECOST; + if (e == BLACKHOLE) co[cnum].price += BLACKHOLECOST; + + if (n == NEWCO) { /* starter companies */ + map[move-MAPX] = cnum + 'A'; /*company represented by A is 0 and so on */ + drawmap(move-MAPX,cnum+'A'); + co[cnum].size++; + co[cnum].price += NEWCOCOST; + } + if (s == NEWCO) { + map[move+MAPX] = cnum + 'A'; + drawmap(move+MAPX,cnum+'A'); + co[cnum].size++; + co[cnum].price += NEWCOCOST; + } + if (w == NEWCO) { + map[move-1] = cnum + 'A'; + drawmap(move-1,cnum+'A'); + co[cnum].size++; + co[cnum].price += NEWCOCOST; + } + if (e == NEWCO) { + map[move+1] = cnum + 'A'; + drawmap(move+1,cnum+'A'); + co[cnum].size++; + co[cnum].price += NEWCOCOST; + } + wnoutrefresh(mapwin); +} + +/* +** new_co_announce() -- announce the coming of a new company +*/ + +void new_co_announce(int newc) +{ + char s[80]; + + clear_general(" Special Announcement! ",1); + wattron(general,A_BOLD); + center(general,COLUMNS-2,2,"A new shipping company has been formed!"); + sprintf(s,"Its name is %s",co[newc].name); + center(general,COLUMNS-2,4,s); + wattroff(general,A_BOLD); + center(general,COLUMNS-2,7,"Press any key to continue..."); + wnoutrefresh(general); + noecho();raw(); + doupdate(); + while (getch() == CTRL_L) redraw(); +} + +/* +** suck_announce() -- when a company gets drawn into a black hole (value < 0) +*/ + +void suck_announce(int conum, int grown) +{ + int i; + + if (conum >= 0) { + for(i=0;i= 0 && grown == 1) { /* already existed */ + center(general,COLUMNS-2,2,"The company named"); + center(general,COLUMNS-2,3,co[conum].name); + center(general,COLUMNS-2,4,"has been sucked into a black hole!"); + center(general,COLUMNS-2,6,"All players' holdings lost."); + show_coinfo(); /* show change */ + } else if (conum >= 0 && grown == 0) { /* was trying to start up */ + center(general,COLUMNS-2,2,"The company that would have been named"); + center(general,COLUMNS-2,3,co[conum].name); + center(general,COLUMNS-2,4,"has been sucked into a black hole!"); + } else { /* was only a starter company, not a real one yet */ + center(general,COLUMNS-2,2,"The new company site just placed"); + center(general,COLUMNS-2,3,"has been sucked into a black hole!"); + } + wattroff(general,A_BOLD); + center(general,COLUMNS-2,8,"Press any key to continue..."); + wnoutrefresh(general); + noecho();raw(); + doupdate(); + while (getch() == CTRL_L) redraw(); +} + +/* +** merge_announce() -- announce a merger +*/ + +void merge_announce(int c1, int c2) +{ + clear_general(" Special Announcement! ",1); + wattron(general,A_BOLD); + center(general,COLUMNS-2,2,co[c2].name); + wattroff(general,A_BOLD); + center(general,COLUMNS-2,3,"has just been merged into"); + wattron(general,A_BOLD); + center(general,COLUMNS-2,4,co[c1].name); + wattroff(general,A_BOLD); + center(general,COLUMNS-2,7,"Press any key to continue..."); + wnoutrefresh(general); + noecho();raw(); + doupdate(); + while (getch() == CTRL_L) redraw(); +} + +/* +** xaction_announce() -- announce transactions after a merger +*/ + +void xaction_announce(int c1, int c2) +{ + int i,totalshares=0,newshares,bonus,totalholdings,percentage; + + clear_general(" Stock Transactions ",0); + center(general,COLUMNS-2,2,co[c2].name); + wattron(general,color?YELLOW_ON_BLUE|A_BOLD:A_REVERSE); + mvwprintw(general,2,4,"=Player===============Old Stock===New Stock===Total Holdings===Bonus="); + wattroff(general,color?YELLOW_ON_BLUE|A_BOLD:A_REVERSE); + + for(i=0;i= min && amt <= max) { + pl[turn].cash += (-amt * co[cos[cursor]].price); + pl[turn].holdings[cos[cursor]] += amt; + } else { + mvwprintw(general,cursor+3,40,"Invalid amount! "); + wmove(general,cursor+3,55); + wnoutrefresh(general); + doupdate(); + sleep(1); + } + mvwprintw(general,cursor+3,40," "); + sprintf(s," %s (Cash: $%ld) ",pl[turn].name,pl[turn].cash); + + if (amt) show_coinfo(); + + pos1 = ((COLUMNS-2)-strlen(s))/2; + pos2 = pos1 + strlen(s); + wattron(general,GENERAL_TITLE); + center(general,COLUMNS-2,0,s); + wattroff(general,GENERAL_TITLE); + wattron(general,GENERAL_BORDER); + mvwaddstr(general,0,pos1-4,"////"); + mvwaddstr(general,0,pos2,"////"); + wattroff(general,GENERAL_BORDER); + wmove(general,cursor+3,strlen(co[cos[cursor]].name)+20); + wnoutrefresh(general); + + break; + + case ESC: done = 1; + } /* switch */ + + if (cursor != newcur) { /* move cursor */ + switch(cos[cursor]) { + case 0: attrs = CO_A;break; + case 1: attrs = CO_B;break; + case 2: attrs = CO_C;break; + case 3: attrs = CO_D;break; + case 4: attrs = CO_E;break; + } + + wattron(general,attrs); + mvwprintw(general,cursor+3,20,co[cos[cursor]].name); + wattroff(general,attrs); + + wattron(general,color?BLACK_ON_WHITE:A_REVERSE); + mvwprintw(general, newcur+3, 20, co[cos[newcur]].name); + wattroff(general,color?BLACK_ON_WHITE:A_REVERSE); + + wnoutrefresh(general); + cursor = newcur; + } + } while(!done); +} + + +/* +** check_endgame() -- returns true if the game is over +*/ + +int check_endgame(void) +{ + int sum=0,i,maptotal; + + for(i=0;i= END_PERCENT && maptotal <= MAPX*MAPY-4; +} + +/* +** count_used_sectors() -- counts the number of non-empty sectors +*/ + +int count_used_sectors(void) +{ + int maptotal, i; + + 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 literal 0 HcmV?d00001