15-01-07 C# 面向过程 08

double avg = 9.99999999

string s =  avg.ToString("0.00");这样可以把Double类型转换为9.99

avg = Convert.ToDouble(s);

先将double转换为2位小数的string,再将string转换为double;

Console.WriteLine("{0:0.00}"); 和 ToString("0.00"); 都会保留四舍五入;

要实现一个功能最好将它写成一个方法;这样每次要用到这个功能的时候只要调用这个方法就可以了;

你要改变一个数组,不管是改变元素的位置也好,还是改变元素的大小也好,用一个方法来实现的话,这个方法不需要有任何的返回值;方法中的参数也不需要ref;数组是个例外;

飞行棋:画面不停的闪,其实就是不停的重新画的过程;因为要不停得重新的画,所以把它封装成方法;重画的时候只要调用方法就可以了;

Console.Foreground = ConsoleColor.Yellow;

Console.WriteLine("*******************");  //这行输出的是黄色的*

Console.Foreground = ConsoleColor.Red;

Console.WriteLine("*******************");  //这行输出的是红色的*

在游戏里,进入一个场景之前有一个进度条在读取,这个时候是加载地图所需要的资源;

在控制台绘制飞行棋的地图的时候,将整数数组的数字编程控制台中显示的特殊字符串的这个过程,就是初始化地图;

当很多的方法都要用到某个变量的时候,可以把它声明成一个静态的字段来模拟全局变量; static int[] maps = new int[100];

在写飞行棋的时候,由于特殊字符地图是由一个int数组存储,但是有很多不同的特殊字符,方块,幸运盘,五角星等等,我们把幸运盘所在的字符设为1,字符串默认为0的设为方块,这个时候,我们就可以声明几个数组
int[] LuckyTurn = {6,23,40,55,69,83};   maps中索引为这些的画为幸运盘;
int[] LandMine = {2,34,56,77};          maps中索引为这些的画为地雷;
int[] Pause = {23,45,76};               maps中索引为这些的画为暂停;
int[] TimeTunnel = { 20,56,64 };        maps中索引为这些的画为时空隧道;

public static void BiaoJi(int[] nums ,int flag)
{
   for(int i = 0; i<nums.Length;i++)
   {
      maps[nums[i]] = flag;
    }

  //自己写的方法对错未知;给maps赋值;

初始化数组说白了就是给这个地图赋值;

由于图是一横一竖的,因此画图只能一横行,一竖行这样画;

因为有两个玩家,因此声明一个静态数组用来存储玩家A和玩家B的坐标;

static int[] playerpos = new int[2];

public static void DrawMap()
{
   for (int i = 0;i < 30; i++)
   {  
    Console.Write(DrawStringMap(i));    
   }
}//第一横行

为什么关卡不是随机生成的;而是用数组定死的;可能产生6个连续的地雷导致游戏无法玩;

为了使得代码看起来清晰,要使用#region #endregion 折叠代码;

画竖行的时候,用for循环的双重嵌套;

画完第一横行之后应该先换行;

Console.WriteLine();

for(int i = 30 ; i < 35; i++)

{
     for(int j = 0;j < 29; j++)
    {
      Console.Write("  ");
    }
   //每画完一行就要换行;
   Console.Write(DrawStringMap(i));
   Console.WriteLine();   
}  //第一竖行

for(int i = 64;i>=35;i--)
   {
     Console.Write(DrawStringMap(i));
   } //第二横行

   Console.WriteLine();

   for(int i = 65;i<=69;i++)
   {
      Console.WriteLine(DrawStringMap(i));
    } //第二竖行

    for(int i = 70;i<=99;i++)
   {
    Console.Write(DrawStringMap(i));
    } //第三横行;

 

//从画地图的方法中抽离出来的一个方法,因为经常被调用;实现方法的封装;

//如果玩家A和玩家B的坐标相同,并且都在这个地图上,那么画一个尖括号;先上来先画AB,因为AB是时时刻刻在改变其他的;再画关卡;
 public static string DrawStringMap(int i)
 {
     string str = "";
     if(playerpos[0] == playerpos[1]&&playerpos[1]==i)
       {
        str = "<>";   //  <>是半角的,A,B是全角的;控制台上两个半角等于一个全角
        }
       else if(playerpos[0] = i)
       {
         str = "A";          
       }
    else if(playerpos[1] = i)
       {
         str = "B";
       }
       else
       {
          switch(Maps[i])
         {
           case 0;
                  Console.Foreground = ConsoleColor.Yellow;
                  str = "■";
                  break;
           case 1;
                  Console.Foreground = ConsoleColor.Red;
                  str = "○";
                  break;
           case 2;
                  Console.Foreground = ConsoleColor.Green;
                  str = "★";
                  break;
           case 3;
                  Console.Foreground = ConsoleColor.Blue;
                  str = "△";
                  break;
           case 4;
                  Console.Foreground = ConsoleColor.Purple;
                  str = "*";
                  break;
          }
        }
     return  str;
}

以上就三步
1.画游戏头

2.初始化地图  给maps赋值,

3.画游戏地图;写一个统一的打印字符的方法,打印地图;

4.输入姓名;

//存储两个玩家的姓名

static string[] playerName = new string[2];

Console.clear(); 清屏;

如何在控制台复制文本,右键控制台最上角的图标,右键,编辑,标记;选中要复制的文本,按下回车就复制了;

5.正式开始写游戏的精华;

A玩一次B玩一次,如果玩游戏写成方法的话就是A调用一次,B调用一次;这个游戏有一个玩家到了终点就不玩了,他们俩要玩游戏的条件是谁都没到终点;

Console.ReadKey(true);用户按下的键不显示在控制台;

while(playerPos[0]<99 && playerPos[1]<99)
{
 
}

playerPos[0] += 4;让玩家前进四格;

通过Maps[playPos[0]] == 0,1,2,3,4来判断玩家踩到了什么;

switch可以不用default;

把一段代码写成方法的时候,复制过去,看哪些变量下面有红线,就把它传参;

static bool[] Flags = new bool[2];玩家的两个标记,跟暂停有关;

if(PlayerPos[ PlayerNum ] == PlayerPos[ 1 - PlayerNum ])
{
   PlayerPos[ PlayerNum ] -= 6;

}
while(true)
{
  if(input == "1")
  {
      int temp = PlayPos[PlayNumber];
      PlayPos[PlayNumber] =   PlayPos[1-PlayNumber];
       PlayPos[1-PlayNumber] = temp;
    
   }
  .........
}

暂停的话用这些代码来实现;

if(Flags[0] == false)

{

  PlayGames[0];

}

else

{

Flags[0] == true;
}

if(Flags[1] == false)
{
  PlayGames[1];
}
else
{
  Flags[1] == true;
}

15-01-07 C# 面向过程 08

上一篇:C# asp.net PhoneGap html5


下一篇:windows linux 双系统引导修复