天天看点

第五节 C#语言介绍

在C++第九章中,我们介绍了拼字游戏的代码实现,今天我们使用C#语言来实现该游戏。

两种语言的实现代码相似度非常高,只有一些代码的区分,以下来详细介绍。

优先,我们定义游戏九宫格数组,和游戏循环变量,

// 定义九宫格数组
static int[] nineCellArray = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

// 游戏循环标示
static bool loopFlag = true;
           

由于C#的入口函数是静态的,静态函数只能访问静态变量和静态方法,因此我们将游戏数据变量定义为静态,同理其他的方法也都是静态的,这个小小区别不影响我们的主体代码。

// 入口函数
static void Main(string[] args)
{
    startGame();
    loopGame();
    endGame();
}
           

在游戏开始的方法中,我们初始化九宫格数据,使用随机数来打乱数字的顺序。

// 定义游戏开始函数
    static void startGame()
    {
        int range = 8;
        Random rd = new Random();
        // 循环5次进行数组元素交换
        for (int i = 1; i <= 5; i++)
        {
            // 随机两个0-7之间的数字(数组下标值)
            int x = rd.Next(0, range);
            int y = rd.Next(0, range);
            // 根据随机下标交换两个数组元素
            int temp = nineCellArray[x];
            nineCellArray[x] = nineCellArray[y];
            nineCellArray[y] = temp;
        }

        // 输出九宫格
        render();
    }
           

游戏主循环函数,主要就是处理用户输入,并修改九宫格数据。这里要做一个判断,如果用户输入数据正确,则修改九宫格数据,且输出数组到控制台,否则不予处理,也就是保持当前的数组输出。

// 定义游戏循环函数
static void loopGame()
{
    while (loopFlag)
    {
        if (update()) render();
    }
}
           

顺便再说一下游戏结束函数,里面是空的,没有什么具体代码,

// 定义游戏结束函数
static void endGame() { }
           

接下来就是游戏的核心update函数,也就是处理用户的输入,并调整九宫格数组数据。我们逐一来介绍,首先是从控制台获取用户输入的数字键和wasd字母键,

// 获取用户的输入
Console.Write("请输入数字键和wasd方向键:");
String str = Console.ReadLine();
char[] arr = str.ToCharArray();
int number = Convert.ToInt32(new string(arr[0],1));
char direction = arr[1];

// 用户输入检查
if (!(number > 0 && number < 10)) return false;
if (!(direction == 'w' || direction == 'a' || direction == 's' || direction == 'd')) return false;
           

C#的控制台输入和C++的还是有些区别的,我们为了简化用户的操作,使用ReadLine方法,让用户一次性的输入数字键和wasd字母键,然后拆开到number和direction变量中。

交换数组元素,必须知道两个元素的下标。首先,我们先找到number的下标,

// 先找到被移动数字的位置(数组下标)
int oldPos = -1;
for (int i = 0; i < 9; i++)
{
    if (nineCellArray[i] == number)
    {
        oldPos = i;
        break;
    }
}
if (oldPos == -1) return false;
           

这个算法非常的简单,只需要对九宫格数组做一个循环,找到number即可。找到number的数组下标之后,在根据方向键wasd来确定number将要移动到的新位置,由九宫格的排列我们可以大致推算出新位置下标,上下相差3,左右相差1,代码如下:

// 根据位置和移动方向返回新的位置
int newPos = oldPos;
switch (direction)
{
    case 'w': newPos -= 3; break;
    case 'a': newPos -= 1; break;
    case 's': newPos += 3; break;
    case 'd': newPos += 1; break;
    default: newPos = -1; break;
}
           

当然,我们还需要对九宫格的边缘元素做一下判断,也就是说,最上边一行元素不能向上移动,最下边的一行元素不能向下移动,最左边一列元素不能向左移动,最右边一列元素不能向右移动,具体代码如下:

// 最上面一行不能再向上移动了
if (oldPos < 3 && direction == 'w') newPos = -1;

// 最下面一行不能再向下移动了
if (oldPos > 5 && direction == 's') newPos = -1;

// 最左边一行不能再向左移动了
if (oldPos % 3 == 0 && direction == 'a') newPos = -1;

// 最右边一行不能再向右移动了
if ((oldPos + 1) % 3 == 0 && direction == 'd') newPos = -1;

// 获取移动后的新位置
if (newPos == -1) return false;
           

如果用户输入数据没有问题,就可以交换两元素的位置了。

// 交换两个数组元素
int temp = nineCellArray[oldPos];
nineCellArray[oldPos] = nineCellArray[newPos];
nineCellArray[newPos] = temp;

// 返回
return true;
           

这里需要注意的是,update方法的返回值是bool类型,也就是说,返回false代表用户输入数据有问题,返回true代表用户输入数据正确,九宫格数据修改成功,可以更新控制台的九宫格。

最后就是我们的输出函数,除了输出九宫格之外,还要判断游戏是否成功结束。

// 定义游戏界面渲染函数
static void render()
{
        // 输出九宫格
        Console.WriteLine(nineCellArray[0] + "" + nineCellArray[1] + "" + nineCellArray[2]);
        Console.WriteLine(nineCellArray[3] + "" + nineCellArray[4] + "" + nineCellArray[5]);
        Console.WriteLine(nineCellArray[6] + "" + nineCellArray[7] + "" + nineCellArray[8]);
        
        // 判断九宫格顺序
        bool flag = true;
        for (int i = 0; i < 8; i++)
        {
            if (i + 1 != nineCellArray[i])
            {
                flag = false;
                break;
            }
        }

        // 如果顺序正确,则游戏结束
        if (flag)
        {
            loopFlag = false;
            Console.WriteLine("游戏结束");
            Console.ReadKey();
        }
}
           

至此,拼字游戏开发完毕,C#语言的介绍也到此为止。接下来我们将介绍使用C++语言和DirectX来进行游戏的开发!

教学案例源代码下载:

https://download.csdn.net/download/konkon2012/23471862

备注:这是我们游戏开发系列教程的第一个课程,主要是编程语言的基础学习,优先学习C++编程语言,然后进行C#语言,最后才是Java语言,紧接着就是使用C++和DirectX来介绍游戏开发中的一些基础理论知识。我们游戏开发系列教程的第二个课程是Unity游戏引擎的学习。课程中如果有一些错误的地方,请大家留言指正,感激不尽!