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

📄 25game.c

📁 日文版畅销书籍10天学会C语言的源程序。适合入门者学习使用。希望对大家有帮助。
💻 C
字号:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

//俀俆僎乕儉

#define MTX 3
#define CMTX(x) ((x)*(x))

int board[MTX][MTX];

//尰嵼嬻敀偵側偭偰偄傞嵗昗
int b_i;
int b_j;

void initBoard(void);
int moveDigit(int d);
int writeBoard(void);

main() {
	int d;		//摦偐偡悢抣偺擖椡抣
	int r = 0;	//儕僞僀傾僼儔僌
	int check;	//娭悢writeBoard偐傜偺栠傝抣
	int count = 0;	//壗夞堏摦偱姰惉偱偒偨偐僇僂儞僩偡傞曄悢

	srand(time(NULL));
	printf(" 亂 %d 僎乕儉亃乮0傪擖椡偡傞偲搑拞偱廔椆乯\n", CMTX(MTX));

	//儃乕僪傪弶婜壔偡傞
	initBoard();

	while(1){ 
		//堏摦偡傞悢抣傪擖椡偡傞
		do {
			d = -1;
			printf("摦偐偡悢帤傪擖椡偟偰壓偝偄 > ");
			scanf("%d", &d);
			while (getchar() != '\n') {  }
			if(d == 0) { r = 1; break; }
		} while( d < 1 || d > (CMTX(MTX)-1));

		if(r == 1) { break; }	//儕僞僀傾偡傞応崌

		if(moveDigit(d) == 0) { continue; } //悢抣傪堏摦偡傞

		//儃乕僪偑懙偭偨偐偳偆偐挷傋傞
		check = writeBoard(); 
		count++;
		if(check) { break; }
	}

	//僎乕儉寢壥偺昞帵
	if(check == 1) {
		printf("\n仚仚仚惉岟両両仚仚仚\n"); 
		printf("堏摦偟偨夞悢偼 %d 夞偱偟偨\n",count);
	} else { printf("\------廔椆------\n"); }

	return 0;
}

//儃乕僪偺弶婜壔傪峴偆娭悢
void initBoard(void) {
	int i, j;
	int r;
	int useDigit[100];
	for(j = 1; j <= MTX; j++) {
		for(i = 1; i <= MTX; i++) {
			if((j == MTX) && (i == MTX)) { break; }
			do{ 
				r = rand()%(CMTX(MTX)-1)+1;
			} while(useDigit[r-1] == 1);
			board[j-1][i-1] = r;
			useDigit[r-1] = 1;
			printf(" %02d", r);
		}
		printf("\n");
	}
	board[MTX-1][MTX-1] = 0;
	b_i = MTX;
	b_j = MTX;
}

/*悢抣傪摦偐偡娭悢
堷悢	d丗堏摦偡傞悢抣
栠傝抣	0偺帪偼晄惓側抣乮堏摦偟偰偄側偄乯丄1偺帪偼惓忢堏摦嵪
*/
int moveDigit(int d) {
	int i,j;
	int p_i; //摦偐偡悢抣偺擖偭偰偄傞儅僗偺x嵗昗
	int p_j; //摦偐偡悢抣偺擖偭偰偄傞儅僗偺y嵗昗

	//摦偐偡悢抣偺擖偭偰偄傞儅僗偺嵗昗傪挷傋傞
	p_i = 0; p_j = 0;
	for(j = 1; j <= MTX; j++) {
		for(i = 1; i <= MTX; i++) {
			if(board[j-1][i-1] == d) {
				p_i = i; p_j = j;
			} 
		}
	}

	if(p_i == 0) { return 0; } //擖椡抣偑晄惓側応崌

	//悢抣傪堏摦偡傞
	if(((p_j-1 == b_j) && (p_i == b_i)) || ((p_j == b_j) && (p_i == b_i-1)) ||
	 	((p_j+1 == b_j) && (p_i == b_i)) || ((p_j == b_j) && (p_i == b_i+1))) {
		board[b_j-1][b_i-1] = d;
		board[p_j-1][p_i-1] = 0;
	} else { return 0; }

	//嬻敀嵗昗偺埵抲傪愝掕偟側偍偡
	b_i = p_i;
	b_j = p_j;
	return 1;
}

/*儃乕僪傪昞帵偟偰姰惉偟偨偐偳偆偐僠僃僢僋偡傞娭悢
栠傝抣	0偺帪偼傑偩儃乕僪偼姰惉偟偰偄側偄丄1偺帪偼姰惉
*/
int writeBoard(void) {
	int i, j;
	int d; //擇師尦攝楍偺抣傪庢傝弌偟偰奿擺偡傞曄悢
	int check = 0; //僠僃僢僋偺偨傔偺懕偒斣崋
	int rtn = 1; //姰惉偟偨偐偟側偄偐僠僃僢僋偡傞栠傝抣

	for(j = 1; j <= MTX; j++) {
		for(i = 1; i <= MTX; i++) {
			d = board[j-1][i-1];
			if(rtn == 1) { 
				check++;
				//悢抣偑堦抳偟側偄仺傑偩懙偭偰偄側偄
				if((check < CMTX(MTX)) && (d != check)) { rtn = 0; } 
			}
			if(d == 0) { printf("   "); } //嬻敀偺応強偺弌椡昞帵
			else { printf(" %02d", d); }
		}
		printf("\n");
	}
	return rtn;
}

⌨️ 快捷键说明

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