1 #include <iostream>
2 using namespace std;
3
4 void init(char flag[][20]){
5 for(int i=0;i<20;i++){
6 for(int j=0;j<20;j++){
7 flag[i][j]='|';
8 cout<<"-";
9 cout<<flag[i][j];
10 }
11 cout<<endl;
12 }
13 }
14
15 int main(){
16 //设置棋盘大小 ,可以设置成变量 x,y
17 char flag[20][20];
18 //初始化数据
19 init(flag);
20 system("pause");
21 }
1 #include <iostream>
2 using namespace std;
3 void init(char flag[20][20]);//初始化棋盘
4 void draw(char flag[20][20]);//划出指定棋盘
5 int test(char flag[20][20],char);//判断是否棋局结束
6
7 int main(){
8 //设置棋盘大小 ,可以设置成变量 x,y
9 char flag[20][20];
10 //初始化数据
11 init(flag);
12
13 for(int x =0;x<400; ){//棋盘上总共能乘放下 x*y 个棋子
14 int i,j;
15 if(x%4==0){
16 cout<<"请A方走:";
17 cin>>i;
18 cin>>j;
19 while(flag[i][j]=='X'||flag[i][j]=='O')//判断输入位置是否有棋子
20 {
21 cout<<endl;
22 cout<<"此地已经有棋子!请重新走:";
23 cin>>i;
24 cin>>j;
25 }
26 flag[i][j]='X';//指定位置放上棋子
27 draw(flag);
28 if(test(flag,'X'))//判断是否获胜(A)
29 {
30 char replay;
31 cout<<"A方胜利!是否再来一局?Y/N:";
32 cin>>replay;
33 if (replay=='Y'||replay=='y')
34 {
35 main();
36 } else
37 {
38 break;
39 }
40
41 }
42 x+=2;
43 }else{
44 cout<<"请B方走:";
45 cin>>i;
46 cin>>j;
47 while(flag[i][j]=='X'||flag[i][j]=='O')
48 {
49 cout<<endl;
50 cout<<"此地已经有棋子!请重新走:";
51 cin>>i;
52 cin>>j;
53 }
54 flag[i][j]='O';
55 draw(flag);
56 if(test(flag,'O'))//判断是否获胜(B)
57 {
58 char replay;
59 cout<<"B方胜利!是否再来一局?Y/N:";
60 cin>>replay;
61 if (replay=='Y'||replay=='y')
62 {
63 main();
64 } else
65 {
66 break;
67 }
68
69 }
70 x+=2;
71 }
72 }
73 return 0;
74 }
75
76 void init(char flag[][20]){
77 for(int i=0;i<20;i++){
78 for(int j=0;j<20;j++){
79 flag[i][j]='|';
80 cout<<"-";
81 cout<<flag[i][j];
82 }
83 cout<<endl;
84 }
85 }
86
87 int test(char flag[][20],char f){
88 int mark =0;
89 for(int i=0;i<15;i++){
90 for(int j=0;j<15;j++){
91 if(//判断横着,数着,斜着三种成立情况
92 (f==flag[i][j]&&f==flag[i+1][j]&&f==flag[i+2][j]&&f==flag[i+3][j]&&f==flag[i+4][j])
93 ||(f==flag[i][j]&&f==flag[i][j+1]&&f==flag[i][j+2]&&f==flag[i][j+3]&&f==flag[i][j+4])
94 ||(f==flag[i][j]&&f==flag[i+1][j+1]&&f==flag[i+2][j+2]&&f==flag[i+3][j+3]&&f==flag[i+4][j+4]))
95 {
96 cout<<endl;
97 mark =1;
98 }
99 }
100 }
101 return mark;
102 }
103
104 void draw(char flag[][20] ){
105 for(int i=0;i<20;i++){
106 for(int j=0;j<20;j++){
107 cout<<"-";
108 cout<<flag[i][j];
109 }
110 cout<<endl;
111 }
112 }
1 //五子棋,很简明易懂的小程序,适合初学者学习
2 #include <iostream>
3 using namespace std;
4 void init(char flag[20][20]);//初始化棋盘
5 void draw(char flag[20][20]);//划出指定棋盘
6 int test(char flag[20][20],char);//判断是否棋局结束
7 bool check(int,int);//检查玩家输入坐标是否合法
8
9 int main(){
10 //设置棋盘大小 ,可以设置成变量 x,y
11 char flag[20][20];
12 //初始化数据
13 init(flag);
14
15 for(int x =0;x<400; )//棋盘上总共能乘放下 x*y 个棋子,可是x加2,我认为此处为x<800;
16 {
17 int i,j;
18 if(x%4==0)//进行判断A,B方谁先走
19 {
20 cout<<"请A方走:";
21 cin>>i;
22 cin>>j;
23 while(flag[i][j]=='X'||flag[i][j]=='O')//判断输入位置是否有棋子
24 {
25 cout<<endl;
26 cout<<"此地已经有棋子!请重新走:";
27 cin>>i;
28 cin>>j;
29 }
30 if(check(i,j)==false)
31 {
32 cout<<endl;
33 cout<<"输入坐标不合法!请重新输入:";
34 cin>>i;
35 cin>>j;
36 }
37 flag[i][j]='X';//指定位置放上棋子
38 draw(flag);
39 if(test(flag,'X'))//判断是否获胜(A)
40 {
41 char replay;
42 cout<<"A方胜利!是否再来一局?Y/N:";
43 cin>>replay;
44 if (replay=='Y'||replay=='y')
45 {
46 main();
47 } else
48 {
49 break;
50 }
51
52 }
53 x+=2;
54 }
55 else
56 {
57 cout<<"请B方走:";
58 cin>>i;
59 cin>>j;
60 while(flag[i][j]=='X'||flag[i][j]=='O')
61 {
62 cout<<endl;
63 cout<<"此地已经有棋子!请重新走:";
64 cin>>i;
65 cin>>j;
66 }
67 if(check(i,j)==false)
68 {
69 cout<<endl;
70 cout<<"输入坐标不合法!请重新输入:";
71 cin>>i;
72 cin>>j;
73 }
74 flag[i][j]='O';
75 draw(flag);
76 if(test(flag,'O'))//判断是否获胜(B)
77 {
78 char replay;
79 cout<<"B方胜利!是否再来一局?Y/N:";
80 cin>>replay;
81 if (replay=='Y'||replay=='y')
82 {
83 main();
84 } else
85 {
86 break;
87 }
88
89 }
90 x+=2;
91 }
92 }
93 return 0;
94 }
95
96 void init(char flag[][20])//初始化整个棋盘
97 {
98 for(int i=0;i<20;i++)
99 {
100 for(int j=0;j<20;j++)
101 {
102 flag[i][j]='|';
103 cout<<"-";
104 cout<<flag[i][j];
105 }
106 cout<<endl;
107 }
108 }
109
110 int test(char flag[][20],char f)//测试是否结束,加分
111 {
112 int mark =0;
113 for(int i=0;i<15;i++)//15即可,因为是五子棋
114 {
115 for(int j=0;j<15;j++)
116 {
117 if(//判断横着,数着,斜着三种成立情况
118 (f==flag[i][j]&&f==flag[i+1][j]&&f==flag[i+2][j]&&f==flag[i+3][j]&&f==flag[i+4][j])
119 ||(f==flag[i][j]&&f==flag[i][j+1]&&f==flag[i][j+2]&&f==flag[i][j+3]&&f==flag[i][j+4])
120 ||(f==flag[i][j]&&f==flag[i+1][j+1]&&f==flag[i+2][j+2]&&f==flag[i+3][j+3]&&f==flag[i+4][j+4]))
121 {
122 cout<<endl;
123 mark =1;
124 }
125 }
126 }
127 return mark;
128 }
129
130 void draw(char flag[][20] )
131 {
132 for(int i=0;i<20;i++)
133 {
134 for(int j=0;j<20;j++)
135 {
136 cout<<"-";
137 cout<<flag[j][i];//此处原作者写的是cout<<flag[i][j];感觉不太符合我们对x轴与y轴的认识,故把他改了过来
138 }
139 cout<<endl;
140 }
141 }
142 bool check(int x,int y)//检查是否越界
143 {
144 if(x>20 || y>20 || x<0 || y<0)
145 return false;
146 else
147 return true;
148 }