亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? slider.c

?? ch03目錄下: disasm.tgz :作者改寫的反匯編器,可以輸出比較容易接受的匯編格式。 simpleboot.tgz: 作者編寫的簡單boot代碼 ch04目錄下: gba
?? C
字號:
/* 原作: Simon Wood <simon@mungewell.uklinux.net>
 * 修改:徐睿
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#define MWINCLUDECOLORS
#include "nano-X.h"

/* 拼圖的尺寸設(shè)定 */
#define WIDTH_IN_TILES	4
#define HEIGHT_IN_TILES	4
#define MAX_TILES	(WIDTH_IN_TILES * HEIGHT_IN_TILES)

static	int	value[WIDTH_IN_TILES][HEIGHT_IN_TILES];
static	int	calc_width, calc_height;
static	int	tile_width = 40;
static	int	tile_height = 40;


static	void *	image_addr;
static	int	using_image = 1;
static	GR_WINDOW_ID	image;		/* 位圖的存儲區(qū) */


static	GR_WINDOW_ID	master;		/* 整個窗口的ID */
static	GR_WINDOW_ID	buttons;	/* 按鈕的ID */
static	GR_WINDOW_ID	tiles;		/* 拼圖區(qū)域的ID */
static	GR_GC_ID	gc1;		/* 文字顯示的圖形上下文 */

static	void	HandleEvents();
static	void	RefreshWindow();
static	void	RandomiseTiles();
static	void	MoveTile();
static	void	DrawTile();
char bmpname[16]="slidebmp.bmp";
int
main(int argc,char **argv)
{
	if (GrOpen() < 0) {
		fprintf(stderr, "cannot open graphics\n");
		exit(1);
	}
		
	gc1 = GrNewGC();
	
	
	/* 計算位圖需要的內(nèi)存大小.... */
 	image_addr = malloc(4 * (WIDTH_IN_TILES * tile_width) *
		(HEIGHT_IN_TILES * tile_height) );

 	image = GrNewPixmap((WIDTH_IN_TILES * tile_width),
 		(HEIGHT_IN_TILES * tile_height), image_addr);
 
	GrDrawImageFromFile(image, gc1, 0, 0,
		GR_IMAGE_MAX_SIZE, GR_IMAGE_MAX_SIZE, bmpname, 0);
	
	
	/* calculate size of tile area */
 	calc_width = 10 + (WIDTH_IN_TILES * tile_width);
 	calc_height = 15 + 35 + (HEIGHT_IN_TILES * tile_height);

	master = GrNewWindow(GR_ROOT_WINDOW_ID, 0, 0, calc_width, calc_height, 1, RED, WHITE);
 	buttons = GrNewWindow((GR_WINDOW_ID) master, 5, 5, (calc_width - 5), 35, 1, RED, RED);

	tiles = GrNewWindow((GR_WINDOW_ID) master, (calc_width/2) - (WIDTH_IN_TILES * tile_width /2),
 	 	45 + ((calc_height - 50)/2) - (HEIGHT_IN_TILES * tile_height /2),
		(WIDTH_IN_TILES * tile_width), (HEIGHT_IN_TILES * tile_height), 1, RED, RED);

	GrMapWindow(master);
	GrMapWindow(buttons);
	GrMapWindow(tiles);

 	
	
	GrSelectEvents(master, GR_EVENT_MASK_EXPOSURE|GR_EVENT_MASK_CLOSE_REQ|
		GR_EVENT_MASK_KEY_DOWN);
	GrSelectEvents(buttons, GR_EVENT_MASK_BUTTON_DOWN); 
	GrSelectEvents(tiles, GR_EVENT_MASK_BUTTON_DOWN);
	
	srandom((int) getpid());
	RandomiseTiles();
	RefreshWindow();
	
	while (GR_TRUE) {
		GR_EVENT event;

		GrGetNextEvent(&event);
		HandleEvents(&event);
	}
}


/*
 * 消息處理函數(shù)
 */
