-
Notifications
You must be signed in to change notification settings - Fork 0
/
matrix.c
128 lines (114 loc) · 2.56 KB
/
matrix.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include <stdio.h>
#include <stdlib.h> //rand関数用
#include <time.h> //stand関数用
#define MATRIX_SIZE 3
/*
盤面状態の定義
*/
#define NONE 0 // 0:まだ誰もとってない。
#define PLAYER 1 // 1:プレイヤーが取った。
#define COMPUTER 2 // 2:コンピューターが取った。
int matrix[MATRIX_SIZE][MATRIX_SIZE];
int take(int number, int who);
void showMatrix();
int judge();
int main(void) {
int i,j,n,m,turn;
int winner;
printf("三目ならべを始めます\n");
/*
盤面を初期化します。
*/
// initialize
for (i =0; i < MATRIX_SIZE; i++) {
for (j = 0; j<MATRIX_SIZE; j++) {
matrix[i][j] = NONE;
}
}
turn = PLAYER; // ターンを設定、先攻は人間にする。
winner = NONE; // 勝利者を表す変数。最初はどっちも勝ってない状態。
while(winner == NONE) {
showMatrix();
switch(turn) {
case PLAYER:
printf("あなたの番です、○を置きたい場所の数字を入力してください\n");
/* 入力待ちループ */
while(turn == PLAYER) {
scanf("%d", &n);
if(take(n, turn) == 0) {
turn = COMPUTER; // COMPUTERの番にする。
break;
}
printf("数値を入れなおしてください\n");
}
break;
case COMPUTER:
printf("コンピュータの番です\n");
/* 選択処理ループ */
while(turn == COMPUTER) {
srand((unsigned)time(NULL));
n = rand() % 10;
if(take(n, turn) == 0) {
turn = PLAYER; // PLAYERの番にする。
}
}
break;
}
// 勝ち負け判定
winner = judge();
switch(winner) {
case PLAYER:
printf("Player WIN!\n");
break;
case COMPUTER:
printf("Computer WIN!\n");
break;
default:
break;
}
}
exit(0);
}
/*
勝ち負け判定
*/
int judge(){
return NONE;
}
/*
指定した番号の位置を取る。
0:指定した場所が取れた。
-1:指定した場所が取れなかった。
*/
int take(int number, int who) {
if(matrix[(number - 1) / MATRIX_SIZE][(number - 1) % MATRIX_SIZE] == 0) {
matrix[(number - 1) / MATRIX_SIZE][(number - 1) % MATRIX_SIZE] = who;
} else {
return -1;
}
return 0;
}
/*
盤面を表示します。
*/
void showMatrix(){
int i,j;
for (i =0; i < MATRIX_SIZE; i++) {
for (j = 0; j<MATRIX_SIZE; j++) {
switch(matrix[i][j])
{
case NONE: // まだ誰も選んでない
printf("%d",i * MATRIX_SIZE + j + 1);
break;
case PLAYER: // プレイヤーが選んだ
printf("@");
break;
default:
case COMPUTER: // コンピュータが選んだ
printf("o");
break;
}
}
printf("\n");
}
}