The game is very similar to the traditional Star-Trek game with the following exceptions.
First, the game involves several players (1-6), each of whom has his own terminal and starship.
Second, the game runs in real time as far as the players are concerned. For example, if you are going warp 8 you will continue to move regardless of your activity at the terminal (unless you are destroyed, hit something, run out of energy, or change your warp speed). Each player's status and position as well as the scores of all players is displayed and continuously updated at each player's terminal. (The update rate is twice per second, but the source code is commented on where to change it should you wish to do so.)
Third, at the present time there are no Klingons or Romulans to shoot down, instead you shoot (or at least attempt to shoot) the other players.
Игра очень похожа на традиционную игру СтарТрек со следующими отличиями.
Во-первых, в игре участвуют несколько игроков (от 1 до 6), играющими каждый со своего термаинала и на своем звёздном судне.
Во-вторых, игра идёт настолько в реальном времени, насколько игроки заинтересованы. Например, если Вы начали перемещаться варпом со скоростью 8, движение продолжается независимо от ваших действий за терминалом (если только Вы не уничтожены, не ударились обо что-то, не израсходовали всю энергию или не изменили скорость варпа). Статус и позиция каждого игрока, а так же счёт всех игроков отображается и постоянно обновляется на терминале каждого игрока (по умолчанию частота обновления - дважды в секунду, но в исходном тексте есть комментарии - как это изменить, будь на то ваша воля).
В-третьих, в настоящее время во Вселенной нет ни клингонов, ни ромулан, которых можно было бы перестрелять, зато Вы можете перестрелять (ну или по крайне мере попробовать перестрелять) других игроков.
...
4.0 TERMINATING THE GAME
It is important that the last MTREK players clean up the system before they leave. This is done by issuing the following set of commands:
1. Terminate each PLAYER program by entering the "Q" command.
2. If the universe manager MTREKD does not terminate automatically abort it as follows:
<CNTRL> C
MCR> ABORT
3. If you are running any ROBOT programs abort each one as follows:
<CNTRL> C
MCR> ABORT
Now mop up the blood, sweat, and tears; logout; and go home.
4.0 Завершение игры
Важно, что бы последние игроки MTREK убрались за собой в системе перед тем, как выйти.
Это делается следующими действиями:
1. Завершить работу каждой программы PLAYER вводом команды Q.
2. Если программа MTREKD, управляющая вселенной, не завершила свою работы автоматически, завершите её работу следующими действиями:
Ctrl/C
MCR> ABORT
3. Если Вы запустили одну или несколько копий программы ROBOT, завершите их работу следующими действиями:
Ctrl/C
MCR> ABORT
А теперь время вытереть кровь, пот и слезы, выйти из системы и идти домой.
-------------------
Другая игрушка:
This game is similar to the arcade game, CENTIPEDE. As written, it must be played on a VT100 video terminal. You have a gun, which you can move around on the bottom third of the screen (player's zone) and with which you can shoot at various invading creatures. Bullets from your gun travel upwards until they either hit a target or the top of the screen. No more than one bullet can be on the screen at a time. Centipedes appear at various times on the screen, consisting of a head and from zero to eleven body segments. Centipedes move back and forth across the screen, descending a level when they hit a screen boundary, a mushroom, or another centipede. When they reach the bottom of the screen they begin to ascend in the same manner, but remain within the player's zone. The object of the game is to kill these centipedes before they eat your gun.
Модуль из неё, написан на RATFOR:
Код:SUBROUTINE BULCOL # # THIS SUBROUTINE CONTROLS COLLISIONS BETWEEN BULLETS AND TARGETS. # IMPLICIT INTEGER (A-Z) INCLUDE SY:CNTPED.CMN INCLUDE SY:UVT100.DAT BYTE THREE,SIX,NINE % DATA THREE,SIX,NINE / "063,"066,"071 / # # CHECK IF CURRENT BULLET LOCATION COLLIDES WITH MUSHROOM # IF (MSHBRD(BULX,BULY) > 0) [ BULACT = 0 MSHBRD(BULX,BULY) = MSHBRD(BULX,BULY) - 1 IF (MSHBRD(BULX,BULY) == 0) [ PSNBRD(BULX,BULY) = 0 SCORE = SCORE + 1 ] ] # # CHECK IF CURRENT BULLET LOCATION COLLIDES WITH CENTIPEDE(S) # DO I = 1,MAXCNT [ #LOOP THROUGH CENTIPEDE TABLE ENTRIES IF (CLEN(I) == 0) NEXT #UNUSED ENTRY DO J = 1,CLEN(I) [ #LOOP THROUGH LINKS FOR THIS ENTRY IF (BULX == CX(I,J) .AND. BULY == CY(I,J)) [ #COLLISION BULACT = 0 MSHBRD(BULX,BULY) = 4 #CREATE MUSHROOM IN MUSHROOM TABLE CNTBRD(BULX,BULY) = 0 #CLEAR CENTIPEDE BOARD AT THIS LOC IF (J == 1) [ #COLLISION WITH CENTIPEDE HEAD SCORE = SCORE + 100 #INCREMENT SCORE CLEN(I) = CLEN(I) - 1 #'SHORTEN' CENTIPEDE IF (CLEN(I) > 0) [ #IF LENGTH NOT ZERO DO K = 1,CLEN(I) [ #UPDATE LINKS IN CENTIPEDE TABLE CX(I,K) = CX(I,K+1) CY(I,K) = CY(I,K+1) ] CALL UVT100(CUP,CX(I,1),CY(I,1)) #DISPLAY NEW CENTIPEDE HEAD IF (CDIR(I) == LEFT) CALL GETADR(PRL,CLHEAD) ELSE IF (CDIR(I) == RIGHT) CALL GETADR(PRL,CRHEAD) ELSE CALL GETADR(PRL,CDHEAD) CALL WTQIO(IOWVB,5,2,,,PRL) ] ] ELSE [ #COLLISION WITH CENTIPEDE BODY SCORE = SCORE + 10 #INCREMENT SCORE NEWLEN = CLEN(I) - J CLEN(I) = J - 1 IF (NEWLEN > 0) [ DO K = 1,MAXCNT [ #FIND EMPTY SLOT IN CENTIPEDE TABLE IF (CLEN(K) > 0) NEXT DO L = 1,NEWLEN [ #MOVE NEW CENTIPEDE LINKS TO THIS SLOT CX(K,L) = CX(I,L+J) CY(K,L) = CY(I,L+J) ] CLEN(K) = NEWLEN #NEW CENTIPEDE LENGTH CDIR(K) = CDIR(I) #NEW CENTIPEDE DIRECTION OF MOTION CRISE(K) = CRISE(I) #NEW CENTIPEDE ASCEND OR DESCEND CBOT(K) = CBOT(I) #NEW CENTIPEDE HIT BOTTOM FLAG CALL UVT100(CUP,CX(K,1),CY(K,1)) IF (CDIR(K) == LEFT) #DISPLAY NEW CENTIPEDE HEAD CALL GETADR(PRL,CLHEAD) ELSE IF (CDIR(K) == RIGHT) CALL GETADR(PRL,CRHEAD) ELSE CALL GETADR(PRL,CDHEAD) CALL WTQIO(IOWVB,5,2,,,PRL) BREAK ] ] ] ] ] ] # # CHECK IF CURRENT BULLET LOCATION COLLIDES WITH SPIDER # IF (SPIACT == 1 .AND. BULX == SPIX .AND. BULY == SPIY) [ BULACT = 0 SPIACT = 0 SPITIM = TIMER + 30 #SCHEDULE NEXT SPIDER ITMP = GUNX - SPIX IF (ITMP < 0) ITMP = 0 CALL UVT100(CUP,BULX,BULY) IF (ITMP < 2) [ #INCREMENT SCORE SCORE = SCORE + 900 CALL GETADR(PRL,NINE) ] ELSE IF (ITMP < 4) [ SCORE = SCORE + 600 CALL GETADR(PRL,SIX) ] ELSE [ SCORE = SCORE + 300 CALL GETADR(PRL,THREE) ] CALL WTQIO(IOWVB,5,2,,,PRL) #DISPLAY POINTS FOR KILL CALL WAIT(200,1) #WAIT 200 MILLISECONDS ] # # CHECK IF CURRENT BULLET LOCATION COLLIDES WITH FLEA # IF (FLEACT == 1 .AND. FLEX == BULX .AND. FLEY == BULY) [ BULACT = 0 FLEACT = 0 ICOUNT = 0 DO I = GMAR,BMAR [ #NEXT SCHEDULED FLEA TIME DEPENDS DO J = LMAR,RMAR [ #ON NUMBER OF MUSHROOMS IN PLAYER ZONE IF (MSHBRD(I,J) > 0) ICOUNT = ICOUNT + 1 ] ] IF (ICOUNT < 5) #SCHEDULE NEXT FLEA FLETIM = FLETIM + 20 ELSE FLETIM = FLETIM + 200 SCORE = SCORE + 200 #INCREMENT SCORE ] # # CHECK IF CURRENT BULLET LOCATION COLLIDES WITH SCORPION # IF (SCOACT == 1 .AND. SCOX == BULX .AND. SCOY == BULY) [ BULACT = 0 SCOACT = 0 SCOTIM = SCOTIM + 200 #SCHEDULE NEXT SCORPION SCORE = SCORE + 1000 #INCREMENT SCORE ] # # IF BULLET HIT SOMETHING, DISPLAY APPROPRIATE CHARACTER # IF (BULACT == 0) [ CALL UVT100(CUP,BULX,BULY) CALL GETADR(PRL,SPACE) IF (MSHBRD(BULX,BULY) > 0) CALL GETADR(PRL,MSHCHR) IF (PSNBRD(BULX,BULY) == 1) CALL GETADR(PRL,PSNCHR) CALL WTQIO(IOWVB,5,2,,,PRL) ] RETURN END




Ответить с цитированием