void
HandleEvents(GR_EVENT *ep)
{
	int hole_x_pos, hole_y_pos;
	int tempx, tempy;

	switch (ep->type) {
		case GR_EVENT_TYPE_BUTTON_DOWN:
			if (ep->button.wid == buttons) {
 				if (ep->button.x < (calc_width/2)) {
					/* 按下了Again按鈕 */
					RandomiseTiles();
					RefreshWindow();
 				} else {
					/* 按下了Quit按鈕 */
					GrClose();

					if (using_image)
						free(image_addr);

					exit(0);
				}
			}

			if (ep->button.wid == tiles) {
				/* 想要移動鼠標點擊的按鈕 */
				MoveTile( (int)(ep->button.x / tile_width),
					(int)(ep->button.y / tile_height) );
			}
			break;

		case GR_EVENT_TYPE_KEY_DOWN:
			if (ep->keystroke.wid == master) {
				hole_x_pos = 0;
				hole_y_pos = 0;

				/* 查找空區(qū) */
				for (tempx = 0; tempx < WIDTH_IN_TILES; tempx++)
					for (tempy = 0; tempy < HEIGHT_IN_TILES; tempy++)
						if (value[tempx][tempy] == MAX_TILES) {
							hole_x_pos = tempx;
							hole_y_pos = tempy;
						}
	
				switch (ep->keystroke.ch) {
					case 'q':
					case 'Q':
					case MWKEY_CANCEL:
						GrClose();

						if (using_image)
							free(image_addr);

						exit(0);

					case 'r':
					case 'R':
						RandomiseTiles();
						RefreshWindow();
						break;

					case MWKEY_DOWN:
						if (hole_y_pos != 0) {
							MoveTile(hole_x_pos, hole_y_pos - 1);
						}
						break;
							
					case MWKEY_UP:
						if (hole_y_pos != (HEIGHT_IN_TILES-1) ) {
							MoveTile(hole_x_pos, hole_y_pos + 1);
						}
						break;

					case MWKEY_RIGHT:
						if (hole_x_pos != 0) {
							MoveTile(hole_x_pos - 1, hole_y_pos);
						}
						break;

					case MWKEY_LEFT:
						if (hole_x_pos != (WIDTH_IN_TILES-1) ) {
							MoveTile(hole_x_pos + 1, hole_y_pos);
						}
						break;
				}
			}
			break;

		case GR_EVENT_TYPE_EXPOSURE:
			RefreshWindow();
			break;
		case GR_EVENT_TYPE_CLOSE_REQ:
			GrClose();
			exit(0);
	}

}

void
RefreshWindow()
{
	int xpos, ypos;

	GrSetGCForeground(gc1, WHITE);
	GrSetGCBackground(gc1, RED);

	/* 繪制按鈕 */
	GrRect(buttons, gc1, 0, 0, (calc_width - 12)/2, 34);
	GrRect(buttons, gc1, (calc_width - 8)/2, 0, (calc_width - 12)/2, 34);


	GrText(buttons, gc1, 5, 22, "Again", 5, 0);
	GrText(buttons, gc1, (calc_width / 2) + 5, 22, "Quit", 4, 0);
	
	/* 繪制拼圖 */
	for (ypos=0; ypos< HEIGHT_IN_TILES; ypos++){
		for (xpos=0; xpos< WIDTH_IN_TILES; xpos++){
			DrawTile(xpos, ypos);
		}
	}
}

