语法基础-方案一:C#阶段项目
2017-08-07 本文已影响65人
元宇宙协会
项目名称:制作一款窗口程序的飞行棋项目
项目需求:要求至少两人对战
开发周期:两天
1.创建窗口程序
2.显示UI面板
显示UI 代码实现3.创建游戏玩家
创建玩家代码4.输入完毕后,进入第二个页面
清楚屏幕,重新绘制信息 这是重新绘制后的控制台程序5.绘制地图
绘制地图前应该看到的是我们的需求,利用数组,对应下标的内容显示为1:表示暂停格▲,2:表示地雷格☆,3:表示幸运格●,4:表示穿越格∞,0:表示普通格□
image.png image.png6.设置地图数组Map的数据
for循环 添加监视 通过循环发现已经设置好了7.将所有特殊格写入Map数组地图中
循环遍历赋值 最终Map里面的值8.根据数据绘制地图
先声明玩家初始位置,即复活点
设置出生点 image.png9.完善地图
绘制第二条地图
// 画第二行
for (int i = 30; i < 34; i++)
{
for (int j = 0; j < 29; j++)
{
Console.Write(" ");
}
// 判断玩家1和玩家2 是否在当前要画的第i格上
if (playerPos[0] == i && playerPos[1] == i)
{
Console.Write("〓"); // 如果在一起就绘制此图形
}
else if (playerPos[0] == i)
{
Console.Write("1"); // 如果不在一起,那玩家1所在i格绘制1
}
else if (playerPos[1] == i)
{
Console.Write("2");// 如果不在一起,那玩家2所在的i格绘制2
}
else // 绘制完玩家和重合位置,那么其余的格子绘制根据Map数组的下标来绘制
{
switch (map[i])
{
case 0:
Console.WriteLine("□");
break;
case 1:
Console.WriteLine("▲");
break;
case 2:
Console.WriteLine("☆");
break;
case 3:
Console.WriteLine("●");
break;
case 4:
Console.WriteLine("∞");
break;
}
}
}
这里会出现两个问题:
就是在绘制第二行的时候,会出现偏差
这是源自你在绘制第一行结束后,要进行换行
换行即可10.抽取封装
通过对上面第一行与第二行的绘制,我们发现里面的代码重复性太大
static string ReturnMapData(int pos)
{
string r = "";
if (playerPos[0] == pos && playerPos[1] == pos)
{
r = "〓"; // 如果在一起就绘制此图形
}
else if (playerPos[0] == pos)
{
r = "1"; // 如果不在一起,那玩家1所在i格绘制1
}
else if (playerPos[1] == pos)
{
r = "2";// 如果不在一起,那玩家2所在的i格绘制2
}
else // 绘制完玩家和重合位置,那么其余的格子绘制根据Map数组的下标来绘制
{
switch (map[pos])
{
case 0:
r = "□";
break;
case 1:
r ="▲";
break;
case 2:
r ="☆";
break;
case 3:
r ="●";
break;
case 4:
r="∞";
break;
}
}
return r;
}
抽取方法
绘制调用抽取方法
static void DrawMap()
{
// 画第一行
for (int i = 0; i < 30; i++)
{
Console.Write(ReturnMapData(i));
}
// 第一行绘制完毕换行
Console.WriteLine();
// 画第二行
for (int i = 30; i < 34; i++)
{
for (int j = 0; j < 29; j++)
{
Console.Write(" ");
}
Console.WriteLine(ReturnMapData(i));
}
// 绘制第三行,从左边往右边绘制
for (int i = 64; i >34 ; i--)
{
Console.Write(ReturnMapData(i));
}
Console.WriteLine();
// 绘制第四行
for (int i = 65; i < 69; i++)
{
Console.WriteLine(ReturnMapData(i));
}
// 绘制第五行
for (int i = 70; i < 100; i++)
{
Console.Write(ReturnMapData(i));
}
Console.WriteLine();
Console.ForegroundColor = ConsoleColor.White;
}