diff --git a/level1/p01_runningLetter/L1T1.cpp b/level1/p01_runningLetter/L1T1.cpp new file mode 100644 index 00000000..80f96403 --- /dev/null +++ b/level1/p01_runningLetter/L1T1.cpp @@ -0,0 +1,36 @@ +#include +#include +#include +#define Length 20 + +int main () +{ + int a=0; + int b=1; + while(1) + { + a+=b; + system("cls"); + int i=0; + while(i +#include +#include +#define LENGTH 20 + +int main () +{ + int a=0; + int b=1; + while(1) + { + a+=b; + system("cls"); + int i=0; + while(i + int main() +{ + unsigned int a; + printf("请您输入一个正整数:"); + scanf("%u",&a); + int i,b=0; + for(i=1;i<=a;i++) + { + if(a%i==0) + { + b++; + } + } + if(b==2||b==1) + { + printf("%u是素数。\n",a); + } + else + { + printf("%u不是素数。\n",a); + } + + return 0; +} + diff --git a/level1/p03_Diophantus/L1T3.cpp b/level1/p03_Diophantus/L1T3.cpp new file mode 100644 index 00000000..37d9f024 --- /dev/null +++ b/level1/p03_Diophantus/L1T3.cpp @@ -0,0 +1,16 @@ + + +#include +int main() +{ + int age; + for(age=1;;age++) + { + if(age*1.0/6+age*1.0/12+age*1.0/7+5+4==age*1.0/2) + { + age-=4; + printf("丢番图儿子死时丢番图%d岁。",age); + break; + } + } +} diff --git a/level1/p04_ narcissus/L1T4.cpp b/level1/p04_ narcissus/L1T4.cpp new file mode 100644 index 00000000..6539a62b --- /dev/null +++ b/level1/p04_ narcissus/L1T4.cpp @@ -0,0 +1,17 @@ +#include +int main() +{ + int hun,dec,uni,med,nar; + for(med=100;med<=999;med++) + { + hun=med/100; + dec=(med-(hun*100))/10; + uni=(med-(hun*100)-dec*10); + nar=hun*hun*hun+dec*dec*dec+uni*uni*uni; + if (nar==med) + { + printf("%d ",nar); + } + } + printf("\n"); +} diff --git a/level1/p05_allPrimes/L1T5.cpp b/level1/p05_allPrimes/L1T5.cpp new file mode 100644 index 00000000..33b4dc25 --- /dev/null +++ b/level1/p05_allPrimes/L1T5.cpp @@ -0,0 +1,43 @@ +#include +#include +#include +void CreatePrime(int *primes, int n) +{ + int i, j, s; + primes[0] = primes[1] = 0; + for(i = 2; i < n; i++) + primes[i] = 1; + s = sqrt(n); + for(i = 2; i<= s; i++) + { + if(primes[i]) + { + for(j = 2 * i; j < n; j+=i) + primes[j] = 0; + } + } +} +int main() +{ + int i; + double run_time; + LARGE_INTEGER time_start; + LARGE_INTEGER time_over; + double dqFreq; + LARGE_INTEGER f; + QueryPerformanceFrequency(&f); + dqFreq=(double)f.QuadPart; + QueryPerformanceCounter(&time_start); + int IsPrime[1000]; + CreatePrime(IsPrime, 1000); + for(i = 2; i < 1000; i++) + if(IsPrime[i]) + { + printf("%d\t",i); + } + QueryPerformanceCounter(&time_over); + run_time=1000000*(time_over.QuadPart-time_start.QuadPart)/dqFreq; + printf("\nrun_time:%fus\n",run_time); + return 0; +} + diff --git a/level1/p05_allPrimes/README.md b/level1/p05_allPrimes/README.md index c59786a4..180bed30 100755 --- a/level1/p05_allPrimes/README.md +++ b/level1/p05_allPrimes/README.md @@ -2,4 +2,5 @@ 1. 鎵撳嵃2-1000浠ュ唴鐨勬墍鏈夌礌鏁 1. 鎵撳嵃鍑烘荤殑璁$畻鏃堕棿 -1. 灏藉彲鑳戒紭鍖栫畻娉曠殑鏁堢巼 \ No newline at end of file +1. 灏藉彲鑳戒紭鍖栫畻娉曠殑鏁堢巼 +// \ No newline at end of file diff --git a/level1/p06_Goldbach/L1T6.cpp b/level1/p06_Goldbach/L1T6.cpp new file mode 100644 index 00000000..10174d49 --- /dev/null +++ b/level1/p06_Goldbach/L1T6.cpp @@ -0,0 +1,59 @@ +#include + +int isPrime(int n); + +int main() +{ + int i = 0; + int j = 0; + int k1 = 0; + int k2 = 0; + int even[50]; + int ret1 = 0; + int ret2 = 0; + int count = 0; + for(i=4;i<=100;i+=2) + { + count = 0; + j = i; + k1 = j-1 ; + while(k1>=(j/2)) + { + ret1 = isPrime(k1); + if(ret1) + { + k2 = j - k1; + ret2 = isPrime(k2); + if(ret2) + { + printf("%d = %d + %d,", j, k2, k1); + count ++; + } + } + k1--; + } + printf("%d可以拆分为%d组!\n", i, count); + + } + return 0; +} +int isPrime(int n) +{ + int i = 0; + if(n<=1) + { + return 0; + } + if(2==n) + { + return 1; + } + for(i=2;i +#include +#include + //鍑芥暟encrypt()灏嗗瓧姣嶉『搴忔帹鍚巒浣嶏紝瀹炵幇鏂囦欢鍔犲瘑鍔熻兘 +void encrypt(char str[],int n) +{ + char c; + int i; + for(i=0;i='a' && c<='z')//c鏄皬鍐欏瓧姣 + { + if(c+n%26<='z') //鑻ュ姞瀵嗗悗涓嶈秴鍑哄皬鍐欏瓧姣嶈寖鍥 + { + str[i]=(char)(c+n%26); //鍔犲瘑鍑芥暟 + } + else + { + str[i]=(char)(c+n%26-26);//鍔犲瘑鍚庤秴鍑哄皬鍐欏瓧姣嶈寖鍥,浠庡ご寮濮嬪惊鐜皬鍐欏瓧姣 + } + } + else if(c>='A' && c<='Z')//c涓哄ぇ鍐欏瓧姣 + { + if(c + n%26 <= 'Z') //鍔犲瘑鍚庝笉瓒呭嚭澶у啓瀛楁瘝鑼冨洿 + { + str[i]=(char)(c+n%26); + } + else + { + str[i]=(char)(c+n%26-26);//鍔犲瘑鍚庤秴鍑哄ぇ鍐欏瓧姣嶈寖鍥,浠庡ご寮濮嬪惊鐜ぇ鍐欏瓧姣 + } + } + else + { + str[i]=c;//涓嶆槸瀛楁瘝锛屼笉鍔犲瘑 + } + } + printf("\nAfter encrypt: \n"); + puts(str); //杈撳嚭鍔犲瘑鍚庣殑瀛楃涓 +} + + +//decrypt()瀹炵幇瑙e瘑鍔熻兘锛屽皢瀛楁瘝椤哄簭鍓嶇Щn浣 +void decrypt(char str[],int n) +{ + char c; + int i; + //閬嶅巻瀛楃涓 + for(i=0;i='a' && c<='z') + { + + if(c-n%26>='a') //瑙e瘑鍚庤繕涓哄皬鍐欏瓧姣嶏紝鐩存帴瑙e瘑 + { + str[i]=(char)(c-n%26); + } + else + { + + str[i]=(char)(c-n%26+26); //瑙e瘑鍚庝笉涓哄皬鍐欏瓧姣嶄簡锛岄氳繃寰幆灏忓啓瀛楁瘝澶勭悊涓哄皬鍐欏瓧姣 + } + } + else if(c >= 'A' && c<='Z') //c涓哄ぇ鍐欏瓧姣 + { + if(c-n%26>='A') //瑙e瘑鍚庤繕涓哄ぇ鍐欏瓧姣 + { + str[i]=(char)(c-n%26); + } + else + { + str[i]=(char)(c-n%26+26); //瑙e瘑鍚庝笉涓哄ぇ鍐欏瓧姣嶄簡,寰幆澶у啓瀛楁瘝,澶勭悊涓哄ぇ鍐欏瓧姣 + } + else + { + str[i]=c; //闈炲瓧姣嶄笉澶勭悊 + } + } + printf("\nAfter decrypt: \n"); + puts(str); //杈撳嚭瑙e瘑鍚庣殑瀛楃涓 +} + +int main() +{ + char str[50]; + int k=0,n=0,i=1; + printf("\nPlease input strings: "); + scanf("%s",str); //杈撳叆鍔犲瘑瑙e瘑瀛楃涓 + //鎵撳嵃鑿滃崟 + printf("-----------------\n"); + printf("1: Encryption\n"); + printf("2: Decryption\n"); + printf("3: Violent Crack\n"); //鏆村姏鐮磋В + printf("-----------------\n"); + printf("\nPlease choose: "); + scanf("%d",&k); + if(k==1) + { + printf("\nPlease input number: "); + scanf("%d",&n); + encrypt(str,n); + } + else if(k==2) + { + printf("\nPlease input number: "); + scanf("%d",&n); + decrypt(str,n); + } + else + { + for(i=1;i<=25;++i) + { + printf("%d ",i); //灏濊瘯鎵鏈夊彲鑳界殑n鍊艰繘琛屾毚鍔涚牬瑙 + decrypt(str,i); + } + } + return 0; +} diff --git a/level1/p08_hanoi/README.md b/level1/p08_hanoi/README.md index 859be942..f1a36578 100755 --- a/level1/p08_hanoi/README.md +++ b/level1/p08_hanoi/README.md @@ -2,4 +2,13 @@ 1.姹夎濉旓細姹夎濉旓紙鍙堢О娌冲唴濉旓級闂鏄簮浜庡嵃搴︿竴涓彜鑰佷紶璇寸殑鐩婃櫤鐜╁叿銆傚ぇ姊靛ぉ鍒涢犱笘鐣岀殑鏃跺欏仛浜嗕笁鏍归噾鍒氱煶鏌卞瓙锛屽湪涓鏍规煴瀛愪笂浠庝笅寰涓婃寜鐓уぇ灏忛『搴忔憺鐫64鐗囬粍閲戝渾鐩樸傚ぇ姊靛ぉ鍛戒护濠嗙綏闂ㄦ妸鍦嗙洏浠庝笅闈㈠紑濮嬫寜澶у皬椤哄簭閲嶆柊鎽嗘斁鍦ㄥ彟涓鏍规煴瀛愪笂銆傚苟涓旇瀹氾紝鍦ㄥ皬鍦嗙洏涓婁笉鑳芥斁澶у渾鐩橈紝鍦ㄤ笁鏍规煴瀛愪箣闂翠竴娆″彧鑳界Щ鍔ㄤ竴涓渾鐩樸 -![](./hanoi.jpg) \ No newline at end of file +![](./hanoi.jpg) +鎬濊矾锛1.鎶 n-1涓洏瀛愬厛绉诲姩鍒2鍙峰簳搴 + 2.鎶1鍙峰簳搴т笂鍓╀笅鐨勪竴涓洏瀛愮Щ鍔ㄥ埌3鍙峰簳搴т笂 + 3.鍐嶆妸n-1涓洏瀛愪粠2鍙峰簳搴хЩ鍔ㄥ埌3鍙峰簳搴т笂 + 閫掑綊鎬濇兂鐨勭悊瑙o細 + + 1.閫掑綊濂犲熀銆傚厛鑰冭檻鏈鍩烘湰鐨勬儏鍐碉紝鍗虫棤闇閫掑綊灏辫兘瑙e嚭鐨勬儏鍐碉紝寮勬竻妤氬彉閲忕殑鍘诲悜鍜屼綔鐢ㄣ + 2.閫掑綊濂犲熀鎺ㄨ繘銆備粠鏈鍩烘湰鐨勬儏鍐典竴姝ユ璧板悜閫掑綊鏉ヨВ鍐筹紝姣忎竴娆¢掑綊璋冪敤閮借缁撴灉鏇存帴杩戠洰鏍囥 + 3.妗ユ鏋舵瀯銆傚亣璁炬墍鏈夌殑閫掑綊璋冪敤閮借兘杩愯銆 + 4.楂樻晥搴旂敤銆傚姏姹傛瘡涓姝ヨ皟鐢ㄩ兘璁╃粨鏋滄洿鎺ヨ繎鐩爣锛屼笉鍋氭棤鐢ㄥ姛銆 diff --git a/level1/p08_hanoi/hanoi.cpp b/level1/p08_hanoi/hanoi.cpp new file mode 100644 index 00000000..0216a178 --- /dev/null +++ b/level1/p08_hanoi/hanoi.cpp @@ -0,0 +1,31 @@ +#include +#include +/* + 思路:1.把 n-1个盘子先移动到2号底座 + 2.把1号底座上剩下的一个盘子移动到3号底座上 + 3.再把n-1个盘子从2号底座移动到3号底座上 +*/ +void move(char origin, char aim); +void hanoi(int n,char origin ,char aim,char mid); +int main() +{ + int n; + printf("input your number"); + scanf("%d",&n); + hanoi(n,'A','B','C'); + return 0; +} + void hanoi(int n,char origin ,char mid,char aim) + { + if(n==1) + return; + hanoi(n-1,origin ,aim,mid); + move(origin,aim); + hanoi(n-1,mid,origin,aim); + } +void move(char origin, char aim) +{ + printf("%c ---> %c\n", origin, aim); +} + + diff --git a/level1/p09_maze/09.cpp b/level1/p09_maze/09.cpp new file mode 100644 index 00000000..a1620a29 --- /dev/null +++ b/level1/p09_maze/09.cpp @@ -0,0 +1,165 @@ +锘#include +#include +#include +#include +#define Height 25 //杩峰鐨勯珮搴 +#define Width 25 //杩峰鐨勫搴 +#define Wall 1 +#define Road 0 +#define Start 2 +#define End 3 +#define Esc 5 +#define Up 1 +#define Down 2 +#define Left 3 +#define Right 4 +int map[Height+2][Width+2]; +void gotoxy(int x,int y) //鐜╁鍧愭爣 +{ + COORD coord; + coord.X=x; + coord.Y=y; + SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord ); +} +void hidden()//闅愯棌鍏夋爣 +{ + HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); + CONSOLE_CURSOR_INFO cci; + GetConsoleCursorInfo(hOut,&cci); + cci.bVisible=0;//璧1涓烘樉绀猴紝璧0涓洪殣钘 + SetConsoleCursorInfo(hOut,&cci); +} +void create(int x,int y) //闅忔満鐢熸垚杩峰 +{ + int c[4][2]={0,1,1,0,0,-1,-1,0}; //鍥涗釜鏂瑰悜 + int i,j,t;//灏嗘柟鍚戞墦涔 + for(i=0;i<4;i++) + { + j=rand()%4; + t=c[i][0];c[i][0]=c[j][0];c[j][0]=t; + t=c[i][1];c[i][1]=c[j][1];c[j][1]=t; + } + map[x][y]=Road; + for(i=0;i<4;i++) + if(map[x+2*c[i][0]][y+2*c[i][1]]==Wall) + { + map[x+c[i][0]][y+c[i][1]]=Road; + create(x+2*c[i][0],y+2*c[i][1]); + } +} +int get_key() //鎺ユ敹鎸夐敭 +{ + char c; + while(c=getch()) + { + if(c==27) return Esc; //Esc + if(c!=-32)continue; + c=getch(); + if(c==72) return Up; //涓 + if(c==80) return Down; //涓 + if(c==75) return Left; //宸 + if(c==77) return Right; //鍙 + } + return 0; +} +void paint(int x,int y) //鐢昏糠瀹 +{ + gotoxy(2*y-2,x-1); + switch(map[x][y]) + { + case Start: + printf("鍏");break; // + case End: + printf("鍑");break; // + case Wall: + printf("鈻");break; // + case Road: + printf(" ");break; // + } +} +void game() +{ + int x=2,y=1; //鐜╁褰撳墠浣嶇疆锛屽垰寮濮嬪湪鍏ュ彛澶 + int c; //鐢ㄦ潵鎺ユ敹鎸夐敭 + while(1) + { + gotoxy(2*y-2,x-1); + printf("鈼"); //鐢诲嚭鐜╁褰撳墠浣嶇疆 + if(map[x][y]==End) //鍒ゆ柇鏄惁鍒拌揪鍑哄彛 + { + gotoxy(30,24); + printf("鍒拌揪缁堢偣锛屾寜浠绘剰閿粨鏉"); + getch(); + break; + } + c=get_key(); + if(c==Esc) + { + gotoxy(0,24); + break; + } + switch(c) + { + case Up: //鍚戜笂璧 + if(map[x-1][y]!=Wall) + { + paint(x,y); + x--; + } + break; + case Down: //鍚戜笅璧 + if(map[x+1][y]!=Wall) + { + paint(x,y); + x++; + } + break; + case Left: //鍚戝乏璧 + if(map[x][y-1]!=Wall) + { + paint(x,y); + y--; + } + break; + case Right: //鍚戝彸璧 + if(map[x][y+1]!=Wall) + { + paint(x,y); + y++; + } + break; + } + } +} +int main() +{ + system("title your name"); + int i,j; + srand((unsigned)time(NULL)); //鍒濆鍖栭殢鏈虹瀛 + hidden(); //闅愯棌鍏夋爣 + for(i=0;i<=Height+1;i++) + for(j=0;j<=Width+1;j++) + if(i==0||i==Height+1||j==0||j==Width+1) //鍒濆鍖栬糠瀹 + map[i][j]=Road; + else map[i][j]=Wall; + create(2*(rand()%(Height/2)+1),2*(rand()%(Width/2)+1)); //浠庨殢鏈轰竴涓偣寮濮嬬敓鎴愯糠瀹 + for(i=0;i<=Height+1;i++) //杈圭晫澶勭悊 + { + map[i][0]=Wall; + map[i][Width+1]=Wall; + } + for(j=0;j<=Width+1;j++) //杈圭晫澶勭悊 + { + map[0][j]=Wall; + map[Height+1][j]=Wall; + } + map[2][1]=Start; //缁欏畾鍏ュ彛 + map[Height-1][Width]=End; //缁欏畾鍑哄彛 + for(i=1;i<=Height;i++) + for(j=1;j<=Width;j++) //鐢诲嚭杩峰 + paint(i,j); + game(); //寮濮嬫父鎴 + getch(); + return 0; +} + diff --git a/level1/p10_pushBoxes/10.cpp b/level1/p10_pushBoxes/10.cpp new file mode 100644 index 00000000..3d90f2a9 --- /dev/null +++ b/level1/p10_pushBoxes/10.cpp @@ -0,0 +1,166 @@ +锘 +#include +#include +#include + +int map[9][11] = { + {0,1,1,1,1,1,1,1,1,1,0}, //0浠h〃绌哄湴 + {0,1,0,0,0,1,0,0,0,1,0}, //1浠h〃澧 + {0,1,0,4,4,4,4,4,0,1,0}, //3浠h〃鐩殑鍦 + {0,1,0,4,0,4,0,4,0,1,1}, //4浠h〃绠卞瓙 + {0,1,0,0,0,0,0,0,4,0,1}, //5浠h〃浜 + {1,1,0,1,1,1,1,0,4,0,1}, + {1,0,8,3,3,3,3,1,0,0,1}, //2 3 4 5 6 7 8 9 1 0 + {1,0,3,3,3,3,3,0,0,1,1}, + {1,1,1,1,1,1,1,1,1,1,0} }; +void DrawMap() +{ + //閬嶅巻浜岀淮鏁扮粍 //0 鎵撳嵃绌烘牸 //1 澧 //3 鐩殑鍦 + for (int i = 0; i < 9; i++) + { + for (int j = 0; j < 11; j++) + { + //if else switch + switch (map[i][j]) + { + case 0: + printf(" "); + break; + case 1: + printf("鈻"); + break; + case 3: + printf("鈽"); + break; + case 4: + printf("鈻"); + break; + case 5: + printf("鈾"); + break; + case 7: + printf("鈽"); + break; + case 8: + printf("鈾"); + break; + } + } + printf("\n"); + } +} + + +void PlayGame() +{ + int r, c; //浜虹殑涓嬫爣 + for (int i = 0; i < 9; i++) + { + for (int j = 0; j < 11; j++) + { + if (map[i][j] == 5||map[i][j]==8) //i j 浜虹殑涓嬫爣 + { + r = i; + c = j; + } + } + } + + char ch; //瀛楃鍙橀噺 + ch = getch(); //閿洏鐨勮緭鍏ヤ繚瀛樺埌瀛楃涓 + // getch() getchar() 鎺ユ敹閿洏瀛楃 + // getch()鐩存帴鎺ユ敹 涓嶆樉绀哄洖鏂 getchar()鏄剧ず鍥炴枃鍙互淇敼 enter閿粨鏉 + + //鏍规嵁涓嶅悓鐨勬寜閿 鏀瑰彉涓嶅悓鐨勫. 鍒嗘敮. + switch (ch) + { + case 'W': //W A S D鏂瑰悜 + case 'w': + case 72: + if (map[r - 1][c] == 0|| map[r - 1][c] == 3) + { + map[r - 1][c] += 5; + map[r][c] -= 5; + } + else if (map[r - 1][c] == 4 || map[r - 1][c] == 7) + { + if (map[r - 2][c] == 0 || map[r - 2][c] == 3) + { + map[r - 2][c] += 4; + map[r - 1][c] += 1; + map[r][c] -= 5; + } + } + break; + case 'S': //enter鎸夐敭鐨勪綔鐢 纭 杩斿洖 + case 's': + case 80: + if (map[r + 1][c] == 0 || map[r + 1][c] == 3) + { + map[r + 1][c] += 5; + map[r][c] -= 5; + } + else if (map[r + 1][c] == 4 || map[r+ 1][c] == 7) + { + if (map[r + 2][c] == 0 || map[r + 2][c] == 3) + { + map[r + 2][c] += 4; + map[r + 1][c] += 1; + map[r][c] -= 5; + } + } + break; + + case 'A': + case 'a': + case 75: + if (map[r ][c - 1] == 0 || map[r ][c - 1] == 3) + { + map[r ][c - 1] += 5; + map[r][c] -= 5; + } + else if (map[r][c - 1] == 4 || map[r][c - 1] == 7) + { + if (map[r ][c - 2] == 0 || map[r ][c - 2] == 3) + { + map[r ][c - 2] += 4; + map[r ][c - 1] += 1; + map[r][c] -= 5; + } + } + break; + + case 'D': + case 'd': + case 77: + if (map[r][c + 1] == 0 || map[r][c + 1] == 3) + { + map[r][c + 1] += 5; + map[r][c] -= 5; + } + else if (map[r][c + 1] == 4 || map[r][c + 1] == 7) + { + if (map[r][c + 2] == 0 || map[r][c + 2] == 3) + { + map[r][c + 2] += 4; + map[r][c + 1] += 1; + map[r][c] -= 5; + } + } + break; + } +} + +// +int main() //涓诲嚱鏁 +{ + while (1) + { + system("cls"); + DrawMap(); + PlayGame(); + } + + return 0; +} + diff --git a/level1/p11_linkedList/11.cpp b/level1/p11_linkedList/11.cpp new file mode 100644 index 00000000..7493d2db --- /dev/null +++ b/level1/p11_linkedList/11.cpp @@ -0,0 +1,108 @@ +锘#include +#include +#include + + +#define MAXN 20 +#define MAXNUM 10 +#define LEN sizeof(struct LinkNode) + +struct LinkNode +{ + int Value; + struct LinkNode *Next; +}*Head, *Tail; + +int Rand_Get(int Rand_Min, int Rand_Max) +{ + return rand() % (Rand_Max - Rand_Min + 1) + Rand_Min; +} + +int Get_Num() +{ + if (Rand_Get(1, 4) == 1)return 5; + return Rand_Get(1, MAXNUM); +} + +void AddNode(int _val) +{ + struct LinkNode *node_new; + node_new = (struct LinkNode *)malloc(LEN); + node_new->Value = _val; + node_new->Next = NULL; + Tail->Next = node_new; + Tail = node_new; +} + +void Init_List() +{ + Head = Tail = NULL; + srand(time(NULL)); + int n = Rand_Get(5, MAXN); + for (int i = 0; i < n; ++i) + { + if (!i) + { + Head = Tail = (struct LinkNode *)malloc(LEN); + Head->Next = NULL; + Head->Value = Get_Num(); + } + else AddNode(Get_Num()); + } +} + +void Traversal() +{ + struct LinkNode *Now = Head; + while (Now != NULL) + { + printf("%d ", Now->Value); + Now = Now->Next; + } + printf("\n"); +} + +void Node_Rev(struct LinkNode *Now) +{ + if (Now->Next != NULL) + { + Node_Rev(Now->Next); + Now->Next->Next = Now; + } + else Head = Now; +} + +void Reverse() +{ + Tail = Head; + Node_Rev(Head); + Tail->Next = NULL; +} + +int Node_Tofind(int _val, int _t)//4 +{ + int id = 0; + struct LinkNode *Now = Head; + while (Now != NULL) + { + if (Now->Value == _val)_t--; + if (!_t)return id; + Now = Now->Next; id++; + } + return -1; +} + + + +int main() +{ + Init_List(); + printf("鍘熼摼琛:\n"); + Traversal(); + Reverse(); + printf("鍙嶈浆:\n"); + Traversal(); + printf("绗竴涓瓑浜5鐨勪綅缃 锛 %d(reversed)\n", Node_Tofind(5, 1)); + printf("绗簩涓瓑浜5鐨勪綅缃細 %d(reversed)\n", Node_Tofind(5, 2)); + return 0; +} diff --git a/level1/p12_warehouse/12.cpp b/level1/p12_warehouse/12.cpp new file mode 100644 index 00000000..7c04f8b2 --- /dev/null +++ b/level1/p12_warehouse/12.cpp @@ -0,0 +1,313 @@ +锘#include +#include +#include +#define MAX 10 +void start(); +void output(); +void input(); +void change(); +void dele(); +void search(); +void insert(); +struct GOODS +{ + char goods_id[30]; + char goods_name[30]; + char goods_price[20]; + char goods_discount[20]; + int goods_amount; + int goods_remain; +}; +struct GOODS goods[MAX],goodsinsert[MAX],G[MAX]; +int count=0; +int main() +{ + while(1) + start(); + } +void start() +{ +int ch; +printf("\n\t\t\t\t瓒呭競鍟嗗搧淇℃伅绠$悊绯荤粺\n"); +printf("\t\t\t****************************\n"); +printf("\t\t\t1.鍟嗗搧鐨勫綍鍏n"); +printf("\t\t\t2.淇敼鏌愪釜鍟嗗搧鐨勪俊鎭痋n"); +printf("\t\t\t3.鍒犻櫎鏌愪釜鍟嗗搧鐨勪俊鎭痋n"); +printf("\t\t\t4.鏌ユ壘鏌愪釜鍟嗗搧鐨勪俊鎭痋n"); +printf("\t\t\t5.鎻掑叆鏌愪釜鍟嗗搧鐨勪俊鎭痋n"); +printf("\t\t\t6.閫鍑虹郴缁焅n"); +printf("\t\t\t****************************\n"); +printf("\n\n杈撳叆浣犵殑閫夋嫨锛1-6锛:"); +scanf("%d",&ch); + switch(ch) + { + case 1: + { + input(); + break;} + case 2: + { + change(); + break; + } + case 3: + { + dele(); + break; + } + case 4: + { + search(); + break; + } + case 5: + { + insert(); + break; + } + default : + { + printf("\n閫鍑虹郴缁熷苟鎸変换鎰忛敭閫鍑虹郴缁"); + exit(EXIT_SUCCESS); + } + } + + +} + + +void input() +{ + + + char flag[20]; + do + { + printf("璇疯緭鍏ヤ綘鐨勫晢鍝佷俊鎭:\n"); + printf("鍟嗗搧缂栧彿:"); + scanf("%s",goods[count].goods_id); + printf("鍟嗗搧鍚嶅瓧:"); + scanf("%s",goods[count].goods_name); + printf("鍟嗗搧浠锋牸:"); + scanf("%s",goods[count].goods_price); + printf("鍟嗗搧鎶樻墸:"); + scanf("%s",goods[count].goods_discount); + printf("鍟嗗搧鎬绘暟鐩:"); + scanf("%d",&goods[count].goods_amount); + printf("鍟嗗搧鍓╀綑鏁扮洰:"); + scanf("%d",&goods[count].goods_remain); + count++; + printf("鏄惁缁х画杈撳叆鏁版嵁 y鏄 n鍚 : "); + scanf("%s",flag); + }while(strcmp(flag,"y")==0||strcmp(flag,"Y")==0); + output(); +} +void change() +{ + char ch[20],a[20]; + int i,t,m=0; + printf("\n鏄惁鏍规嵁鍟嗗搧鐨勭紪鍙疯繘琛屼慨鏀 (y/n): "); + scanf("%s",ch); + if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0) + { + printf("\n杈撳叆鍟嗗搧鐨勭紪鍙:"); + scanf("%s",a); + for(i=0;i +#include +#include//API鍑芥暟澶存枃浠 +#include//鎺у埗鍙拌緭 鍏ヨ緭鍑哄ご鏂囦欢 + +/*鐣岄潰棰滆壊瀹忓畾涔*/ +#define WhiteColor 63 +#define BlackColor 48 +#define Menu 2 +#define ChessBackground 125 +#define ChessBoardColor 48 +#define TipColor 6//缁胯壊 + +HANDLE hOutput=GetStdHandle(STD_OUTPUT_HANDLE);//寰楀埌涓涓爣鍑嗙殑杈撳嚭鍙ユ焺 + +char Chess[15][15][3];//妫嬪瀷瀛楃鏁扮粍 + +int type=0;//璁板綍浜轰汉瀵规垬or浜烘満瀵规垬锛宼ype涓0浜轰汉瀵规垬锛宼ype涓1浜烘満瀵规垬锛岄粯璁や负浜轰汉瀵规垬 + +int flag=-1;//璁板綍榛戠櫧妫嬪摢鏂瑰厛钀藉瓙锛宖lag涓0鐧藉瓙锛堢數鑴戯級鍏堬紝flag涓1榛戝瓙锛堢帺瀹讹級鍏 + +int count=0;//璁板綍涓嬫姝ユ暟锛屼竴鍏卞彲涓225姝 + +int status[15][15]={0};//鏍囪瘑褰撳墠浣嶇疆鐘舵侊紝status[i][j]涓0琛ㄦ槑姝や綅缃负绌猴紝status[i][j]涓1琛ㄦ槑涓虹櫧妫嬶紙鐢佃剳锛夛紝status[i][j]涓2琛ㄦ槑褰撳墠浣嶇疆涓洪粦妫嬶紙鐜╁锛 + +int Winner=0;//鏍囪瘑璧㈠锛學inner=1琛ㄦ槑鐧芥锛堢數鑴戯級鑳滐紝Winner=2琛ㄦ槑榛戞锛堢帺瀹讹級鑳 + +int x=40, y=1;//琛ㄧず褰撳墠榧犳爣鐨勪綅缃 + +int prex=0, prey=0;//璁板綍褰撳墠妫嬫墜涓嬫浣嶇疆锛岀敤浜庢倲妫嬪嚱鏁 + +int prex1=0, prey1=0;//璁板綍妫嬫墜涓婁竴姝ヤ笅妫嬬殑浣嶇疆锛岀敤浜庣數鑴戞倲妫嬪弬鏁 + +int Value1[15][15]={0};//鏀诲嚮鏉冨硷紝鐢ㄤ簬鐢佃剳浼樺厛浣嶇疆鍒ゆ柇 + +int Value2[15][15]={0};//闃插畧鏉冨硷紝鐢ㄤ簬鐢佃剳浼樺厛浣嶇疆鍒ゆ柇 + +void GameStart();//涓嬫鍑芥暟 + +void TextColor(int color)//璁剧疆棰滆壊鍑芥暟 +{ + SetConsoleTextAttribute(hOutput,color);//璁剧疆鎺у埗鍙版枃鏈睘鎬 +} + +void ChessBord()//缁樺埗妫嬬洏褰㈢姸 +{ + int i, j; + strcpy(Chess[0][0],"鈹");//璁剧疆妫嬬洏鍥涜 + strcpy(Chess[14][0],"鈹"); + strcpy(Chess[0][14],"鈹"); + strcpy(Chess[14][14],"鈹"); + for(i=1;i<14;i++) + { + strcpy(Chess[i][0],"鈹"); + strcpy(Chess[i][14],"鈹"); + } + for(j=1;j<14;j++) + { + strcpy(Chess[0][j],"鈹"); + strcpy(Chess[14][j],"鈹"); + } + for(i=1;i<14;i++) + for(j=1;j<14;j++) + strcpy(Chess[i][j],"鈹"); +} + +void ShowChessBoard()//杈撳嚭妫嬬洏褰㈢姸 +{ + for(int i=0;i<15;i++) + { + for(int j=0;j<15;j++) + { + TextColor(ChessBoardColor);//妫嬬洏棰滆壊 + printf("%s",Chess[i][j]); + //printf(" "); // win10鐜闇瑕佹坊鍔犺璇彞锛屽惁鍒欑晫闈㈡樉绀烘湁闂 + } + printf("\n"); + } +} + +void getto(int x,int y)//鍏夋爣鍑芥暟 +{ + COORD cursor={0,0};//瀹氫箟涓涓厜鏍囧璞 + cursor.X=x; + cursor.Y=y; + SetConsoleCursorPosition(hOutput,cursor);//璁剧疆鍏夋爣浣嶇疆 +} + +void ChooseFirst() //鍏堟墜鍑芥暟锛岀‘瀹氫汉浜/鏈烘ā寮忎互鍙婂厛鍚庢墜 +{ + switch(y) + { + case 3: + { + TextColor(TipColor);//璁剧疆鎻愮ず鐨勯鑹 + x=50,y=3;getto(x,y); + printf("1.鐧藉瓙鍏堟墜"); + getto(x,y+2); + printf("2.榛戝瓙鍏堟墜"); + getto(x,y); + while(1) + { + switch(getch())//浠庢帶鍒跺彴鏃犲洖鏄惧湴鍙栦竴涓瓧绗 + { + case '1': + flag=0;break; + case '2': + flag=1;break; + case 72:if(y<=3)y=3;else y-=2;getto(x,y);break;//涓 + case 80:if(y>=5)y=5;else y+=2;getto(x,y);break;//涓 + case 13:if(y==3) flag=0;else flag=1; break;//flag=0 鐧藉瓙鍏堟墜 flag=1 榛戝瓙鍏堟墜 + case 'e':case 'E':case 27: + { + int message=MessageBox(NULL,"鏄惁閫鍑猴紵","鍙嬫儏鎻愮ず",MB_OKCANCEL); + if(IDCANCEL==message) + continue; + if(IDOK==message) + { + getto(36,15); + exit(0); + } + }break;//鎻愬墠缁堟姣旇禌 + default:break; + } + if(flag!=-1) + break;//閫夋嫨濂藉厛鍚庢墜锛岃烦鍑哄惊鐜 + } + }break; + case 5: + { + type=1; //浜烘満瀵规垬妯″紡 + TextColor(TipColor);//璁剧疆鎻愮ず鐨勯鑹 + x=50,y=3;getto(x,y); + printf("1.鐢佃剳鍏堟墜"); + getto(x,y+2); + printf("2.鐜╁鍏堟墜"); + getto(x,y); + while(1) + { + switch(getch()) + { + case '1': + flag=0;break; + case '2': + flag=1;break; + case 72:if(y<=3)y=3;else y-=2;getto(x,y);break; + case 80:if(y>=5)y=5;else y+=2;getto(x,y);break; + case 13:if(y==3) flag=0;else flag=1;break; //flag=0 鐢佃剳鍏堟墜 flag=1 鐜╁鍏堟墜 + case 'e':case 'E': + { + int message=MessageBox(NULL,"鏄惁閫鍑猴紵","鍙嬫儏鎻愮ず",MB_OKCANCEL); + if(IDCANCEL==message) + continue; + if(IDOK==message) + { + getto(36,15); + exit(0); + } + }break;//鎻愬墠缁堟姣旇禌 + default:break; + } + if(flag!=-1) + break;//閫夋嫨濂藉厛鍚庢墜锛岃烦鍑哄惊鐜 + } + }break; + default: + break; + } +} + +void ShowMenu()//杈撳嚭鑿滃崟閫夐」锛岀敤鎴峰彲瑙嗗寲鐣岄潰 +{ + getto(40,1); + TextColor(Menu); + printf("娆㈣繋浣跨敤浜斿瓙妫"); + getto(36,3); + printf("1.浜轰汉瀵规垬"); + getto(36,5); + printf("2.浜烘満瀵规垬"); + getto(36,7); + printf("B鎮旀(鎸夊揩鎹烽敭B鍗冲彲瀹炶鎮旀)"); + getto(36,9); + printf("E閫鍑(鎸夊揩鎹烽敭E鍗冲彲瀹炶閫鍑)"); + getto(36,11); + printf("R閲嶆柊寮濮(鎸夊揩鎹烽敭R鍗冲彲瀹炶閲嶆柊寮濮)"); + getto(0,16); + printf(" 鎿嶄綔璇存槑锛歕n\n"); + printf("1.鐢ㄦ埛搴斿厛閫夋嫨娓告垙妯″紡锛屽彲浠ユ寜蹇嵎閿'1'銆'2'杩涜閫夋嫨锛屼篃鍙氳繃绉诲姩鍏夋爣瀹炵幇\n\n2.纭畾涓嬫浣嶇疆鍙寜鈫戙佲啌銆佲啇銆佲啋涓姝ユ绉诲姩鍏夋爣,涔熷彲鎸'W'锛堝揩閫熷埌鍒楅锛夈'S'锛堝揩閫熷埌鍒楀熬锛夈'A'锛堝揩閫熷埌琛岄锛夈'D'锛堝揩閫熷埌琛屽熬锛塡n\n3.鎸塭nter纭畾钀藉瓙锛屽悓鏃舵湰娓告垙鎻愪緵鐩稿簲蹇嵎閿搷浣滐紙璇﹁妫嬬洏鍙充晶锛"); + x=36,y=3; + getto(x,y); + while(1) + { + if(flag!=-1) + break; + switch(getch())//浠庢帶鍒跺彴鏃犲洖鏄惧湴鍙栦竴涓瓧绗 + { + case '1': + { + ChooseFirst(); //璋冪敤鍏堟墜鍑芥暟 + }break; + case '2': + { + y=5; + ChooseFirst(); //璋冪敤鍏堟墜鍑芥暟 + }break; + case 72: + { + if(y<=3)y=3;else y-=2;//鎺у埗鍏夋爣涓嶄笂瓒呯涓夎 + getto(x,y); + }break; + case 80: + { if(y>=5)y=5;else y+=2;//鎺у埗鍏夋爣涓嶄笅瓒呯浜旇 + getto(x,y); + }break; + case 13: + { + ChooseFirst(); //璋冪敤鍏堟墜鍑芥暟 + }break; + case 'e':case 'E':case 27://鎻愬墠缁堟姣旇禌 + { + int message=MessageBox(NULL,"鏄惁閫鍑猴紵","鍙嬫儏鎻愮ず",MB_OKCANCEL); + if(IDCANCEL==message) + continue; + if(IDOK==message) + {getto(36,15);exit(0);} + }break;//鎻愬墠缁堟姣旇禌 + default: + break; + } + + }//while缁撴潫锛屽緱鍒扮敤鎴风殑閫夋嫨缁撴灉锛屽嵆浣曟柟鍏堜笅 +} + +void showplayer()//鏄剧ず鍝柟鎵у瓙 +{ + + TextColor(TipColor); + if(type==0)//浜轰汉妯″紡 + { + if(count%2==flag) + printf("鐧藉瓙鎵ф墜"); + else + printf("榛戝瓙鎵ф墜"); + } + else //浜烘満妯″紡 + { + if(count%2==flag) + printf("鐢佃剳鎵ф墜"); + else + printf("鐜╁鎵ф墜"); + } +} + +void WhiteChess(int x,int y)//杈撳嚭鐧芥瀛 +{ + getto(x,y); + TextColor(WhiteColor); + printf("鈼"); + prex1=prex; + prey1=prey; + prex=x; //淇濆瓨鍓嶄竴娆′笅妫嬩綅缃紝鏂逛究鎮旀 + prey=y; +} + +void BlackChess(int x,int y)//杈撳嚭榛戞瀛 +{ + getto(x,y); + TextColor(BlackColor); + printf("鈼"); + prex1=prex; + prey1=prey; + prex=x; //淇濆瓨鍓嶄竴娆′笅妫嬩綅缃紝鏂逛究鎮旀 + prey=y; +} + +int ResultCheck(int x,int y,int player) //鍒ゆ柇鏄惁鏈変汉鑳滃埄锛岃嫢鏈変汉鑾疯儨鍒欒繑鍥瀙layer,鍙嶄箣杩斿洖0 +{ + int n1, n2; + int i, j; + n1=n2=0; + for(i=x,j=y;j>=0;j--)//寰宸︽暟 + { + if(status[i][j]==player) + n1++; + else + break; + } + for(i=x,j=y+1;j<15;j++)//寰鍙虫暟 + { + if(status[i][j]==player) + n2++; + else + break; + } + if(n1+n2>=5) //鑻ヨ繛鎴愪簲瀛愶紝娓告垙缁撴潫 + return player; + n1=n2=0; + for(i=x,j=y;i>=0;i--)//寰涓婃暟 + { + if(status[i][j]==player) + n1++; + else + break; + } + for(i=x+1,j=y;i<15;i++)//寰涓嬫暟 + { + if(status[i][j]==player) + n2++; + else + break; + } + if(n1+n2>=5) //鑻ヨ繛鎴愪簲瀛愶紝娓告垙缁撴潫 + return player; + n1=n2=0; + for(i=x,j=y;i>=0&&j>=0;i--,j--)//寰宸︿笂鏁 + { + if(status[i][j]==player) + n1++; + else + break; + } + for(i=x+1,j=y+1;i<15&&j<15;i++,j++)//寰鍙充笅鏁 + { + if(status[i][j]==player) + n2++; + else + break; + } + if(n1+n2>=5) //鑻ヨ繛鎴愪簲瀛愶紝娓告垙缁撴潫 + return player; + n1=n2=0; + for(i=x,j=y;i<15&&j>=0;i++,j--)//寰宸︿笅鏁 + { + if(status[i][j]==player) + n1++; + else + break; + } + for(i=x-1,j=y+1;i>=0&&j<15;i--,j++)//寰鍙充笂鏁 + { + if(status[i][j]==player) + n2++; + else + break; + } + if(n1+n2>=5) //鑻ヨ繛鎴愪簲瀛愶紝娓告垙缁撴潫 + return player; + return 0; //鏈湁浜斿瓙杩炴垚 +} + +void Back()//鎮旀鍑芥暟 +{ + if(status[prey][prex/2])//閬垮厤鐢ㄦ埛澶氭鎮旀 + { + status[prey][prex/2]=0;//灏嗚浣嶇疆鐘舵佹爣涓0 + getto(prex,prey); + TextColor(ChessBoardColor);//灏嗚浣嶇疆鐨勬瀛愯鐩栨帀 + printf("%s",Chess[prey][prex/2]);//閲嶆柊缁樺埗璇ヤ綅缃殑琛ㄦ牸 + count--;//涓嬫姝ユ暟鑷噺 + getto(prex,prey); + } +} + +void Back1()//鎮旀鍑芥暟2锛屽綋杩涜浜烘満瀵规垬鏃惰皟鐢 +{ + if(status[prey1][prex1/2])//閬垮厤鐢ㄦ埛澶氭鎮 妫 + { + status[prey1][prex1/2]=0;//灏嗚浣嶇疆鐘舵佹爣涓0 + getto(prex1,prey1); + TextColor(ChessBoardColor);//灏嗚浣嶇疆鐨勬瀛愯鐩栨帀 + printf("%s",Chess[prey1][prex1/2]);//閲嶆柊缁樺埗璇ヤ綅缃殑琛ㄦ牸 + count--;//涓嬫姝ユ暟鑷噺 + getto(prex1,prey1); + } +} + +void ShowResult()//杈撳嚭涓嬫缁撴灉 +{ + getto(36,15); + if(count>=225) + printf("骞冲眬锛"); + if(type==0) //浜轰汉瀵规垬妯″紡 + { + if(Winner==1) + MessageBox(NULL,"鐧藉瓙鍚涙妫掑搾~~鎴樿儨浜嗛粦瀛愬悰~O(鈭鈭)O~~","浜斿瓙妫嬫父鎴",MB_OK); + if(Winner==2) + MessageBox(NULL,"榛戝瓙鍚涙妫掑搾~~鎴樿儨浜嗙櫧瀛愬悰~~O(鈭鈭)O~~","浜斿瓙妫嬫父鎴",MB_OK); + } + else //浜烘満瀵规垬妯″紡 + { + if(Winner==1) + MessageBox(NULL,"浜诧紝浣犵珶鐒惰緭缁欎簡鐢佃剳锛屽洖瀹舵礂娲楃潯鍚э紒%>_<%","浜斿瓙妫嬫父鎴",MB_OK); + if(Winner==2) + MessageBox(NULL,"浜诧紝浣犲お鍘夊浜嗭紝浣犵珶鐒跺彲浠ユ垬鑳滅數鑴戯紒\^鈼嘵/","浜斿瓙妫嬫父鎴",MB_OK); + } +} + +void save()//淇濆瓨娈嬪眬 +{ + int i,j; + char str[4]; + FILE *fp=fopen("data.txt","w");//鎵撳紑鏂囦欢锛屾妸status[i][j]銆乼ype銆乫lag銆乧ount鍐欏叆data.txt鏂囦欢 + if(fp==NULL) + { + printf("淇濆瓨娈嬪眬澶辫触"); + } + for(i=0;i<15;i++) + for(j=0;j<15;j++) + fputc(status[i][j]+'0',fp); + fputc(type+'0',fp); + fputc(flag+'0',fp); + itoa(count,str,10);//灏嗘暣鏁拌浆鎹㈡垚瀛楃涓诧紝骞剁粰鍑鸿繘鍒舵暟 + fputs(str,fp); + fclose(fp); +} + +void Continue() +{ + int i, j; + char str[4]; + FILE *fp=fopen("data.txt","r");//鎵撳紑鏂囦欢璇诲嚭鐩稿簲鏁版嵁 + if(fp==NULL) + { + printf("鎭㈠娈嬪眬澶辫触......"); + } + for(i=0;i<15;i++) + for(j=0;j<15;j++) + status[i][j]=fgetc(fp)-'0'; + type=fgetc(fp)-'0'; + flag=fgetc(fp)-'0'; + char ch=fgetc(fp); + i=0; + while(ch!=EOF) + { + str[i++]=ch; + ch=fgetc(fp); + } + str[i]='\0'; + fclose(fp); + count=atoi(str);//灏嗗瓧绗︿覆杞崲鎴愭暣鏁 + for(i=0;i<15;i++) + for(j=0;j<15;j++) + { + if(status[i][j]==1) + WhiteChess(2*j,i); + if(status[i][j]==2) + BlackChess(2*j,i); + } +} + +void ValueJudgeAttack() //杩涙敾鏉冨煎嚱鏁帮紝纭畾褰撳墠浣嶇疆鐨勪紭鍏堢骇 +{ + int i1, j1; + int k1,k2,k; + for(int i=0;i<15;i++) + { + for(int j=0;j<15;j++) + { + if(status[i][j]) + Value1[i][j]=0; + if(status[i][j]==0) + { + k1=k2=0; + for(i1=i,j1=j-1;j1>=0;j1--)//寰宸︽暟瀵绘壘鐢佃剳妫嬪瓙鏁 + { + if(status[i1][j1]==1) + k1++; + else + break; + } + for(i1=i,j1=j+1;j1<15;j1++)//寰鍙虫暟瀵绘壘鐢佃剳妫嬪瓙鏁 + { + if(status[i1][j1]==1) + k2++; + else + break; + } + k=k1>k2? k1:k2; + k1=k2=0; + for(i1=i-1,j1=j;i1>=0;i1--)//寰涓婃暟瀵绘壘鐢佃剳妫嬪瓙鏁 + { + if(status[i1][j1]==1) + k1++; + else + break; + } + for(i1=i+1,j1=y;i1<15;i1++)//寰涓嬫暟瀵绘壘鐢佃剳妫嬪瓙鏁 + { + if(status[i1][j1]==1) + k2++; + else + break; + } + k1=k1>k2? k1:k2; + k=k>k1? k:k1; + k1=k2=0; + for(i1=i-1,j1=j-1;i1>=0&&j1>=0;i1--,j1--)//寰宸︿笂鏁板鎵剧數鑴戞瀛愭暟 + { + if(status[i1][j1]==1) + k1++; + else + break; + } + for(i1=i+1,j1=j+1;i1<15&&j1<15;i1++,j1++)//寰鍙充笅鏁板鎵剧數鑴戞瀛愭暟 + { + if(status[i1][j1]==1 ) + k2++; + else + break; + } + k1=k1>k2? k1:k2; + k=k>k1?k:k1; + k1=k2=0; + for(i1=i+1,j1=j-1;i1<15&&j1>=0;i1++,j1--)//寰宸︿笅鏁板鎵剧數鑴戞瀛愭暟 + { + if(status[i1][j1]== 1) + k1++; + else + break; + } + for(i1=i-1,j1=j+1;i1>0&&j1<15;i1--,j1++)//寰鍙充笂鏁板鎵剧數鑴戞瀛愭暟 + { + if(status[i1][j1]==1) + k2++; + else + break; + } + k1=k1>k2? k1:k2; + k=k>k1?k:k1; + switch(k) //k=0,Value[i][j]=3 + { //k=1,Value[i][j]=5 + case 3: //k=2, Value[i][j]=7 + Value1[i][j]=15;break; //k=3,Value[i][j]=15 + case 4: + Value1[i][j]=25;break; //k=4,Value[i][j]=25 + default: + Value1[i][j]=3+2*k;break; + } + }//end of if + }//end of second for + }//end of first for +}//end of the function + +void ValueJudgeDefend()//闃插尽鏉冨煎嚱鏁帮紝纭畾褰撳墠浣嶇疆鐨勪紭鍏堢骇 +{ + int i1, j1; + int k1,k2,k; + for(int i=0;i<15;i++) + { + for(int j=0;j<15;j++) + { + if(status[i][j]) + Value2[i][j]=0; + if(status[i][j]==0) + { + k1=k2=0; + for(i1=i,j1=j-1;j1>=0;j1--)//寰宸︽暟瀵绘壘鐜╁妫嬪瓙鏁 + { + if(status[i1][j1]==2) + k1++; + else + break; + } + for(i1=i,j1=j+1;j1<15;j1++)//寰鍙虫暟瀵绘壘鐜╁妫嬪瓙鏁 + { + if(status[i1][j1]==2) + k2++; + else + break; + } + k=k1>k2? k1:k2; + k1=k2=0; + for(i1=i-1,j1=j;i1>=0;i1--)//寰涓婃暟瀵绘壘鐜╁妫嬪瓙鏁 + { + if(status[i1][j1]==2) + k1++; + else + break; + } + for(i1=i+1,j1=j;i1<15;i1++)//寰涓嬫暟瀵绘壘鐜╁妫嬪瓙鏁 + { + if(status[i1][j1]==2) + k2++; + else + break; + } + k1=k1>k2? k1:k2; + k=k>k1?k:k1; + k1=k2=0; + for(i1=i-1,j1=j-1;i1>=0&&j1>=0;i1--,j1--)//寰宸︿笂鏁板鎵剧帺瀹舵瀛愭暟 + { + if(status[i1][j1]==2) + k1++; + else + break; + } + for(i1=i+1,j1=j+1;i1<15&&j1<15;i1++,j1++)//寰鍙充笅鏁板鎵剧帺瀹舵瀛愭暟 + { + if(status[i1][j1]==2) + k2++; + else + break; + } + k1=k1>k2? k1:k2; + k=k>k1?k:k1; + k1=k2=0; + for(i1=i+1,j1=j-1;i1<15&&j1>=0;i1++,j1--)//寰宸︿笅鏁板鎵剧帺瀹舵瀛愭暟 + { + if(status[i1][j1]==2) + k1++; + else + break; + } + for(i1=i-1,j1=j+1;i1>0&&j1<15;i1--,j1++)//寰鍙充笂鏁板鎵剧帺瀹舵瀛愭暟 + { + if(status[i1][j1]==2) + k2++; + else + break; + } + k1=k1>k2? k1:k2; + k=k>k1?k:k1; + switch(k) //k=0,Value2[i][j]=2 + { //k=1,Value2[i][j]=4 + case 3: //k=2,Value2i][j]=6 + Value2[i][j]=10;break; //k=3,Value2[i][j]=10 + case 4: //k=4,Value2[i][j]=20 + Value2[i][j]=20;break; + default: + Value2[i][j]=2+k*2; + } + } + } + } +} + +void FindPosition()//鎵惧埌鏈鏈変环鍊肩殑浣嶇疆 +{ + int k1=0, k2=0; + int i, j, max=0; + for( i=0;i<15;i++) + for( j=0;j<15;j++) + { + if(max<=Value1[i][j]) + { + max=Value1[i][j]; + k1=i; + k2=j; + } + } + for( i=0;i<15;i++) + for(j=0;j<15;j++) + { + if(max<=Value2[i][j]) + { + max=Value2[i][j]; + k1=i; + k2=j; + } + } + x=2*k2; //灏嗘壘鍒扮殑浣嶇疆浼犵粰鍏夋爣 + y=k1; +} + +void MantoMan() //浜轰汉妯″紡 +{ + while(1)//褰撴湁浜鸿幏鑳滐紝璺冲嚭寰幆锛岀粨鏉熸父鎴 + { + getto(36,13); //杈撳嚭褰撳墠涓嬫鏂 + showplayer(); + getto(x,y); //鍏夋爣璺冲埌妫嬬洏涓ぎ + switch(getch()) + { + case 72: //鍏夋爣涓婄Щ + { + if(y>0) + y-=1; + getto(x,y); + }break; + case 80: //鍏夋爣涓嬬Щ + { + if(y<14) + y+=1; + getto(x,y); + }break; + case 75: //鍏夋爣宸︾Щ + { + if(x>=2) + x-=2; + getto(x,y); + }break; + case 77: //鍏夋爣鍙崇Щ + { + if(x<28) + x+=2; + getto(x,y); + }break; + case 'A':case 'a': //鍏夋爣绉诲埌琛岄 + { + x=0; + getto(x,y); + }break; + case 'D':case 'd': //鍏夋爣绉诲埌琛屽熬 + { + x=28; + getto(x,y); + }break; + case 'W':case 'w': //鍏夋爣绉诲埌鍒楅 + { + y=0; + getto(x,y); + }break; + case 'S':case 's': //鍏夋爣绉诲埌鍒楀熬 + { + y=14; + getto(x,y); + }break; + case 'b':case 'B': //鎮旀 + { + int message=MessageBox(NULL,"鏄惁纭畾鎮旀锛","鍙嬫儏鎻愮ず",MB_OKCANCEL); + if(IDCANCEL==message) + break; + if(IDOK==message) + Back();//璋冪敤鎮旀鍑芥暟 + }break; + case 13: //enter閿紝鍦ㄥ綋鍓嶅厜鏍囦綅缃惤妫 + { + if(count%2==flag) //flag涓0鏃讹紝鐧芥鍏堜笅锛沠lag涓1鏃讹紝榛戞鍏堜笅 + { + if(status[y][x/2]==0) + { + WhiteChess(x,y); + getto(x,y); + status[y][x/2]=1;//鏀瑰彉璇ヤ綅缃殑鐘舵佸间负1 + count++; + Winner=ResultCheck(y,x/2,1); + } + } + else + { + if(status[y][x/2]==0) + { + BlackChess(x,y); + getto(x,y); + status[y][x/2]=2;//鏀瑰彉璇ヤ綅缃殑鐘舵佸间负2 + count++; + Winner=ResultCheck(y,x/2,2); + } + } + }break; + case 'r':case 'R': //鎵鏈夌姸鎬佸彉閲忛噸鏂扳滃垵濮嬪寲鈥 + { + int message=MessageBox(NULL,"鏄惁閲嶆柊寮濮嬶紵","鍙嬫儏鎻愮ず",MB_OKCANCEL); + if(IDCANCEL==message) + break; + if(IDOK==message) + { + for(int i=0;i<15;i++)//妫嬬洏鐘舵佸叏涓虹┖ + for(int j=0;j<15;j++) + status[i][j]=0; + flag=-1; + type=0; + count=0; + Winner=0; + getto(0,0); + system("cls"); + ChessBord(); + ShowChessBoard(); + ShowMenu(); + getto(36,3);//鍏夋爣绉昏嚦鑿滃崟閫夐」 + GameStart(); + } + }break; + case 'e':case 'E':case 27://鎻愬墠缁堟姣旇禌 + { + int message=MessageBox(NULL,"鏄惁淇濆瓨锛","鍙嬫儏鎻愮ず",MB_YESNOCANCEL); + if(IDYES==message) + { + save(); + MessageBox(NULL,"鎭枩浣狅紝宸叉垚鍔熶繚瀛橈紒","鍙嬫儏鎻愮ず",MB_OK); + getto(36,15); + exit(0); + } + if(IDCANCEL==message) + MessageBox(NULL,"缁х画娓告垙","鍙嬫儏鎻愮ず",MB_OK); + if(IDNO==message) + { + MessageBox(NULL,"娌℃湁淇濆瓨锛屾垚鍔熼鍑","鍙嬫儏鎻愮ず",MB_OK); + getto(36,15); + exit(0); + } + };break; + default: + break; + + } + if(count>=225) + break; + if(Winner) + break; + }//while缁撴潫锛屼笅妫嬬粨鏋滃凡鍑烘潵 + } + +void MantoComputer1()//浜烘満妯″紡锛岀數鑴戝厛涓 +{ + x=14,y=7; + WhiteChess(x,y); //鐢佃剳鍏堜笅锛屼笖绗竴瀛愯惤鍦ㄦ鐩樹腑澶 + getto(x,y); + status[y][x/2]=1; + count++; + while(1) + { + getto(36,13); + showplayer(); + getto(x,y); + switch(getch()) + { + case 72: //鈫戝厜鏍囦笂绉 + { + if(y>0) + y-=1; + getto(x,y); + }break; + case 80: //鈫撳厜鏍囦笅绉 + { + if(y<14) + y+=1; + getto(x,y); + }break; + case 75: //鍏夋爣宸︾Щ + { + if(x>=2) + x-=2; + getto(x,y); + }break; + case 77: //鍏夋爣鍙崇Щ + { + if(x<28) + x+=2; + getto(x,y); + }break; + case 'A':case 'a': //鍏夋爣绉诲埌琛岄 + { + x=0; + getto(x,y); + }break; + case 'D':case 'd': //鍏夋爣绉诲埌琛屽熬 + { + x=28; + getto(x,y); + }break; + case 'W':case 'w': //鍏夋爣绉诲埌鍒楅 + { + y=0; + getto(x,y); + }break; + case 'S':case 's': //鍏夋爣绉诲埌鍒楀熬 + { + y=14; + getto(x,y); + }break; + case 'b':case 'B': //鎮旀 + { + if(count<=1) + continue; + int message=MessageBox(NULL,"鏄惁纭畾鎮旀锛","鍙嬫儏鎻愮ず",MB_OKCANCEL); + if(IDCANCEL==message) + break; + if(IDOK==message) + { + Back(); //璋冪敤鎮旀鍑芥暟 + Back1(); //璋冪敤鎮旀鍑芥暟 + } + }break; + case 13: //enter閿紝鍦ㄥ綋鍓嶅厜鏍囦綅缃惤妫 + { + if(count%2!=flag) //flag涓0鐜╁鍚庝笅锛屼笖涓嬪畬鍚庣數鑴戞帴鐫涓 + { + if(status[y][x/2]==0) + { + BlackChess(x,y); + getto(x,y); + status[y][x/2]=2;//鏀瑰彉璇ヤ綅缃殑鐘舵佸间负2 + count++; + Winner=ResultCheck(y,x/2,2); + if(Winner==2) + break; + ValueJudgeAttack(); + ValueJudgeDefend(); + FindPosition(); + if(status[y][x/2]==0) + { + WhiteChess(x,y); + getto(x,y); + status[y][x/2]=1;//鏀瑰彉璇ヤ綅缃殑鐘舵佸间负1 + count++; + Winner=ResultCheck(y,x/2,1); + } + } + } + }break; + case 'r':case 'R': //鎵鏈夌姸鎬佸彉閲忛噸鏂扳滃垵濮嬪寲鈥 + { + int message=MessageBox(NULL,"鏄惁閲嶆柊寮濮嬶紵","鍙嬫儏鎻愮ず",MB_OKCANCEL); + if(IDCANCEL==message) + break; + if(IDOK==message) + { + for(int i=0;i<15;i++)//妫嬬洏鐘舵佸叏涓虹┖ + for(int j=0;j<15;j++) + status[i][j]=0; + flag=-1; + type=0; + count=0; + Winner=0; + getto(0,0); + system("cls"); + ChessBord(); + ShowChessBoard(); + ShowMenu(); + getto(36,3);//鍏夋爣绉昏嚦妫嬬洏涓ぎ + GameStart(); + } + }break; + case 'e':case 'E':case 27://鎻愬墠缁堟姣旇禌 + { + int message=MessageBox(NULL,"鏄惁淇濆瓨锛","鍙嬫儏鎻愮ず",MB_YESNOCANCEL); + if(IDYES==message) + { + save(); + MessageBox(NULL,"鎭枩浣狅紝宸叉垚鍔熶繚瀛橈紒","鍙嬫儏鎻愮ず",MB_OK); + getto(36,15); + exit(0); + } + if(IDCANCEL==message) + MessageBox(NULL,"缁х画娓告垙","鍙嬫儏鎻愮ず",MB_OK); + if(IDNO==message) + { + MessageBox(NULL,"娌℃湁淇濆瓨锛屾垚鍔熼鍑","鍙嬫儏鎻愮ず",MB_OK); + getto(36,15); + exit(0); + } + }break; + default: + break; + + } + if(count>=225) + break; + if(Winner) + break; + }//while缁撴潫锛屼笅妫嬬粨鏋滃凡鍑烘潵 + } + +void MantoComputer2()//浜烘満妯″紡锛岀帺瀹跺厛涓 +{ + x=14,y=7; + while(1) + { + getto(36,13); + showplayer(); + getto(x,y); + switch(getch()) + { + case 72: //鍏夋爣涓婄Щ + { + if(y>0) + y-=1; + getto(x,y); + }break; + case 80: //鍏夋爣涓嬬Щ + { + if(y<14) + y+=1; + getto(x,y); + }break; + case 75: //鍏夋爣宸︾Щ + { + if(x>=2) + x-=2; + getto(x,y); + }break; + case 77: //鍏夋爣鍙崇Щ + { + if(x<28) + x+=2; + getto(x,y); + }break; + case 'A':case 'a': //鍏夋爣绉诲埌琛岄 + { + x=0; + getto(x,y); + }break; + case 'D':case 'd': //鍏夋爣绉诲埌琛屽熬 + { + x=28; + getto(x,y); + }break; + case 'W':case 'w': //鍏夋爣绉诲埌鍒楅 + { + y=0; + getto(x,y); + }break; + case 'S':case 's': //鍏夋爣绉诲埌鍒楀熬 + { + y=14; + getto(x,y); + }break; + case 'b':case 'B': //鎮旀 + { + int message=MessageBox(NULL,"鏄惁纭畾鎮旀锛","鍙嬫儏鎻愮ず",MB_OKCANCEL); + if(IDCANCEL==message) + break; + if(IDOK==message) + { + Back(); //璋冪敤鎮旀鍑芥暟 + Back1(); //璋冪敤鎮旀鍑芥暟 + } + }break; + case 13: //enter閿紝鍦ㄥ綋鍓嶅厜鏍囦綅缃惤妫 + { + if(count%2!=flag) //flag涓1鐜╁鍏堜笅锛屼笖涓嬪畬鍚庣數鑴戝啀涓 + { + if(status[y][x/2]==0) + { + BlackChess(x,y); + getto(x,y); + status[y][x/2]=2;//鏀瑰彉璇ヤ綅缃殑鐘舵佸间负2 + count++; + Winner=ResultCheck(y,x/2,2); + if(Winner==2) + break; + ValueJudgeAttack(); + ValueJudgeDefend(); + FindPosition(); + if(status[y][x/2]==0) + { + WhiteChess(x,y); + getto(x,y); + status[y][x/2]=1;//鏀瑰彉璇ヤ綅缃殑鐘舵佸间负1 + count++; + Winner=ResultCheck(y,x/2,1); + } + } + } + }break; + case 'r':case 'R': //鎵鏈夌姸鎬佸彉閲忛噸鏂扳滃垵濮嬪寲鈥 + { + int message=MessageBox(NULL,"鏄惁閲嶆柊寮濮嬶紵","鍙嬫儏鎻愮ず锛",MB_OKCANCEL); + if(IDCANCEL==message) + break; + if(IDOK==message) + { + for(int i=0;i<15;i++)//妫嬬洏鐘舵佸叏涓虹┖ + for(int j=0;j<15;j++) + status[i][j]=0; + flag=-1; + type=0; + count=0; + Winner=0; + getto(0,0); + system("cls"); + ChessBord(); + ShowChessBoard(); + ShowMenu(); + getto(36,3);//鍏夋爣绉昏嚦妫嬬洏涓ぎ + GameStart(); + } + }break; + case 'e':case 'E':case 27://鎻愬墠缁堟姣旇禌 + { + int message=MessageBox(NULL,"鏄惁淇濆瓨锛","鍙嬫儏鎻愮ず",MB_YESNOCANCEL); + if(IDYES==message) + { + save(); + MessageBox(NULL,"鎭枩浣狅紝宸叉垚鍔熶繚瀛橈紒","鍙嬫儏鎻愮ず",MB_OK); + getto(36,15); + exit(0); + } + if(IDCANCEL==message) + MessageBox(NULL,"缁х画娓告垙","鍙嬫儏鎻愮ず",MB_OK); + if(IDNO==message) + { + MessageBox(NULL,"娌℃湁淇濆瓨锛屾垚鍔熼鍑","鍙嬫儏鎻愮ず",MB_OK); + getto(36,15); + exit(0); + } + };break; + default: + break; + + } + if(count>=225) + break; + if(Winner) + break; + }//while缁撴潫锛屼笅妫嬬粨鏋滃凡鍑烘潵 +} + +void GameStart()//涓嬫鍑芥暟 +{ + x=14,y=7; + getto(x,y); + if(type==0) + MantoMan(); //浜轰汉妯″紡 + else + { + if(flag==0) + MantoComputer1();//鐢佃剳鍏堟墜 + if(flag==1) + MantoComputer2();//鐜╁鍏堟墜 + } + ShowResult(); //鏄剧ず娓告垙缁撴灉 +} + +int main() +{ + FILE *fp=fopen("data.txt","r");//瀹氫箟涓涓枃浠舵寚閽堟寚鍚戞暟鎹繚瀛樻枃浠 + ChessBord();//缁樺埗妫嬬洏 + system("cls");//瀹炵幇娓呭睆 + ShowChessBoard();//杈撳嚭妫嬬洏 + char ch=fgetc(fp); + fclose(fp); + if(ch!=EOF) //鍒ゆ柇鏂囦欢鏄惁涓虹┖锛岃嫢闈炵┖鍒欒〃鏄巇ata.txt鏂囦欢閲屾湁鏁版嵁 + { + int message=MessageBox(NULL,"妫娴嬪埌鎮ㄤ笂娆′簲瀛愭杩樻病鏈変笅瀹岋紝鏄惁缁х画锛","鍙嬫儏鎻愮ず",MB_OKCANCEL); + if(IDCANCEL==message) + { + fp=fopen("data.txt","w");//鑻ョ敤鎴峰彇娑堟仮澶嶆畫灞锛屽垯瀵瑰師鏁版嵁鏂囦欢杩涜鏀瑰啓瑕嗙洊锛岄伩鍏嶅娆℃彁閱掔敤鎴锋仮澶嶆畫灞 + fclose(fp); + } + if(IDOK==message) + { + Continue();//璋冪敤鎭㈠娈嬪眬鍑芥暟 + ShowMenu();//杈撳嚭鑿滃崟 + x=14,y=7; + getto(14,7); + if(type==0) //鏍规嵁瀵瑰師鏁版嵁鐨勫垽鏂紝鎭㈠娓告垙鐜板満锛屽嵆娓告垙妯″紡銆佸厛鍚庢墜闂 + { + MantoMan(); + ShowResult(); //鏄剧ず娓告垙缁撴灉 + } + if(type==1&&(count%2==flag)) + { + MantoComputer1(); + ShowResult(); //鏄剧ず娓告垙缁撴灉 + } + if(type==1&&(count%2!=flag)) + { + MantoComputer2(); + ShowResult(); //鏄剧ず娓告垙缁撴灉 + } + fp=fopen("data.txt","w");//鎭㈠娈嬪眬鍚庡簲鍙婃椂瀵瑰鍘熸暟鎹枃浠惰繘琛屾敼鍐欒鐩栵紝閬垮厤澶氭鎻愰啋鐢ㄦ埛鎭㈠娈嬪眬 + fclose(fp); + } + } + if(!Winner) + { + ShowMenu();//杈撳嚭鑿滃崟 + getto(36,3); + GameStart();//寮濮嬫父鎴*/ + } + return 0; +} diff --git "a/\344\272\224\345\255\220\346\243\213txt.txt" "b/\344\272\224\345\255\220\346\243\213txt.txt" new file mode 100644 index 00000000..d245d5d8 --- /dev/null +++ "b/\344\272\224\345\255\220\346\243\213txt.txt" @@ -0,0 +1,1171 @@ +杩欎釜鏂囦欢涔熸槸.txt (銉庛伕锟c)锛岀敱浜庡疄楠屾姤鍛婂凡缁忔彁浜や簡锛岀綉鍧娌℃硶鏀逛簡(掳銉悸般)锛 +鎴戝氨鎶.c缃戝潃鏀惧湪杩欓噷甯屾湜鑰佸笀鑳界湅瑙(銆傦箯銆*) +https://github.com/lzysb/c2019/blob/master/%E4%BA%94%E5%AD%90%E6%A3%8Bcpp.cpp +璋㈣阿鑰佸笀锛侊紒锛佽繖涓鏈熷鍒颁簡寰堝璇炬湰涓婂涓嶅埌鐨勪笢瑗匡紒锛 + + + +#include +#include +#include//API鍑芥暟澶存枃浠 +#include//鎺у埗鍙拌緭 鍏ヨ緭鍑哄ご鏂囦欢 + +/*鐣岄潰棰滆壊瀹忓畾涔*/ +#define WhiteColor 63 +#define BlackColor 48 +#define Menu 2 +#define ChessBackground 125 +#define ChessBoardColor 48 +#define TipColor 6//缁胯壊 + +HANDLE hOutput=GetStdHandle(STD_OUTPUT_HANDLE);//寰楀埌涓涓爣鍑嗙殑杈撳嚭鍙ユ焺 + +char Chess[15][15][3];//妫嬪瀷瀛楃鏁扮粍 + +int type=0;//璁板綍浜轰汉瀵规垬or浜烘満瀵规垬锛宼ype涓0浜轰汉瀵规垬锛宼ype涓1浜烘満瀵规垬锛岄粯璁や负浜轰汉瀵规垬 + +int flag=-1;//璁板綍榛戠櫧妫嬪摢鏂瑰厛钀藉瓙锛宖lag涓0鐧藉瓙锛堢數鑴戯級鍏堬紝flag涓1榛戝瓙锛堢帺瀹讹級鍏 + +int count=0;//璁板綍涓嬫姝ユ暟锛屼竴鍏卞彲涓225姝 + +int status[15][15]={0};//鏍囪瘑褰撳墠浣嶇疆鐘舵侊紝status[i][j]涓0琛ㄦ槑姝や綅缃负绌猴紝status[i][j]涓1琛ㄦ槑涓虹櫧妫嬶紙鐢佃剳锛夛紝status[i][j]涓2琛ㄦ槑褰撳墠浣嶇疆涓洪粦妫嬶紙鐜╁锛 + +int Winner=0;//鏍囪瘑璧㈠锛學inner=1琛ㄦ槑鐧芥锛堢數鑴戯級鑳滐紝Winner=2琛ㄦ槑榛戞锛堢帺瀹讹級鑳 + +int x=40, y=1;//琛ㄧず褰撳墠榧犳爣鐨勪綅缃 + +int prex=0, prey=0;//璁板綍褰撳墠妫嬫墜涓嬫浣嶇疆锛岀敤浜庢倲妫嬪嚱鏁 + +int prex1=0, prey1=0;//璁板綍妫嬫墜涓婁竴姝ヤ笅妫嬬殑浣嶇疆锛岀敤浜庣數鑴戞倲妫嬪弬鏁 + +int Value1[15][15]={0};//鏀诲嚮鏉冨硷紝鐢ㄤ簬鐢佃剳浼樺厛浣嶇疆鍒ゆ柇 + +int Value2[15][15]={0};//闃插畧鏉冨硷紝鐢ㄤ簬鐢佃剳浼樺厛浣嶇疆鍒ゆ柇 + +void GameStart();//涓嬫鍑芥暟 + +void TextColor(int color)//璁剧疆棰滆壊鍑芥暟 +{ + SetConsoleTextAttribute(hOutput,color);//璁剧疆鎺у埗鍙版枃鏈睘鎬 +} + +void ChessBord()//缁樺埗妫嬬洏褰㈢姸 +{ + int i, j; + strcpy(Chess[0][0],"鈹");//璁剧疆妫嬬洏鍥涜 + strcpy(Chess[14][0],"鈹"); + strcpy(Chess[0][14],"鈹"); + strcpy(Chess[14][14],"鈹"); + for(i=1;i<14;i++) + { + strcpy(Chess[i][0],"鈹"); + strcpy(Chess[i][14],"鈹"); + } + for(j=1;j<14;j++) + { + strcpy(Chess[0][j],"鈹"); + strcpy(Chess[14][j],"鈹"); + } + for(i=1;i<14;i++) + for(j=1;j<14;j++) + strcpy(Chess[i][j],"鈹"); +} + +void ShowChessBoard()//杈撳嚭妫嬬洏褰㈢姸 +{ + for(int i=0;i<15;i++) + { + for(int j=0;j<15;j++) + { + TextColor(ChessBoardColor);//妫嬬洏棰滆壊 + printf("%s",Chess[i][j]); + //printf(" "); // win10鐜闇瑕佹坊鍔犺璇彞锛屽惁鍒欑晫闈㈡樉绀烘湁闂 + } + printf("\n"); + } +} + +void getto(int x,int y)//鍏夋爣鍑芥暟 +{ + COORD cursor={0,0};//瀹氫箟涓涓厜鏍囧璞 + cursor.X=x; + cursor.Y=y; + SetConsoleCursorPosition(hOutput,cursor);//璁剧疆鍏夋爣浣嶇疆 +} + +void ChooseFirst() //鍏堟墜鍑芥暟锛岀‘瀹氫汉浜/鏈烘ā寮忎互鍙婂厛鍚庢墜 +{ + switch(y) + { + case 3: + { + TextColor(TipColor);//璁剧疆鎻愮ず鐨勯鑹 + x=50,y=3;getto(x,y); + printf("1.鐧藉瓙鍏堟墜"); + getto(x,y+2); + printf("2.榛戝瓙鍏堟墜"); + getto(x,y); + while(1) + { + switch(getch())//浠庢帶鍒跺彴鏃犲洖鏄惧湴鍙栦竴涓瓧绗 + { + case '1': + flag=0;break; + case '2': + flag=1;break; + case 72:if(y<=3)y=3;else y-=2;getto(x,y);break;//涓 + case 80:if(y>=5)y=5;else y+=2;getto(x,y);break;//涓 + case 13:if(y==3) flag=0;else flag=1; break;//flag=0 鐧藉瓙鍏堟墜 flag=1 榛戝瓙鍏堟墜 + case 'e':case 'E':case 27: + { + int message=MessageBox(NULL,"鏄惁閫鍑猴紵","鍙嬫儏鎻愮ず",MB_OKCANCEL); + if(IDCANCEL==message) + continue; + if(IDOK==message) + { + getto(36,15); + exit(0); + } + }break;//鎻愬墠缁堟姣旇禌 + default:break; + } + if(flag!=-1) + break;//閫夋嫨濂藉厛鍚庢墜锛岃烦鍑哄惊鐜 + } + }break; + case 5: + { + type=1; //浜烘満瀵规垬妯″紡 + TextColor(TipColor);//璁剧疆鎻愮ず鐨勯鑹 + x=50,y=3;getto(x,y); + printf("1.鐢佃剳鍏堟墜"); + getto(x,y+2); + printf("2.鐜╁鍏堟墜"); + getto(x,y); + while(1) + { + switch(getch()) + { + case '1': + flag=0;break; + case '2': + flag=1;break; + case 72:if(y<=3)y=3;else y-=2;getto(x,y);break; + case 80:if(y>=5)y=5;else y+=2;getto(x,y);break; + case 13:if(y==3) flag=0;else flag=1;break; //flag=0 鐢佃剳鍏堟墜 flag=1 鐜╁鍏堟墜 + case 'e':case 'E': + { + int message=MessageBox(NULL,"鏄惁閫鍑猴紵","鍙嬫儏鎻愮ず",MB_OKCANCEL); + if(IDCANCEL==message) + continue; + if(IDOK==message) + { + getto(36,15); + exit(0); + } + }break;//鎻愬墠缁堟姣旇禌 + default:break; + } + if(flag!=-1) + break;//閫夋嫨濂藉厛鍚庢墜锛岃烦鍑哄惊鐜 + } + }break; + default: + break; + } +} + +void ShowMenu()//杈撳嚭鑿滃崟閫夐」锛岀敤鎴峰彲瑙嗗寲鐣岄潰 +{ + getto(40,1); + TextColor(Menu); + printf("娆㈣繋浣跨敤浜斿瓙妫"); + getto(36,3); + printf("1.浜轰汉瀵规垬"); + getto(36,5); + printf("2.浜烘満瀵规垬"); + getto(36,7); + printf("B鎮旀(鎸夊揩鎹烽敭B鍗冲彲瀹炶鎮旀)"); + getto(36,9); + printf("E閫鍑(鎸夊揩鎹烽敭E鍗冲彲瀹炶閫鍑)"); + getto(36,11); + printf("R閲嶆柊寮濮(鎸夊揩鎹烽敭R鍗冲彲瀹炶閲嶆柊寮濮)"); + getto(0,16); + printf(" 鎿嶄綔璇存槑锛歕n\n"); + printf("1.鐢ㄦ埛搴斿厛閫夋嫨娓告垙妯″紡锛屽彲浠ユ寜蹇嵎閿'1'銆'2'杩涜閫夋嫨锛屼篃鍙氳繃绉诲姩鍏夋爣瀹炵幇\n\n2.纭畾涓嬫浣嶇疆鍙寜鈫戙佲啌銆佲啇銆佲啋涓姝ユ绉诲姩鍏夋爣,涔熷彲鎸'W'锛堝揩閫熷埌鍒楅锛夈'S'锛堝揩閫熷埌鍒楀熬锛夈'A'锛堝揩閫熷埌琛岄锛夈'D'锛堝揩閫熷埌琛屽熬锛塡n\n3.鎸塭nter纭畾钀藉瓙锛屽悓鏃舵湰娓告垙鎻愪緵鐩稿簲蹇嵎閿搷浣滐紙璇﹁妫嬬洏鍙充晶锛"); + x=36,y=3; + getto(x,y); + while(1) + { + if(flag!=-1) + break; + switch(getch())//浠庢帶鍒跺彴鏃犲洖鏄惧湴鍙栦竴涓瓧绗 + { + case '1': + { + ChooseFirst(); //璋冪敤鍏堟墜鍑芥暟 + }break; + case '2': + { + y=5; + ChooseFirst(); //璋冪敤鍏堟墜鍑芥暟 + }break; + case 72: + { + if(y<=3)y=3;else y-=2;//鎺у埗鍏夋爣涓嶄笂瓒呯涓夎 + getto(x,y); + }break; + case 80: + { if(y>=5)y=5;else y+=2;//鎺у埗鍏夋爣涓嶄笅瓒呯浜旇 + getto(x,y); + }break; + case 13: + { + ChooseFirst(); //璋冪敤鍏堟墜鍑芥暟 + }break; + case 'e':case 'E':case 27://鎻愬墠缁堟姣旇禌 + { + int message=MessageBox(NULL,"鏄惁閫鍑猴紵","鍙嬫儏鎻愮ず",MB_OKCANCEL); + if(IDCANCEL==message) + continue; + if(IDOK==message) + {getto(36,15);exit(0);} + }break;//鎻愬墠缁堟姣旇禌 + default: + break; + } + + }//while缁撴潫锛屽緱鍒扮敤鎴风殑閫夋嫨缁撴灉锛屽嵆浣曟柟鍏堜笅 +} + +void showplayer()//鏄剧ず鍝柟鎵у瓙 +{ + + TextColor(TipColor); + if(type==0)//浜轰汉妯″紡 + { + if(count%2==flag) + printf("鐧藉瓙鎵ф墜"); + else + printf("榛戝瓙鎵ф墜"); + } + else //浜烘満妯″紡 + { + if(count%2==flag) + printf("鐢佃剳鎵ф墜"); + else + printf("鐜╁鎵ф墜"); + } +} + +void WhiteChess(int x,int y)//杈撳嚭鐧芥瀛 +{ + getto(x,y); + TextColor(WhiteColor); + printf("鈼"); + prex1=prex; + prey1=prey; + prex=x; //淇濆瓨鍓嶄竴娆′笅妫嬩綅缃紝鏂逛究鎮旀 + prey=y; +} + +void BlackChess(int x,int y)//杈撳嚭榛戞瀛 +{ + getto(x,y); + TextColor(BlackColor); + printf("鈼"); + prex1=prex; + prey1=prey; + prex=x; //淇濆瓨鍓嶄竴娆′笅妫嬩綅缃紝鏂逛究鎮旀 + prey=y; +} + +int ResultCheck(int x,int y,int player) //鍒ゆ柇鏄惁鏈変汉鑳滃埄锛岃嫢鏈変汉鑾疯儨鍒欒繑鍥瀙layer,鍙嶄箣杩斿洖0 +{ + int n1, n2; + int i, j; + n1=n2=0; + for(i=x,j=y;j>=0;j--)//寰宸︽暟 + { + if(status[i][j]==player) + n1++; + else + break; + } + for(i=x,j=y+1;j<15;j++)//寰鍙虫暟 + { + if(status[i][j]==player) + n2++; + else + break; + } + if(n1+n2>=5) //鑻ヨ繛鎴愪簲瀛愶紝娓告垙缁撴潫 + return player; + n1=n2=0; + for(i=x,j=y;i>=0;i--)//寰涓婃暟 + { + if(status[i][j]==player) + n1++; + else + break; + } + for(i=x+1,j=y;i<15;i++)//寰涓嬫暟 + { + if(status[i][j]==player) + n2++; + else + break; + } + if(n1+n2>=5) //鑻ヨ繛鎴愪簲瀛愶紝娓告垙缁撴潫 + return player; + n1=n2=0; + for(i=x,j=y;i>=0&&j>=0;i--,j--)//寰宸︿笂鏁 + { + if(status[i][j]==player) + n1++; + else + break; + } + for(i=x+1,j=y+1;i<15&&j<15;i++,j++)//寰鍙充笅鏁 + { + if(status[i][j]==player) + n2++; + else + break; + } + if(n1+n2>=5) //鑻ヨ繛鎴愪簲瀛愶紝娓告垙缁撴潫 + return player; + n1=n2=0; + for(i=x,j=y;i<15&&j>=0;i++,j--)//寰宸︿笅鏁 + { + if(status[i][j]==player) + n1++; + else + break; + } + for(i=x-1,j=y+1;i>=0&&j<15;i--,j++)//寰鍙充笂鏁 + { + if(status[i][j]==player) + n2++; + else + break; + } + if(n1+n2>=5) //鑻ヨ繛鎴愪簲瀛愶紝娓告垙缁撴潫 + return player; + return 0; //鏈湁浜斿瓙杩炴垚 +} + +void Back()//鎮旀鍑芥暟 +{ + if(status[prey][prex/2])//閬垮厤鐢ㄦ埛澶氭鎮旀 + { + status[prey][prex/2]=0;//灏嗚浣嶇疆鐘舵佹爣涓0 + getto(prex,prey); + TextColor(ChessBoardColor);//灏嗚浣嶇疆鐨勬瀛愯鐩栨帀 + printf("%s",Chess[prey][prex/2]);//閲嶆柊缁樺埗璇ヤ綅缃殑琛ㄦ牸 + count--;//涓嬫姝ユ暟鑷噺 + getto(prex,prey); + } +} + +void Back1()//鎮旀鍑芥暟2锛屽綋杩涜浜烘満瀵规垬鏃惰皟鐢 +{ + if(status[prey1][prex1/2])//閬垮厤鐢ㄦ埛澶氭鎮 妫 + { + status[prey1][prex1/2]=0;//灏嗚浣嶇疆鐘舵佹爣涓0 + getto(prex1,prey1); + TextColor(ChessBoardColor);//灏嗚浣嶇疆鐨勬瀛愯鐩栨帀 + printf("%s",Chess[prey1][prex1/2]);//閲嶆柊缁樺埗璇ヤ綅缃殑琛ㄦ牸 + count--;//涓嬫姝ユ暟鑷噺 + getto(prex1,prey1); + } +} + +void ShowResult()//杈撳嚭涓嬫缁撴灉 +{ + getto(36,15); + if(count>=225) + printf("骞冲眬锛"); + if(type==0) //浜轰汉瀵规垬妯″紡 + { + if(Winner==1) + MessageBox(NULL,"鐧藉瓙鍚涙妫掑搾~~鎴樿儨浜嗛粦瀛愬悰~O(鈭鈭)O~~","浜斿瓙妫嬫父鎴",MB_OK); + if(Winner==2) + MessageBox(NULL,"榛戝瓙鍚涙妫掑搾~~鎴樿儨浜嗙櫧瀛愬悰~~O(鈭鈭)O~~","浜斿瓙妫嬫父鎴",MB_OK); + } + else //浜烘満瀵规垬妯″紡 + { + if(Winner==1) + MessageBox(NULL,"浜诧紝浣犵珶鐒惰緭缁欎簡鐢佃剳锛屽洖瀹舵礂娲楃潯鍚э紒%>_<%","浜斿瓙妫嬫父鎴",MB_OK); + if(Winner==2) + MessageBox(NULL,"浜诧紝浣犲お鍘夊浜嗭紝浣犵珶鐒跺彲浠ユ垬鑳滅數鑴戯紒\^鈼嘵/","浜斿瓙妫嬫父鎴",MB_OK); + } +} + +void save()//淇濆瓨娈嬪眬 +{ + int i,j; + char str[4]; + FILE *fp=fopen("data.txt","w");//鎵撳紑鏂囦欢锛屾妸status[i][j]銆乼ype銆乫lag銆乧ount鍐欏叆data.txt鏂囦欢 + if(fp==NULL) + { + printf("淇濆瓨娈嬪眬澶辫触"); + } + for(i=0;i<15;i++) + for(j=0;j<15;j++) + fputc(status[i][j]+'0',fp); + fputc(type+'0',fp); + fputc(flag+'0',fp); + itoa(count,str,10);//灏嗘暣鏁拌浆鎹㈡垚瀛楃涓诧紝骞剁粰鍑鸿繘鍒舵暟 + fputs(str,fp); + fclose(fp); +} + +void Continue() +{ + int i, j; + char str[4]; + FILE *fp=fopen("data.txt","r");//鎵撳紑鏂囦欢璇诲嚭鐩稿簲鏁版嵁 + if(fp==NULL) + { + printf("鎭㈠娈嬪眬澶辫触......"); + } + for(i=0;i<15;i++) + for(j=0;j<15;j++) + status[i][j]=fgetc(fp)-'0'; + type=fgetc(fp)-'0'; + flag=fgetc(fp)-'0'; + char ch=fgetc(fp); + i=0; + while(ch!=EOF) + { + str[i++]=ch; + ch=fgetc(fp); + } + str[i]='\0'; + fclose(fp); + count=atoi(str);//灏嗗瓧绗︿覆杞崲鎴愭暣鏁 + for(i=0;i<15;i++) + for(j=0;j<15;j++) + { + if(status[i][j]==1) + WhiteChess(2*j,i); + if(status[i][j]==2) + BlackChess(2*j,i); + } +} + +void ValueJudgeAttack() //杩涙敾鏉冨煎嚱鏁帮紝纭畾褰撳墠浣嶇疆鐨勪紭鍏堢骇 +{ + int i1, j1; + int k1,k2,k; + for(int i=0;i<15;i++) + { + for(int j=0;j<15;j++) + { + if(status[i][j]) + Value1[i][j]=0; + if(status[i][j]==0) + { + k1=k2=0; + for(i1=i,j1=j-1;j1>=0;j1--)//寰宸︽暟瀵绘壘鐢佃剳妫嬪瓙鏁 + { + if(status[i1][j1]==1) + k1++; + else + break; + } + for(i1=i,j1=j+1;j1<15;j1++)//寰鍙虫暟瀵绘壘鐢佃剳妫嬪瓙鏁 + { + if(status[i1][j1]==1) + k2++; + else + break; + } + k=k1>k2? k1:k2; + k1=k2=0; + for(i1=i-1,j1=j;i1>=0;i1--)//寰涓婃暟瀵绘壘鐢佃剳妫嬪瓙鏁 + { + if(status[i1][j1]==1) + k1++; + else + break; + } + for(i1=i+1,j1=y;i1<15;i1++)//寰涓嬫暟瀵绘壘鐢佃剳妫嬪瓙鏁 + { + if(status[i1][j1]==1) + k2++; + else + break; + } + k1=k1>k2? k1:k2; + k=k>k1? k:k1; + k1=k2=0; + for(i1=i-1,j1=j-1;i1>=0&&j1>=0;i1--,j1--)//寰宸︿笂鏁板鎵剧數鑴戞瀛愭暟 + { + if(status[i1][j1]==1) + k1++; + else + break; + } + for(i1=i+1,j1=j+1;i1<15&&j1<15;i1++,j1++)//寰鍙充笅鏁板鎵剧數鑴戞瀛愭暟 + { + if(status[i1][j1]==1 ) + k2++; + else + break; + } + k1=k1>k2? k1:k2; + k=k>k1?k:k1; + k1=k2=0; + for(i1=i+1,j1=j-1;i1<15&&j1>=0;i1++,j1--)//寰宸︿笅鏁板鎵剧數鑴戞瀛愭暟 + { + if(status[i1][j1]== 1) + k1++; + else + break; + } + for(i1=i-1,j1=j+1;i1>0&&j1<15;i1--,j1++)//寰鍙充笂鏁板鎵剧數鑴戞瀛愭暟 + { + if(status[i1][j1]==1) + k2++; + else + break; + } + k1=k1>k2? k1:k2; + k=k>k1?k:k1; + switch(k) //k=0,Value[i][j]=3 + { //k=1,Value[i][j]=5 + case 3: //k=2, Value[i][j]=7 + Value1[i][j]=15;break; //k=3,Value[i][j]=15 + case 4: + Value1[i][j]=25;break; //k=4,Value[i][j]=25 + default: + Value1[i][j]=3+2*k;break; + } + }//end of if + }//end of second for + }//end of first for +}//end of the function + +void ValueJudgeDefend()//闃插尽鏉冨煎嚱鏁帮紝纭畾褰撳墠浣嶇疆鐨勪紭鍏堢骇 +{ + int i1, j1; + int k1,k2,k; + for(int i=0;i<15;i++) + { + for(int j=0;j<15;j++) + { + if(status[i][j]) + Value2[i][j]=0; + if(status[i][j]==0) + { + k1=k2=0; + for(i1=i,j1=j-1;j1>=0;j1--)//寰宸︽暟瀵绘壘鐜╁妫嬪瓙鏁 + { + if(status[i1][j1]==2) + k1++; + else + break; + } + for(i1=i,j1=j+1;j1<15;j1++)//寰鍙虫暟瀵绘壘鐜╁妫嬪瓙鏁 + { + if(status[i1][j1]==2) + k2++; + else + break; + } + k=k1>k2? k1:k2; + k1=k2=0; + for(i1=i-1,j1=j;i1>=0;i1--)//寰涓婃暟瀵绘壘鐜╁妫嬪瓙鏁 + { + if(status[i1][j1]==2) + k1++; + else + break; + } + for(i1=i+1,j1=j;i1<15;i1++)//寰涓嬫暟瀵绘壘鐜╁妫嬪瓙鏁 + { + if(status[i1][j1]==2) + k2++; + else + break; + } + k1=k1>k2? k1:k2; + k=k>k1?k:k1; + k1=k2=0; + for(i1=i-1,j1=j-1;i1>=0&&j1>=0;i1--,j1--)//寰宸︿笂鏁板鎵剧帺瀹舵瀛愭暟 + { + if(status[i1][j1]==2) + k1++; + else + break; + } + for(i1=i+1,j1=j+1;i1<15&&j1<15;i1++,j1++)//寰鍙充笅鏁板鎵剧帺瀹舵瀛愭暟 + { + if(status[i1][j1]==2) + k2++; + else + break; + } + k1=k1>k2? k1:k2; + k=k>k1?k:k1; + k1=k2=0; + for(i1=i+1,j1=j-1;i1<15&&j1>=0;i1++,j1--)//寰宸︿笅鏁板鎵剧帺瀹舵瀛愭暟 + { + if(status[i1][j1]==2) + k1++; + else + break; + } + for(i1=i-1,j1=j+1;i1>0&&j1<15;i1--,j1++)//寰鍙充笂鏁板鎵剧帺瀹舵瀛愭暟 + { + if(status[i1][j1]==2) + k2++; + else + break; + } + k1=k1>k2? k1:k2; + k=k>k1?k:k1; + switch(k) //k=0,Value2[i][j]=2 + { //k=1,Value2[i][j]=4 + case 3: //k=2,Value2i][j]=6 + Value2[i][j]=10;break; //k=3,Value2[i][j]=10 + case 4: //k=4,Value2[i][j]=20 + Value2[i][j]=20;break; + default: + Value2[i][j]=2+k*2; + } + } + } + } +} + +void FindPosition()//鎵惧埌鏈鏈変环鍊肩殑浣嶇疆 +{ + int k1=0, k2=0; + int i, j, max=0; + for( i=0;i<15;i++) + for( j=0;j<15;j++) + { + if(max<=Value1[i][j]) + { + max=Value1[i][j]; + k1=i; + k2=j; + } + } + for( i=0;i<15;i++) + for(j=0;j<15;j++) + { + if(max<=Value2[i][j]) + { + max=Value2[i][j]; + k1=i; + k2=j; + } + } + x=2*k2; //灏嗘壘鍒扮殑浣嶇疆浼犵粰鍏夋爣 + y=k1; +} + +void MantoMan() //浜轰汉妯″紡 +{ + while(1)//褰撴湁浜鸿幏鑳滐紝璺冲嚭寰幆锛岀粨鏉熸父鎴 + { + getto(36,13); //杈撳嚭褰撳墠涓嬫鏂 + showplayer(); + getto(x,y); //鍏夋爣璺冲埌妫嬬洏涓ぎ + switch(getch()) + { + case 72: //鍏夋爣涓婄Щ + { + if(y>0) + y-=1; + getto(x,y); + }break; + case 80: //鍏夋爣涓嬬Щ + { + if(y<14) + y+=1; + getto(x,y); + }break; + case 75: //鍏夋爣宸︾Щ + { + if(x>=2) + x-=2; + getto(x,y); + }break; + case 77: //鍏夋爣鍙崇Щ + { + if(x<28) + x+=2; + getto(x,y); + }break; + case 'A':case 'a': //鍏夋爣绉诲埌琛岄 + { + x=0; + getto(x,y); + }break; + case 'D':case 'd': //鍏夋爣绉诲埌琛屽熬 + { + x=28; + getto(x,y); + }break; + case 'W':case 'w': //鍏夋爣绉诲埌鍒楅 + { + y=0; + getto(x,y); + }break; + case 'S':case 's': //鍏夋爣绉诲埌鍒楀熬 + { + y=14; + getto(x,y); + }break; + case 'b':case 'B': //鎮旀 + { + int message=MessageBox(NULL,"鏄惁纭畾鎮旀锛","鍙嬫儏鎻愮ず",MB_OKCANCEL); + if(IDCANCEL==message) + break; + if(IDOK==message) + Back();//璋冪敤鎮旀鍑芥暟 + }break; + case 13: //enter閿紝鍦ㄥ綋鍓嶅厜鏍囦綅缃惤妫 + { + if(count%2==flag) //flag涓0鏃讹紝鐧芥鍏堜笅锛沠lag涓1鏃讹紝榛戞鍏堜笅 + { + if(status[y][x/2]==0) + { + WhiteChess(x,y); + getto(x,y); + status[y][x/2]=1;//鏀瑰彉璇ヤ綅缃殑鐘舵佸间负1 + count++; + Winner=ResultCheck(y,x/2,1); + } + } + else + { + if(status[y][x/2]==0) + { + BlackChess(x,y); + getto(x,y); + status[y][x/2]=2;//鏀瑰彉璇ヤ綅缃殑鐘舵佸间负2 + count++; + Winner=ResultCheck(y,x/2,2); + } + } + }break; + case 'r':case 'R': //鎵鏈夌姸鎬佸彉閲忛噸鏂扳滃垵濮嬪寲鈥 + { + int message=MessageBox(NULL,"鏄惁閲嶆柊寮濮嬶紵","鍙嬫儏鎻愮ず",MB_OKCANCEL); + if(IDCANCEL==message) + break; + if(IDOK==message) + { + for(int i=0;i<15;i++)//妫嬬洏鐘舵佸叏涓虹┖ + for(int j=0;j<15;j++) + status[i][j]=0; + flag=-1; + type=0; + count=0; + Winner=0; + getto(0,0); + system("cls"); + ChessBord(); + ShowChessBoard(); + ShowMenu(); + getto(36,3);//鍏夋爣绉昏嚦鑿滃崟閫夐」 + GameStart(); + } + }break; + case 'e':case 'E':case 27://鎻愬墠缁堟姣旇禌 + { + int message=MessageBox(NULL,"鏄惁淇濆瓨锛","鍙嬫儏鎻愮ず",MB_YESNOCANCEL); + if(IDYES==message) + { + save(); + MessageBox(NULL,"鎭枩浣狅紝宸叉垚鍔熶繚瀛橈紒","鍙嬫儏鎻愮ず",MB_OK); + getto(36,15); + exit(0); + } + if(IDCANCEL==message) + MessageBox(NULL,"缁х画娓告垙","鍙嬫儏鎻愮ず",MB_OK); + if(IDNO==message) + { + MessageBox(NULL,"娌℃湁淇濆瓨锛屾垚鍔熼鍑","鍙嬫儏鎻愮ず",MB_OK); + getto(36,15); + exit(0); + } + };break; + default: + break; + + } + if(count>=225) + break; + if(Winner) + break; + }//while缁撴潫锛屼笅妫嬬粨鏋滃凡鍑烘潵 + } + +void MantoComputer1()//浜烘満妯″紡锛岀數鑴戝厛涓 +{ + x=14,y=7; + WhiteChess(x,y); //鐢佃剳鍏堜笅锛屼笖绗竴瀛愯惤鍦ㄦ鐩樹腑澶 + getto(x,y); + status[y][x/2]=1; + count++; + while(1) + { + getto(36,13); + showplayer(); + getto(x,y); + switch(getch()) + { + case 72: //鈫戝厜鏍囦笂绉 + { + if(y>0) + y-=1; + getto(x,y); + }break; + case 80: //鈫撳厜鏍囦笅绉 + { + if(y<14) + y+=1; + getto(x,y); + }break; + case 75: //鍏夋爣宸︾Щ + { + if(x>=2) + x-=2; + getto(x,y); + }break; + case 77: //鍏夋爣鍙崇Щ + { + if(x<28) + x+=2; + getto(x,y); + }break; + case 'A':case 'a': //鍏夋爣绉诲埌琛岄 + { + x=0; + getto(x,y); + }break; + case 'D':case 'd': //鍏夋爣绉诲埌琛屽熬 + { + x=28; + getto(x,y); + }break; + case 'W':case 'w': //鍏夋爣绉诲埌鍒楅 + { + y=0; + getto(x,y); + }break; + case 'S':case 's': //鍏夋爣绉诲埌鍒楀熬 + { + y=14; + getto(x,y); + }break; + case 'b':case 'B': //鎮旀 + { + if(count<=1) + continue; + int message=MessageBox(NULL,"鏄惁纭畾鎮旀锛","鍙嬫儏鎻愮ず",MB_OKCANCEL); + if(IDCANCEL==message) + break; + if(IDOK==message) + { + Back(); //璋冪敤鎮旀鍑芥暟 + Back1(); //璋冪敤鎮旀鍑芥暟 + } + }break; + case 13: //enter閿紝鍦ㄥ綋鍓嶅厜鏍囦綅缃惤妫 + { + if(count%2!=flag) //flag涓0鐜╁鍚庝笅锛屼笖涓嬪畬鍚庣數鑴戞帴鐫涓 + { + if(status[y][x/2]==0) + { + BlackChess(x,y); + getto(x,y); + status[y][x/2]=2;//鏀瑰彉璇ヤ綅缃殑鐘舵佸间负2 + count++; + Winner=ResultCheck(y,x/2,2); + if(Winner==2) + break; + ValueJudgeAttack(); + ValueJudgeDefend(); + FindPosition(); + if(status[y][x/2]==0) + { + WhiteChess(x,y); + getto(x,y); + status[y][x/2]=1;//鏀瑰彉璇ヤ綅缃殑鐘舵佸间负1 + count++; + Winner=ResultCheck(y,x/2,1); + } + } + } + }break; + case 'r':case 'R': //鎵鏈夌姸鎬佸彉閲忛噸鏂扳滃垵濮嬪寲鈥 + { + int message=MessageBox(NULL,"鏄惁閲嶆柊寮濮嬶紵","鍙嬫儏鎻愮ず",MB_OKCANCEL); + if(IDCANCEL==message) + break; + if(IDOK==message) + { + for(int i=0;i<15;i++)//妫嬬洏鐘舵佸叏涓虹┖ + for(int j=0;j<15;j++) + status[i][j]=0; + flag=-1; + type=0; + count=0; + Winner=0; + getto(0,0); + system("cls"); + ChessBord(); + ShowChessBoard(); + ShowMenu(); + getto(36,3);//鍏夋爣绉昏嚦妫嬬洏涓ぎ + GameStart(); + } + }break; + case 'e':case 'E':case 27://鎻愬墠缁堟姣旇禌 + { + int message=MessageBox(NULL,"鏄惁淇濆瓨锛","鍙嬫儏鎻愮ず",MB_YESNOCANCEL); + if(IDYES==message) + { + save(); + MessageBox(NULL,"鎭枩浣狅紝宸叉垚鍔熶繚瀛橈紒","鍙嬫儏鎻愮ず",MB_OK); + getto(36,15); + exit(0); + } + if(IDCANCEL==message) + MessageBox(NULL,"缁х画娓告垙","鍙嬫儏鎻愮ず",MB_OK); + if(IDNO==message) + { + MessageBox(NULL,"娌℃湁淇濆瓨锛屾垚鍔熼鍑","鍙嬫儏鎻愮ず",MB_OK); + getto(36,15); + exit(0); + } + }break; + default: + break; + + } + if(count>=225) + break; + if(Winner) + break; + }//while缁撴潫锛屼笅妫嬬粨鏋滃凡鍑烘潵 + } + +void MantoComputer2()//浜烘満妯″紡锛岀帺瀹跺厛涓 +{ + x=14,y=7; + while(1) + { + getto(36,13); + showplayer(); + getto(x,y); + switch(getch()) + { + case 72: //鍏夋爣涓婄Щ + { + if(y>0) + y-=1; + getto(x,y); + }break; + case 80: //鍏夋爣涓嬬Щ + { + if(y<14) + y+=1; + getto(x,y); + }break; + case 75: //鍏夋爣宸︾Щ + { + if(x>=2) + x-=2; + getto(x,y); + }break; + case 77: //鍏夋爣鍙崇Щ + { + if(x<28) + x+=2; + getto(x,y); + }break; + case 'A':case 'a': //鍏夋爣绉诲埌琛岄 + { + x=0; + getto(x,y); + }break; + case 'D':case 'd': //鍏夋爣绉诲埌琛屽熬 + { + x=28; + getto(x,y); + }break; + case 'W':case 'w': //鍏夋爣绉诲埌鍒楅 + { + y=0; + getto(x,y); + }break; + case 'S':case 's': //鍏夋爣绉诲埌鍒楀熬 + { + y=14; + getto(x,y); + }break; + case 'b':case 'B': //鎮旀 + { + int message=MessageBox(NULL,"鏄惁纭畾鎮旀锛","鍙嬫儏鎻愮ず",MB_OKCANCEL); + if(IDCANCEL==message) + break; + if(IDOK==message) + { + Back(); //璋冪敤鎮旀鍑芥暟 + Back1(); //璋冪敤鎮旀鍑芥暟 + } + }break; + case 13: //enter閿紝鍦ㄥ綋鍓嶅厜鏍囦綅缃惤妫 + { + if(count%2!=flag) //flag涓1鐜╁鍏堜笅锛屼笖涓嬪畬鍚庣數鑴戝啀涓 + { + if(status[y][x/2]==0) + { + BlackChess(x,y); + getto(x,y); + status[y][x/2]=2;//鏀瑰彉璇ヤ綅缃殑鐘舵佸间负2 + count++; + Winner=ResultCheck(y,x/2,2); + if(Winner==2) + break; + ValueJudgeAttack(); + ValueJudgeDefend(); + FindPosition(); + if(status[y][x/2]==0) + { + WhiteChess(x,y); + getto(x,y); + status[y][x/2]=1;//鏀瑰彉璇ヤ綅缃殑鐘舵佸间负1 + count++; + Winner=ResultCheck(y,x/2,1); + } + } + } + }break; + case 'r':case 'R': //鎵鏈夌姸鎬佸彉閲忛噸鏂扳滃垵濮嬪寲鈥 + { + int message=MessageBox(NULL,"鏄惁閲嶆柊寮濮嬶紵","鍙嬫儏鎻愮ず锛",MB_OKCANCEL); + if(IDCANCEL==message) + break; + if(IDOK==message) + { + for(int i=0;i<15;i++)//妫嬬洏鐘舵佸叏涓虹┖ + for(int j=0;j<15;j++) + status[i][j]=0; + flag=-1; + type=0; + count=0; + Winner=0; + getto(0,0); + system("cls"); + ChessBord(); + ShowChessBoard(); + ShowMenu(); + getto(36,3);//鍏夋爣绉昏嚦妫嬬洏涓ぎ + GameStart(); + } + }break; + case 'e':case 'E':case 27://鎻愬墠缁堟姣旇禌 + { + int message=MessageBox(NULL,"鏄惁淇濆瓨锛","鍙嬫儏鎻愮ず",MB_YESNOCANCEL); + if(IDYES==message) + { + save(); + MessageBox(NULL,"鎭枩浣狅紝宸叉垚鍔熶繚瀛橈紒","鍙嬫儏鎻愮ず",MB_OK); + getto(36,15); + exit(0); + } + if(IDCANCEL==message) + MessageBox(NULL,"缁х画娓告垙","鍙嬫儏鎻愮ず",MB_OK); + if(IDNO==message) + { + MessageBox(NULL,"娌℃湁淇濆瓨锛屾垚鍔熼鍑","鍙嬫儏鎻愮ず",MB_OK); + getto(36,15); + exit(0); + } + };break; + default: + break; + + } + if(count>=225) + break; + if(Winner) + break; + }//while缁撴潫锛屼笅妫嬬粨鏋滃凡鍑烘潵 +} + +void GameStart()//涓嬫鍑芥暟 +{ + x=14,y=7; + getto(x,y); + if(type==0) + MantoMan(); //浜轰汉妯″紡 + else + { + if(flag==0) + MantoComputer1();//鐢佃剳鍏堟墜 + if(flag==1) + MantoComputer2();//鐜╁鍏堟墜 + } + ShowResult(); //鏄剧ず娓告垙缁撴灉 +} + +int main() +{ + FILE *fp=fopen("data.txt","r");//瀹氫箟涓涓枃浠舵寚閽堟寚鍚戞暟鎹繚瀛樻枃浠 + ChessBord();//缁樺埗妫嬬洏 + system("cls");//瀹炵幇娓呭睆 + ShowChessBoard();//杈撳嚭妫嬬洏 + char ch=fgetc(fp); + fclose(fp); + if(ch!=EOF) //鍒ゆ柇鏂囦欢鏄惁涓虹┖锛岃嫢闈炵┖鍒欒〃鏄巇ata.txt鏂囦欢閲屾湁鏁版嵁 + { + int message=MessageBox(NULL,"妫娴嬪埌鎮ㄤ笂娆′簲瀛愭杩樻病鏈変笅瀹岋紝鏄惁缁х画锛","鍙嬫儏鎻愮ず",MB_OKCANCEL); + if(IDCANCEL==message) + { + fp=fopen("data.txt","w");//鑻ョ敤鎴峰彇娑堟仮澶嶆畫灞锛屽垯瀵瑰師鏁版嵁鏂囦欢杩涜鏀瑰啓瑕嗙洊锛岄伩鍏嶅娆℃彁閱掔敤鎴锋仮澶嶆畫灞 + fclose(fp); + } + if(IDOK==message) + { + Continue();//璋冪敤鎭㈠娈嬪眬鍑芥暟 + ShowMenu();//杈撳嚭鑿滃崟 + x=14,y=7; + getto(14,7); + if(type==0) //鏍规嵁瀵瑰師鏁版嵁鐨勫垽鏂紝鎭㈠娓告垙鐜板満锛屽嵆娓告垙妯″紡銆佸厛鍚庢墜闂 + { + MantoMan(); + ShowResult(); //鏄剧ず娓告垙缁撴灉 + } + if(type==1&&(count%2==flag)) + { + MantoComputer1(); + ShowResult(); //鏄剧ず娓告垙缁撴灉 + } + if(type==1&&(count%2!=flag)) + { + MantoComputer2(); + ShowResult(); //鏄剧ず娓告垙缁撴灉 + } + fp=fopen("data.txt","w");//鎭㈠娈嬪眬鍚庡簲鍙婃椂瀵瑰鍘熸暟鎹枃浠惰繘琛屾敼鍐欒鐩栵紝閬垮厤澶氭鎻愰啋鐢ㄦ埛鎭㈠娈嬪眬 + fclose(fp); + } + } + if(!Winner) + { + ShowMenu();//杈撳嚭鑿滃崟 + getto(36,3); + GameStart();//寮濮嬫父鎴*/ + } + return 0; +}