Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #define Bangai 0 //棋盤の状態を表す定数
- #define P1 1
- #define P2 2
- #define Aki 3
- #define Select 4
- #define P1select 5
- #define P2select 6
- typedef struct {
- int zahyo[7][7];
- int p1left;
- int p2left;
- int gin[5]; //a[0]:↑ a[1]:↗︎a[2]:↖︎a[3]:↘︎a[4]:↙
- }Gins;
- /* ----- prototypes ----- */
- Gins initialize(Gins k);
- void print_kiban(Gins k);
- int hantei(Gins k);
- Gins play(Gins k);
- Gins select_move(Gins k,int p);
- Gins move(int x, int y, Gins k, int p);
- Gins check(int x,int y,Gins k,int p);
- Gins action(int x,int y,Gins k,int p,int s);
- /* ----- main ----- */
- int main(void){
- Gins kiban;
- int i;
- kiban = initialize(kiban);
- print_kiban(kiban);
- //kakunin(kiban);
- while( (i=hantei(kiban)) == 0){
- kiban= play(kiban);
- print_kiban(kiban);
- }
- if(i==1) printf("player1の勝ち\n");
- else if(i==2) printf("player2の勝ち\n");
- }
- /* ----- functions ----- */
- Gins initialize(Gins k){
- int i,j;
- for(i=0;i<7;i++){
- k.zahyo[0][i] = Bangai;
- k.zahyo[6][i] = Bangai;
- k.zahyo[i][0] = Bangai;
- k.zahyo[i][6] = Bangai;
- }
- for(i=1;i<6;i++){
- for(j=1;j<6;j++){
- if(i == 1){
- k.zahyo[1][j] = P2;
- }else if(i == 5){
- k.zahyo[5][j] = P1;
- }else{
- k.zahyo[i][j] = Aki;
- }
- }
- }
- for(i=0;i<5;i++) k.gin[i]=0;
- k.p1left = 5;
- k.p2left = 5;
- return k;
- }
- void print_kiban(Gins k){
- int i,j;
- printf(" 1 2 3 4 5 \n");
- printf("---------------------\n");
- for(i=1;i<6;i++){
- for(j=1;j<6;j++){
- switch(k.zahyo[i][j]){
- case P1:
- printf("| * ");
- break;
- case P1select:
- printf("| * ");
- break;
- case P2:
- printf("| + ");
- break;
- case P2select:
- printf("| + ");
- break;
- case Aki:
- printf("| ");
- break;
- case Select:
- printf("| ? ");
- break;
- }
- }
- printf("| %d\n",i);
- printf("---------------------\n");
- }
- printf("player1 残り(*) %d 枚\n",k.p1left);
- printf("player2 残り(+) %d 枚\n",k.p2left);
- }
- int hantei(Gins k){
- if(k.p1left == 0) return 2;
- else if(k.p2left == 0) return 1;
- else return 0;
- }
- Gins play(Gins k){
- int x,y,player,i,j;
- for(player=1;player<3;player++){
- printf("player%dの番です\n",player);
- if(player == 1){
- for(i=0;i<k.p1left;i++) k=select_move(k,player);
- }else{
- for(i=0;i<k.p2left;i++) k=select_move(k,player);
- }
- }
- for(i=1;i<6;i++){
- for(j=1;j<6;j++){
- if(k.zahyo[i][j]==P1select) k.zahyo[i][j]=P1;
- if(k.zahyo[i][j]==P2select) k.zahyo[i][j]=P2;
- }
- }
- if(hantei(k) != 0) return k;
- return k;
- }
- Gins select_move(Gins k,int p){
- int x,y;
- redo:
- printf("動かしたい駒を座標(yoko,tate)で選択してください\n");
- scanf("%d",&x);
- scanf("%d",&y);
- if(x<1||x>5||y<1||y>5) {
- printf("そこは選択出来ません\n");
- goto redo;
- }
- if(k.zahyo[y][x] != p){
- if((p==1 && k.zahyo[y][x] == P1select) || (p==2 && k.zahyo[y][x] == P2select)) {
- printf("そのコマは一度動かしました\n");
- }else{
- printf("そこは選択出来ません\n");
- }
- goto redo;
- }
- k.zahyo[y][x] = Select;
- print_kiban(k);
- k = move(x,y,k,p);
- print_kiban(k);
- return k;
- }
- Gins move(int x, int y,Gins k,int p){
- int s;
- k = check(x,y,k,p);
- re:
- printf("どこに動かすか選択してください\n");
- re2:
- if(k.gin[0]!=0) printf("前:0 ");
- if(k.gin[1]!=0) printf("右前:1 ");
- if(k.gin[2]!=0) printf("左前:2 ");
- if(k.gin[3]!=0) printf("右後ろ:3 ");
- if(k.gin[4]!=0) printf("左後ろ:4\n");
- scanf("%d",&s);
- switch(s){
- case 0:
- if(k.gin[0]==0) goto re;
- k = action(x,y,k,p,s);
- break;
- case 1:
- if(k.gin[1]==0) goto re;
- k = action(x,y,k,p,s);
- break;
- case 2:
- if(k.gin[2]==0) goto re;
- k = action(x,y,k,p,s);
- break;
- case 3:
- if(k.gin[3]==0) goto re;
- k = action(x,y,k,p,s);
- break;
- case 4:
- if(k.gin[4]==0) goto re;
- k = action(x,y,k,p,s);
- break;
- default:
- printf("選択肢から選んでください\n");
- goto re2;
- break;
- }
- return k;
- }
- Gins check(int x,int y,Gins k,int p){
- int za,i;
- for(i=0;i<5;i++) k.gin[i]=0;
- if(p==1){
- if((za=k.zahyo[y-1][x])==Aki) {k.gin[0]=1;}else if(za==P2){k.gin[0]=2;}
- if((za=k.zahyo[y-1][x+1])==Aki){k.gin[1]=1;}else if(za==P2){k.gin[1]=2;}
- if((za=k.zahyo[y-1][x-1])==Aki){k.gin[2]=1;}else if(za==P2){k.gin[2]=2;}
- if((za=k.zahyo[y+1][x+1])==Aki){k.gin[3]=1;}else if(za==P2){k.gin[3]=2;}
- if((za=k.zahyo[y+1][x-1])==Aki){k.gin[4]=1;}else if(za==P2){k.gin[4]=2;}
- }else if(p==2){
- if((za=k.zahyo[y+1][x])==Aki) {k.gin[0]=1;}else if(za==P1select){k.gin[0]=2;}
- if((za=k.zahyo[y+1][x-1])==Aki){k.gin[1]=1;}else if(za==P1select){k.gin[1]=2;}
- if((za=k.zahyo[y+1][x+1])==Aki){k.gin[2]=1;}else if(za==P1select){k.gin[2]=2;}
- if((za=k.zahyo[y-1][x-1])==Aki){k.gin[3]=1;}else if(za==P1select){k.gin[3]=2;}
- if((za=k.zahyo[y-1][x+1])==Aki){k.gin[4]=1;}else if(za==P1select){k.gin[4]=2;}
- }
- return k;
- }
- Gins action(int x,int y,Gins k,int p,int s){
- if(p==1){
- switch(s){
- case 0:
- k.zahyo[y-1][x] = P1select;
- if(k.gin[0]==2) k.p2left--;
- break;
- case 1:
- k.zahyo[y-1][x+1] = P1select;
- if(k.gin[1]==2) k.p2left--;
- break;
- case 2:
- k.zahyo[y-1][x-1] = P1select;
- if(k.gin[2]==2) k.p2left--;
- break;
- case 3:
- k.zahyo[y+1][x+1] = P1select;
- if(k.gin[3]==2) k.p2left--;
- break;
- case 4:
- k.zahyo[y+1][x-1] = P1select;
- if(k.gin[4]==2) k.p2left--;
- break;
- }
- }else if(p==2){
- switch(s){
- case 0:
- k.zahyo[y+1][x] = P2select;
- if(k.gin[0]==2) k.p1left--;
- break;
- case 1:
- k.zahyo[y+1][x-1] = P2select;
- if(k.gin[1]==2) k.p1left--;
- break;
- case 2:
- k.zahyo[y+1][x+1] = P2select;
- if(k.gin[2]==2) k.p1left--;
- break;
- case 3:
- k.zahyo[y-1][x-1] = P2select;
- if(k.gin[3]==2) k.p1left--;
- break;
- case 4:
- k.zahyo[y-1][x+1] = P2select;
- if(k.gin[4]==2) k.p1left--;
- break;
- }
- }
- k.zahyo[y][x] = Aki;
- return k;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement