📄 worm.c
字号:
/* worm.c -- worm, worm2, playgame */
/* simple Xinu worm game by Shawn Ostermann */
#include <conf.h>
#include <kernel.h>
#include <io.h>
#include <tty.h>
#include "game.h"
int mover(), plotter(), targeter(), referee(), robot();
int wormx, wormy;
int targetx, targety;
int worm2();
int pidmover, pidplotter, pidtargeter, pidreferee, pidmain, pidtimer, pidrobot;
int pids, pidr;
worm()
{
resume(create(worm2,5000,20,"worm2",0));
}
worm2()
{
terminit();
msginit();
while (TRUE) {
playgame();
clearscreen();
}
}
playgame()
{
int x,y;
int l;
pidmain = getpid();
targetx = 0;
targety = 0;
resume(pidplotter = create(plotter,2000,50,"plotter",0));
/* draw the border */
for (l=1; l<=(XMAXFIELD/2)+1; ++l) {
x = l;
if (x>1) {
newsend(pidplotter,3,x,YMAXFIELD,'=');
newsend(pidplotter,3,x,1,'=');
newsend(pidplotter,3,XMAXFIELD-x+1,YMAXFIELD,'=');
newsend(pidplotter,3,XMAXFIELD-x+1,1,'=');
}
y = (l%3==0)?(l/3):YMAXFIELD;
if (y<=(YMAXFIELD/2)) {
newsend(pidplotter,3,XMAXFIELD,y,'|');
newsend(pidplotter,3,1,y,'|');
newsend(pidplotter,3,XMAXFIELD,YMAXFIELD-y+1,'|');
newsend(pidplotter,3,1,YMAXFIELD-y+1,'|');
}
}
resume(pidmover = create(mover,5000,12,"mover",0));
resume(pidtargeter = create(targeter,5000,11,"targeter",0));
resume(pidreferee = create(referee,5000,5,"referee",0));
sleep10(1);
resume(pidrobot = create(robot,5000,10,"robot",0));
receive();
kill(pidmover);
kill(pidtargeter);
kill(pidreferee);
kill(pidtimer);
kill(pidrobot);
kill(pids);
kill(pidr);
printstring("Hit a wall!!!",XMAXFIELD/2-5,YMAXFIELD/2);
sleep(2);
kill(pidplotter);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -