加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C#控制台小项目—五子棋游戏

(2017-09-30 22:07:25)
标签:

c语言

it

unity3d

vr

分类: C#
使用C#完成五子棋游戏的实现:

最终游戏界面如下:

http://s4/mw690/005Sa5OQzy7cZPBkN0f63&690

完整代码如下:

 C# Code 
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 五子棋游戏.调试后
{
    
class Program
    {
        
public static int left 0 // +2 则光标向右移动一格, -2 则光标向左移动一格
        public static int top 18//  +1 则光标向下移动一个, -1 则光标向上移动一个
        public static string[,] QP new string[1717];   //定义棋盘大小
        public static string[,] QZ new string[1717];  //保存棋子

        
//绘制棋盘
        public static void qp()
        {
            
for (int 017i++)
            {
                
for (int 017j++)
                {
                    QP[i, j] 
"┼"  //为数组QP每个元素赋初值 “┼“
                }
            }
            
for (int 017i++)
            {
                
for (int 017j++)
                {
                    Console.Write(QP[i, j]);    
//打印棋盘
                }
                Console.WriteLine();
            }
        }

        
//移动并落字
        public static void move()
        {
            qp();
            Console.SetCursorPosition(left, top); 
//设置光标位置
            Console.WriteLine(双人PK,燃起来吧!\n");
            Console.WriteLine(
玩家1:  控制方向   空格键落子");
            Console.WriteLine(
玩家2:↑↓← → 控制方向   Enter键落子");

            left 
16top 8;
            
bool true;
            
while (true)
            {
                Program program 
new Program();
                Console.SetCursorPosition(left, top);  
//设置光标位置

                
//接受输入并显示在控制台上,  true表示隐藏输入
                ConsoleKeyInfo info Console.ReadKey(true);

                
//控制光标移动  一组“W”“S”“A”“D”,
                //一组“↑”“↓”“←”“→”
                switch (info.Key)
                {
                    
//"W" 和 "↑" 向上移动光标
                    case ConsoleKey.UpArrow:
                    
case ConsoleKey.W: if (top 0top--; break;

                    
//"S" 和 "↓" 向下移动光标
                    case ConsoleKey.DownArrow:
                    
case ConsoleKey.S: if (top 16top++; break;

                    
//"A" 和 "←" 向左移动光标
                    case ConsoleKey.LeftArrow:
                    
case ConsoleKey.A: if (left 0left -= 2break;

                    
//"D" 和 "→" 向右移动光标
                    case ConsoleKey.RightArrow:
                    
case ConsoleKey.D: if (left 32left += 2break;
                }

                
//落子
                if (M)
                {
                    
//按 空格键 或 Enter键,落子
                    if (info.Key == ConsoleKey.Spacebar || info.Key == ConsoleKey.Enter)
                    {
                        Console.WriteLine(
"●");
                        QZ[left 
2top] "●";
                        
false  //下一次落子为 

                        
if (Judge() == true   //判断输赢
                        {
                            
//设置光标位置
                            Console.SetCursorPosition(022);
                            Console.WriteLine($
"\n {QZ[left 2, top]}方,胜利");
                            
break;
                        }
                    }
                }
                
else
                {
                    
//按 空格键或Enter键,下子
                    if (info.Key == ConsoleKey.Spacebar || info.Key == ConsoleKey.Enter)
                    {
                        Console.WriteLine(
"○");
                        QZ[left 
2top] "○";
                        
true  //下一次落子为 

                        
if (Judge() == true   //判断输赢
                        {
                            
//设置光标位置
                            Console.SetCursorPosition(022);
                            Console.Write($
"\n {QZ[left 2, top]}方,胜利");
                            
break;
                        }
                    }
                }
            }
        }

        
//判断游戏输赢
        public static bool Judge()
        {
            
int n1 1n2 1n3 1n4 1;
            
// n1 表示一条 横线 上相邻的同色棋子数                                                         
            // n2 表示一条 纵线 上相邻的同色棋子数                                                              
            // n3 表示一条 左上斜线 上相邻的同色棋子数                                                              
            // n4 表示一条 右下斜线 上相邻的同色棋子数

            
//第一种情况: 五子在一条横线
            for (int 15j++)
            {
                
if (left 2 <= 16 //判断是否越界
                {
                    
//落子与相邻右边的4个棋子判断
                    if (QZ[left 2top] == QZ[left 2 j, top]) n1++; }
                    
else break}
                }
            }
            
for (int 15j++)
            {
                
if (left 2 >= 0 //判断是否越界
                {
                    
//落子与相邻左边的4个棋子判断  
                    if (QZ[left 2top] == QZ[left 2 j, top]) n1++; }
                    
else break}
                }
            }

            
//第二种情况: 五子在一条纵线
            for (int 15j++)
            {
                
if ((top <= 16))  //判断是否越界
                {
                    
//落子与相邻上方的4个棋子判断
                    if (QZ[left 2top] == QZ[left 2top j]) n2++; }
                    
else break}
                }
            }
            
for (int 16j++)
            {
                
if (top >= 0 //判断是否越界
                {
                    
//落子与相邻下方的4个棋子判断
                    if (QZ[left 2top] == QZ[left 2top j]) n2++; }
                    
else break}
                }
            }

            
//第三种情况:五子在一条右下斜线
            for (int 15j++)
            {
                
if ((left 2 >= 0&& (top >= 0))  //判断是否越界
                {
                    
//落子与相邻左上斜的4个棋子判断
                    if (QZ[left 2top] == QZ[left 2 j, top j]) n3++; }
                    
else break}
                }
            }
            
for (int 15j++)
            {
                
if ((left 2 <= 16&& (top <= 16))  //判断是否越界
                {
                    
//落子与相邻右下的4个棋子判断
                    if (QZ[left 2top] == QZ[left 2 j, top j]) n3++; }
                    
else break}
                }
            }

            
//第四种情况: 五子在一条左下斜线
            for (int 15j++)
            {
                
if ((left 2 <= 16&& (top >= 0))  //判断是否越界
                {
                    
// 落子与相邻右上的4个棋子判断
                    if (QZ[left 2top] == QZ[left 2 j, top j]) n4++; }
                    
else break}
                }
            }
            
for (int 15j++)
            {
                
if ((left 2 >= 0&& (top <= 16))  //判断是否越界
                {
                    
// 落子与相邻左下的4个棋子判断
                    if (QZ[left 2top] == QZ[left 2 j, top j]) n4++; }
                    
else break}
                }
            }

            
//游戏判断
            if (n1 >= 5 || n2 >= 5 || n3 >= 5 || n4 >= 5return true//胜利,游戏结束
            else return false  //游戏继续
        }


        
static void Main(string[] args)
        {
            move();
            Console.ReadKey();
        }
    }
}

完毕,下次更新!

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有