示例#1
0
void joy_button(int button) {
	switch(button) {
		case 0:
			nextmove();
			break;
		case 1:
			init();
			break;
	}
}
示例#2
0
文件: kts.c 项目: clamiax/misc
/* function implementations */
int
main(void) {
	int c, x, y, p[2];

	srand((unsigned int)time(NULL));
	x = pos[0] = RAND(8);
	y = pos[1] = RAND(8);
	board[x][y] = -1;
	for(c = 2; c <= 64; ++c) {
		nextmove(p);
		x = pos[0] = p[0];
		y = pos[1] = p[1];
		board[x][y] = c;
	}
	show();
	return 0;
}
示例#3
0
void 
movevtxs (
    struct vtx_data **graph,	/* data structure with vertex weights */
    int nvtxs,		/* number of vertices in graph */
    int nsets,		/* how many sets am I dividing into? */
    double *dist,			/* distances defining splitter */
    int *indices[][MAXSETS],	/* indices that define order in sorted lists */
    double *vals[][MAXSETS],	/* values in sorted lists */
    int startvtx[][MAXSETS],	/* index values corresponding to splitter */
    int *sets,			/* set assignment for each vertex */
    double *size,			/* sizes of the different sets */
    double *goal,			/* desired set sizes */
    int vwgt_max		/* largest vertex weight */
)
{
    double    largest;		/* largest overshoot from desired size */
    double    smallest;		/* largest undershoot from desired size */
    int       active[MAXSETS];	/* flags sets trying to change size */
    double    delta;		/* amount distances must change */
    int       vtx;		/* vertex being moved */
    int     to, from;		/* set vertex is being moved to/from */
    int       weight;		/* weight of vertex being moved */
    int       done;		/* have I successfully move a vertex? */

    /* int npass=0; *//* counts passes through main loop */
    int       badset=-1;		/* most unbalanced set */
    int       toobig=0;		/* badset too large or too small? */
    int       balanced;		/* is balance attained? */
    double    imbalance;	/* amount of imbalance in badset */
    int       i;		/* loop counter */

    /* Find most unbalanced set. */

    imbalance = largest = smallest = 0;
    for (i = 0; i < nsets; i++) {
	if (size[i] - goal[i] > largest) {
	    largest = size[i] - goal[i];
	    if (largest > imbalance) {
		imbalance = largest;
		badset = i;
		toobig = 1;
	    }
	}
	else if (goal[i] - size[i] > smallest) {
	    smallest = goal[i] - size[i];
	    if (smallest > imbalance) {
		imbalance = smallest;
		badset = i;
		toobig = -1;
	    }
	}
    }
    if (largest + smallest <= vwgt_max)
	balanced = TRUE;
    else
	balanced = FALSE;


    /* If not balanced, change distances to move vertices between sets. */
    while (!balanced) {
	/* npass++; */
	for (i = 0; i < nsets; i++)
	    active[i] = FALSE;
	active[badset] = TRUE;

	done = FALSE;
	while (!done) {
	    nextmove(nvtxs, nsets, vals, indices, startvtx, dist, sets,
		     toobig, active, &vtx, &to, &delta);
	    from = sets[vtx];
	    weight = graph[vtx]->vwgt;

	    /* Now adjust all active dists to reflect this move so far. */
	    for (i = 0; i < nsets; i++)
		if (active[i])
		    dist[i] -= toobig * delta;

	    if (toobig > 0) {
		if (size[to] + weight - goal[to] < largest) {
		    done = TRUE;
		    size[from] -= graph[vtx]->vwgt;
		    size[to] += graph[vtx]->vwgt;
		    sets[vtx] = to;
		    undo_coupling(graph, sets, nsets, from, to, toobig, badset,
				  size);
		}
		else {
		    couple(nsets, from, to, vtx);
		    active[to] = TRUE;
		}
	    }
	    else {
		if (goal[from] - (size[from] - weight) < smallest) {
		    done = TRUE;
		    size[from] -= graph[vtx]->vwgt;
		    size[to] += graph[vtx]->vwgt;
		    sets[vtx] = to;
		    undo_coupling(graph, sets, nsets, from, to, toobig, badset,
				  size);
		}
		else {
		    couple(nsets, from, to, vtx);
		    active[from] = TRUE;
		}
	    }
	}

	/* Find most unbalanced set. */
	imbalance = largest = smallest = 0;
	for (i = 0; i < nsets; i++) {
	    if (size[i] - goal[i] > largest) {
		largest = size[i] - goal[i];
		if (largest > imbalance) {
		    imbalance = largest;
		    badset = i;
		    toobig = 1;
		}
	    }
	    else if (goal[i] - size[i] > smallest) {
		smallest = goal[i] - size[i];
		if (smallest > imbalance) {
		    imbalance = smallest;
		    badset = i;
		    toobig = -1;
		}
	    }
	}
	if (largest + smallest <= vwgt_max)
	    balanced = TRUE;
	else
	    balanced = FALSE;
    }
}
示例#4
0
main()
{
	int	go[5], tvec[2];
	int	k, n, pid, ret, rpid, t;
	char	s[100];

	srand(time(0));
	go[5] = NIL;
	fprintf(stdout, "Instructions? ");
	gets(s);
	if(*s == 'y')
		instructions();
	putchar('\n');
	fprintf(stdout, "Opponent's level: b - beginner,\n");
	fprintf(stdout, "i - intermediate, e - expert? ");
	level='e';
	gets(s);
	if(*s == 'b')
		level = 'b';
	else if(*s == 'i')
		level = 'i';
	putchar('\n');
	fprintf(stdout, "You will play brown.\n\n");
	fprintf(stdout, "Would you like to roll your own dice? ");
	gets(s);
	putchar('\n');
	if(*s == 'y')
		nobroll = 1;
	fprintf(stdout, "Would you like to go first? ");
	gets(s);
	putchar('\n');
	if(*s == 'y')
		goto nowhmove;
whitesmv:
	roll(WHITE);
	fprintf(stdout, "white rolls %d, %d\n", die1, die2);
	fprintf(stdout, "white's move is:");
	if(nextmove(white, brown) == NIL)
		goto nowhmove;
	if(piececount(white, 0, 24) == 0){
		fprintf(stdout, "White wins");
		if(piececount(brown, 0, 6) != 0)
			fprintf(stdout, " with a Backgammon!\n");
		else if (piececount(brown, 0, 24) == 24)
			fprintf(stdout, " with a Gammon.\n");
		else
			fprintf(stdout, ".\n");
		exit(0);
	}
nowhmove:
	if(pflg)
		prtbrd();
	roll(BROWN);
retry:
	fprintf(stdout, "\nYour roll is %d  %d\n", die1, die2);
	fprintf(stdout, "Move? ");
	gets(s);
	switch(*s) {
		case '\0':			/* empty line */
			fprintf(stdout, "Brown's move skipped.\n");
			goto whitesmv;

		case 'b':			/* how many beared off? */
			fprintf(stdout, "Brown:   %d\n", piececount(brown, 0, 24) - 15);
			fprintf(stdout, "White:   %d\n", piececount(white, 0, 24) - 15);
			goto retry;

		case 'p':			/* print board */
			prtbrd();
			goto retry;

		case 's':			/* stop auto printing of board */
			pflg = 0;
			goto retry;

		case 'r':			/* resume auto printing */
			pflg = 1;
			goto retry;

		case 'm':			/* print possible moves */
			pmoves();
			goto retry;

		case 'q':			/* i give up */
			exit(0);

		case '!':			/* escape to Shell */
#ifdef ADD_A_MAJOR_SECURITY_HOLE
			if(s[1] != '\0')
				system(s+1);
			else
#endif
			if (!(pid = vfork()) == 0) {
				(void)setuid(getuid());
				(void)setgid(getgid());
				execl("/bin/sh", "sh", "-", 0);
				fprintf(stderr, "back: cannot exec /bin/sh!\n");
				exit(2);
			}
			while((rpid = wait(&ret)) != pid && rpid != -1)
				;
			goto retry;

		case '?':			/* well, what can i do? */
			fprintf(stdout, "<newline>	skip this move\n");
			fprintf(stdout, "b		number beared off\n");
			fprintf(stdout, "p		print board\n");
			fprintf(stdout, "q		quit\n");
			fprintf(stdout, "r		resume auto print of board\n");
			fprintf(stdout, "s		stop auto print of board\n");
			fprintf(stdout, "!		escape to Shell\n");
			goto retry;
	}
	n = sscanf(s,"%d%d%d%d%d",&go[0],&go[1],&go[2],&go[3],&go[4]);
	if((die1 != die2 && n > 2) || n > 4){
		fprintf(stdout, "Too many moves.\n");
		goto retry;
	}
	go[n] = NIL;
	if(*s=='-'){
		go[0]= -go[0];
		t=die1;
		die1=die2;
		die2=t;
	}
	for(k = 0; k < n; k++){
		if(0 <= go[k] && go[k] <= 24)
			continue;
		else{
			fprintf(stdout, "Move %d illegal.\n", go[k]);
			goto retry;
		}
	}
	if(play(brown, white, go))
		goto retry;
	if(piececount(brown, 0, 24) == 0){
		fprintf(stdout, "Brown wins");
		if(piececount(white, 0, 6) != 0)
			fprintf(stdout, " with a Backgammon.\n");
		else if(piececount(white, 0, 24) == 24)
			fprintf(stdout, " with a gammon.\n");
		else
			fprintf(stdout, ".\n");
		exit(0);
	}
	goto whitesmv;
}
示例#5
0
	Mob::Mob(int32_t oi, int32_t mid, int8_t mode, int8_t st, uint16_t fh, 
		bool newspawn, int8_t tm, Point<int16_t> position) : MapObject(oi) {

		std::string strid = string_format::extend_id(mid, 7);
		nl::node src = nl::nx::mob[strid + ".img"];

		nl::node info = src["info"];

		level = info["level"];
		watk = info["PADamage"];
		matk = info["MADamage"];
		wdef = info["PDDamage"];
		mdef = info["MDDamage"];
		accuracy = info["acc"];
		avoid = info["eva"];
		knockback = info["pushed"];
		speed = info["speed"];
		flyspeed = info["flySpeed"];
		touchdamage = info["bodyAttack"].get_bool();
		undead = info["undead"].get_bool();
		noflip = info["noFlip"].get_bool();
		notattack = info["notAttack"].get_bool();
		canjump = src["jump"].size() > 0;
		canfly = src["fly"].size() > 0;
		canmove = src["move"].size() > 0 || canfly;

		if (canfly)
		{
			animations[STAND] = src["fly"];
			animations[MOVE] = src["fly"];
		}
		else
		{
			animations[STAND] = src["stand"];
			animations[MOVE] = src["move"];
		}
		animations[JUMP] = src["jump"];
		animations[HIT] = src["hit1"];
		animations[DIE] = src["die1"];

		name = nl::nx::string["Mob.img"][std::to_string(mid)]["name"];

		nl::node sndsrc = nl::nx::sound["Mob.img"][strid];

		hitsound = sndsrc["Damage"];
		diesound = sndsrc["Die"];

		speed += 100;
		speed *= 0.001f;

		flyspeed += 100;
		flyspeed *= 0.0005f;

		if (canfly)
			phobj.type = PhysicsObject::FLYING;

		id = mid;
		team = tm;
		setposition(position);
		setcontrol(mode);
		phobj.fhid = fh;
		phobj.setflag(PhysicsObject::TURNATEDGES);

		hppercent = 0;
		dying = false;
		dead = false;
		fading = false;
		awaitdeath = false;
		setstance(st);
		flydirection = STRAIGHT;
		counter = 0;

		namelabel = Text(Text::A13M, Text::CENTER, Text::WHITE);
		namelabel.setback(Text::NAMETAG);
		namelabel.settext(name);

		if (newspawn)
		{
			fadein = true;
			opacity.set(0.0f);
		}
		else
		{
			fadein = false;
			opacity.set(1.0f);
		}

		if (control && stance == Stance::STAND)
		{
			nextmove();
		}
	}