void
RandomiseTiles()
{
	int count, xpos, ypos;

	/* 將圖片對應(yīng)的4*4的區(qū)域編號*/
	for (ypos=0; ypos< HEIGHT_IN_TILES; ypos++){
		for (xpos=0; xpos< WIDTH_IN_TILES; xpos++){
			value[xpos][ypos] = 1 + xpos + (WIDTH_IN_TILES * ypos);
		}
	}

	/* 空區(qū)的位置 */
	xpos = WIDTH_IN_TILES - 1;
	ypos = HEIGHT_IN_TILES - 1;

	/* 使用隨機數(shù)將拼圖隨意移動 */
	for (count=0; count< MAX_TILES * 1000; count++){
		switch(random() % 4) {
			case 0:
				if (ypos < HEIGHT_IN_TILES - 1) {
					value[xpos][ypos] = value[xpos][ypos+1];
					ypos++;
					value[xpos][ypos] = MAX_TILES;
				}
				break;
			case 1:
				if (xpos > 0) {
					value[xpos][ypos] = value[xpos - 1][ypos];
					xpos--;
					value[xpos][ypos] = MAX_TILES;
				}
				break;
			case 2:
				if (ypos > 0) {
					value[xpos][ypos] = value[xpos][ypos - 1];
					ypos--;
					value[xpos][ypos] = MAX_TILES;
				}
				break;
			case 3:
				if (xpos < WIDTH_IN_TILES - 1) {
					value[xpos][ypos] = value[xpos + 1][ypos];
					xpos++;
					value[xpos][ypos] = MAX_TILES;
				}
				break;
		}
	}
}

void
MoveTile(int xpos, int ypos)
{
	/* 看看能向哪個方向移動 */
	if (ypos > 0 && value[xpos][ypos - 1] == MAX_TILES) {
		value[xpos][ypos - 1] = value[xpos][ypos];
		value[xpos][ypos] = MAX_TILES;
		DrawTile(xpos, ypos - 1);
		DrawTile(xpos, ypos);
	}

	if (xpos < (WIDTH_IN_TILES - 1) && value[xpos + 1][ypos] == MAX_TILES) {
		value[xpos + 1][ypos] = value[xpos][ypos];
		value[xpos][ypos] = MAX_TILES;
		DrawTile(xpos + 1, ypos);
		DrawTile(xpos, ypos);
	}

	if (ypos < (HEIGHT_IN_TILES - 1) && value[xpos][ypos + 1] == MAX_TILES) {
		value[xpos][ypos + 1] = value[xpos][ypos];
		value[xpos][ypos] = MAX_TILES;
		DrawTile(xpos, ypos + 1);
		DrawTile(xpos, ypos);
	}

	if (xpos > 0 && value[xpos - 1][ypos] == MAX_TILES) {
		value[xpos - 1][ypos] = value[xpos][ypos];
		value[xpos][ypos] = MAX_TILES;
		DrawTile(xpos - 1, ypos);
		DrawTile(xpos, ypos);
	}

	/* 查看是否完成 */
	if (value[WIDTH_IN_TILES - 1][HEIGHT_IN_TILES - 1] == MAX_TILES) {
		int winner = 0;
		for (ypos=0; ypos< HEIGHT_IN_TILES; ypos++){
			for (xpos=0; xpos< WIDTH_IN_TILES; xpos++){
				if (value[xpos][ypos] == winner + 1)
					winner++;
				else 
					winner=0;
			}
		}
		if (winner == MAX_TILES) {
			/* 完成了拼圖 */
			int loop = MAX_TILES;
			for(loop=0; loop < MAX_TILES; loop++) {
				for(winner=0; winner < (MAX_TILES - loop) ; winner++) {
					xpos = winner % WIDTH_IN_TILES;
					ypos = (int)(winner/WIDTH_IN_TILES);
					value[xpos][ypos] = loop + winner + 1; 
					DrawTile(winner % WIDTH_IN_TILES, (int)(winner/WIDTH_IN_TILES));
				}
				GrFlush();
				for(winner=0; winner < 10000000 ; winner++);
					/* 延時 */
			}
			/* 輸出完成信息 */
			GrSetGCForeground(gc1, WHITE);
			GrSetGCBackground(gc1, RED);
			GrText(tiles, gc1, ((WIDTH_IN_TILES * tile_width)/2) - 40, (HEIGHT_IN_TILES * tile_height)/2, "Well Done!!", -1, 0);
		}
				
	}
}


