C语言进阶必看的书籍:如何用 c#语言做一个棒球跑者进阶的代码(需要帮助)

关于C语言进阶必看的书籍的问题,在learn to code with baseball中经常遇到, 我试图在 Unity 中创建一个基于短信的棒球应用程序。我想要一个 C # unity 函数在我的小编码中正在这样做。我有 2 个可变的击球手和跑步者。我希望他们根据我给击球手和跑步者的变量来运行。所以我也有 1 号到 9 号棒球运动员一个接一个地来到盘子。

我试图在 Unity 中创建一个基于短信的棒球应用程序。我想要一个 C # unity 函数在我的小编码中正在这样做。我有 2 个可变的击球手和跑步者。我希望他们根据我给击球手和跑步者的变量来运行。所以我也有 1 号到 9 号棒球运动员一个接一个地来到盘子。

所以让我们说击球手 4 击球并跑 2 个基地,这意味着所有在基地上的球员也必须前进。

所以我的问题是,让所有这些玩家运行的代码是什么,而且,我必须知道他们的号码,这意味着玩家 4 在 2b 上,玩家 3 在第 3 基地,玩家 1 回家例如。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class runners : MonoBehaviour
{
    public string ison1b = "0";
    public string ison2b = "0";
    public string ison3b = "0";
    public string wason1b = "0";
    public string wason2b = "0";
    public string wason3b = "0";
    public string scorehome = "0";
    public string player = "0";
    public int playerlineup = 0;
    public string bases = "0";
    public int runnerbase = 0;
    public int rbiThisInning = 0;
    // Calculating whos at bat!
    string atbat()
    {
        switch (playerlineup)
        {
            case 1:
                player = "1";
                break;
            case 2:
                player = "2";
                break;
            case 3:
                player = "3";
                break;
            case 4:
                player = "4";
                break;
            case 5:
                player = "5";
                break;
            case 6:
                player = "6";
                break;
            case 7:
                player = "7";
                break;
            case 8:
                player = "8";
                break;
            case 9:
                player = "9";
                break;
        }
        return player;
    }
    public void atbatrunners()
    {
    int hitters = 8;
        int i = 1;
        while (i <= hitters)
        {
            if (playerlineup > 9)
            {
                playerlineup = 1;
            }
            else
            {
                playerlineup = (playerlineup + 1);
            }
            string[,] playeronbases = new string[4,4];
            playeronbases[0, 0] = playerlineup.ToString();
            playeronbases[0, 1] = "0";
        }
            Debug.Log("At bat player No: " + atbat() + " hit a single!!");
            Debug.Log("Runner on 1B= " + ison1b + ", 2B= " + ison2b + ", 3B= " + ison3b + ", Runner to home= " + scorehome);
            Debug.Log("Total RBI this inning= " + rbiThisInning);
           
            //Debug.Log(outsAmount());
            i++;
        }
        
    }
}
2

前言:我假设你是相当新的编程-或至少 C #-基于你对这个问题的方法,这没关系;请不要误认为这是屈尊。

模拟您的游戏 & amp;找出游戏的时间步长

从您的代码和问题摘要中可以看出您是否考虑了游戏中的时间步长。这很重要,因为它会影响玩家“运行”基础的方式。退后一步:

计算机“游戏 / 模拟器”可以采用许多不同的方法进行模拟,因此了解游戏的方法非常重要。例如,有实时方法(现实生活中的一秒是场上的一秒),或者是基于步骤的方法,其中事情发生的时间更长:每个步骤可能代表击球玩家的一个挥杆动作,或者每个步骤可以模拟整个回合。

要了解为什么这很重要,如果采用每次挥杆 1 步的方法,则在该步骤中,偷垒的球员只有一次机会发生,而在击球手中,每击球手一步,偷垒的球员将有与击球手在球上无犯规挥杆的机会一样多的机会。如果您采用实时方法,则需要在防守和奔跑的球员的位置,速度之前跟踪每个防守球员,

这最后一种方法将使玩家从一个基地过渡到另一个基地,但是由于这是一个基于文本的游戏,所以我想您的目标是在每个蝙蝠玩家之后更新整个游戏状态,然后显示该状态。即使在这种情况下,也有很多选择:您是否只需要权衡玩家到达下一个基地的能力与防守玩家的防守能力,还是每个玩家或多或少都有成功或失败的机会?

如何让玩家晋级下一垒

最简单的情况

现在让我们从最简单的情况开始:假设击球手击球并移动到 1st。

string playerAtBat = atbat();
while(IsPlayerOut(playerAtBat) == false) {
  if (DidPlayerHitARun(playerAtBat)) {
    if (IsPlayerSafe(playerAtBat)) {
      ison1b = playerAtBat;
    }
    else {
      // Handle out player, e.g. increment number of outs
    }
  }
}

现在,这里缺少几个大的部分:IsPlayerOut()DidPlayerHitARun()IsPlayerSafe()。我想提请您注意IsPlayerSafe()。这将是一个接受玩家字符串的函数,当玩家安全地将其设置为基础时返回 true,或者当他没有设置为 false 时返回 false。上面提到的几个段落将指定您如何使用此函数的逻辑。

其他基地重复

让玩家移动基地将是简单的添加到他们的字符串到下一个基地(说,第三),并从以前的基地删除它们,例如:

isOn3b = playerString;
isOn2b = "";

正如你可能想象的那样,从 Home 返回到 3rd 到 2nd 到 1st 基地(即在 2nd 的玩家之前移动玩家,等等)将确保以下先前的基地被清除为他们后面的玩家。

最后的想法

老实说,您所采用的方法将很难完成有效的棒球模拟,但是我鼓励您坚持使用它,并从制作完整的游戏中学习一切。当您从错误中吸取教训并弄清楚自己可以做得更好之后,真正的改进就来了。

作为替代方案,我强烈建议您尝试 Unity 的 Create with Code 系列教程。这将帮助您快速建立组装一些工作游戏的技能,并且适合新编码和 / 或新 Unity 的人:https://learn.unity.com/course/create-with-code?uv=2018.4

本教程(我自己做的)将让您构建五个受移动启发的游戏,每个游戏都基于新概念,以及您自己设计的(简单)游戏。

奖金:如何编写一个功能游戏循环

在我上面的原始帖子中,我讨论了游戏的“时间步骤”,现在是时候将其构建到您的游戏中了。这种方法更多的是函数式编程方法,因此对于那些想要使用面向对象方法或实体组件方法的人,请采纳这个想法并将其转化为您想要的方法。

首先,我们需要找出导致循环开始和结束的原因,并且如前所述,游戏有很多不同的方式来做到这一点。

实时:每个循环尽可能快地运行,或者可能等待监视器发出完成屏幕刷新的信号。

基于步骤的固定速率:这与之前类似,只是每个循环发生的时间更长,因此游戏以开发人员想要的速度而不是全速进行更新。例如,您可能希望游戏每两秒或五秒钟更新一次。

输入驱动:当用户执行一个动作(按下一个键)时,游戏处理该输入,模拟对该输入的响应。

因为我不确定你如何想象你的游戏,让我们从两秒的固定速率开始。

幸运的是,UnityMonoBehavior为我们处理了很多这样的事情,您创建的每个具有 MonoBehavior 的类都有一个 OnUpdate()函数,该函数被称为每个绘制的帧,如我们在 Real-Time 示例中所述。

但是,我们将根据我们不太频繁的更新需求进行调整:

class GameLoop : MonoBehavior {
  public float updateDelayInSeconds;
  float nextUpdate = float.NegativeInfinity;
  void OnUpdate() {
    if (IsTimeToUpdate()) {
      GameLoopUpdate();
    }
  }
  bool IsTimeToUpdate() {
    if (Time.time >= nextUpdate) {
      nextUpdate = Time.time + updateDelayInSeconds;
      return true;
    }
    return false;
  }
  void GameLoopUpdate() {
    ...
  }
}

现在,在 GameLoopUpdate()中,你可以调用你已经创建的逻辑来模拟你的棒球比赛。如果你决定改变游戏的更新方式,你可以重写 IsTimeToUpdate()只在用户按下一个键时返回 true,或者当任何“事件”导致你的下一个模拟步骤发生时返回 true。

同样,不要放弃,构建游戏应该很有趣,但它确实需要思考和解决很多问题。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(298)
Crc是什么职业:循环冗余校验(CRC)中的冗余是什么
上一篇
5 m 1 e:数字格式 写1e-5而不是0.00001(4000 in scientific notation)
下一篇

相关推荐

  • cvt和自动挡哪个好提升驾驶体验的最佳选择

    CVT(可变转换器)是一种由传动带及传动轮组成的无级变速器,它可以在没有传动档位的情况下,根据驾驶者的驾驶习惯,自动调整传动轮之间的转速比,从而实现无级变速。自动挡是指车辆自动变速箱,它使用液力传动来实现变速,可以自动适应车辆的行驶状态,减少司机的疲劳,提高行车的舒适性。…

    2023-06-08 07:42:19
    0 99 81
  • cv一叶扁舟和清影轩阳:漫游在一叶扁舟和清影轩阳之间

    cv一叶扁舟是一款开源的计算机视觉库,用于图像处理、计算机视觉等。它提供了丰富的API,可以帮助开发者快速实现各种图像处理任务,如图像分割、目标检测、图像识别等。清影轩阳是一款开源的计算机视觉框架,用于图像处理、目标检测、分类等。它提供了丰富的API,可以帮助开发者快速实现各种图像处理任务,如图像分割、目标检测、图像识别等。…

    2023-08-05 07:06:20
    0 76 34
  • css设置滚动条宽度设置:This is a title

    CSS设置滚动条宽度的方法:使用CSS3的。-webkit-属性:…

    2023-06-06 10:53:01
    0 22 44
  • xl和xe汽车cvt:探索XL和XE汽车的CVT技术优势

    XL和XE汽车CVT是一种变速器,它使用液力变矩器代替传统的机械变速器,以达到更高的效率。它的工作原理是,当发动机输出功率时,液力变矩器就会将这些功率转换为液压能量,然后将能量传递到变速器的输出轴上,从而实现变速。…

    2023-04-09 00:41:04
    0 64 76
  • cordon bleu是什么意思:法式炸鸡卷——Cordon Bleu的经典之作

    Cordon Bleu是一种烹饪技术,其中肉片被置于奶酪和火腿之间,然后用面包屑裹上,最后煎炸或烤熟。这种技术通常用于制作鸡肉,但也可以用于制作其他类型的肉类,如牛肉或猪肉。…

    2024-01-27 15:13:30
    0 27 78
  • countif 非空:非空单元格的计数

    Countif 非空是指计算某个单元格不为空的数量。代码如下:…

    2023-04-22 15:54:15
    0 21 74
  • java double保留一位小数:How to Round a Double to One Decimal Place in

    示例示例使用类可以轻松实现java double保留一位小数的功能,具体代码如下:// 创建对象…

    2023-05-14 07:40:03
    0 51 80
  • linux如何写c语言一个完整的指南

    示例示例在Linux系统中,可以使用C语言编写源代码文件,然后使用GCC编译器来编译源代码文件,生成可执行文件。下面是一个简单的C语言代码示例:…

    2023-05-16 02:02:45
    0 82 22

发表评论

登录 后才能评论

评论列表(65条)