⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 diamond.c

📁 C大程序 需要解压
💻 C
字号:
#define DIAMOND_FLASHTIME 15000

#define DIAMOND_COUNT 7

#define DIAMOND_CHOOSENINCTIME 8000

bmp_picture diamond[7][4];
int dia[16][8];

struct{
	int x1, y1, x2, y2;
	int chd;
}clk;

struct{
	int x, y;
	int cur, time;
}flash;

int diamond_x, diamond_y;
int diamond_choosencolor = 4, diamond_choosentime = 0;

void diamond_init(){
	BMP_Load("red_0.bmp", &diamond[0][0]);
	BMP_Load("yellow_0.bmp", &diamond[1][0]);
	BMP_Load("blue_0.bmp", &diamond[2][0]);
	BMP_Load("green_0.bmp", &diamond[3][0]);
	BMP_Load("brown_0.bmp", &diamond[4][0]);
	BMP_Load("pink_0.bmp", &diamond[5][0]);
	BMP_Load("white_0.bmp", &diamond[6][0]);

	BMP_Load("red_1.bmp", &diamond[0][1]);
	BMP_Load("yellow_1.bmp", &diamond[1][1]);
	BMP_Load("blue_1.bmp", &diamond[2][1]);
	BMP_Load("green_1.bmp", &diamond[3][1]);
	BMP_Load("brown_1.bmp", &diamond[4][1]);
	BMP_Load("pink_1.bmp", &diamond[5][1]);
	BMP_Load("white_1.bmp", &diamond[6][1]);

	BMP_Load("red_2.bmp", &diamond[0][2]);
	BMP_Load("yellow_2.bmp", &diamond[1][2]);
	BMP_Load("blue_2.bmp", &diamond[2][2]);
	BMP_Load("green_2.bmp", &diamond[3][2]);
	BMP_Load("brown_2.bmp", &diamond[4][2]);
	BMP_Load("pink_2.bmp", &diamond[5][2]);
	BMP_Load("white_2.bmp", &diamond[6][2]);

	BMP_Load("red_1.bmp", &diamond[0][3]);
	BMP_Load("yellow_1.bmp", &diamond[1][3]);
	BMP_Load("blue_1.bmp", &diamond[2][3]);
	BMP_Load("green_1.bmp", &diamond[3][3]);
	BMP_Load("brown_1.bmp", &diamond[4][3]);
	BMP_Load("pink_1.bmp", &diamond[5][3]);
	BMP_Load("white_1.bmp", &diamond[6][3]);
}

void diamond_fresh(){
	int i, j;

	for (i = 0; i < 8; i++)
		for (j = 0; j < 8; j++)
			dia[i][j] = random(DIAMOND_COUNT);
	flash.x = -1;
	flash.y = -1;
	flash.cur = 0;
	flash.time = 0;
}

void diamond_showall(){
	int i, j;

	mouse_get();
	mouse_putback();
	for (i = 0; i < 8; i++)
		for (j = 0; j < 8; j++)
			if (dia[i][j] != -1)
				BMP_Put(diamond[dia[i][j]][0], 124 + j * 24, 172 - i * 24);
			else
				clean_black(124 + j * 24, 172 - i * 24, 24, 24);
	mouse_getback();
	mouse_showcur();
}

long diamond_check(long times){
	int i, j, k, t;
	long rtn = 0l;
	int s[8][8][2];

	memset(s, 0, 256);
	for (i = 0; i < 8; i++)
		for (j = 0; j < 8; j++){
			if (!s[i][j][0]){
				for (t = 1; (i + t < 8) && (dia[i + t][j] == dia[i][j]); t++);
				if (t >= 3)
					for (k = 0; k < t; k++)
						s[i + k][j][0] = 1;
			}
			if (!s[i][j][1]){
				for (t = 1; (j + t < 8) && (dia[i][j + t] == dia[i][j]); t++);
				if (t >= 3)
					for (k = 0; k < t; k++)
						s[i][j + k][1] = 1;
			}
		}
	for (i = 0; i < 8; i++)
		for (j = 0; j < 8; j++)
			if (s[i][j][0] | s[i][j][1]){
				dia[i][j] = -1;
				rtn += 10l;
			}
	return rtn * times;
}

void diamond_fill(){
	int i, j;

	for (i = 0; i < 8; i++)
		for (j = 0; j < 8; j++)
			if (dia[i][j] == -1)
				dia[i][j] = random(DIAMOND_COUNT);
}

