📄 main.c
字号:
/* command help: highlighted */ move_to(CMDHELPR,CMDHELPC); standout(); /* curses usually does rev video */ string_out ("[1-9] bearing C Cloak D Dock G Get-msg I[0-9] Impulse L Locate M Map"); move_to(CMDHELPR + 1,CMDHELPC); string_out ("N Redraw-scan P[A-Z] Phaser Q<CR> Quit R[A-Z][msg]<CR> Radio X[A-Z] Xam"); move_to(CMDHELPR + 2,CMDHELPC); string_out ("S[01-25]/S-[1-9] Shields+nK/-nK T[1-9] Torpedo W[0-6] Warp-Speed Z Zap"); standend(); /* end "stand-out" mode */ /* set up message line & command input prompt */ move_to(MESSAGER, MESSAGEC - 9); string_out ("MESSAGE:"); move_to(COMMANDR, COMMANDC - 9); string_out ("COMMAND:"); refresh_scr(); }; /* draw screen */redraw_screen() /* Re-draws the screen. Useful in switch a broadcast or system message messed it up. */ { register struct ship *pships; draw_screen(); pships = ships + (local_ship - A); pships->dis_energy = true; pships->dis_shields = true; pships->dis_torpedos = true; pships->dis_warp_set = true; pships->dis_warp_speed = true; pships->dis_quad = true; pships->dis_sector = true; pships->dis_bearing = true; pships->dis_fleet = true; pships->dis_dir = true; redraw = false; }; /* proc redraw_screen */shipinrange(callship, findship, range, wantbd, dist, bearing, ontarget) char callship; /* calling ship */ char findship; /* ship to look for */ int range; /* range (in sectors) to scan: upto 5 */ boolean wantbd; /* true if bearing & distance wanted */ int *dist; /* distance to ship (if found) */ int *bearing; /* bearing toward ship (if found) */ boolean *ontarget; /* true if on target for torpedo */ /* * Determine if another ship (findship) is within "range" & if so, * optionally its distance & bearing. * * RETURNS 1 if ship found, 0 if not found. */ { register struct ship *pships; register int i,j; /* loop index */ boolean found; /* set true when ship found */ int sqr; /* starting quad row */ int sqc; /* starting quad col */ int ssr; /* starting sector row */ int ssc; /* starting sector col */ int cqr; /* current quad row */ int cqc; /* current quad col */ register int csr; /* current sector row */ register int csc; /* current sector col */ pships = ships + (callship - A); /* calculate starting quad & sector, row & col */ sqr = pships->q_row; sqc = pships->q_col; ssr = pships->s_row - range; ssc = pships->s_col - range; /* adjust starting values if they start in previous quadrant */ if (ssr < 0) { ssr = NUMSECTORS + ssr; sqr = sqr - 1; if (sqr < 0) sqr = NUMQUADS -1; }; if (ssc < 0) { ssc = NUMSECTORS + ssc; sqc = sqc - 1; if (sqc < 0) sqc = NUMQUADS - 1; }; /* init "current" values */ cqr = sqr; csr = ssr; /* loop for (range*2)+1 rows: ship position +/- range */ for (i=0, found=false; i < (range * 2)+1 && ! found ;) { csc = ssc; cqc = sqc; /* loop for (range * 2)+1 cols: ship position +/- range */ for (j=0; j < (range * 2)+1 && ! found ;) { if (universe [cqr][cqc].sectors [csr][csc].image == findship) found = true; else { j++; csc++; if (csc > NUMSECTORS -1) { /* goto 1st sector col, in next quad col */ csc = 0; cqc++; if (cqc > NUMQUADS -1) cqc = 0; }; }; }; /* column loop */ if (! found) { i++; csr++; if (csr > NUMSECTORS -1) { csr = 0; cqr++; if (cqr > NUMQUADS -1) cqr = 0; }; }; }; /* row loop */ /* calculate distance bearing */ if (found && wantbd) { switch (i) { case 0: *dist = 5; switch (j) { case 0: *ontarget = true; *bearing = 7; break; case 1: case 2: case 3: case 4: *bearing = 7; break; case 5: *bearing = 8; *ontarget = true; break; case 6: case 7: case 8: case 9: *bearing = 9; break; case 10: *bearing = 9; *ontarget = true; break; } break; case 1: switch (j) { case 0: *dist = 5; *bearing = 7; break; case 1: *dist = 4; *ontarget = true; *bearing = 7; break; case 2: case 3: case 4: *dist = 4; *bearing = 7; break; case 5: *dist = 4; *bearing = 8; *ontarget = true; break; case 6: case 7: case 8: *dist = 4; *bearing = 9; break; case 10: *dist = 5; *bearing = 9; break; case 9: *dist = 4; *bearing = 9; *ontarget = true; break; } break; case 2: switch (j) { case 0: *dist = 5; *bearing = 7; break; case 1: *dist = 4; *bearing = 7; break; case 2: *dist = 3; *ontarget = true; *bearing = 7; break; case 3: case 4: *dist = 3; *bearing = 7; break; case 5: *dist = 3; *bearing = 8; *ontarget = true; break; case 6: case 7: *dist = 3; *bearing = 9; break; case 8: *dist = 3; *bearing = 9; *ontarget = true; break; case 9: *dist = 4; *bearing = 9; break; case 10: *dist = 5; *bearing = 9; break; } break; case 3: switch (j) { case 0: *dist = 5; *bearing = 7; break; case 1: *dist = 4; *bearing = 7; break; case 2: *dist = 3; *bearing = 7; break; case 3: *dist = 2; *bearing = 7; *ontarget = true; break; case 4: *dist = 2; *bearing = 4; *dist = 2; break; case 5: *dist = 2; *bearing = 8; *ontarget = true; break; case 6: *dist = 2; *bearing = 6; *dist = 2; break; case 7: *dist = 2; *bearing = 9; *ontarget = true; break; case 8: *dist = 3; *bearing = 9; break; case 9: *dist = 4; *bearing = 9; break; case 10: *dist = 5; *bearing = 9; break; } break; case 4: switch (j) { case 0: *dist = 5; *bearing = 7; break; case 1: *dist = 4; *bearing = 7; break; case 2: *dist = 3; *bearing = 7; break; case 3: *dist = 2; *bearing = 8; break; case 4: *dist = 1; *bearing = 7; *ontarget = true; break; case 5: *dist = 1; *bearing = 8; *ontarget = true; break; case 6: *dist = 1; *bearing = 9; *ontarget = true; break; case 7: *dist = 2; *bearing = 2; break; case 8: *dist = 3; *bearing = 9; break; case 9: *dist = 4; *bearing = 9; break; case 10: *dist = 5; *bearing = 9; break; } break; case 5: *dist = abs(j-range); switch (j) { case 0: case 1: case 2: case 3: case 4: *bearing = 4; *ontarget = true; break; case 5: /* this case shouldn't happen */ *bearing = 4; break; case 6: case 7: case 8: case 9: case 10: *bearing = 6; *ontarget = true; break; } break; case 6: switch (j) { case 0: *dist = 5; *bearing = 1; break; case 1: *dist = 4; *bearing = 1; break; case 2: *dist = 3; *bearing = 1; break; case 3: *dist = 2; *bearing = 8; *dist = 2; break; case 4: *dist = 1; *bearing = 1; *ontarget = true; break; case 5: *dist = 1; *bearing = 2; *ontarget = true; break; case 6: *dist = 1; *bearing = 3; *ontarget = true; break; case 7: *dist = 2; *bearing = 8; *dist = 2; break; case 8: *dist = 3; *bearing = 3; break; case 9: *dist = 4; *bearing = 3; break; case 10: *dist = 5; *bearing = 3; break; } break; case 7: switch (j) { case 0: *dist = 5; *bearing = 1; break; case 1: *dist = 4; *bearing = 1; break; case 2: *dist = 3; *bearing = 1; break; case 3: *dist = 2; *bearing = 1; *ontarget = true; break; case 4: *dist = 2; *bearing = 4; *dist = 2; break; case 5: *dist = 2; *bearing = 2; *ontarget = true; break; case 6: *dist = 2; *bearing = 4; *dist = 2; break; case 7: *dist = 2; *bearing = 3; *ontarget = true; break; case 8: *dist = 3; *bearing = 3; break; case 9: *dist = 4; *bearing = 3; break; case 10: *dist = 5; *bearing = 3; break; } break; case 8: switch (j) { case 0: *dist = 5; *bearing = 1; break; case 1: *dist = 4; *bearing = 1; break; case 2: *dist = 3; *bearing = 1; *ontarget = true; break; case 3: case 4: *dist = 3; *bearing = 1; break; case 5: *dist = 3; *bearing = 2; *ontarget = true; break; case 6: case 7: *dist = 3; *bearing = 3; break; case 8: *dist = 3; *bearing = 3; *ontarget = true; break; case 9: *dist = 4; *bearing = 3; break; case 10: *dist = 5; *bearing = 3; break; } break; case 9: switch (j) { case 0: *dist = 5; *bearing = 1; break; case 1: *dist = 4; *bearing = 1; *ontarget = true; break; case 2: case 3: case 4: *dist = 4; *bearing = 1; break; case 5: *dist = 4; *bearing = 2; *ontarget = true; break; case 6: case 7: case 8: *dist = 4; *bearing = 3; break; case 9: *dist = 4; *bearing = 3; *ontarget = true; break; case 10: *dist = 5; *bearing = 3; break; } break; case 10: *dist = 5; switch (j) { case 0: *bearing = 1; *ontarget = true; break; case 1: case 2: case 3: case 4: *bearing = 1; break; case 5: *bearing = 2; *ontarget = true; break; case 6: case 7: case 8: case 9: *bearing = 3; break; case 10: *bearing = 3; *ontarget = true; break; } break; } /* switch i */ } /* found & wantbd */ if (found) return(1); else return(0); }; /* shipinrange */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -