Plan 9 from Bell Labs’s /usr/web/sources/patch/applied/mahjongg-redrawundo/logic.c.new

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


#include <u.h>
#include <libc.h>
#include <draw.h>
#include <event.h>

#include "mahjongg.h"

Click NC = {-1, 0, 0,};

Click
Cl(int d, int x, int y)
{
	Click c = {d, x, y,};
	return c;
}

int
eqcl(Click c1, Click c2)
{
	return c1.d == c2.d && c1.x == c2.x && c1.y == c2.y;
}


int
freeup(Click c)
{
	if(c.d == Depth -1 || (level.board[c.d+1][c.x][c.y].which == None &&
			level.board[c.d+1][c.x+1][c.y].which == None &&
			level.board[c.d+1][c.x][c.y+1].which == None &&
			level.board[c.d+1][c.x+1][c.y+1].which == None))
		return 1;
	
	return 0;
}

int
freeleft(Click c)
{
	if(c.x == 0 || (level.board[c.d][c.x-1][c.y].which == None &&
		level.board[c.d][c.x-1][c.y+1].which == None)) 
		return 1;

	return 0;
}

int
freeright(Click c)
{		
	if(c.x == Lx-2 || (level.board[c.d][c.x+2][c.y].which == None &&
		level.board[c.d][c.x+2][c.y+1].which == None))
		return 1;

	return 0;
}

int
isfree(Click c)
{
	return (freeleft(c) || freeright(c)) && freeup(c);
}

Click
cmatch(Click c, int dtop)
{
	Click lc;

	lc.d = dtop;
	do {
		for(lc.y = 0; lc.y < Ly; lc.y++)
			for(lc.x = 0; lc.x < Lx; lc.x++)
				if(level.board[lc.d][lc.x][lc.y].which == TL && isfree(lc) && !eqcl(c, lc) && 
					level.board[c.d][c.x][c.y].type == level.board[lc.d][lc.x][lc.y].type)
			
					return lc;

	} while(--lc.d >= 0);

	return NC;
}

Brick *
bmatch(Click c)
{
	Click lc;

	lc = cmatch(c, Depth);
	if(lc.d == -1)
		return nil;
	else
		return &level.board[lc.d][lc.x][lc.y];
}

int
canmove(void)
{
	Click c;

	for(c.d = Depth - 1; c.d >= 0; c.d--) 
		for(c.y = 0; c.y < Ly; c.y++) 
			for(c.x = 0; c.x < Lx; c.x++) 
				if(level.board[c.d][c.x][c.y].which == TL && isfree(c))
					if(bmatch(c) != nil)
						return 1;
	return 0;
}

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.