Advertisement
Guest User

Untitled

a guest
May 22nd, 2015
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.01 KB | None | 0 0
  1. #include<stdio.h>
  2.  
  3. #define Bangai 0 //棋盤の状態を表す定数
  4. #define P1 1
  5. #define P2 2
  6. #define Aki 3
  7. #define Select 4
  8. #define P1select 5
  9. #define P2select 6
  10.  
  11. typedef struct {
  12. int zahyo[7][7];
  13. int p1left;
  14. int p2left;
  15. int gin[5]; //a[0]:↑ a[1]:↗︎a[2]:↖︎a[3]:↘︎a[4]:↙
  16. }Gins;
  17.  
  18. /* ----- prototypes ----- */
  19. Gins initialize(Gins k);
  20. void print_kiban(Gins k);
  21. int hantei(Gins k);
  22. Gins play(Gins k);
  23. Gins select_move(Gins k,int p);
  24. Gins move(int x, int y, Gins k, int p);
  25. Gins check(int x,int y,Gins k,int p);
  26. Gins action(int x,int y,Gins k,int p,int s);
  27.  
  28.  
  29. /* ----- main ----- */
  30. int main(void){
  31. Gins kiban;
  32. int i;
  33. kiban = initialize(kiban);
  34. print_kiban(kiban);
  35.  
  36. //kakunin(kiban);
  37.  
  38. while( (i=hantei(kiban)) == 0){
  39. kiban= play(kiban);
  40. print_kiban(kiban);
  41. }
  42.  
  43. if(i==1) printf("player1の勝ち\n");
  44. else if(i==2) printf("player2の勝ち\n");
  45. }
  46.  
  47. /* ----- functions ----- */
  48. Gins initialize(Gins k){
  49. int i,j;
  50.  
  51. for(i=0;i<7;i++){
  52. k.zahyo[0][i] = Bangai;
  53. k.zahyo[6][i] = Bangai;
  54. k.zahyo[i][0] = Bangai;
  55. k.zahyo[i][6] = Bangai;
  56. }
  57.  
  58. for(i=1;i<6;i++){
  59. for(j=1;j<6;j++){
  60. if(i == 1){
  61. k.zahyo[1][j] = P2;
  62. }else if(i == 5){
  63. k.zahyo[5][j] = P1;
  64. }else{
  65. k.zahyo[i][j] = Aki;
  66. }
  67. }
  68. }
  69.  
  70. for(i=0;i<5;i++) k.gin[i]=0;
  71.  
  72. k.p1left = 5;
  73. k.p2left = 5;
  74. return k;
  75. }
  76.  
  77. void print_kiban(Gins k){
  78. int i,j;
  79. printf(" 1 2 3 4 5 \n");
  80. printf("---------------------\n");
  81. for(i=1;i<6;i++){
  82. for(j=1;j<6;j++){
  83. switch(k.zahyo[i][j]){
  84. case P1:
  85. printf("| * ");
  86. break;
  87. case P1select:
  88. printf("| * ");
  89. break;
  90. case P2:
  91. printf("| + ");
  92. break;
  93. case P2select:
  94. printf("| + ");
  95. break;
  96. case Aki:
  97. printf("| ");
  98. break;
  99. case Select:
  100. printf("| ? ");
  101. break;
  102. }
  103. }
  104. printf("| %d\n",i);
  105. printf("---------------------\n");
  106. }
  107. printf("player1 残り(*) %d 枚\n",k.p1left);
  108. printf("player2 残り(+) %d 枚\n",k.p2left);
  109. }
  110.  
  111. int hantei(Gins k){
  112. if(k.p1left == 0) return 2;
  113. else if(k.p2left == 0) return 1;
  114. else return 0;
  115. }
  116.  
  117. Gins play(Gins k){
  118. int x,y,player,i,j;
  119. for(player=1;player<3;player++){
  120. printf("player%dの番です\n",player);
  121. if(player == 1){
  122. for(i=0;i<k.p1left;i++) k=select_move(k,player);
  123. }else{
  124. for(i=0;i<k.p2left;i++) k=select_move(k,player);
  125. }
  126. }
  127.  
  128. for(i=1;i<6;i++){
  129. for(j=1;j<6;j++){
  130. if(k.zahyo[i][j]==P1select) k.zahyo[i][j]=P1;
  131. if(k.zahyo[i][j]==P2select) k.zahyo[i][j]=P2;
  132. }
  133. }
  134.  
  135. if(hantei(k) != 0) return k;
  136. return k;
  137. }
  138.  
  139. Gins select_move(Gins k,int p){
  140. int x,y;
  141. redo:
  142. printf("動かしたい駒を座標(yoko,tate)で選択してください\n");
  143. scanf("%d",&x);
  144. scanf("%d",&y);
  145.  
  146. if(x<1||x>5||y<1||y>5) {
  147. printf("そこは選択出来ません\n");
  148. goto redo;
  149. }
  150. if(k.zahyo[y][x] != p){
  151. if((p==1 && k.zahyo[y][x] == P1select) || (p==2 && k.zahyo[y][x] == P2select)) {
  152. printf("そのコマは一度動かしました\n");
  153. }else{
  154. printf("そこは選択出来ません\n");
  155. }
  156. goto redo;
  157. }
  158.  
  159. k.zahyo[y][x] = Select;
  160. print_kiban(k);
  161.  
  162. k = move(x,y,k,p);
  163.  
  164. print_kiban(k);
  165.  
  166. return k;
  167. }
  168.  
  169. Gins move(int x, int y,Gins k,int p){
  170. int s;
  171. k = check(x,y,k,p);
  172. re:
  173. printf("どこに動かすか選択してください\n");
  174. re2:
  175. if(k.gin[0]!=0) printf("前:0 ");
  176. if(k.gin[1]!=0) printf("右前:1 ");
  177. if(k.gin[2]!=0) printf("左前:2 ");
  178. if(k.gin[3]!=0) printf("右後ろ:3 ");
  179. if(k.gin[4]!=0) printf("左後ろ:4\n");
  180. scanf("%d",&s);
  181. switch(s){
  182. case 0:
  183. if(k.gin[0]==0) goto re;
  184. k = action(x,y,k,p,s);
  185. break;
  186. case 1:
  187. if(k.gin[1]==0) goto re;
  188. k = action(x,y,k,p,s);
  189. break;
  190. case 2:
  191. if(k.gin[2]==0) goto re;
  192. k = action(x,y,k,p,s);
  193. break;
  194. case 3:
  195. if(k.gin[3]==0) goto re;
  196. k = action(x,y,k,p,s);
  197. break;
  198. case 4:
  199. if(k.gin[4]==0) goto re;
  200. k = action(x,y,k,p,s);
  201. break;
  202. default:
  203. printf("選択肢から選んでください\n");
  204. goto re2;
  205. break;
  206. }
  207. return k;
  208. }
  209.  
  210. Gins check(int x,int y,Gins k,int p){
  211. int za,i;
  212. for(i=0;i<5;i++) k.gin[i]=0;
  213. if(p==1){
  214. if((za=k.zahyo[y-1][x])==Aki) {k.gin[0]=1;}else if(za==P2){k.gin[0]=2;}
  215. if((za=k.zahyo[y-1][x+1])==Aki){k.gin[1]=1;}else if(za==P2){k.gin[1]=2;}
  216. if((za=k.zahyo[y-1][x-1])==Aki){k.gin[2]=1;}else if(za==P2){k.gin[2]=2;}
  217. if((za=k.zahyo[y+1][x+1])==Aki){k.gin[3]=1;}else if(za==P2){k.gin[3]=2;}
  218. if((za=k.zahyo[y+1][x-1])==Aki){k.gin[4]=1;}else if(za==P2){k.gin[4]=2;}
  219. }else if(p==2){
  220. if((za=k.zahyo[y+1][x])==Aki) {k.gin[0]=1;}else if(za==P1select){k.gin[0]=2;}
  221. if((za=k.zahyo[y+1][x-1])==Aki){k.gin[1]=1;}else if(za==P1select){k.gin[1]=2;}
  222. if((za=k.zahyo[y+1][x+1])==Aki){k.gin[2]=1;}else if(za==P1select){k.gin[2]=2;}
  223. if((za=k.zahyo[y-1][x-1])==Aki){k.gin[3]=1;}else if(za==P1select){k.gin[3]=2;}
  224. if((za=k.zahyo[y-1][x+1])==Aki){k.gin[4]=1;}else if(za==P1select){k.gin[4]=2;}
  225. }
  226. return k;
  227. }
  228.  
  229. Gins action(int x,int y,Gins k,int p,int s){
  230. if(p==1){
  231. switch(s){
  232. case 0:
  233. k.zahyo[y-1][x] = P1select;
  234. if(k.gin[0]==2) k.p2left--;
  235. break;
  236. case 1:
  237. k.zahyo[y-1][x+1] = P1select;
  238. if(k.gin[1]==2) k.p2left--;
  239. break;
  240. case 2:
  241. k.zahyo[y-1][x-1] = P1select;
  242. if(k.gin[2]==2) k.p2left--;
  243. break;
  244. case 3:
  245. k.zahyo[y+1][x+1] = P1select;
  246. if(k.gin[3]==2) k.p2left--;
  247. break;
  248. case 4:
  249. k.zahyo[y+1][x-1] = P1select;
  250. if(k.gin[4]==2) k.p2left--;
  251. break;
  252. }
  253. }else if(p==2){
  254. switch(s){
  255. case 0:
  256. k.zahyo[y+1][x] = P2select;
  257. if(k.gin[0]==2) k.p1left--;
  258. break;
  259. case 1:
  260. k.zahyo[y+1][x-1] = P2select;
  261. if(k.gin[1]==2) k.p1left--;
  262. break;
  263. case 2:
  264. k.zahyo[y+1][x+1] = P2select;
  265. if(k.gin[2]==2) k.p1left--;
  266. break;
  267. case 3:
  268. k.zahyo[y-1][x-1] = P2select;
  269. if(k.gin[3]==2) k.p1left--;
  270. break;
  271. case 4:
  272. k.zahyo[y-1][x+1] = P2select;
  273. if(k.gin[4]==2) k.p1left--;
  274. break;
  275. }
  276. }
  277. k.zahyo[y][x] = Aki;
  278. return k;
  279. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement