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;
}

时间: 2024-10-28 19:38:53

15-01-07 C# 面向过程 08的相关文章

(一)Python入门-6面向对象编程:01面向对象和面向过程区别-对象的进化

面向对象: 面向对象(Object oriented Programming,OOP)编程的思想主要是针对大型 软件设计而来的.面向对象编程使程序的扩展性更强.可读性更好,使的编程可以像搭 积木一样简单. 面向对象编程将数据和操作数据相关的方法封装到对象中,组织代码和数据的方式 更加接近人的思维,从而大大提高了编程的效率. Python完全采用了面向对象的思想,是真正面向对象的编程语言,完全支持面向 对象的基本功能,例如:继承.多态.封装等. Python中,一切皆对象.我们在前面学习的数据类型

【C++系列小结】面向过程的编程风格

前言 编程语言有面向过程和面向对象之分,因此编程风格也有所谓的面向过程的编程和面向对象的编程,而且语言的性质不会限制编程的风格. 这里主要说一下面向过程的编程. "面向过程"(Procedure Oriented)是一种以过程为中心的编程思想. C语言是面向过程的编程语言,但是依然可以写出面向对象的程序,同样C++也当然可以写出面向过程的程序咯. 如果我们把所有的程序代码都写在一个main函数里面,那么这个程序显然会显得很不和谐吧.理想一点的做法是我们把一些看起来和main函数逻辑上关

海涛师兄指的路--指点汇总--各种装逼利器---15.01.27

14.11.10--科学楼226 C primer plus 代码敲两边许英杰老师 ---------------------------- www.gfsoso.com谷粉搜搜正点原子.安富莱(bbs.armfly.com) 资料: 别人的教程:原子的.野火的 user manual(中文用户手册) datasheet -----------------------------------1.stm32启动---->搞懂时钟(1)2.流水灯(1)3.串口.(1)4.stm32+emwin+uc

渐进式编码规范,一步步从面向过程到面向对象

学习js这么久了,一步步见证着自己的成长,看到别的大牛的代码,一步步去完善自己,今天,我就来通过一个简单的实例来记录自己的进步. 通过输入框输入字符串,来显示输入的字符数量. 1.函数式编程(初出新手村)不建议使用 //面向过程的变成方式,不推荐 window.onload=function(){ var $=function(id){ return document.getElementById(id); }; var oInput=$("input_word"); var getN

python/面向过程的编程思想及举例

python基础--面向过程的编程思想及举例 面向过程的编程思想 1.面向过程的编程思想及举例 写程序时: 要先想功能,分步实现 2. os模块中walk输出目录中文件路径 os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下. Send可以传多个值,但是必须是元组类型 面向过程的编程思想 像流水线,代码简洁,体系结构 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

python基础---面向过程编程

面向过程编程 核心是过程二字,过程即解决问题的步骤,基于面向过程去设计程序就像是在设计一条工业流水线,是一种机械式的思维方式 优点:程序结构清晰可以把复杂的问题简单化,流程化 缺点:可扩展性差,一条流线只是用来解决一个问题 应用场景:linux内核,git,httpd,shell脚本 练习:过滤目录下文件内容包含error的文件 grep –rl 'error' /dir 使用os模块walk方法: os.walk会把目录下的二级目录和文件做成一个迭代器,多次使用实现文件路径的拼接 #grep 

PHP中用mysqli面向过程打开连接关闭mysql数据库

代码如下: 1 <meta http-equiv="content-type" content="text/html" charset="utf-8"/> 2 <h1>用mysqli面向过程方法连接数据库!-姚远的博客</h1> 3 <form method="POST" action="<?php echo iconv("GB2312","

大话JS面向对象之扩展篇 面向对象与面向过程之间的博弈论(OO Vs 过程)------(一个简单的实例引发的沉思)

一,总体概要 1,笔者浅谈 我是从学习Java编程开始接触OOP(面向对象编程),刚开始使用Java编写程序的时候感觉很别扭(面向对象式编程因为引入了类.对象.实例等概念,非常贴合人类对于世间万物的认知方式和思考方式.对于复杂的事物,人类是如何去认识.归纳.总结的?面向对象式编程就是在努力回答这个问题,而答案的核心就是两个字:抽象.所以面向对象式编程特别适合处理业务逻辑,因此被广泛应用于目前的软件开发当中.因为我们开发软件就是为了解决问题,面向对象式编程符合人类对于“问题”的认知方式),因为我早

3 面向过程与面向对象进一步比较

编程范式 编程即写程序or写代码,具体是指程序员用特定的语法+数据结构+算法编写代码,目的是用来告诉计算机如何执行任务 . 如果把编程的过程比喻为练习武功,那么编程范式指的就是武林中的各种流派,而在编程的世界里最常见的两大流派便是:面向过程与面向对象. "功夫的流派没有高低之分,只有习武的人才有高低之分",在编程世界里更是这样,面向过程与面向对象在不同的场景下都各有优劣,谁好谁坏不能一概而论,下面就让我们来详细了解它们. 面向过程的程序设计 概念: 核心是"过程"二