void diamond_choose(){
	if (!clk.chd) return;
	if (++diamond_choosentime == DIAMOND_CHOOSENINCTIME){
		diamond_choosentime = 0;
		diamond_choosencolor = (diamond_choosencolor + 8) % 256;
	}
		else return;
	mouse_get();
	mouse_putback();
	HLine(124 + clk.x1 * 24, 147 + clk.x1 * 24, 4 + clk.y1 * 24, diamond_choosencolor);
	HLine(124 + clk.x1 * 24, 147 + clk.x1 * 24, 27 + clk.y1 * 24, diamond_choosencolor);
	VLine(4 + clk.y1 * 24, 27 + clk.y1 * 24, 124 + clk.x1 * 24, diamond_choosencolor);
	VLine(4 + clk.y1 * 24, 27 + clk.y1 * 24, 147 + clk.x1 * 24, diamond_choosencolor);
	mouse_getback();
	mouse_showcur();
}

void diamond_unchoose(){
	mouse_get();
	mouse_putback();
	HLine(124 + clk.x1 * 24, 147 + clk.x1 * 24, 4 + clk.y1  * 24, 0);
	HLine(124 + clk.x1 * 24, 147 + clk.x1 * 24, 27 + clk.y1  * 24, 0);
	VLine(4 + clk.y1  * 24, 27 + clk.y1  * 24, 124 + clk.x1 * 24, 0);
	VLine(4 + clk.y1  * 24, 27 + clk.y1  * 24, 147 + clk.x1 * 24, 0);
	mouse_getback();
	mouse_showcur();
}

int diamond_click(){
	if (!clk.chd){
		clk.x1 = diamond_x;
		clk.y1 = diamond_y;
		clk.chd = 1;
		return 0;
	}
	else{
		if (((abs(diamond_x - clk.x1) == 1) && (diamond_y == clk.y1)) || ((abs(diamond_y - clk.y1) == 1) && (diamond_x == clk.x1))){
			clk.x2 = diamond_x;
			clk.y2 = diamond_y;
			clk.chd = 2;
			return 1;
		}
		else if ((diamond_x == clk.x1) && (diamond_y == clk.y1)){
			clk.chd = 0;
			diamond_unchoose();
			return 0;
		}
		else{
			diamond_unchoose();
			clk.chd = 0;
			return 0;
		}
	}
}

void diamond_soundonmove(){
	long i, j;

	for (i = 0; i < 8000l; i++){
		sound_gdserver();
		for (j = 0; j < 1000l; j++);
	}
}

void diamond_Hmove(int x1, int x2, int y){
	int t, i;

	if (x1 > x2){
		x1 ^= x2;
		x2 ^= x1;
		x1 ^= x2;
	}
	for (t = 1; t <= 2; t++/*, delay(100)*/){
		mouse_get();
		mouse_putback();
		clean_black(124 + x1 * 24, 172 - y * 24, 6 * t, 24);
		clean_black(148 + x2 * 24 - 6 * t, 172 - y * 24, 6 * t, 24);
		BMP_Put(diamond[dia[y][x1]][0], 124 + x1 * 24 + t * 6, 172 - y * 24);
		for (i = 0; i < 24; i++)
			_fmemcpy(&video_buffer[(172 - y * 24 + i) * SCREEN_WIDTH + 124 + x2 * 24 + 6 * t], &diamond[dia[y][x2]][0].buffer[(23 - i) * 24 + 12 * t], 24 - 12 * t);
		mouse_getback();
		mouse_showcur();
		diamond_soundonmove();
	}
	for (t = 1; t >= 0; t--/*, delay(100)*/){
		mouse_get();
		mouse_putback();
		clean_black(124 + x1 * 24, 172 - y * 24, 6 * t, 24);
		clean_black(148 + x2 * 24 - 6 * t, 172 - y * 24, 6 * t, 24);
		BMP_Put(diamond[dia[y][x1]][0], 124 + x2 * 24 - t * 6, 172 - y * 24);
		for (i = 0; i < 24; i++)
			_fmemcpy(&video_buffer[(172 - y * 24 + i) * SCREEN_WIDTH + 124 + x1 * 24 + 6 * t], &diamond[dia[y][x2]][0].buffer[(23 - i) * 24], 24 - 12 * t);
		mouse_getback();
		mouse_showcur();
		diamond_soundonmove();
	}
}

