📄 25game.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 + -