diff --git a/CMakeLists.txt b/CMakeLists.txt index ac7a61e..aa83590 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,3 +5,4 @@ set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD 17) add_subdirectory(level1) +add_subdirectory(gobang) \ No newline at end of file diff --git a/gobang/111 b/gobang/111 new file mode 100644 index 0000000..8ee89cb --- /dev/null +++ b/gobang/111 @@ -0,0 +1,69 @@ +if(k-i<=0 && k-i+10>=0) +if(k-j<=0 && k-j+10>=0) +if(k-i<=0 && k-i+10>=0 && k-j<=0 && k-j+10>=0) +if(k-i<=0 && k-i+10>=0 && k+j-4>=0 && k+j-14<=0) +//为当前MAX节点赋值 +Node* Give_Max_Value(int map[][15]) +{ + Node* MAX = (Node*) malloc(sizeof(Node)); + MAX->beta=-100000; + int alpha; + int pre_alpha=-100000; + for(int i=0;i<15;i++) + { + for(int j=0;j<15;j++) + { + if(Is_drop(i,j,map)) + { + map[i][j]=-1; + alpha = Search(pre_alpha,map); + pre_alpha=(alpha>=pre_alpha? alpha:pre_alpha); + map[i][j]=0; + if(alpha>=MAX->beta) + { + MAX->beta=alpha; + MAX->x=i; + MAX->y=j; + } + } + } + } + return MAX; +} +//遍历子节点 +int Search(int pre_alpha,int map[][15]) +{ + int score; + int alpha=100000; + for(int i=0;i<15;i++) + { + for(int j=0;j<15;j++) + { + if(Is_drop(i,j,map)) + { + map[i][j]=1; + score=Evaluate(map); + map[i][j]=0; + if(scorebeta; + int x= pt->x; + int y= pt->y; + printf("%d x=%d y=%d\n",Max_Value,x,y); + map[x][y]=-1; \ No newline at end of file diff --git a/gobang/CMakeLists.txt b/gobang/CMakeLists.txt new file mode 100644 index 0000000..084aa4a --- /dev/null +++ b/gobang/CMakeLists.txt @@ -0,0 +1,16 @@ +project(gobang) + +add_executable(chessboard chessboard.c + Evaluate.c + Evaluate.h + Minimax_Search.c + Minimax_Search.h + Inspire_Search.c + Inspire_Search.h +) + +include_directories(gobang) + +find_package(raylib) + +target_link_libraries(chessboard raylib) diff --git a/gobang/Evaluate.c b/gobang/Evaluate.c new file mode 100644 index 0000000..ebc9bf2 --- /dev/null +++ b/gobang/Evaluate.c @@ -0,0 +1,1265 @@ +#include +#include +#include "Evaluate.h" +#include "Minimax_Search.h" +#include "Inspire_Search.h" +int Count_linkfive(int i,int j,int map[][15]) +{ + int *vector = malloc(5*sizeof(int)); + int count=0; + for(int k=0;k<5;k++) + { + if(k-i<=0 && k-i+10>=0) + { + for(int t=0;t<5;t++) + { + vector[t]=map[i+t-k][j]; + } + if(vector[0]==1 && vector[1]==1 && vector[2]==1 && vector[3]==1 && vector[4]==1) + { + count--; + } + else if(vector[0]==-1 && vector[1]==-1 && vector[2]==-1 && vector[3]==-1 && vector[4]==-1) + { + count++; + } + } + } + for(int k=0;k<5;k++) + { + if(k-j<=0 && k-j+10>=0) + { + for(int t=0;t<5;t++) + { + vector[t]=map[i][j+t-k]; + } + if(vector[0]==1 && vector[1]==1 && vector[2]==1 && vector[3]==1 && vector[4]==1) + { + count--; + } + else if(vector[0]==-1 && vector[1]==-1 && vector[2]==-1 && vector[3]==-1 && vector[4]==-1) + { + count++; + } + } + } + for(int k=0;k<5;k++) + { + if(k-i<=0 && k-i+10>=0 && k-j<=0 && k-j+10>=0) + { + for(int t=0;t<5;t++) + { + vector[t]=map[i+t-k][j+t-k]; + } + if(vector[0]==1 && vector[1]==1 && vector[2]==1 && vector[3]==1 && vector[4]==1) + { + count--; + } + else if(vector[0]==-1 && vector[1]==-1 && vector[2]==-1 && vector[3]==-1 && vector[4]==-1) + { + count++; + } + } + } + for(int k=0;k<5;k++) + { + if(k-i<=0 && k-i+10>=0 && k+j-4>=0 && k+j-14<=0) + { + for(int t=0;t<5;t++) + { + vector[t]=map[i+t-k][j-t+k]; + } + if(vector[0]==1 && vector[1]==1 && vector[2]==1 && vector[3]==1 && vector[4]==1) + { + count--; + } + else if(vector[0]==-1 && vector[1]==-1 && vector[2]==-1 && vector[3]==-1 && vector[4]==-1) + { + count++; + } + } + } + free(vector); + return count; +} +int Count_wakefour(int i,int j,int map[][15]) +{ + int *vector = malloc(6*sizeof(int)); + int count=0; + for(int k=0;k<6;k++) + { + if(k-i<=0 && k-i+9>=0) + { + for(int t=0;t<6;t++) + { + vector[t]=map[i+t-k][j]; + } + if(vector[0]==0 && vector[1]==1 && vector[2]==1 && vector[3]==1 && vector[4]==1 && vector[5]==0) + { + count--; + } + else if(vector[0]==0 && vector[1]==-1 && vector[2]==-1 && vector[3]==-1 && vector[4]==-1 && vector[5]==0) + { + count++; + } + } + } + for(int k=0;k<6;k++) + { + if(k-j<=0 && k-j+9>=0) + { + for(int t=0;t<6;t++) + { + vector[t]=map[i][j+t-k]; + } + if(vector[0]==0 && vector[1]==1 && vector[2]==1 && vector[3]==1 && vector[4]==1 && vector[5]==0) + { + count--; + } + else if(vector[0]==0 && vector[1]==-1 && vector[2]==-1 && vector[3]==-1 && vector[4]==-1 && vector[5]==0) + { + count++; + } + } + } + for(int k=0;k<6;k++) + { + if(k-i<=0 && k-i+9>=0 && k-j<=0 && k-j+9>=0) + { + for(int t=0;t<6;t++) + { + vector[t]=map[i+t-k][j+t-k]; + } + if(vector[0]==0 && vector[1]==1 && vector[2]==1 && vector[3]==1 && vector[4]==1 && vector[5]==0) + { + count--; + } + else if(vector[0]==0 && vector[1]==-1 && vector[2]==-1 && vector[3]==-1 && vector[4]==-1 && vector[5]==0) + { + count++; + } + } + } + for(int k=0;k<6;k++) + { + if(k-i<=0 && k-i+9>=0 && k+j-5>=0 && k+j-14<=0) + { + for(int t=0;t<6;t++) + { + vector[t]=map[i+t-k][j-t+k]; + } + if(vector[0]==0 && vector[1]==1 && vector[2]==1 && vector[3]==1 && vector[4]==1 && vector[5]==0) + { + count--; + } + else if(vector[0]==0 && vector[1]==-1 && vector[2]==-1 && vector[3]==-1 && vector[4]==-1 && vector[5]==0) + { + count++; + } + } + } + free(vector); + return count; +} +int Count_rushfour(int i,int j,int map[][15]) +{ + int *vector1 = malloc(5*sizeof(int)); + int *vector2 = malloc(6*sizeof(int)); + int count=0; + for(int k=0;k<5;k++) + { + if(k-i<=0 && k-i+10>=0) + { + for(int t=0;t<5;t++) + { + vector1[t]=map[i+t-k][j]; + } + if((vector1[0]==1 && vector1[1]==1 && vector1[2]==1 && vector1[3]==0 && vector1[4]==1) + ||(vector1[0]==1 && vector1[1]==0 && vector1[2]==1 && vector1[3]==1 && vector1[4]==1) + ||(vector1[0]==1 && vector1[1]==1 && vector1[2]==0 && vector1[3]==1 && vector1[4]==1) + ||(i-k==0 && vector1[0]==1 && vector1[1]==1 && vector1[2]==1 && vector1[3]==1 && vector1[4]==0) + ||(i+4-k==14 && vector1[0]==0 && vector1[1]==1 && vector1[2]==1 && vector1[3]==1 && vector1[4]==1)) + { + count--; + } + else if((vector1[0]==-1 && vector1[1]==-1 && vector1[2]==-1 && vector1[3]==0 && vector1[4]==-1) + ||(vector1[0]==-1 && vector1[1]==0 && vector1[2]==-1 && vector1[3]==-1 && vector1[4]==-1) + ||(vector1[0]==-1 && vector1[1]==-1 && vector1[2]==0 && vector1[3]==-1 && vector1[4]==-1) + ||(i-k==0 && vector1[0]==-1 && vector1[1]==-1 && vector1[2]==-1 && vector1[3]==-1 && vector1[4]==0) + ||(i+4-k==14 && vector1[0]==0 && vector1[1]==-1 && vector1[2]==-1 && vector1[3]==-1 && vector1[4]==-1)) + { + count++; + } + } + } + for(int k=0;k<5;k++) + { + if(k-j<=0 && k-j+10>=0) + { + for(int t=0;t<5;t++) + { + vector1[t]=map[i][j+t-k]; + } + if((vector1[0]==1 && vector1[1]==1 && vector1[2]==1 && vector1[3]==0 && vector1[4]==1) + ||(vector1[0]==1 && vector1[1]==0 && vector1[2]==1 && vector1[3]==1 && vector1[4]==1) + ||(vector1[0]==1 && vector1[1]==1 && vector1[2]==0 && vector1[3]==1 && vector1[4]==1) + ||(j-k==0 && vector1[0]==1 && vector1[1]==1 && vector1[2]==1 && vector1[3]==1 && vector1[4]==0) + ||(j+4-k==14 && vector1[0]==0 && vector1[1]==1 && vector1[2]==1 && vector1[3]==1 && vector1[4]==1)) + { + count--; + } + else if((vector1[0]==-1 && vector1[1]==-1 && vector1[2]==-1 && vector1[3]==0 && vector1[4]==-1) + ||(vector1[0]==-1 && vector1[1]==0 && vector1[2]==-1 && vector1[3]==-1 && vector1[4]==-1) + ||(vector1[0]==-1 && vector1[1]==-1 && vector1[2]==0 && vector1[3]==-1 && vector1[4]==-1) + ||(j-k==0 && vector1[0]==-1 && vector1[1]==-1 && vector1[2]==-1 && vector1[3]==-1 && vector1[4]==0) + ||(j+4-k==14 && vector1[0]==0 && vector1[1]==-1 && vector1[2]==-1 && vector1[3]==-1 && vector1[4]==-1)) + { + count++; + } + } + } + for(int k=0;k<5;k++) + { + if(k-i<=0 && k-i+10>=0 && k-j<=0 && k-j+10>=0) + { + for(int t=0;t<5;t++) + { + vector1[t]=map[i+t-k][j+t-k]; + } + if((vector1[0]==1 && vector1[1]==1 && vector1[2]==1 && vector1[3]==0 && vector1[4]==1) + ||(vector1[0]==1 && vector1[1]==0 && vector1[2]==1 && vector1[3]==1 && vector1[4]==1) + ||(vector1[0]==1 && vector1[1]==1 && vector1[2]==0 && vector1[3]==1 && vector1[4]==1) + ||((i-k==0 || j-k==0) && vector1[0]==1 && vector1[1]==1 && vector1[2]==1 && vector1[3]==1 && vector1[4]==0) + ||((i+4-k==14 || j+4-k==14) && vector1[0]==0 && vector1[1]==1 && vector1[2]==1 && vector1[3]==1 && vector1[4]==1)) + { + count--; + } + else if((vector1[0]==-1 && vector1[1]==-1 && vector1[2]==-1 && vector1[3]==0 && vector1[4]==-1) + ||(vector1[0]==-1 && vector1[1]==0 && vector1[2]==-1 && vector1[3]==-1 && vector1[4]==-1) + ||(vector1[0]==-1 && vector1[1]==-1 && vector1[2]==0 && vector1[3]==-1 && vector1[4]==-1) + ||((i-k==0 || j-k==0) && vector1[0]==-1 && vector1[1]==-1 && vector1[2]==-1 && vector1[3]==-1 && vector1[4]==0) + ||((i+4-k==14 || j+4-k==14) && vector1[0]==0 && vector1[1]==-1 && vector1[2]==-1 && vector1[3]==-1 && vector1[4]==-1)) + { + count++; + } + } + } + for(int k=0;k<5;k++) + { + if(k-i<=0 && k-i+10>=0 && k+j-4>=0 && k+j-14<=0) + { + for(int t=0;t<5;t++) + { + vector1[t]=map[i+t-k][j-t+k]; + } + if((vector1[0]==1 && vector1[1]==1 && vector1[2]==1 && vector1[3]==0 && vector1[4]==1) + ||(vector1[0]==1 && vector1[1]==0 && vector1[2]==1 && vector1[3]==1 && vector1[4]==1) + ||(vector1[0]==1 && vector1[1]==1 && vector1[2]==0 && vector1[3]==1 && vector1[4]==1) + ||((i-k==0 || j+4-k==14) && vector1[0]==1 && vector1[1]==1 && vector1[2]==1 && vector1[3]==1 && vector1[4]==0) + ||((i+4-k==14 || j-k==0) && vector1[0]==0 && vector1[1]==1 && vector1[2]==1 && vector1[3]==1 && vector1[4]==1)) + { + count--; + } + else if((vector1[0]==-1 && vector1[1]==-1 && vector1[2]==-1 && vector1[3]==0 && vector1[4]==-1) + ||(vector1[0]==-1 && vector1[1]==0 && vector1[2]==-1 && vector1[3]==-1 && vector1[4]==-1) + ||(vector1[0]==-1 && vector1[1]==-1 && vector1[2]==0 && vector1[3]==-1 && vector1[4]==-1) + ||((i-k==0 || j+4-k==14) && vector1[0]==-1 && vector1[1]==-1 && vector1[2]==-1 && vector1[3]==-1 && vector1[4]==0) + ||((i+4-k==14 || j-k==0) && vector1[0]==0 && vector1[1]==-1 && vector1[2]==-1 && vector1[3]==-1 && vector1[4]==-1)) + { + count++; + } + } + } + for(int k=0;k<6;k++) + { + if(k-i<=0 && k-i+9>=0) + { + for(int t=0;t<6;t++) + { + vector2[t]=map[i+t-k][j]; + } + if((vector2[0]==-1 && vector2[1]==1 && vector2[2]==1 && vector2[3]==1 && vector2[4]==1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==1 && vector2[2]==1 && vector2[3]==1 && vector2[4]==1 && vector2[5]==-1)) + { + count--; + } + else if((vector2[0]==1 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==-1 && vector2[4]==-1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==-1 && vector2[4]==-1 && vector2[5]==1)) + { + count++; + } + } + } + for(int k=0;k<6;k++) + { + if(k-j<=0 && k-j+9>=0) + { + for(int t=0;t<6;t++) + { + vector2[t]=map[i][j+t-k]; + } + if((vector2[0]==-1 && vector2[1]==1 && vector2[2]==1 && vector2[3]==1 && vector2[4]==1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==1 && vector2[2]==1 && vector2[3]==1 && vector2[4]==1 && vector2[5]==-1)) + { + count--; + } + else if((vector2[0]==1 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==-1 && vector2[4]==-1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==-1 && vector2[4]==-1 && vector2[5]==1)) + { + count++; + } + } + } + for(int k=0;k<6;k++) + { + if(k-i<=0 && k-i+9>=0 && k-j<=0 && k-j+9>=0) + { + for(int t=0;t<6;t++) + { + vector2[t]=map[i+t-k][j+t-k]; + } + if((vector2[0]==-1 && vector2[1]==1 && vector2[2]==1 && vector2[3]==1 && vector2[4]==1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==1 && vector2[2]==1 && vector2[3]==1 && vector2[4]==1 && vector2[5]==-1)) + { + count--; + } + else if((vector2[0]==1 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==-1 && vector2[4]==-1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==-1 && vector2[4]==-1 && vector2[5]==1)) + { + count++; + } + } + } + for(int k=0;k<6;k++) + { + if(k-i<=0 && k-i+9>=0 && k+j-5>=0 && k+j-14<=0) + { + for(int t=0;t<6;t++) + { + vector2[t]=map[i+t-k][j-t+k]; + } + if((vector2[0]==-1 && vector2[1]==1 && vector2[2]==1 && vector2[3]==1 && vector2[4]==1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==1 && vector2[2]==1 && vector2[3]==1 && vector2[4]==1 && vector2[5]==-1)) + { + count--; + } + else if((vector2[0]==1 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==-1 && vector2[4]==-1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==-1 && vector2[4]==-1 && vector2[5]==1)) + { + count++; + } + } + } + free(vector1); + free(vector2); + return count; +} +int Count_wakethree(int i,int j,int map[][15]) +{ + int *vector1 = malloc(4*sizeof(int)); + int *vector2 = malloc(5*sizeof(int)); + int count=0; + for(int k=0;k<4;k++) + { + if(k-i<=0 && k-i+10>=0) + { + for(int t=0;t<4;t++) + { + vector1[t]=map[i+t-k][j]; + } + if((vector1[0]==1 && vector1[1]==1 && vector1[2]==0 && vector1[3]==1) + ||(vector1[0]==1 && vector1[1]==0 && vector1[2]==1 && vector1[3]==1)) + { + count--; + } + else if((vector1[0]==-1 && vector1[1]==-1 && vector1[2]==0 && vector1[3]==-1) + ||(vector1[0]==-1 && vector1[1]==0 && vector1[2]==-1 && vector1[3]==-1)) + { + count++; + } + } + } + for(int k=0;k<4;k++) + { + if(k-j<=0 && k-j+10>=0) + { + for(int t=0;t<4;t++) + { + vector1[t]=map[i][j+t-k]; + } + if((vector1[0]==1 && vector1[1]==1 && vector1[2]==0 && vector1[3]==1) + ||(vector1[0]==1 && vector1[1]==0 && vector1[2]==1 && vector1[3]==1)) + { + count--; + } + else if((vector1[0]==-1 && vector1[1]==-1 && vector1[2]==0 && vector1[3]==-1) + ||(vector1[0]==-1 && vector1[1]==0 && vector1[2]==-1 && vector1[3]==-1)) + { + count++; + } + } + } + for(int k=0;k<4;k++) + { + if(k-i<=0 && k-i+10>=0 && k-j<=0 && k-j+10>=0) + { + for(int t=0;t<4;t++) + { + vector1[t]=map[i+t-k][j+t-k]; + } + if((vector1[0]==1 && vector1[1]==1 && vector1[2]==0 && vector1[3]==1) + ||(vector1[0]==1 && vector1[1]==0 && vector1[2]==1 && vector1[3]==1)) + { + count--; + } + else if((vector1[0]==-1 && vector1[1]==-1 && vector1[2]==0 && vector1[3]==-1) + ||(vector1[0]==-1 && vector1[1]==0 && vector1[2]==-1 && vector1[3]==-1)) + { + count++; + } + } + } + for(int k=0;k<4;k++) + { + if(k-i<=0 && k-i+10>=0 && k+j-4>=0 && k+j-14<=0) + { + for(int t=0;t<4;t++) + { + vector1[t]=map[i+t-k][j-t+k]; + } + if((vector1[0]==1 && vector1[1]==1 && vector1[2]==0 && vector1[3]==1) + ||(vector1[0]==1 && vector1[1]==0 && vector1[2]==1 && vector1[3]==1)) + { + count--; + } + else if((vector1[0]==-1 && vector1[1]==-1 && vector1[2]==0 && vector1[3]==-1) + ||(vector1[0]==-1 && vector1[1]==0 && vector1[2]==-1 && vector1[3]==-1)) + { + count++; + } + } + } + for(int k=0;k<5;k++) + { + if(k-i<=0 && k-i+10>=0) + { + for(int t=0;t<5;t++) + { + vector2[t]=map[i+t-k][j]; + } + if(vector2[0]==0 && vector2[1]==1 && vector2[2]==1 && vector2[3]==1 && vector2[4]==0) + { + count--; + } + else if(vector2[0]==0 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==-1 && vector2[4]==0) + { + count++; + } + } + } + for(int k=0;k<5;k++) + { + if(k-j<=0 && k-j+10>=0) + { + for(int t=0;t<5;t++) + { + vector2[t]=map[i][j+t-k]; + } + if(vector2[0]==0 && vector2[1]==1 && vector2[2]==1 && vector2[3]==1 && vector2[4]==0) + { + count--; + } + else if(vector2[0]==0 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==-1 && vector2[4]==0) + { + count++; + } + } + } + for(int k=0;k<5;k++) + { + if(k-i<=0 && k-i+10>=0 && k-j<=0 && k-j+10>=0) + { + for(int t=0;t<5;t++) + { + vector2[t]=map[i+t-k][j+t-k]; + } + if(vector2[0]==0 && vector2[1]==1 && vector2[2]==1 && vector2[3]==1 && vector2[4]==0) + { + count--; + } + else if(vector2[0]==0 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==-1 && vector2[4]==0) + { + count++; + } + } + } + for(int k=0;k<5;k++) + { + if(k-i<=0 && k-i+10>=0 && k+j-4>=0 && k+j-14<=0) + { + for(int t=0;t<5;t++) + { + vector2[t]=map[i+t-k][j-t+k]; + } + if(vector2[0]==0 && vector2[1]==1 && vector2[2]==1 && vector2[3]==1 && vector2[4]==0) + { + count--; + } + else if(vector2[0]==0 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==-1 && vector2[4]==0) + { + count++; + } + } + } + free(vector1); + free(vector2); + return count; +} +int Count_sleepthree(int i,int j,int map[][15]) +{ + int *vector1 = malloc(5*sizeof(int)); + int *vector2 = malloc(6*sizeof(int)); + int *vector3 = malloc(7*sizeof(int)); + int count=0; + for(int k=0;k<5;k++) + { + if(k-i<=0 && k-i+10>=0) + { + for(int t=0;t<5;t++) + { + vector1[t]=map[i+t-k][j]; + } + if((vector1[0]==1 && vector1[1]==1 && vector1[2]==0 && vector1[3]==0 && vector1[4]==1) + ||(vector1[0]==1 && vector1[1]==0 && vector1[2]==0 && vector1[3]==1 && vector1[4]==1) + ||(vector1[0]==1 && vector1[1]==0 && vector1[2]==1 && vector1[3]==0 && vector1[4]==1)) + { + count--; + } + else if((vector1[0]==-1 && vector1[1]==-1 && vector1[2]==0 && vector1[3]==0 && vector1[4]==-1) + ||(vector1[0]==-1 && vector1[1]==0 && vector1[2]==0 && vector1[3]==-1 && vector1[4]==-1) + ||(vector1[0]==-1 && vector1[1]==0 && vector1[2]==-1 && vector1[3]==0 && vector1[4]==-1)) + { + count++; + } + } + } + for(int k=0;k<5;k++) + { + if(k-j<=0 && k-j+10>=0) + { + for(int t=0;t<5;t++) + { + vector1[t]=map[i][j+t-k]; + } + if((vector1[0]==1 && vector1[1]==1 && vector1[2]==0 && vector1[3]==0 && vector1[4]==1) + ||(vector1[0]==1 && vector1[1]==0 && vector1[2]==0 && vector1[3]==1 && vector1[4]==1) + ||(vector1[0]==1 && vector1[1]==0 && vector1[2]==1 && vector1[3]==0 && vector1[4]==1)) + { + count--; + } + else if((vector1[0]==-1 && vector1[1]==-1 && vector1[2]==0 && vector1[3]==0 && vector1[4]==-1) + ||(vector1[0]==-1 && vector1[1]==0 && vector1[2]==0 && vector1[3]==-1 && vector1[4]==-1) + ||(vector1[0]==-1 && vector1[1]==0 && vector1[2]==-1 && vector1[3]==0 && vector1[4]==-1)) + { + count++; + } + } + } + for(int k=0;k<5;k++) + { + if(k-i<=0 && k-i+10>=0 && k-j<=0 && k-j+10>=0) + { + for(int t=0;t<5;t++) + { + vector1[t]=map[i+t-k][j+t-k]; + } + if((vector1[0]==1 && vector1[1]==1 && vector1[2]==0 && vector1[3]==0 && vector1[4]==1) + ||(vector1[0]==1 && vector1[1]==0 && vector1[2]==0 && vector1[3]==1 && vector1[4]==1) + ||(vector1[0]==1 && vector1[1]==0 && vector1[2]==1 && vector1[3]==0 && vector1[4]==1)) + { + count--; + } + else if((vector1[0]==-1 && vector1[1]==-1 && vector1[2]==0 && vector1[3]==0 && vector1[4]==-1) + ||(vector1[0]==-1 && vector1[1]==0 && vector1[2]==0 && vector1[3]==-1 && vector1[4]==-1) + ||(vector1[0]==-1 && vector1[1]==0 && vector1[2]==-1 && vector1[3]==0 && vector1[4]==-1)) + { + count++; + } + } + } + for(int k=0;k<5;k++) + { + if(k-i<=0 && k-i+10>=0 && k+j-4>=0 && k+j-14<=0) + { + for(int t=0;t<5;t++) + { + vector1[t]=map[i+t-k][j-t+k]; + } + if((vector1[0]==1 && vector1[1]==1 && vector1[2]==0 && vector1[3]==0 && vector1[4]==1) + ||(vector1[0]==1 && vector1[1]==0 && vector1[2]==0 && vector1[3]==1 && vector1[4]==1) + ||(vector1[0]==1 && vector1[1]==0 && vector1[2]==1 && vector1[3]==0 && vector1[4]==1)) + { + count--; + } + else if((vector1[0]==-1 && vector1[1]==-1 && vector1[2]==0 && vector1[3]==0 && vector1[4]==-1) + ||(vector1[0]==-1 && vector1[1]==0 && vector1[2]==0 && vector1[3]==-1 && vector1[4]==-1) + ||(vector1[0]==-1 && vector1[1]==0 && vector1[2]==-1 && vector1[3]==0 && vector1[4]==-1)) + { + count++; + } + } + } + for(int k=0;k<6;k++) + { + if(k-i<=0 && k-i+10>=0) + { + for(int t=0;t<6;t++) + { + vector2[t]=map[i+t-k][j]; + } + if((vector2[0]==-1 && vector2[1]==1 && vector2[2]==1 && vector2[3]==1 && vector2[4]==0 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==0 && vector2[2]==1 && vector2[3]==1 && vector2[4]==1 && vector2[5]==-1) + ||(vector2[0]==-1 && vector2[1]==1 && vector2[2]==1 && vector2[3]==0 && vector2[4]==1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==1 && vector2[2]==0 && vector2[3]==1 && vector2[4]==1 && vector2[5]==-1) + ||(vector2[0]==-1 && vector2[1]==1 && vector2[2]==0 && vector2[3]==1 && vector2[4]==1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==1 && vector2[2]==1 && vector2[3]==0 && vector2[4]==1 && vector2[5]==-1)) + { + count--; + } + else if((vector2[0]==1 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==-1 && vector2[4]==0 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==0 && vector2[2]==-1 && vector2[3]==-1 && vector2[4]==-1 && vector2[5]==1) + ||(vector2[0]==1 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==0 && vector2[4]==-1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==-1 && vector2[2]==0 && vector2[3]==-1 && vector2[4]==-1 && vector2[5]==1) + ||(vector2[0]==1 && vector2[1]==-1 && vector2[2]==0 && vector2[3]==-1 && vector2[4]==-1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==0 && vector2[4]==-1 && vector2[5]==1)) + { + count++; + } + } + } + for(int k=0;k<6;k++) + { + if(k-j<=0 && k-j+10>=0) + { + for(int t=0;t<6;t++) + { + vector2[t]=map[i][j+t-k]; + } + if((vector2[0]==-1 && vector2[1]==1 && vector2[2]==1 && vector2[3]==1 && vector2[4]==0 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==0 && vector2[2]==1 && vector2[3]==1 && vector2[4]==1 && vector2[5]==-1) + ||(vector2[0]==-1 && vector2[1]==1 && vector2[2]==1 && vector2[3]==0 && vector2[4]==1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==1 && vector2[2]==0 && vector2[3]==1 && vector2[4]==1 && vector2[5]==-1) + ||(vector2[0]==-1 && vector2[1]==1 && vector2[2]==0 && vector2[3]==1 && vector2[4]==1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==1 && vector2[2]==1 && vector2[3]==0 && vector2[4]==1 && vector2[5]==-1)) + { + count--; + } + else if((vector2[0]==1 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==-1 && vector2[4]==0 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==0 && vector2[2]==-1 && vector2[3]==-1 && vector2[4]==-1 && vector2[5]==1) + ||(vector2[0]==1 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==0 && vector2[4]==-1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==-1 && vector2[2]==0 && vector2[3]==-1 && vector2[4]==-1 && vector2[5]==1) + ||(vector2[0]==1 && vector2[1]==-1 && vector2[2]==0 && vector2[3]==-1 && vector2[4]==-1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==0 && vector2[4]==-1 && vector2[5]==1)) + { + count++; + } + } + } + for(int k=0;k<6;k++) + { + if(k-i<=0 && k-i+10>=0 && k-j<=0 && k-j+10>=0) + { + for(int t=0;t<6;t++) + { + vector2[t]=map[i+t-k][j+t-k]; + } + if((vector2[0]==-1 && vector2[1]==1 && vector2[2]==1 && vector2[3]==1 && vector2[4]==0 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==0 && vector2[2]==1 && vector2[3]==1 && vector2[4]==1 && vector2[5]==-1) + ||(vector2[0]==-1 && vector2[1]==1 && vector2[2]==1 && vector2[3]==0 && vector2[4]==1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==1 && vector2[2]==0 && vector2[3]==1 && vector2[4]==1 && vector2[5]==-1) + ||(vector2[0]==-1 && vector2[1]==1 && vector2[2]==0 && vector2[3]==1 && vector2[4]==1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==1 && vector2[2]==1 && vector2[3]==0 && vector2[4]==1 && vector2[5]==-1)) + { + count--; + } + else if((vector2[0]==1 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==-1 && vector2[4]==0 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==0 && vector2[2]==-1 && vector2[3]==-1 && vector2[4]==-1 && vector2[5]==1) + ||(vector2[0]==1 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==0 && vector2[4]==-1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==-1 && vector2[2]==0 && vector2[3]==-1 && vector2[4]==-1 && vector2[5]==1) + ||(vector2[0]==1 && vector2[1]==-1 && vector2[2]==0 && vector2[3]==-1 && vector2[4]==-1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==0 && vector2[4]==-1 && vector2[5]==1)) + { + count++; + } + } + } + for(int k=0;k<6;k++) + { + if(k-i<=0 && k-i+10>=0 && k+j-4>=0 && k+j-14<=0) + { + for(int t=0;t<6;t++) + { + vector2[t]=map[i+t-k][j-t+k]; + } + if((vector2[0]==-1 && vector2[1]==1 && vector2[2]==1 && vector2[3]==1 && vector2[4]==0 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==0 && vector2[2]==1 && vector2[3]==1 && vector2[4]==1 && vector2[5]==-1) + ||(vector2[0]==-1 && vector2[1]==1 && vector2[2]==1 && vector2[3]==0 && vector2[4]==1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==1 && vector2[2]==0 && vector2[3]==1 && vector2[4]==1 && vector2[5]==-1) + ||(vector2[0]==-1 && vector2[1]==1 && vector2[2]==0 && vector2[3]==1 && vector2[4]==1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==1 && vector2[2]==1 && vector2[3]==0 && vector2[4]==1 && vector2[5]==-1)) + { + count--; + } + else if((vector2[0]==1 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==-1 && vector2[4]==0 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==0 && vector2[2]==-1 && vector2[3]==-1 && vector2[4]==-1 && vector2[5]==1) + ||(vector2[0]==1 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==0 && vector2[4]==-1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==-1 && vector2[2]==0 && vector2[3]==-1 && vector2[4]==-1 && vector2[5]==1) + ||(vector2[0]==1 && vector2[1]==-1 && vector2[2]==0 && vector2[3]==-1 && vector2[4]==-1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==0 && vector2[4]==-1 && vector2[5]==1)) + { + count++; + } + } + } + for(int k=0;k<7;k++) + { + if(k-i<=0 && k-i+10>=0) + { + for(int t=0;t<7;t++) + { + vector3[t]=map[i+t-k][j]; + } + if(vector3[0]==-1 && vector3[1]==0 && vector3[2]==1 && vector3[3]==1 && vector3[4]==1 && vector3[5]==0 && vector3[6]==-1) + { + count--; + } + else if(vector3[0]==1 && vector3[1]==0 && vector3[2]==-1 && vector3[3]==-1 && vector3[4]==-1 && vector3[5]==0 && vector3[6]==1) + { + count++; + } + } + } + for(int k=0;k<7;k++) + { + if(k-j<=0 && k-j+10>=0) + { + for(int t=0;t<7;t++) + { + vector3[t]=map[i][j+t-k]; + } + if(vector3[0]==-1 && vector3[1]==0 && vector3[2]==1 && vector3[3]==1 && vector3[4]==1 && vector3[5]==0 && vector3[6]==-1) + { + count--; + } + else if(vector3[0]==1 && vector3[1]==0 && vector3[2]==-1 && vector3[3]==-1 && vector3[4]==-1 && vector3[5]==0 && vector3[6]==1) + { + count++; + } + } + } + for(int k=0;k<7;k++) + { + if(k-i<=0 && k-i+10>=0 && k-j<=0 && k-j+10>=0) + { + for(int t=0;t<7;t++) + { + vector3[t]=map[i+t-k][j+t-k]; + } + if(vector3[0]==-1 && vector3[1]==0 && vector3[2]==1 && vector3[3]==1 && vector3[4]==1 && vector3[5]==0 && vector3[6]==-1) + { + count--; + } + else if(vector3[0]==1 && vector3[1]==0 && vector3[2]==-1 && vector3[3]==-1 && vector3[4]==-1 && vector3[5]==0 && vector3[6]==1) + { + count++; + } + } + } + for(int k=0;k<7;k++) + { + if(k-i<=0 && k-i+10>=0 && k+j-4>=0 && k+j-14<=0) + { + for(int t=0;t<7;t++) + { + vector3[t]=map[i+t-k][j-t+k]; + } + if(vector3[0]==-1 && vector3[1]==0 && vector3[2]==1 && vector3[3]==1 && vector3[4]==1 && vector3[5]==0 && vector3[6]==-1) + { + count--; + } + else if(vector3[0]==1 && vector3[1]==0 && vector3[2]==-1 && vector3[3]==-1 && vector3[4]==-1 && vector3[5]==0 && vector3[6]==1) + { + count++; + } + } + } + free(vector1); + free(vector2); + free(vector3); + return count; +} +int Count_waketwo(int i,int j,int map[][15]) +{ + int *vector1 = malloc(4*sizeof(int)); + int *vector2 = malloc(5*sizeof(int)); + int *vector3 = malloc(6*sizeof(int)); + int count=0; + for(int k=0;k<4;k++) + { + if(k-i<=0 && k-i+10>=0) + { + for(int t=0;t<4;t++) + { + vector1[t]=map[i+t-k][j]; + } + if(vector1[0]==1 && vector1[1]==0 && vector1[2]==0 && vector1[3]==1) + { + count--; + } + else if(vector1[0]==-1 && vector1[1]==0 && vector1[2]==0 && vector1[3]==-1) + { + count++; + } + } + } + for(int k=0;k<4;k++) + { + if(k-j<=0 && k-j+10>=0) + { + for(int t=0;t<4;t++) + { + vector1[t]=map[i][j+t-k]; + } + if(vector1[0]==1 && vector1[1]==0 && vector1[2]==0 && vector1[3]==1) + { + count--; + } + else if(vector1[0]==-1 && vector1[1]==0 && vector1[2]==0 && vector1[3]==-1) + { + count++; + } + } + } + for(int k=0;k<4;k++) + { + if(k-i<=0 && k-i+10>=0 && k-j<=0 && k-j+10>=0) + { + for(int t=0;t<4;t++) + { + vector1[t]=map[i+t-k][j+t-k]; + } + if(vector1[0]==1 && vector1[1]==0 && vector1[2]==0 && vector1[3]==1) + { + count--; + } + else if(vector1[0]==-1 && vector1[1]==0 && vector1[2]==0 && vector1[3]==-1) + { + count++; + } + } + } + for(int k=0;k<4;k++) + { + if(k-i<=0 && k-i+10>=0 && k+j-4>=0 && k+j-14<=0) + { + for(int t=0;t<4;t++) + { + vector1[t]=map[i+t-k][j-t+k]; + } + if(vector1[0]==1 && vector1[1]==0 && vector1[2]==0 && vector1[3]==1) + { + count--; + } + else if(vector1[0]==-1 && vector1[1]==0 && vector1[2]==0 && vector1[3]==-1) + { + count++; + } + } + } + for(int k=0;k<5;k++) + { + if(k-i<=0 && k-i+10>=0) + { + for(int t=0;t<5;t++) + { + vector2[t]=map[i+t-k][j]; + } + if(vector2[0]==0 && vector2[1]==1 && vector2[2]==0 && vector2[3]==1 && vector2[4]==0) + { + count--; + } + else if(vector2[0]==0 && vector2[1]==-1 && vector2[2]==0 && vector2[3]==-1 && vector2[4]==0) + { + count++; + } + } + } + for(int k=0;k<5;k++) + { + if(k-j<=0 && k-j+10>=0) + { + for(int t=0;t<5;t++) + { + vector2[t]=map[i][j+t-k]; + } + if(vector2[0]==0 && vector2[1]==1 && vector2[2]==0 && vector2[3]==1 && vector2[4]==0) + { + count--; + } + else if(vector2[0]==0 && vector2[1]==-1 && vector2[2]==0 && vector2[3]==-1 && vector2[4]==0) + { + count++; + } + } + } + for(int k=0;k<5;k++) + { + if(k-i<=0 && k-i+10>=0 && k-j<=0 && k-j+10>=0) + { + for(int t=0;t<5;t++) + { + vector2[t]=map[i+t-k][j+t-k]; + } + if(vector2[0]==0 && vector2[1]==1 && vector2[2]==0 && vector2[3]==1 && vector2[4]==0) + { + count--; + } + else if(vector2[0]==0 && vector2[1]==-1 && vector2[2]==0 && vector2[3]==-1 && vector2[4]==0) + { + count++; + } + } + } + for(int k=0;k<5;k++) + { + if(k-i<=0 && k-i+10>=0 && k+j-4>=0 && k+j-14<=0) + { + for(int t=0;t<5;t++) + { + vector2[t]=map[i+t-k][j-t+k]; + } + if(vector2[0]==0 && vector2[1]==1 && vector2[2]==0 && vector2[3]==1 && vector2[4]==0) + { + count--; + } + else if(vector2[0]==0 && vector2[1]==-1 && vector2[2]==0 && vector2[3]==-1 && vector2[4]==0) + { + count++; + } + } + } + for(int k=0;k<6;k++) + { + if(k-i<=0 && k-i+10>=0) + { + for(int t=0;t<6;t++) + { + vector3[t]=map[i+t-k][j]; + } + if(vector3[0]==0 && vector3[1]==0 && vector3[2]==1 && vector3[3]==1 && vector3[4]==0 && vector3[5]==0) + { + count--; + } + else if(vector3[0]==0 && vector3[1]==0 && vector3[2]==-1 && vector3[3]==-1 && vector3[4]==0 && vector3[5]==0) + { + count++; + } + } + } + for(int k=0;k<6;k++) + { + if(k-j<=0 && k-j+10>=0) + { + for(int t=0;t<6;t++) + { + vector3[t]=map[i][j+t-k]; + } + if(vector3[0]==0 && vector3[1]==0 && vector3[2]==1 && vector3[3]==1 && vector3[4]==0 && vector3[5]==0) + { + count--; + } + else if(vector3[0]==0 && vector3[1]==0 && vector3[2]==-1 && vector3[3]==-1 && vector3[4]==0 && vector3[5]==0) + { + count++; + } + } + } + for(int k=0;k<6;k++) + { + if(k-i<=0 && k-i+10>=0 && k-j<=0 && k-j+10>=0) + { + for(int t=0;t<6;t++) + { + vector3[t]=map[i+t-k][j+t-k]; + } + if(vector3[0]==0 && vector3[1]==0 && vector3[2]==1 && vector3[3]==1 && vector3[4]==0 && vector3[5]==0) + { + count--; + } + else if(vector3[0]==0 && vector3[1]==0 && vector3[2]==-1 && vector3[3]==-1 && vector3[4]==0 && vector3[5]==0) + { + count++; + } + } + } + for(int k=0;k<6;k++) + { + if(k-i<=0 && k-i+10>=0 && k+j-4>=0 && k+j-14<=0) + { + for(int t=0;t<6;t++) + { + vector3[t]=map[i+t-k][j-t+k]; + } + if(vector3[0]==0 && vector3[1]==0 && vector3[2]==1 && vector3[3]==1 && vector3[4]==0 && vector3[5]==0) + { + count--; + } + else if(vector3[0]==0 && vector3[1]==0 && vector3[2]==-1 && vector3[3]==-1 && vector3[4]==0 && vector3[5]==0) + { + count++; + } + } + } + free(vector1); + free(vector2); + free(vector3); + return count; +} +int Count_sleeptwo(int i,int j,int map[][15]) +{ + int *vector1 = malloc(5*sizeof(int)); + int *vector2 = malloc(6*sizeof(int)); + int count=0; + for(int k=0;k<5;k++) + { + if(k-i<=0 && k-i+10>=0) + { + for(int t=0;t<5;t++) + { + vector1[t]=map[i+t-k][j]; + } + if(vector1[0]==1 && vector1[1]==0 && vector1[2]==0 && vector1[3]==0 && vector1[4]==1) + { + count--; + } + else if(vector1[0]==-1 && vector1[1]==0 && vector1[2]==0 && vector1[3]==0 && vector1[4]==-1) + { + count++; + } + } + } + for(int k=0;k<5;k++) + { + if(k-j<=0 && k-j+10>=0) + { + for(int t=0;t<5;t++) + { + vector1[t]=map[i][j+t-k]; + } + if(vector1[0]==1 && vector1[1]==0 && vector1[2]==0 && vector1[3]==0 && vector1[4]==1) + { + count--; + } + else if(vector1[0]==-1 && vector1[1]==0 && vector1[2]==0 && vector1[3]==0 && vector1[4]==-1) + { + count++; + } + } + } + for(int k=0;k<5;k++) + { + if(k-i<=0 && k-i+10>=0 && k-j<=0 && k-j+10>=0) + { + for(int t=0;t<5;t++) + { + vector1[t]=map[i+t-k][j+t-k]; + } + if(vector1[0]==1 && vector1[1]==0 && vector1[2]==0 && vector1[3]==0 && vector1[4]==1) + { + count--; + } + else if(vector1[0]==-1 && vector1[1]==0 && vector1[2]==0 && vector1[3]==0 && vector1[4]==-1) + { + count++; + } + } + } + for(int k=0;k<5;k++) + { + if(k-i<=0 && k-i+10>=0 && k+j-4>=0 && k+j-14<=0) + { + for(int t=0;t<5;t++) + { + vector1[t]=map[i+t-k][j-t+k]; + } + if(vector1[0]==1 && vector1[1]==0 && vector1[2]==0 && vector1[3]==0 && vector1[4]==1) + { + count--; + } + else if(vector1[0]==-1 && vector1[1]==0 && vector1[2]==0 && vector1[3]==0 && vector1[4]==-1) + { + count++; + } + } + } + for(int k=0;k<6;k++) + { + if(k-i<=0 && k-i+10>=0) + { + for(int t=0;t<6;t++) + { + vector2[t]=map[i+t-k][j]; + } + if((vector2[0]==-1 && vector2[1]==1 && vector2[2]==0 && vector2[3]==0 && vector2[4]==1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==1 && vector2[2]==0 && vector2[3]==0 && vector2[4]==1 && vector2[5]==-1) + ||(vector2[0]==-1 && vector2[1]==1 && vector2[2]==0 && vector2[3]==1 && vector2[4]==0 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==0 && vector2[2]==1 && vector2[3]==0 && vector2[4]==1 && vector2[5]==-1) + ||(vector2[0]==-1 && vector2[1]==1 && vector2[2]==1 && vector2[3]==0 && vector2[4]==0 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==0 && vector2[2]==0 && vector2[3]==1 && vector2[4]==1 && vector2[5]==-1)) + { + count--; + } + else if((vector2[0]==1 && vector2[1]==-1 && vector2[2]==0 && vector2[3]==0 && vector2[4]==-1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==-1 && vector2[2]==0 && vector2[3]==0 && vector2[4]==-1 && vector2[5]==1) + ||(vector2[0]==1 && vector2[1]==-1 && vector2[2]==0 && vector2[3]==-1 && vector2[4]==0 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==0 && vector2[2]==-1 && vector2[3]==0 && vector2[4]==-1 && vector2[5]==1) + ||(vector2[0]==1 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==0 && vector2[4]==0 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==0 && vector2[2]==0 && vector2[3]==-1 && vector2[4]==-1 && vector2[5]==1)) + { + count++; + } + } + } + for(int k=0;k<6;k++) + { + if(k-j<=0 && k-j+10>=0) + { + for(int t=0;t<6;t++) + { + vector2[t]=map[i][j+t-k]; + } + if((vector2[0]==-1 && vector2[1]==1 && vector2[2]==0 && vector2[3]==0 && vector2[4]==1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==1 && vector2[2]==0 && vector2[3]==0 && vector2[4]==1 && vector2[5]==-1) + ||(vector2[0]==-1 && vector2[1]==1 && vector2[2]==0 && vector2[3]==1 && vector2[4]==0 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==0 && vector2[2]==1 && vector2[3]==0 && vector2[4]==1 && vector2[5]==-1) + ||(vector2[0]==-1 && vector2[1]==1 && vector2[2]==1 && vector2[3]==0 && vector2[4]==0 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==0 && vector2[2]==0 && vector2[3]==1 && vector2[4]==1 && vector2[5]==-1)) + { + count--; + } + else if((vector2[0]==1 && vector2[1]==-1 && vector2[2]==0 && vector2[3]==0 && vector2[4]==-1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==-1 && vector2[2]==0 && vector2[3]==0 && vector2[4]==-1 && vector2[5]==1) + ||(vector2[0]==1 && vector2[1]==-1 && vector2[2]==0 && vector2[3]==-1 && vector2[4]==0 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==0 && vector2[2]==-1 && vector2[3]==0 && vector2[4]==-1 && vector2[5]==1) + ||(vector2[0]==1 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==0 && vector2[4]==0 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==0 && vector2[2]==0 && vector2[3]==-1 && vector2[4]==-1 && vector2[5]==1)) + { + count++; + } + } + } + for(int k=0;k<6;k++) + { + if(k-i<=0 && k-i+10>=0 && k-j<=0 && k-j+10>=0) + { + for(int t=0;t<6;t++) + { + vector2[t]=map[i+t-k][j+t-k]; + } + if((vector2[0]==-1 && vector2[1]==1 && vector2[2]==0 && vector2[3]==0 && vector2[4]==1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==1 && vector2[2]==0 && vector2[3]==0 && vector2[4]==1 && vector2[5]==-1) + ||(vector2[0]==-1 && vector2[1]==1 && vector2[2]==0 && vector2[3]==1 && vector2[4]==0 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==0 && vector2[2]==1 && vector2[3]==0 && vector2[4]==1 && vector2[5]==-1) + ||(vector2[0]==-1 && vector2[1]==1 && vector2[2]==1 && vector2[3]==0 && vector2[4]==0 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==0 && vector2[2]==0 && vector2[3]==1 && vector2[4]==1 && vector2[5]==-1)) + { + count--; + } + else if((vector2[0]==1 && vector2[1]==-1 && vector2[2]==0 && vector2[3]==0 && vector2[4]==-1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==-1 && vector2[2]==0 && vector2[3]==0 && vector2[4]==-1 && vector2[5]==1) + ||(vector2[0]==1 && vector2[1]==-1 && vector2[2]==0 && vector2[3]==-1 && vector2[4]==0 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==0 && vector2[2]==-1 && vector2[3]==0 && vector2[4]==-1 && vector2[5]==1) + ||(vector2[0]==1 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==0 && vector2[4]==0 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==0 && vector2[2]==0 && vector2[3]==-1 && vector2[4]==-1 && vector2[5]==1)) + { + count++; + } + } + } + for(int k=0;k<6;k++) + { + if(k-i<=0 && k-i+10>=0 && k+j-4>=0 && k+j-14<=0) + { + for(int t=0;t<6;t++) + { + vector2[t]=map[i+t-k][j-t+k]; + } + if((vector2[0]==-1 && vector2[1]==1 && vector2[2]==0 && vector2[3]==0 && vector2[4]==1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==1 && vector2[2]==0 && vector2[3]==0 && vector2[4]==1 && vector2[5]==-1) + ||(vector2[0]==-1 && vector2[1]==1 && vector2[2]==0 && vector2[3]==1 && vector2[4]==0 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==0 && vector2[2]==1 && vector2[3]==0 && vector2[4]==1 && vector2[5]==-1) + ||(vector2[0]==-1 && vector2[1]==1 && vector2[2]==1 && vector2[3]==0 && vector2[4]==0 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==0 && vector2[2]==0 && vector2[3]==1 && vector2[4]==1 && vector2[5]==-1)) + { + count--; + } + else if((vector2[0]==1 && vector2[1]==-1 && vector2[2]==0 && vector2[3]==0 && vector2[4]==-1 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==-1 && vector2[2]==0 && vector2[3]==0 && vector2[4]==-1 && vector2[5]==1) + ||(vector2[0]==1 && vector2[1]==-1 && vector2[2]==0 && vector2[3]==-1 && vector2[4]==0 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==0 && vector2[2]==-1 && vector2[3]==0 && vector2[4]==-1 && vector2[5]==1) + ||(vector2[0]==1 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==0 && vector2[4]==0 && vector2[5]==0) + ||(vector2[0]==0 && vector2[1]==0 && vector2[2]==0 && vector2[3]==-1 && vector2[4]==-1 && vector2[5]==1)) + { + count++; + } + } + } + free(vector1); + free(vector2); + return count; +} +//给某一点赋值 +int GiveValue(int i,int j,int map[][15]) +{ + int value; + value=10000 * Count_linkfive(i,j,map) + +1000 * Count_wakefour(i,j,map) + +100 * Count_rushfour(i,j,map) + +300 * Count_wakethree(i,j,map) + +10 * Count_sleepthree(i,j,map) + +5 * Count_waketwo(i,j,map) + +1 * Count_sleeptwo(i,j,map); + return value; +} +//判断某一点是否需要赋值 +bool Is_GiveValue(int x,int y,int map[][15]) +{ + if((x<2 || x>12 || y<2 || y>12) || (map[x-2][y]==0 && map[x-1][y]==0 && map[x+1][y]==0 && map[x+2][y]==0 + && map[x][y-2]==0 && map[x][y-1]==0 && map[x][y+1]==0 && map[x][y+2]==0 + && map[x-2][y-2]==0 && map[x-1][y-1]==0 && map[x+1][y+1]==0 && map[x+2][y+2]==0 + && map[x-2][y+2]==0 && map[x-1][y+1]==0 && map[x+1][y-1]==0 && map[x+2][y-2]==0) + ) + { + return false; + } + else + { + return true; + } +} +//评估当前局面总分数值 +int Evaluate(int map[][15]) +{ + int score=0; + for(int i=2;i<13;i++) + { + for(int j=2;j<13;j++) + { + if(Is_GiveValue(i,j,map)) + { + score+=GiveValue(i,j,map); + } + } + } + return score; +} diff --git a/gobang/Evaluate.h b/gobang/Evaluate.h new file mode 100644 index 0000000..1936a96 --- /dev/null +++ b/gobang/Evaluate.h @@ -0,0 +1,14 @@ + +#ifndef C2023_CHALLENGE_EVALUATE_H +#define C2023_CHALLENGE_EVALUATE_H +int Count_linkfive(int i,int j,int map[][15]); +int Count_wakefour(int i,int j,int map[][15]); +int Count_rushfour(int i,int j,int map[][15]); +int Count_wakethree(int i,int j,int map[][15]); +int Count_sleepthree(int i,int j,int map[][15]); +int Count_waketwo(int i,int j,int map[][15]); +int Count_sleeptwo(int i,int j,int map[][15]); +int GiveValue(int i,int j,int map[][15]); +bool Is_GiveValue(int x,int y,int map[][15]); +int Evaluate(int map[][15]); +#endif //C2023_CHALLENGE_EVALUATE_H diff --git a/gobang/Inspire_Search.c b/gobang/Inspire_Search.c new file mode 100644 index 0000000..0542c5d --- /dev/null +++ b/gobang/Inspire_Search.c @@ -0,0 +1,551 @@ +#include +#include +#include "Evaluate.h" +#include "Minimax_Search.h" +#include "Inspire_Search.h" +pos* Search_list_black(int map[][15]) +{ + pos* list=(pos*) malloc(225*sizeof(pos)); + int n=0; + for(int i=0;i<15;i++) + { + for(int j=0;j<15;j++) + { + if(Is_drop(i,j,map) && Is_linkfive_black(i,j,map)) + { + list[n].x=i; + list[n].y=j; + n++; + } + else if(Is_drop(i,j,map) && Is_wakefour_black(i,j,map)) + { + list[n].x=i; + list[n].y=j; + n++; + } + else if(Is_drop(i,j,map) && Is_wakethree_black(i,j,map)) + { + list[n].x=i; + list[n].y=j; + n++; + } + } + } + for(int i=0;i<15;i++) + { + for(int j=0;j<15;j++) + { + if(Is_drop(i,j,map) && !Is_linkfive_black(i,j,map) && !Is_wakefour_black(i,j,map) && !Is_wakethree_black(i,j,map)) + { + list[n].x=i; + list[n].y=j; + n++; + } + } + } + for(int k=n;k<225;k++) + { + list[k].x=0; + list[k].y=0; + } + return list; +} +pos* Search_list_white(int map[][15]) +{ + pos* list=(pos*) malloc(225*sizeof(pos)); + int n=0; + for(int i=0;i<15;i++) + { + for(int j=0;j<15;j++) + { + if(Is_drop(i,j,map) && Is_linkfive_white(i,j,map)) + { + list[n].x=i; + list[n].y=j; + n++; + } + else if(Is_drop(i,j,map) && Is_wakefour_white(i,j,map)) + { + list[n].x=i; + list[n].y=j; + n++; + } + else if(Is_drop(i,j,map) && Is_wakethree_white(i,j,map)) + { + list[n].x=i; + list[n].y=j; + n++; + } + } + } + for(int i=0;i<15;i++) + { + for(int j=0;j<15;j++) + { + if(Is_drop(i,j,map) && !Is_linkfive_white(i,j,map) && !Is_wakefour_white(i,j,map) && !Is_wakethree_white(i,j,map)) + { + list[n].x=i; + list[n].y=j; + n++; + } + } + } + for(int k=n;k<225;k++) + { + list[k].x=0; + list[k].y=0; + } + return list; +} +//搜索成五落点 +bool Is_linkfive_black(int i,int j,int map[][15]) +{ + int *vector = malloc(5*sizeof(int)); + map[i][j]=1; + for(int k=0;k<5;k++) + { + for(int t=0;t<5;t++) + { + vector[t]=map[i+t-k][j]; + } + if(vector[0]==1 && vector[1]==1 && vector[2]==1 && vector[3]==1 && vector[4]==1) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<5;k++) + { + for(int t=0;t<5;t++) + { + vector[t]=map[i][j+t-k]; + } + if(vector[0]==1 && vector[1]==1 && vector[2]==1 && vector[3]==1 && vector[4]==1) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<5;k++) + { + for(int t=0;t<5;t++) + { + vector[t]=map[i+t-k][j+t-k]; + } + if(vector[0]==1 && vector[1]==1 && vector[2]==1 && vector[3]==1 && vector[4]==1) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<5;k++) + { + for(int t=0;t<5;t++) + { + vector[t]=map[i+t-k][j-t+k]; + } + if(vector[0]==1 && vector[1]==1 && vector[2]==1 && vector[3]==1 && vector[4]==1) + { + map[i][j]=0; + return true; + } + } + map[i][j]=0; + free(vector); + return false; +} +bool Is_linkfive_white(int i,int j,int map[][15]) +{ + int *vector = malloc(5*sizeof(int)); + map[i][j]=-1; + for(int k=0;k<5;k++) + { + for(int t=0;t<5;t++) + { + vector[t]=map[i+t-k][j]; + } + if(vector[0]==-1 && vector[1]==-1 && vector[2]==-1 && vector[3]==-1 && vector[4]==-1) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<5;k++) + { + for(int t=0;t<5;t++) + { + vector[t]=map[i][j+t-k]; + } + if(vector[0]==-1 && vector[1]==-1 && vector[2]==-1 && vector[3]==-1 && vector[4]==-1) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<5;k++) + { + for(int t=0;t<5;t++) + { + vector[t]=map[i+t-k][j+t-k]; + } + if(vector[0]==-1 && vector[1]==-1 && vector[2]==-1 && vector[3]==-1 && vector[4]==-1) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<5;k++) + { + for(int t=0;t<5;t++) + { + vector[t]=map[i+t-k][j-t+k]; + } + if(vector[0]==-1 && vector[1]==-1 && vector[2]==-1 && vector[3]==-1 && vector[4]==-1) + { + map[i][j]=0; + return true; + } + } + map[i][j]=0; + free(vector); + return false; +} +//搜索活四落点 +bool Is_wakefour_black(int i,int j,int map[][15]) +{ + int *vector = malloc(6*sizeof(int)); + map[i][j]=1; + for(int k=0;k<6;k++) + { + for(int t=0;t<6;t++) + { + vector[t]=map[i+t-k][j]; + } + if(vector[0]==0 && vector[1]==1 && vector[2]==1 && vector[3]==1 && vector[4]==1 && vector[5]==0) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<6;k++) + { + for(int t=0;t<6;t++) + { + vector[t]=map[i][j+t-k]; + } + if(vector[0]==0 && vector[1]==1 && vector[2]==1 && vector[3]==1 && vector[4]==1 && vector[5]==0) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<6;k++) + { + for(int t=0;t<6;t++) + { + vector[t]=map[i+t-k][j+t-k]; + } + if(vector[0]==0 && vector[1]==1 && vector[2]==1 && vector[3]==1 && vector[4]==1 && vector[5]==0) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<6;k++) + { + for(int t=0;t<6;t++) + { + vector[t]=map[i+t-k][j-t+k]; + } + if(vector[0]==0 && vector[1]==1 && vector[2]==1 && vector[3]==1 && vector[4]==1 && vector[5]==0) + { + map[i][j]=0; + return true; + } + } + map[i][j]=0; + free(vector); + return false; +} +bool Is_wakefour_white(int i,int j,int map[][15]) +{ + int *vector = malloc(6*sizeof(int)); + map[i][j]=-1; + for(int k=0;k<6;k++) + { + for(int t=0;t<6;t++) + { + vector[t]=map[i+t-k][j]; + } + if(vector[0]==0 && vector[1]==-1 && vector[2]==-1 && vector[3]==-1 && vector[4]==-1 && vector[5]==0) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<6;k++) + { + for(int t=0;t<6;t++) + { + vector[t]=map[i][j+t-k]; + } + if(vector[0]==0 && vector[1]==-1 && vector[2]==-1 && vector[3]==-1 && vector[4]==-1 && vector[5]==0) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<6;k++) + { + for(int t=0;t<6;t++) + { + vector[t]=map[i+t-k][j+t-k]; + } + if(vector[0]==0 && vector[1]==-1 && vector[2]==-1 && vector[3]==-1 && vector[4]==-1 && vector[5]==0) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<6;k++) + { + for(int t=0;t<6;t++) + { + vector[t]=map[i+t-k][j-t+k]; + } + if(vector[0]==0 && vector[1]==-1 && vector[2]==-1 && vector[3]==-1 && vector[4]==-1 && vector[5]==0) + { + map[i][j]=0; + return true; + } + } + map[i][j]=0; + free(vector); + return false; +} +//搜索双三落点 +bool Is_doublethree_black(int i,int j,int map[][15]) +{ + +} +//搜索活三落点 +bool Is_wakethree_black(int i,int j,int map[][15]) +{ + int *vector1 = malloc(4*sizeof(int)); + int *vector2 = malloc(5*sizeof(int)); + map[i][j]=1; + for(int k=0;k<4;k++) + { + for(int t=0;t<4;t++) + { + vector1[t]=map[i+t-k][j]; + } + if((vector1[0]==1 && vector1[1]==1 && vector1[2]==0 && vector1[3]==1) + ||(vector1[0]==1 && vector1[1]==0 && vector1[2]==1 && vector1[3]==1)) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<4;k++) + { + for(int t=0;t<4;t++) + { + vector1[t]=map[i][j+t-k]; + } + if((vector1[0]==1 && vector1[1]==1 && vector1[2]==0 && vector1[3]==1) + ||(vector1[0]==1 && vector1[1]==0 && vector1[2]==1 && vector1[3]==1)) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<4;k++) + { + for(int t=0;t<4;t++) + { + vector1[t]=map[i+t-k][j+t-k]; + } + if((vector1[0]==1 && vector1[1]==1 && vector1[2]==0 && vector1[3]==1) + ||(vector1[0]==1 && vector1[1]==0 && vector1[2]==1 && vector1[3]==1)) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<4;k++) + { + for(int t=0;t<4;t++) + { + vector1[t]=map[i+t-k][j-t+k]; + } + if((vector1[0]==1 && vector1[1]==1 && vector1[2]==0 && vector1[3]==1) + ||(vector1[0]==1 && vector1[1]==0 && vector1[2]==1 && vector1[3]==1)) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<5;k++) + { + for(int t=0;t<5;t++) + { + vector2[t]=map[i+t-k][j]; + } + if(vector2[0]==0 && vector2[1]==1 && vector2[2]==1 && vector2[3]==1 && vector2[4]==0) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<5;k++) + { + for(int t=0;t<5;t++) + { + vector2[t]=map[i][j+t-k]; + } + if(vector2[0]==0 && vector2[1]==1 && vector2[2]==1 && vector2[3]==1 && vector2[4]==0) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<5;k++) + { + for(int t=0;t<5;t++) + { + vector2[t]=map[i+t-k][j+t-k]; + } + if(vector2[0]==0 && vector2[1]==1 && vector2[2]==1 && vector2[3]==1 && vector2[4]==0) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<5;k++) + { + for(int t=0;t<5;t++) + { + vector2[t]=map[i+t-k][j-t+k]; + } + if(vector2[0]==0 && vector2[1]==1 && vector2[2]==1 && vector2[3]==1 && vector2[4]==0) + { + map[i][j]=0; + return true; + } + } + map[i][j]=0; + free(vector1); + free(vector2); + return false; +} +bool Is_wakethree_white(int i,int j,int map[][15]) +{ + int *vector1 = malloc(4*sizeof(int)); + int *vector2 = malloc(5*sizeof(int)); + map[i][j]=-1; + for(int k=0;k<4;k++) + { + for(int t=0;t<4;t++) + { + vector1[t]=map[i+t-k][j]; + } + if((vector1[0]==-1 && vector1[1]==-1 && vector1[2]==0 && vector1[3]==-1) + ||(vector1[0]==-1 && vector1[1]==0 && vector1[2]==-1 && vector1[3]==-1)) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<4;k++) + { + for(int t=0;t<4;t++) + { + vector1[t]=map[i][j+t-k]; + } + if((vector1[0]==-1 && vector1[1]==-1 && vector1[2]==0 && vector1[3]==-1) + ||(vector1[0]==-1 && vector1[1]==0 && vector1[2]==-1 && vector1[3]==-1)) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<4;k++) + { + for(int t=0;t<4;t++) + { + vector1[t]=map[i+t-k][j+t-k]; + } + if((vector1[0]==-1 && vector1[1]==-1 && vector1[2]==0 && vector1[3]==-1) + ||(vector1[0]==-1 && vector1[1]==0 && vector1[2]==-1 && vector1[3]==-1)) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<4;k++) + { + for(int t=0;t<4;t++) + { + vector1[t]=map[i+t-k][j-t+k]; + } + if((vector1[0]==-1 && vector1[1]==-1 && vector1[2]==0 && vector1[3]==-1) + ||(vector1[0]==-1 && vector1[1]==0 && vector1[2]==-1 && vector1[3]==-1)) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<5;k++) + { + for(int t=0;t<5;t++) + { + vector2[t]=map[i+t-k][j]; + } + if(vector2[0]==0 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==-1 && vector2[4]==0) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<5;k++) + { + for(int t=0;t<5;t++) + { + vector2[t]=map[i][j+t-k]; + } + if(vector2[0]==0 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==-1 && vector2[4]==0) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<5;k++) + { + for(int t=0;t<5;t++) + { + vector2[t]=map[i+t-k][j+t-k]; + } + if(vector2[0]==0 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==-1 && vector2[4]==0) + { + map[i][j]=0; + return true; + } + } + for(int k=0;k<5;k++) + { + for(int t=0;t<5;t++) + { + vector2[t]=map[i+t-k][j-t+k]; + } + if(vector2[0]==0 && vector2[1]==-1 && vector2[2]==-1 && vector2[3]==-1 && vector2[4]==0) + { + map[i][j]=0; + return true; + } + } + map[i][j]=0; + free(vector1); + free(vector2); + return false; +} \ No newline at end of file diff --git a/gobang/Inspire_Search.h b/gobang/Inspire_Search.h new file mode 100644 index 0000000..10b6b84 --- /dev/null +++ b/gobang/Inspire_Search.h @@ -0,0 +1,18 @@ + + +#ifndef C2023_CHALLENGE_INSPIRE_SEARCH_H +#define C2023_CHALLENGE_INSPIRE_SEARCH_H +typedef struct position +{ + int x; + int y; +}pos; +pos* Search_list_black(int map[][15]); +pos* Search_list_white(int map[][15]); +bool Is_linkfive_black(int i,int j,int map[][15]); +bool Is_linkfive_white(int i,int j,int map[][15]); +bool Is_wakefour_black(int i,int j,int map[][15]); +bool Is_wakefour_white(int i,int j,int map[][15]); +bool Is_wakethree_black(int i,int j,int map[][15]); +bool Is_wakethree_white(int i,int j,int map[][15]); +#endif //C2023_CHALLENGE_INSPIRE_SEARCH_H diff --git a/gobang/Minimax_Search.c b/gobang/Minimax_Search.c new file mode 100644 index 0000000..8762e45 --- /dev/null +++ b/gobang/Minimax_Search.c @@ -0,0 +1,325 @@ +#include +#include +#include "Evaluate.h" +#include "Minimax_Search.h" +#include "Inspire_Search.h" +//缩小落子范围 +bool Is_drop(int x,int y,int map[][15]) +{ + if((x<2 || x>12 || y<2 || y>12) || (map[x-2][y]==0 && map[x-1][y]==0 && map[x+1][y]==0 && map[x+2][y]==0 + && map[x][y-2]==0 && map[x][y-1]==0 && map[x][y+1]==0 && map[x][y+2]==0 + && map[x-2][y-2]==0 && map[x-1][y-1]==0 && map[x+1][y+1]==0 && map[x+2][y+2]==0 + && map[x-2][y+2]==0 && map[x-1][y+1]==0 && map[x+1][y-1]==0 && map[x+2][y-2]==0) + ||(map[x][y]!=0)) + { + return false; + } + else + { + return true; + } +} +//考察AI落子的反馈 +Feedback* AI_drop(int i,int j,int map[][15]) +{ + Feedback* result = (Feedback*) malloc(sizeof(Feedback)); + map[i][j]=-1; + result->score = Evaluate(map); + map[i][j]=0; + return result; +} +//创建根节点 +Root* Create_Root(int map[][15]) +{ + //开辟根节点空间 + Root* root = (Root*) malloc(sizeof(Root)); + //设置根节点深度和Max类别 + root->depth=0; + root->IsMax=1; + root->score=-100000; + root->pre=-100000; + //调用启发式函数生成搜索顺序表 + pos* pt = Search_list_white(map); + for(int k=0;pt[k].x!=0 || pt[k].y!=0;k++) + { + int i = pt[k].x; + int j = pt[k].y; + map[i][j]=-1; + int feedback = Create_children(root->IsMax,root->depth,root->pre,map); + if(feedback>=root->score) + { + root->score=feedback; + root->pre=feedback; + root->x=i; + root->y=j; + } + map[i][j]=0; + } + return root; +} +//生成子节点 +int Create_children(bool Is_Father_Max,int Father_depth,int pre,int map[][15]) +{ + //开辟节点空间 + Node *node = (Node *) malloc(sizeof(Node)); + //判断是否为Max节点 + if (Is_Father_Max) + { + node->IsMax = 0; + } + else + { + node->IsMax = 1; + } + //初始化α和β的值 + node->alpha = -100000; + node->beta = 100000; + //若为Max节点 + if (node->IsMax) + { + //调用启发式函数生成搜索顺序表 + pos *pt = Search_list_white(map); + //判断是否为叶节点 + node->depth = Father_depth + 1; + //若为叶节点 + if (node->depth == 1) + { + node->score = -100000; + for (int k = 0; pt[k].x != 0 || pt[k].y != 0; k++) + { + int i = pt[k].x; + int j = pt[k].y; + map[i][j] = -1; + int feedback = Evaluate(map); + map[i][j] = 0; + if (feedback > pre) + { + int score = 100000; + free(node); + return score; + } + node->score = (feedback >= node->score ? feedback : node->score); + } + } + //若不是叶节点 + else + { + node->pre = -100000; + for (int k = 0; pt[k].x != 0 || pt[k].y != 0; k++) + { + int i = pt[k].x; + int j = pt[k].y; + map[i][j] = -1; + int feedback = Create_children(node->IsMax, node->depth, node->pre, map); + map[i][j] = 0; + node->pre = (feedback > node->pre ? feedback : node->pre); + if (feedback > pre) + { + int score = 100000; + free(node); + return score; + } + node->alpha = (feedback >= node->alpha ? feedback : node->alpha); + } + node->score = node->alpha; + } + } + //若为Min节点 + else + { + //调用启发式函数生成搜索顺序表 + pos *pt = Search_list_black(map); + //判断是否为叶节点 + node->depth = Father_depth + 1; + //若为叶节点 + if (node->depth == 1) + { + node->score = 100000; + for (int k = 0; pt[k].x != 0 || pt[k].y != 0; k++) + { + int i = pt[k].x; + int j = pt[k].y; + map[i][j] = 1; + int feedback = Evaluate(map); + map[i][j] = 0; + if (feedback < pre) + { + int score = -100000; + free(node); + return score; + } + node->score = (feedback <= node->score ? feedback : node->score); + } + } + //若不是叶节点 + else + { + node->pre = 100000; + for (int k = 0; pt[k].x != 0 || pt[k].y != 0; k++) + { + int i = pt[k].x; + int j = pt[k].y; + map[i][j] = 1; + int feedback = Create_children(node->IsMax, node->depth, node->pre, map); + map[i][j] = 0; + node->pre = (feedback < node->pre ? feedback : node->pre); + if (feedback < pre) + { + int score = -100000; + free(node); + return score; + } + node->beta = (feedback <= node->beta ? feedback : node->beta); + } + node->score = node->beta; + } + } + int score = node->score; + free(node); + return score; +} +/* + else + { + pos* pt = Search_list_black(map); + } + //判断是否为叶节点 + node->depth=Father_depth+1; + if(node->depth==1) + { + if(node->IsMax) + { + node->score=-100000; + for(int k=0;pt[k].x!=0 || pt[k].y!=0;k++) + { + int i = pt[k].x; + int j = pt[k].y; + map[i][j]=-1; + int feedback = Evaluate(map); + map[i][j]=0; + if(feedback>pre) + { + int score=100000; + free(node); + return score; + } + node->score = (feedback>=node->score? feedback:node->score); + } + } + else + { + node->score=100000; + for(int k=0;pt[k].x!=0 || pt[k].y!=0;k++) + { + int i = pt[k].x; + int j = pt[k].y; + map[i][j]=1; + int feedback = Evaluate(map); + map[i][j]=0; + if(feedbackscore = (feedback<=node->score? feedback:node->score); + } + } + int score=node->score; + free(node); + return score; + } + //若为Max节点,不断更新其α值,最后返回一个得分 + if(node->IsMax) + { + node->pre=-100000; + for(int k=0;pt[k].x!=0 || pt[k].y!=0;k++) + { + int i = pt[k].x; + int j = pt[k].y; + map[i][j]=-1; + int feedback = Create_children(node->IsMax,node->depth,node->pre,map); + map[i][j]=0; + node->pre = (feedback>node->pre? feedback:node->pre); + if(feedback>pre) + { + int score=100000; + free(node); + return score; + } + node->alpha = (feedback>=node->alpha? feedback:node->alpha); + } + node->score=node->alpha; + } + //若为Min节点,不断更新其β值,最后返回一个得分 + else + { + node->pre=100000; + for(int k=0;pt[k].x!=0 || pt[k].y!=0;k++) + { + int i = pt[k].x; + int j = pt[k].y; + map[i][j]=1; + int feedback = Create_children(node->IsMax,node->depth,node->pre,map); + map[i][j]=0; + node->pre = (feedbackpre? feedback:node->pre); + if(feedbackbeta = (feedback<=node->beta? feedback:node->beta); + } + node->score=node->beta; + } + int score=node->score; + free(node); + return score; +}*/ +//为当前MAX节点赋值 +/* +Node* Give_Max_Value(int map[][15]) +{ + Node* MAX = (Node*) malloc(sizeof(Node)); + MAX->beta=-100000; + int alpha; + int pre_alpha=-100000; + pos* pt = Search_list(map); + for(int k=0;pt[k].x!=0 || pt[k].y!=0;k++) + { + int i=pt[k].x; + int j=pt[k].y; + map[i][j]=-1; + alpha = Search(pre_alpha,map); + pre_alpha=(alpha>=pre_alpha? alpha:pre_alpha); + map[i][j]=0; + if(alpha>=MAX->beta) + { + MAX->beta=alpha; + } + } + return MAX; +} +//遍历子节点 +int Search(int pre_alpha,int map[][15]) +{ + int score; + int alpha=100000; + pos* pt = Search_list(map); + for(int k=0;pt[k].x!=0 || pt[k].y!=0;k++) + { + int i=pt[k].x; + int j=pt[k].y; + map[i][j]=1; + score=Evaluate(map); + map[i][j]=0; + if(score +#include +#include +#include "Evaluate.h" +#include "Minimax_Search.h" +#include "Inspire_Search.h" +int main() +{ + //初始化棋盘 + int map[15][15]={}; + map[7][7]=1; + InitWindow(960,960,"Chessboard"); + //反复渲染棋盘 + while (!WindowShouldClose()) + { + if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) + { + int m = (int) ((GetMouseX() - 30) / 60); + int n = (int) ((GetMouseY() - 30) / 60); + if (m >= 0 && m <= 14 && n >= 0 && n <= 14 && map[m][n]!=-1) + { + map[m][n] = 1; + } + Root* pt = Create_Root(map); + int score=pt->score; + int x= pt->x; + int y= pt->y; + map[x][y]=-1; + printf("%d x=%d y=%d\n",score,x,y); + } + if (IsMouseButtonPressed(MOUSE_RIGHT_BUTTON)) + { + int m = (int) ((GetMouseX() - 30) / 60); + int n = (int) ((GetMouseY() - 30) / 60); + if (m >= 0 && m <= 14 && n >= 0 && n <= 14 && map[m][n]!=1) + { + map[m][n] = -1; + } + } + BeginDrawing(); + ClearBackground(SKYBLUE); + for (int i = 60; i <= 900; i += 60) + { + DrawLine(i, 60, i, 900, RED); + } + for (int i = 60; i <= 900; i += 60) + { + DrawLine(60, i, 900, i, RED); + } + for (int i = 0; i <= 14; i++) + { + for (int j = 0; j <= 14; j++) + { + if (map[i][j] == 1) + { + DrawCircle(60 * (i + 1), 60 * (j + 1), 25, BLACK); + } + if (map[i][j] == -1) + { + DrawCircle(60 * (i + 1), 60 * (j + 1), 25, WHITE); + } + } + } + EndDrawing(); + if(IsMouseButtonPressed(MOUSE_BUTTON_MIDDLE)) + { + int score = Evaluate(map); + printf("%d\n",score); + } + } + return 0; +} \ No newline at end of file diff --git a/gobang/search.c b/gobang/search.c new file mode 100644 index 0000000..f2dd494 --- /dev/null +++ b/gobang/search.c @@ -0,0 +1,46 @@ +#include +#include +#include +int map[15][15]={}; +struct Chess +{ + int color; + int atkValue; + int defValue; + int row; + int col; + bool isBoundry; +}; +struct Chain_type +{ + bool linkfive; + bool wakefour; + bool rushfour; + bool wakethree; + bool sleepthree; + bool waketwo; + bool sleeptwo; +}; +struct Chain_dir +{ + bool lay; + bool stand; + bool main; + bool vice; +}; +struct Chesschain +{ + struct Chain_dir; + struct Chain_type; + int len; +}; +int main() +{ + +} +void evaluate() +{ + +} + + diff --git a/level1/p01_running_letter/main.c b/level1/p01_running_letter/main.c index f84d224..0e5dbc5 100644 --- a/level1/p01_running_letter/main.c +++ b/level1/p01_running_letter/main.c @@ -1,6 +1,42 @@ -#include - -int main() { - printf("hello world!\n"); +#include +#include +#include +int getWidth() +{ + CONSOLE_SCREEN_BUFFER_INFO info; + GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE),&info); + return info.srWindow.Right - info.srWindow.Left; +} +int main() +{ + char letter; + printf("Enter a letter.\n"); + scanf("%c", &letter); + int position = 1; + for (int i = 0; i <= position; i++) + { + if (((position - position % getWidth()) / getWidth()) % 2 == 0) + { + system("cls"); + for (int j = 0; j <= i%getWidth(); j++) + { + printf(" "); + } + printf("%c", letter); + position++; + Sleep(10); + } + else + { + system("cls"); + for (int j = 0; j <= getWidth()-i%getWidth(); j++) + { + printf(" "); + } + printf("%c", letter); + position++; + Sleep(10); + } + } return 0; } \ No newline at end of file diff --git a/level1/p02_is_prime/main.c b/level1/p02_is_prime/main.c index f84d224..2b1d436 100644 --- a/level1/p02_is_prime/main.c +++ b/level1/p02_is_prime/main.c @@ -1,6 +1,27 @@ -#include - -int main() { - printf("hello world!\n"); +#include +void primer(int); +int main() +{ + int n; + printf("Enter a number.\n"); + scanf("%d", &n); + primer(n); return 0; +} +void primer(int n) +{ + int k; + for (int i=2;i<=n-1;i++) + { + if (n%i==0) + { + k=i; + break; + } + else k=i; + } + if (k - -int main() { - printf("hello world!\n"); +#include +#include +int primer(int); +int begintime,endtime; +int main() +{ + begintime=clock(); + int x=2; + while(x<=1000) + { + if(primer(x)==1) + { + printf("%5d",x); + } + x++; + } + printf("\n"); + endtime=clock(); + printf("Time is %d ms",endtime-begintime); return 0; +} +int primer(int n) +{ + int k; + for (int i=2;i<=n-1;i++) + { + if (n%i==0) + { + k=i; + break; + } + else k=i; + } + if (k - -int main() { - printf("hello world!\n"); +#include +int primer(int); +int main() +{ + int n; + printf("Please enter an even number between 4 and 100.\n"); + scanf("%d",&n); + int i=2; + while (i<=n-1) + { + if (primer(i) == 1 && primer(n - i) == 1) + { + printf("%d=%d+%d", n, i, n - i); + break; + } + else i++; + } return 0; +} +int primer(int n) +{ + int k; + for (int i=2;i<=n-1;i++) + { + if (n%i==0) + { + k=i; + break; + } + else k=i; + } + if (k - -int main() { - printf("hello world!\n"); +#include +#include +void encrypt(); +void decrypt(); +int main() +{ + printf("Input 1 to Encrypt or input 2 to decrypt.\n"); + int x; + scanf("%d",&x); + if (x==1) + encrypt(); + else + decrypt(); return 0; +} +void encrypt() +{ + char origin[30]; + printf("Enter the original contents.\n"); + scanf("%s",origin); + for(int i=0;i<=strlen(origin)-1;i++) + { + origin[i]=origin[i]+3; + } + printf("%s",origin); +} +void decrypt() +{ + char code[30]; + printf("Enter the code.\n"); + scanf("%s",code); + for(int i=0;i<=strlen(code)-1;i++) + { + code[i]=code[i]-3; + } + printf("%s",code); } \ No newline at end of file diff --git a/level1/p06_hanoi/main.c b/level1/p06_hanoi/main.c index f84d224..31c02ca 100644 --- a/level1/p06_hanoi/main.c +++ b/level1/p06_hanoi/main.c @@ -1,6 +1,26 @@ -#include - -int main() { - printf("hello world!\n"); +#include +int main() +{ + void hanoi(int n,char first,char second,char third); + int i; + printf("Input the number of disks\n"); + scanf("%d",&i); + hanoi(i,'A','B','C'); return 0; +} +void hanoi(int n,char first,char second,char third) +{ + void move(char x,char y); + if (n==1) + move(first,third); + else + { + hanoi(n-1,first,third,second); + move(first,third); + hanoi(n-1,second,first,third); + } +} +void move(char x,char y) +{ + printf("%c-->%c\n",x,y); } \ No newline at end of file diff --git a/level1/p07_maze/main.c b/level1/p07_maze/main.c index f84d224..615453f 100644 --- a/level1/p07_maze/main.c +++ b/level1/p07_maze/main.c @@ -1,6 +1,102 @@ -#include - -int main() { - printf("hello world!\n"); +#include +#include +#include +int map[12][12]={{1, 1, 1, 1, 1, 1, 1, 1, 1,1,1,1}, + {1, 0, 0, 0, 0, 1, 0, 0, 1,1,0,2}, + {1, 0, 1, 1, 0, 0, 0, 1, 0,0,0,1}, + {1, 0, 0, 1, 1, 1, 0, 1, 0,1,1,1}, + {1, 1, 0, 0, 1, 0, 0, 1, 0,0,0,1}, + {1, 0, 0, 1, 0, 1, 0, 0, 0,1,0,1}, + {1, 0, 1, 1, 0, 1, 0, 1, 1,1,0,1}, + {1, 0, 0, 0, 0, 1, 1, 0, 0,0,1,1}, + {1, 1, 0, 1, 0, 0, 1, 0, 1,0,0,1}, + {1, 0, 0, 1, 1, 0, 0, 0, 1,1,0,1}, + {1, 0, 1, 0, 0, 0, 1, 0, 0,0,3,1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1,1,1,1}}; +char block='#'; +char space=' '; +char door='$'; +char person='!'; +int a=10; +int b=10; +void printmap(); +int main() +{ + while (a!=1||b!=11) + { + printmap(); + switch (getch()) + { + case 'w': + if (map[a-1][b]!=1) + { + map[a][b]=0; + map[a-1][b]=3; + a-=1; + break; + } + break; + case 's': + if (map[a+1][b]!=1) + { + map[a][b]=0; + map[a+1][b]=3; + a+=1; + break; + } + break; + case 'a': + if (map[a][b-1]!=1) + { + map[a][b]=0; + map[a][b-1]=3; + b-=1; + break; + } + break; + case 'd': + if (map[a][b+1]!=1) + { + map[a][b]=0; + map[a][b+1]=3; + b+=1; + break; + } + break; + default: + break; + } + } + system("cls"); + printf("Done!"); + getchar(); return 0; +} +void printmap() +{ + system("cls"); + for(int i=0;i<=11;i++) + { + for(int j=0;j<=11;j++) + { + switch (map[i][j]) + { + case 0: + printf("%2c",space); + break; + case 1: + printf("%2c",block); + break; + case 2: + printf("%2c", door); + break; + case 3: + printf("%2c",person); + break; + default: + break; + } + } + printf("\n"); + } } \ No newline at end of file diff --git a/level1/p08_push_boxes/main.c b/level1/p08_push_boxes/main.c index f84d224..b2d4d9a 100644 --- a/level1/p08_push_boxes/main.c +++ b/level1/p08_push_boxes/main.c @@ -1,6 +1,159 @@ -#include - -int main() { - printf("hello world!\n"); +#include +#include +#include +int map[8][8]={{1,1,1,1,1,1,1,1}, + {1,3,0,1,1,0,0,1}, + {1,0,2,0,0,0,0,1}, + {1,1,0,1,1,0,0,1}, + {1,1,0,1,1,0,1,1}, + {1,0,0,0,0,0,0,4}, + {1,0,0,1,1,1,1,1}, + {1,1,1,1,0,0,0,0}}; +char block='#'; +char space=' '; +char spot='$'; +char box='@'; +char person='!'; +void printmap(); +int a=1,b=1; +int A=2,B=2; +int main() +{ + while(A!=5||B!=7) + { + printmap(); + switch (getch()) + { + case 'w': + if (map[a-1][b]==0) + { + map[a][b]=0; + map[a-1][b]=3; + a-=1; + break; + } + else if (map[a-1][b]==2 && map[a-2][b]==0) + { + map[a][b]=0; + map[a-1][b]=3; + map[a-2][b]=2; + a-=1; + A-=1; + break; + } + else if (map[a-1][b]==2 && map[a-2][b]==4) + { + a-=1; + A-=1; + break; + } + else break; + case 's': + if (map[a+1][b]==0) + { + map[a][b]=0; + map[a+1][b]=3; + a+=1; + break; + } + else if (map[a+1][b]==2 && map[a+2][b]==0) + { + map[a][b]=0; + map[a+1][b]=3; + map[a+2][b]=2; + a+=1; + A+=1; + break; + } + else if (map[a+1][b]==2 && map[a+2][b]==4) + { + a+=1; + A+=1; + break; + } + else break; + case 'a': + if (map[a][b-1]==0) + { + map[a][b]=0; + map[a][b-1]=3; + b-=1; + break; + } + else if (map[a][b-1]==2 && map[a][b-2]==0) + { + map[a][b]=0; + map[a][b-1]=3; + map[a][b-2]=2; + b-=1; + B-=1; + break; + } + else if (map[a][b-1]==2 && map[a][b-2]==4) + { + b-=1; + B-=1; + break; + } + else break; + case 'd': + if (map[a][b+1]==0) + { + map[a][b]=0; + map[a][b+1]=3; + b+=1; + break; + } + else if (map[a][b+1]==2 && map[a][b+2]==0) + { + map[a][b]=0; + map[a][b+1]=3; + map[a][b+2]=2; + b+=1; + B+=1; + break; + } + else if (map[a][b+1]==2 && map[a][b+2]==4) + { + b+=1; + B+=1; + break; + } + else break; + } + } + system("cls"); + printf("Done!"); + getchar(); return 0; +} +void printmap() +{ + system("cls"); + for(int i=0;i<=7;i++) + { + for(int j=0;j<=7;j++) + { + switch (map[i][j]) + { + case 0: + printf("%2c",space); + break; + case 1: + printf("%2c",block); + break; + case 2: + printf("%2c", box); + break; + case 3: + printf("%2c",person); + break; + case 4: + printf("%2c",spot); + default: + break; + } + } + printf("\n"); + } } \ No newline at end of file diff --git a/level1/p09_linked_list/main.c b/level1/p09_linked_list/main.c index f84d224..ffe7081 100644 --- a/level1/p09_linked_list/main.c +++ b/level1/p09_linked_list/main.c @@ -1,6 +1,112 @@ -#include - -int main() { - printf("hello world!\n"); +#include +#include +#define LEN sizeof (struct Student) +struct Student +{ + int num; + float score; + struct Student * next; +}; +struct Student * create(); +void print(struct Student *head); +struct Student *inverse(struct Student *head); +struct Student *search(struct Student *head); +int main() +{ + struct Student *pt=create(); + print(pt); + pt = inverse(pt); + printf("After inversion,"); + print(pt); + printf("The serial numbers of the nodes whose value is 5 are listed as:\n"); + while (search(pt)->next!=NULL) + { + printf("%d\n", search(pt)->num); + pt = search(pt)->next; + } + if(search(pt)->score==5) + { + printf("%d\n", search(pt)->num); + } + printf("That's all.\n"); + printf("-1\n"); return 0; -} \ No newline at end of file +} +struct Student *create() +{ + printf("Enter the values.\n"); + struct Student *head; + struct Student *p1,*p2,*p3; + p1=p2=(struct Student*)malloc(LEN); + scanf("%f",&p1->score); + head=NULL; + int n=0; + while (p1->score!=0) + { + n++; + if(n==1) head=p1; + else p2->next=p1; + p2=p1; + p1=(struct Student *) malloc(LEN); + scanf("%f",&p1->score); + } + p2->next=NULL; + p3=head; + p3->num=1; + while(p3->next!=NULL) + { + (p3->next)->num=(p3->num+1); + p3=p3->next; + } + return(head); +} +void print(struct Student *head) +{ + printf("Here are the records.\n"); + struct Student *p =head; + if(head!=NULL) + { + do + { + printf("%5d %5.1f\n",p->num,p->score); + p=p->next; + } while (p!=NULL); + } +} +struct Student *inverse(struct Student *head) +{ + struct Student *p1,*p2,*p3; + struct Student *p=head; + p1=p->next; + p->next=NULL; + p2=p1->next; + p1->next=p; + while(p2->next!=NULL) + { + p3=p2->next; + p2->next=p1; + p1=p2; + p2=p3; + } + p2->next=p1; + p3->num=1; + while(p3->next!=NULL) + { + (p3->next)->num=(p3->num+1); + p3=p3->next; + } + return(p2); +} +struct Student *search(struct Student *head) +{ + struct Student *p=head; + while (p->score!=5 && p->next!=NULL) + { + p=p->next; + } + if(p->score==5) + { + return(p); + } + return(p); +} diff --git a/level1/p10_warehouse/main.c b/level1/p10_warehouse/main.c index f84d224..887eac4 100644 --- a/level1/p10_warehouse/main.c +++ b/level1/p10_warehouse/main.c @@ -1,6 +1,455 @@ -#include - -int main() { - printf("hello world!\n"); - return 0; -} \ No newline at end of file +#include +#include +#include +typedef struct +{ + int S,M,L,XL; +}size; +typedef struct +{ + size Size; +}Goods; +Goods Shirt={{0,0,0,0}}; +Goods Coat={{0,0,0,0}}; +Goods Sweater={{0,0,0,0}}; +void Print_data(FILE *fp); +void Show_List(FILE *fp); +void Save_variables(FILE *var); +void Put_in_Storage(); +void Deliver_from_storage(); +int main() +{ + while (1) + { + FILE *fp=fopen("Storage List.txt","r+"); + FILE *var=fopen("Amount.txt","r+"); + fscanf(var,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d", + &Shirt.Size.S,&Shirt.Size.M,&Shirt.Size.L,&Shirt.Size.XL, + &Coat.Size.S,&Coat.Size.M,&Coat.Size.L,&Coat.Size.XL, + &Sweater.Size.S,&Sweater.Size.M,&Sweater.Size.L,&Sweater.Size.XL); + printf("What do you want to do?\n"); + printf("1.Show the store list.\n"); + printf("2.Put in storage.\n"); + printf("3.Deliver from storage.\n"); + printf("4.Exit.\n"); + switch (getch()) + { + case '1': + { + Show_List(fp); + break; + } + case '2': + { + Put_in_Storage(); + Print_data(fp); + FILE *var=fopen("Amount.txt","w"); + Save_variables(var); + break; + } + case '3': + { + Deliver_from_storage(); + Print_data(fp); + FILE *var=fopen("Amount.txt","w"); + Save_variables(var); + break; + } + case '4': + { + exit(0); + break; + } + default: + break; + } + getch(); + system("cls"); + } +} +void Show_List(FILE *fp) +{ + system("cls"); + int ch; + while((ch=getc(fp))!=EOF) + { + putchar(ch); + } + printf("\nPress Enter to go back.\n"); +} +void Print_data(FILE *fp) +{ + fprintf(fp,"Shirt:\n" + "{\n" + "S:%d\n" + "M:%d\n" + "L:%d\n" + "XL:%d\n" + "}\n" + "\n" + "Coat:\n" + "{\n" + "S:%d\n" + "M:%d\n" + "L:%d\n" + "XL:%d\n" + "}\n" + "\n" + "Sweater:\n" + "{\n" + "S:%d\n" + "M:%d\n" + "L:%d\n" + "XL:%d\n" + "}\n", + Shirt.Size.S,Shirt.Size.M,Shirt.Size.L,Shirt.Size.XL, + Coat.Size.S,Coat.Size.M,Coat.Size.L,Coat.Size.XL, + Sweater.Size.S,Sweater.Size.M,Sweater.Size.L,Sweater.Size.XL); + fclose(fp); +} +void Save_variables(FILE *var) +{ + fprintf(var,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d", + Shirt.Size.S,Shirt.Size.M,Shirt.Size.L,Shirt.Size.XL, + Coat.Size.S,Coat.Size.M,Coat.Size.L,Coat.Size.XL, + Sweater.Size.S,Sweater.Size.M,Sweater.Size.L,Sweater.Size.XL); + fclose(var); +} +void Put_in_Storage() +{ + system("cls"); + printf("Choose the category.\n"); + printf("1.Shirt\n"); + printf("2.Coat\n"); + printf("3.Sweater\n"); + switch (getch()) + { + case '1': + { + system("cls"); + printf("Choose the size.\n"); + printf("1.S\n"); + printf("2.M\n"); + printf("3.L\n"); + printf("4.XL\n"); + switch (getch()) + { + case '1': + { + system("cls"); + printf("Enter the number.\n"); + int i; + scanf("%d",&i); + Shirt.Size.S+=i; + break; + } + case '2': + { + system("cls"); + printf("Enter the number.\n"); + int i; + scanf("%d",&i); + Shirt.Size.M+=i; + break; + } + case '3': + { + system("cls"); + printf("Enter the number.\n"); + int i; + scanf("%d",&i); + Shirt.Size.L+=i; + break; + } + case '4': + { + system("cls"); + printf("Enter the number.\n"); + int i; + scanf("%d",&i); + Shirt.Size.XL+=i; + break; + } + default: + break; + } + break; + } + case '2': + { + system("cls"); + printf("Choose the size.\n"); + printf("1.S\n"); + printf("2.M\n"); + printf("3.L\n"); + printf("4.XL\n"); + switch (getch()) + { + case '1': + { + system("cls"); + printf("Enter the number.\n"); + int i; + scanf("%d",&i); + Coat.Size.S+=i; + break; + } + case '2': + { + system("cls"); + printf("Enter the number.\n"); + int i; + scanf("%d",&i); + Coat.Size.M+=i; + break; + } + case '3': + { + system("cls"); + printf("Enter the number.\n"); + int i; + scanf("%d",&i); + Coat.Size.L+=i; + break; + } + case '4': + { + system("cls"); + printf("Enter the number.\n"); + int i; + scanf("%d",&i); + Coat.Size.XL+=i; + break; + } + default: + break; + } + break; + } + case '3': + { + system("cls"); + printf("Choose the size.\n"); + printf("1.S\n"); + printf("2.M\n"); + printf("3.L\n"); + printf("4.XL\n"); + switch (getch()) + { + case '1': + { + system("cls"); + printf("Enter the number.\n"); + int i; + scanf("%d",&i); + Sweater.Size.S+=i; + break; + } + case '2': + { + system("cls"); + printf("Enter the number.\n"); + int i; + scanf("%d",&i); + Sweater.Size.M+=i; + break; + } + case '3': + { + system("cls"); + printf("Enter the number.\n"); + int i; + scanf("%d",&i); + Sweater.Size.L+=i; + break; + } + case '4': + { + system("cls"); + printf("Enter the number.\n"); + int i; + scanf("%d",&i); + Sweater.Size.XL+=i; + break; + } + default: + break; + } + break; + } + default: + break; + } + system("cls"); + printf("Done!\n"); + printf("Press Enter to go back.\n"); +} +void Deliver_from_storage() +{ + system("cls"); + printf("Choose the category.\n"); + printf("1.Shirt\n"); + printf("2.Coat\n"); + printf("3.Sweater\n"); + switch (getch()) + { + case '1': + { + system("cls"); + printf("Choose the size.\n"); + printf("1.S\n"); + printf("2.M\n"); + printf("3.L\n"); + printf("4.XL\n"); + switch (getch()) + { + case '1': + { + system("cls"); + printf("Enter the number.\n"); + int i; + scanf("%d",&i); + Shirt.Size.S-=i; + break; + } + case '2': + { + system("cls"); + printf("Enter the number.\n"); + int i; + scanf("%d",&i); + Shirt.Size.M-=i; + break; + } + case '3': + { + system("cls"); + printf("Enter the number.\n"); + int i; + scanf("%d",&i); + Shirt.Size.L-=i; + break; + } + case '4': + { + system("cls"); + printf("Enter the number.\n"); + int i; + scanf("%d",&i); + Shirt.Size.XL-=i; + break; + } + default: + break; + } + break; + } + case '2': + { + system("cls"); + printf("Choose the size.\n"); + printf("1.S\n"); + printf("2.M\n"); + printf("3.L\n"); + printf("4.XL\n"); + switch (getch()) + { + case '1': + { + system("cls"); + printf("Enter the number.\n"); + int i; + scanf("%d",&i); + Coat.Size.S-=i; + break; + } + case '2': + { + system("cls"); + printf("Enter the number.\n"); + int i; + scanf("%d",&i); + Coat.Size.M-=i; + break; + } + case '3': + { + system("cls"); + printf("Enter the number.\n"); + int i; + scanf("%d",&i); + Coat.Size.L-=i; + break; + } + case '4': + { + system("cls"); + printf("Enter the number.\n"); + int i; + scanf("%d",&i); + Coat.Size.XL-=i; + break; + } + default: + break; + } + break; + } + case '3': + { + system("cls"); + printf("Choose the size.\n"); + printf("1.S\n"); + printf("2.M\n"); + printf("3.L\n"); + printf("4.XL\n"); + switch (getch()) + { + case '1': + { + system("cls"); + printf("Enter the number.\n"); + int i; + scanf("%d",&i); + Sweater.Size.S-=i; + break; + } + case '2': + { + system("cls"); + printf("Enter the number.\n"); + int i; + scanf("%d",&i); + Sweater.Size.M-=i; + break; + } + case '3': + { + system("cls"); + printf("Enter the number.\n"); + int i; + scanf("%d",&i); + Sweater.Size.L-=i; + break; + } + case '4': + { + system("cls"); + printf("Enter the number.\n"); + int i; + scanf("%d",&i); + Sweater.Size.XL-=i; + break; + } + default: + break; + } + break; + } + default: + break; + } + system("cls"); + printf("Done!\n"); + printf("Press Enter to go back.\n"); +} diff --git "a/\350\257\276\347\250\213\350\256\276\350\256\241.pdf" "b/\350\257\276\347\250\213\350\256\276\350\256\241.pdf" new file mode 100644 index 0000000..3241402 Binary files /dev/null and "b/\350\257\276\347\250\213\350\256\276\350\256\241.pdf" differ diff --git "a/\350\257\276\347\250\213\350\256\276\350\256\241\347\255\224\350\276\251.pptx" "b/\350\257\276\347\250\213\350\256\276\350\256\241\347\255\224\350\276\251.pptx" new file mode 100644 index 0000000..0f0d1a7 Binary files /dev/null and "b/\350\257\276\347\250\213\350\256\276\350\256\241\347\255\224\350\276\251.pptx" differ