void diamond_Vmove(int y1, int y2, int x){
	int t, i;

	if (y1 < y2){
		y1 ^= y2;
		y2 ^= y1;
		y1 ^= y2;
	}
	for (t = 1; t <= 2; t++/*, delay(100)*/){
		mouse_get();
		mouse_putback();
		clean_black(124 + x * 24, 172 - y1 * 24, 24, 6 * t);
		clean_black(124 + x * 24, 196 - y2 * 24 - 6 * t, 24, 6 * t);
		BMP_Put(diamond[dia[y1][x]][0], 124 + x * 24, 172 - y1 * 24 + 6 * t);
		for (i = 0; i < 24 - t * 12; i++)
			_fmemcpy(&video_buffer[(172 - y2 * 24 + i + 6 * t) * SCREEN_WIDTH + 124 + x * 24], &diamond[dia[y2][x]][0].buffer[(24 - t * 12 + i) * 24], 24);
		mouse_getback();
		mouse_showcur();
		diamond_soundonmove();
	}
	for (t = 1; t >= 0; t--/*, delay(100)*/){
		mouse_get();
		mouse_putback();
		clean_black(124 + x * 24, 172 - y1 * 24, 24, 6 * t);
		clean_black(124 + x * 24, 196 - y2 * 24 - 6 * t, 24, 6 * t);
		BMP_Put(diamond[dia[y1][x]][0], 124 + x * 24, 172 - y2 * 24 - t * 6);
		for (i = 0; i < 24 - t * 12; i++)
			_fmemcpy(&video_buffer[(172 - y1 * 24 + i + 6 * t) * SCREEN_WIDTH + 124 + x * 24], &diamond[dia[y2][x]][0].buffer[(23 - i) * 24], 24);
		mouse_getback();
		mouse_showcur();
		diamond_soundonmove();
	}
}

void diamond_change(){
	int i1, j1, i2, j2, t;

	clk.chd = 0;
	i1 = 7 - clk.y1;
	j1 = clk.x1;
	i2 = 7 - clk.y2;
	j2 = clk.x2;
	if (i1 == i2) diamond_Hmove(j1, j2, i1);
		else if (j1 == j2) diamond_Vmove(i1, i2, j1);
	dia[i1][j1] ^= dia[i2][j2];
	dia[i2][j2] ^= dia[i1][j1];
	dia[i1][j1] ^= dia[i2][j2];
}

int diamond_space(){
	int i, j;

	for (i = 0; i < 8; i++)
		for (j = 0; j < 8; j++)
			if (dia[i][j] == -1)
				return 1;
	return 0;
}

void diamond_fall(){
	int i, j, k, t;
	int list[8];

	for (i = 8; i < 16; i++)
		for (j = 0; j < 8; j++)
			dia[i][j] = -1;
	for (i = 0; i < 8; i++)
		for (j = 0; j < 8; j++)
			if (dia[i][j] == -1){
				for (k = 8; dia[k][j] != -1; k++);
				dia[k][j] = random(DIAMOND_COUNT);
			}
	while (diamond_space()){
		for (i = 0; i < 8; i++)
			list[i] = -1;
		for (j = 0; j < 8; j++){
			for (i = 0; (i < 8) && (dia[i][j] != -1); i++);
			if (i < 8)
				list[j] = i + 1;
			else
				list[j] = -1;
		}
		for (t = 1; t <= 3; t++/*, delay(100)*/){
			mouse_get();
			mouse_putback();
			for (j = 0; j < 8; j++)
				if (list[j] != -1)
					for (i = list[j]; i <= 8; i++)
						if (dia[i][j] != -1)
							BMP_Put(diamond[dia[i][j]][0], 124 + j * 24, 172 - i * 24 + t * 8);
						else clean_black(124 + j * 24, 172 - i * 24 + t * 8, 24, 24);
			mouse_getback();
			mouse_showcur();
			diamond_soundonmove();
		}
		mouse_get();
		mouse_putback();
		for (j = 0; j < 8; j++)
			if (list[j] != -1){
				for (i = list[j]; !((i >= 8) && (dia[i][j] == -1)); i++)
					dia[i - 1][j] = dia[i][j];
				dia[i-1][j] = -1;
				if (i == 9) clean_black(124 + j * 24, 0, 24, 4);
			}
		mouse_getback();
		mouse_showcur();
	}
}