示例#6
0
	int8_t Mob::update(const Physics& physics)
	{
		if (!active)
			return phobj.fhlayer;

		bool aniend = animations.at(stance).update();
		if (aniend && stance == DIE)
		{
			dead = true;
		}

		if (fading)
		{
			opacity -= 0.025f;
			if (opacity.last() < 0.025f)
			{
				opacity.set(0.0f);
				fading = false;
				dead = true;
			}
		}
		else if (fadein)
		{
			opacity += 0.025f;
			if (opacity.last() > 0.975f)
			{
				opacity.set(1.0f);
				fadein = false;
			}
		}

		if (dead)
		{
			active = false;
			return -1;
		}

		effects.update();
		showhp.update();

		if (!dying)
		{
			if (!canfly)
			{
				if (phobj.flagnotset(PhysicsObject::TURNATEDGES))
				{
					flip = !flip;
					phobj.setflag(PhysicsObject::TURNATEDGES);

					if (stance == HIT)
						setstance(STAND);
				}
			}

			switch (stance)
			{
			case MOVE:
				if (canfly)
				{
					phobj.hforce = flip ? flyspeed : -flyspeed;
					switch (flydirection)
					{
					case UPWARDS:
						phobj.vforce = -flyspeed;
						break;
					case DOWNWARDS:
						phobj.vforce = flyspeed;
						break;
					}
				}
				else
				{
					phobj.hforce = flip ? speed : -speed;
				}
				break;
			case HIT:
				if (canmove)
				{
					double KBFORCE = phobj.onground ? 0.2 : 0.1;
					phobj.hforce = flip ? -KBFORCE : KBFORCE;
				}
				break;
			case JUMP:
				phobj.vforce = -5.0;
				break;
			}

			physics.moveobject(phobj);

			if (control)
			{
				counter++;

				bool next;
				switch (stance)
				{
				case HIT:
					next = counter > 200;
					break;
				case JUMP:
					next = phobj.onground;
					break;
				default:
					next = aniend && counter > 200;
					break;
				}

				if (next)
				{
					nextmove();
					updatemovement();
					counter = 0;
				}
			}
		}
		else
		{
			phobj.normalize();
			physics.getfht().updatefh(phobj);
		}

		return phobj.fhlayer;
	}