zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    【288】◀▶ 博客园黑色代码主题实现
    【287】◀▶ arcpy 常用类说明
    【286】◀▶ Python 内置函数说明
    LeetCode Insert Interval
    Craking the coding interview 面试题:完美随机洗牌
    遭遇多线程bug (1)
    全情投入是做好工作的基础——Leo鉴书39
    《Java 并发编程实战》读书笔记之二:图文讲述同步的另一个重要功能:内存可见性
    视图控制器
    Chapter 1. OpenGL基础回顾
  • 原文地址:https://www.cnblogs.com/hhsfrank/p/4208134.html
Copyright © 2011-2022 走看看