void
DrawTile(int xpos, int ypos)
{
	char text[]="00";

	/* 清理屏幕 */
	GrSetGCForeground(gc1, RED);
	GrFillRect(tiles, gc1, (xpos* tile_width), (ypos*tile_height), tile_width,
		tile_height);

	if (value[xpos][ypos] != MAX_TILES ) {
		/* 重繪屏圖的邊框 */
		GrSetGCForeground(gc1, WHITE);
		GrSetGCBackground(gc1, RED);
		GrRect(tiles, gc1, (xpos*tile_width), (ypos*tile_height), tile_width,
			tile_height);
			
	/* 拷貝并且顯示圖形的切片 */
	GrCopyArea(tiles, gc1, 1 + (xpos*tile_width), 1 + (ypos*tile_height), 
		tile_width - 2, tile_height - 2, image,
		1 + (((value[xpos][ypos] - 1) % WIDTH_IN_TILES) * tile_width), 
		1 + (((int)(value[xpos][ypos] - 1) / WIDTH_IN_TILES) * tile_height), 0);
		
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产福利| 蜜桃av噜噜一区| 免费成人在线播放| 91社区在线播放| 久久天堂av综合合色蜜桃网| 亚洲第一成年网| 91亚洲精品久久久蜜桃| 久久婷婷一区二区三区| 视频一区二区国产| 欧美日韩一区在线观看| 亚洲欧洲国产日本综合| 粉嫩嫩av羞羞动漫久久久| 日韩一级片网址| 日韩制服丝袜av| 欧美高清视频一二三区| 一级精品视频在线观看宜春院| 懂色av一区二区夜夜嗨| 欧美精品一区二区三区蜜臀| 日韩成人一级大片| 欧美日韩视频在线第一区| 亚洲精品欧美综合四区| 9色porny自拍视频一区二区| 中文字幕电影一区| 粉嫩aⅴ一区二区三区四区| 久久精品亚洲一区二区三区浴池| 免费久久精品视频| 欧美一区二区三区免费视频| 五月天国产精品| 7777精品久久久大香线蕉| 亚洲高清免费观看高清完整版在线观看| 99国产精品久久久久久久久久 | 日韩精品一区二区三区老鸭窝 | 国产精品视频线看| 国产福利一区二区| 国产欧美日韩久久| 成人免费毛片a| 亚洲欧洲制服丝袜| 91国产精品成人| 亚洲图片一区二区| 69堂亚洲精品首页| 国产一区二区视频在线播放| 久久综合九色综合97婷婷女人| 精品一区二区三区香蕉蜜桃| 久久中文字幕电影| 9i在线看片成人免费| 亚洲精品成人天堂一二三| 欧美久久久久中文字幕| 成人午夜私人影院| 国产精品视频看| 91国产免费观看| 奇米综合一区二区三区精品视频| 精品国产3级a| 成人av在线资源网| 亚洲国产精品一区二区久久| 欧美一级xxx| 成人午夜伦理影院| 亚洲在线观看免费| 欧美电影免费观看高清完整版在线| 国产美女在线精品| 亚洲卡通动漫在线| 日韩三级在线免费观看| 成人一区二区三区视频| 亚洲成人激情av| 国产女人18毛片水真多成人如厕 | 日韩精品五月天| 精品国产精品网麻豆系列| 国产激情偷乱视频一区二区三区| 亚洲欧美激情视频在线观看一区二区三区| 欧美日韩高清一区| 国产精品羞羞答答xxdd| 亚洲国产日韩a在线播放| 国产亚洲精品7777| 欧美精品三级日韩久久| 成人毛片老司机大片| 日韩高清中文字幕一区| 国产精品乱码一区二区三区软件 | 久久精品日韩一区二区三区| 91网站在线播放| 久久电影网电视剧免费观看| 亚洲欧美成aⅴ人在线观看| 精品国产免费一区二区三区香蕉| aa级大片欧美| 国产一区二区中文字幕| 亚洲成人手机在线| 亚洲精品少妇30p| 国产欧美日韩激情| 日韩一区二区三区观看| 欧美亚洲愉拍一区二区| 风流少妇一区二区| 久久99国产精品麻豆| 亚洲一区二区av在线| 中文字幕永久在线不卡| 国产午夜亚洲精品羞羞网站| 91精品久久久久久蜜臀| 91麻豆文化传媒在线观看| 国产美女视频91| 久久er精品视频| 奇米影视在线99精品| 婷婷国产在线综合| 亚洲午夜精品一区二区三区他趣| 国产精品久久网站| 久久综合视频网| 精品动漫一区二区三区在线观看| 在线成人免费视频| 欧美日韩一区高清| 欧美在线视频日韩| 欧美亚洲动漫精品| 69久久夜色精品国产69蝌蚪网| 色妞www精品视频| 91亚洲国产成人精品一区二三| 国产69精品久久99不卡| 国产成人午夜电影网| 高清在线不卡av| 99久久精品国产网站| 99在线精品一区二区三区| 成人高清视频在线| 91色porny| 色老汉一区二区三区| 在线精品视频一区二区三四 | 一区二区三区在线看| 亚洲三级久久久| 一区二区理论电影在线观看| 亚洲国产综合色| 图片区小说区国产精品视频| 男人的j进女人的j一区| 激情文学综合插| 国产成人av电影在线观看| 99麻豆久久久国产精品免费| 色综合色综合色综合色综合色综合| 99r国产精品| 欧美卡1卡2卡| 欧美精品一区二区精品网| 久久精品免视看| 亚洲欧美日韩在线不卡| 图片区小说区区亚洲影院| 精一区二区三区| 91丝袜呻吟高潮美腿白嫩在线观看| 色婷婷综合久色| 欧美电影在哪看比较好| 久久亚洲二区三区| 亚洲品质自拍视频| 天天射综合影视| 国产尤物一区二区在线| 色中色一区二区| 91麻豆精品国产| 国产色综合久久| 亚洲综合色区另类av| 久久成人免费网| 91网址在线看| 日韩精品一区二区在线观看| 中文字幕一区二区三区在线观看| 亚洲国产另类精品专区| 国产又黄又大久久| 欧洲生活片亚洲生活在线观看| 欧美电影免费观看高清完整版在| 中文字幕精品三区| 日本不卡一二三| 色天天综合久久久久综合片| 精品久久久网站| 一级中文字幕一区二区| 国产剧情一区二区三区| 欧美日韩一区二区欧美激情| 一区二区三区在线免费| 国产伦精一区二区三区| 欧美日韩一区二区欧美激情| 国产精品久久久久影院色老大| 免费成人深夜小野草| 日本精品一区二区三区四区的功能| 欧美电视剧免费全集观看| 一区二区三区精品| 成人性生交大合| 精品国产乱码久久久久久蜜臀| 亚洲午夜电影在线| 99精品欧美一区二区三区综合在线| 日韩一区二区在线免费观看| 亚洲一区av在线| 色欧美日韩亚洲| 国产精品不卡一区二区三区| 韩日精品视频一区| 欧美一三区三区四区免费在线看| 樱桃国产成人精品视频| 成人激情午夜影院| 久久久国际精品| 国产又粗又猛又爽又黄91精品| 日韩一二三区不卡| 日韩在线a电影| 欧美肥妇毛茸茸| 天涯成人国产亚洲精品一区av| 在线视频你懂得一区| 中文字幕一区二区三| 成人av电影观看| 国产精品福利影院| 风间由美中文字幕在线看视频国产欧美| 精品国产一区二区三区忘忧草 | 亚洲第一av色| 欧美色网站导航| 婷婷综合另类小说色区| 欧美日韩另类国产亚洲欧美一级| 一区二区三区不卡在线观看| 欧美性色黄大片|