如何从一个函数中获取局部变量并将其用于我的代码中的不同函数?

时间:2015-05-24 04:17:42

标签: c# variables

我正在制作老虎机,我希望betValidation()中的var'bet'可以在result()函数中使用。我的目标是如果在firstRandomNumberGenerator()中生成的两个随机数是相同的,则玩家下注的赌注将增加三倍并且将被添加回他当前的筹码数量。 ):但为了做到这一点,我需要下注(一个局部变量)并将其放在result()但我不知道如何。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace randomProjectTAKE3
{

    class Program

    {

        static void Main()
        {
            float playerChips = 1000;

            Console.Write("Player's Chips: ");
            Console.WriteLine(playerChips);

            Console.Write("1. Play Slot  ");
            Console.WriteLine("2. Exit");

            choice();
            result();

            Console.ReadKey();
        }


        static void Update()
        {
        }

        static void choice()
        {
            float choice = float.Parse(Console.ReadLine());

            if (choice == 1)
            {
                firstRandomNumberGenerator();
            }

            else if (choice == 2)
            {
                return;
            }
        }

        static void betValidation()
        {
            float playerChips = 1000;
            float currentPlayerChips;

            Console.WriteLine("Enter your bet: ");
            **var bet = float.Parse(Console.ReadLine());**

            if ((bet <= 0) || (bet > playerChips))
            {
                Console.WriteLine("You did not enter a valid bet.\n");
                Main();
            }
        }

        static void firstRandomNumberGenerator()
        {

            betValidation();


            Random r = new Random();
            int firstNumber = r.Next(2, 8);
            int secondNumber = r.Next(2, 8);
            int thirdNumber = r.Next(2, 8);

            Console.Write(firstNumber);
            Console.Write(secondNumber);
            Console.Write(thirdNumber);
            Console.Write("\n");

        }

        **static void result()**
        {

        }

    }
}

3 个答案:

答案 0 :(得分:0)

有几种方法可以实现这一点,一种方法是将赌注作为一个字段移动到程序的范围内(名称_currentBet会很有用),而不是在函数中声明,因此它可以被引用为根据需要多次。

然后当玩家下注时,你可以解析并分配给变量。对于你的玩家的筹码来说,这也是理想的选择。

class Program
{
private float _playersChips = 1000;
private float _currentBet;

static void Main()
{
//So on and so forth.
}
}

答案 1 :(得分:0)

我唯一的想法是将变量By Reference从方法传递给另一个方法, 检查此link

答案 2 :(得分:0)

哇,好的......你熟悉Global Variables吗?

查看您的代码,您正在以procedural(而非object-oriented)样式编写控制台应用程序......虽然这可以在C#中完成,但对于大型应用程序,它可以使代码维护很头疼。

无论如何,我会尽力帮助你......

Miles的答案基本上是使用全局变量而不是本地变量,这在以程序样式编程时是一个很好的建议,但是,另一个选择是让playerChips成为reference method parameter(如Hussein所建议的那样) )可以在方法之间传递(和修改)...所以(使用他们的两个建议)你的代码将改变为如下工作:

class Program
{
    public static float _playerChips = 1000;

    private static void Main()
    {            
        Console.Write("Player's Chips: ");

        Console.WriteLine(_playerChips);
        Console.Write("1. Play Slot  ");
        Console.WriteLine("2. Exit");

        choice(ref _playerChips);
        result(_playerChips);

        Console.ReadKey();
    }

    private static void choice(ref float playerChips)
    {
        int choice = int.Parse(Console.ReadLine());

        if (choice == 1)
        {
            firstRandomNumberGenerator(ref playerChips);
        }

        if (choice == 2)
            Environment.Exit(0);
    }

    private static void betValidation(ref float playerChips, ref float bet)
    {                        

        Console.WriteLine("Enter your bet: ");
        bet = float.Parse(Console.ReadLine());

        if ((bet <= 0) || (bet > playerChips))
        {
            Console.WriteLine("You did not enter a valid bet.\n");
            Main();
        }
    }

    private static void firstRandomNumberGenerator(ref float playerChips)
    {
        float bet = 0;
        betValidation(ref playerChips, ref bet);

        System.Random r = new System.Random();

        int firstNumber = r.Next(2, 8);
        int secondNumber = r.Next(2, 8);
        int thirdNumber = r.Next(2, 8);

        if (firstNumber == secondNumber || firstNumber == thirdNumber || thirdNumber == secondNumber)
            playerChips = playerChips + (bet * 3);

        Console.Write(firstNumber);
        Console.Write(secondNumber);
        Console.Write(thirdNumber);
        Console.Write("\n");
    }

    private static void Update()
    {
        return;
    }

    private static void result(float playerChips)
    {
        return;
    }
}

现在,我还改变了你编写的 choice()方法来调用Environment.Exit()并退出程序 - 原因是,通过执行Main()你就是本质上调用方法中方法中的方法并增加stack最终将导致Stack Overflow ...我会考虑更改Main()方法以使用基于choice()返回结果的循环而不是再次从betValidation方法调用Main()(但我没有为你做这个)。