int diamond_nomove(){
	int i, j;

	for (i = 0; i < 8; i++)
		for (j = 0; j < 8; j++)
			if ((i < 5) && (dia[i][j] == dia[i + 2][j]) && (dia[i][j] == dia[i + 3][j])) return 0; else
			if ((j < 5) && (dia[i][j] == dia[i][j + 2]) && (dia[i][j] == dia[i][j + 3])) return 0; else
			if ((i > 2) && (dia[i][j] == dia[i - 2][j]) && (dia[i][j] == dia[i - 3][j])) return 0; else
			if ((j > 2) && (dia[i][j] == dia[i][j - 2]) && (dia[i][j] == dia[i][j - 3])) return 0; else
			if ((i < 7) && (j > 0) && (j < 7) && (dia[i][j] == dia[i + 1][j - 1]) && (dia[i][j] == dia[i + 1][j + 1])) return 0; else
			if ((i > 0) && (j > 0) && (j < 7) && (dia[i][j] == dia[i - 1][j - 1]) && (dia[i][j] == dia[i - 1][j + 1])) return 0; else
			if ((j < 7) && (i > 0) && (i < 7) && (dia[i][j] == dia[i - 1][j + 1]) && (dia[i][j] == dia[i + 1][j + 1])) return 0; else
			if ((j > 0) && (i > 0) && (i < 7) && (dia[i][j] == dia[i - 1][j - 1]) && (dia[i][j] == dia[i + 1][j - 1])) return 0; else
			if ((i > 1) && (j > 0) && (dia[i][j] == dia[i - 1][j - 1]) && (dia[i][j] == dia[i - 2][j - 1])) return 0; else
			if ((i > 1) && (j < 7) && (dia[i][j] == dia[i - 1][j + 1]) && (dia[i][j] == dia[i - 2][j + 1])) return 0; else
			if ((i < 6) && (j > 0) && (dia[i][j] == dia[i + 1][j - 1]) && (dia[i][j] == dia[i + 2][j - 1])) return 0; else
			if ((i < 6) && (j < 7) && (dia[i][j] == dia[i + 1][j + 1]) && (dia[i][j] == dia[i + 2][j + 1])) return 0; else
			if ((j > 1) && (i > 0) && (dia[i][j] == dia[i - 1][j - 1]) && (dia[i][j] == dia[i - 1][j - 2])) return 0; else
			if ((j > 1) && (i < 7) && (dia[i][j] == dia[i + 1][j - 1]) && (dia[i][j] == dia[i + 1][j - 2])) return 0; else
			if ((j < 6) && (i > 0) && (dia[i][j] == dia[i - 1][j + 1]) && (dia[i][j] == dia[i - 1][j + 2])) return 0; else
			if ((j < 6) && (i < 7) && (dia[i][j] == dia[i + 1][j + 1]) && (dia[i][j] == dia[i + 1][j + 2])) return 0;
	return 1;
}

void diamond_flash(){
	int i, j;

	if (++flash.time < DIAMOND_FLASHTIME) return;
	flash.time = 0;
	mouse_putback();
	flash.cur = (flash.cur + 1) % 4;
	for (i = 22, j = 1; i > 0; i--, j++)
		_fmemcpy(&video_buffer[(4 + flash.y * 24 + i) * SCREEN_WIDTH + 124 + flash.x * 24 + 1], &diamond[dia[7 - flash.y][flash.x]][flash.cur].buffer[j * 24 + 1], 22);
//	BMP_Put(diamond[dia[7 - flash.y][flash.x]][flash.cur], 124 + flash.x * 24, 4 + flash.y * 24);
	mouse_get();
	mouse_getback();
	mouse_showcur();
}

void diamond_unflash(){
	int i, j;

	mouse_putback();
	for (i = 22, j = 1; i > 0; i--, j++)
		_fmemcpy(&video_buffer[(4 + flash.y * 24 + i) * SCREEN_WIDTH + 124 + flash.x * 24 + 1], &diamond[dia[7 - flash.y][flash.x]][0].buffer[j * 24 + 1], 22);
//	BMP_Put(diamond[dia[7 - flash.y][flash.x]][0], 124 + flash.x * 24, 4 + flash.y * 24);
	mouse_get();
	mouse_getback();
	mouse_showcur();
}

void diamond_cur(){
	diamond_x = (mouse_x - 124) / 24;
	diamond_y = (mouse_y - 4) / 24;
}

void diamond_flashserver(){
	if (on_diamonds()){
		diamond_cur();
		if ((flash.x == diamond_x) && (flash.y == diamond_y))
			diamond_flash();
		else
			if ((flash.x == -1) && (flash.y == -1)){
				flash.x = diamond_x;
				flash.y = diamond_y;
				flash.cur = 0;
				flash.time = 0;
				diamond_flash();
			}
		else{
			diamond_unflash();
			flash.x = diamond_x;
			flash.y = diamond_y;
			flash.cur = 0;
			flash.time = 0;
			diamond_flash();
		}
	}
	else
		if ((flash.x != -1) && (flash.y != -1)){
			diamond_unflash();
			flash.x = -1;
			flash.y = -1;
			flash.cur = 0;
			flash.time = 0;
		}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -