我试图在 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++;
}
}
}
前言:我假设你是相当新的编程-或至少 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。
同样,不要放弃,构建游戏应该很有趣,但它确实需要思考和解决很多问题。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(65条)