Example #1
0
        private static void On_Tick(object sender, TickEventArgs args)
        {
            GameClock gameClock = null;
            if (sender is GameClock)
                gameClock = (GameClock)sender;

            if (gameClock != null)
            {

                //Update all players
                foreach (Player p in Players.Values)
                {
                    p.Do_Tick(gameClock);
                }

                //After all players have updated, write it to the DB
                foreach (Player p in Players.Values)
                {
                    p.Save_Database_Values();
                }
            }
            else
            {
                //todo: handle error here, something invoked the tick that was not a gameclock
            }
            //TODO Back up Database file
        }
Example #2
0
        public static void Initialize(GameClock gameClock)
        {
            gameClock.TickEvent += new GameClock.TickHandler(On_Tick);
            PlayerManager.gameClock = gameClock;

            Query query = new Query("select * from Player");

            foreach (DataRow player_row in query.result.Tables[0].Rows)
            {
                Players.Add(player_row["user_name"].ToString(), new Player(player_row["user_name"].ToString(), PlayerManager.gameClock));
            }

            MainForm.Log("PlayerManager Initialized");
        }
Example #3
0
        public MainForm()
        {
            InitializeComponent();

            Log("Welcome to Entropy. Enjoy your stay.");

            this.gameClock = new GameClock(TimeSpan.FromSeconds(5.0D));
            this.gameClock.TickEvent += new GameClock.TickHandler(gameClock_TickEvent);
            this.gameClock.Start();
            ConnectionManager.Initialize( this.gameClock, 8080 );
            PlayerManager.Initialize(this.gameClock);

            MainForm.Log("Entropy Must Increase");
            outputTickStamp(0);
        }
Example #4
0
        private string user_name; //SQL 100 chars

        #endregion Fields

        #region Constructors

        public Player(string user_name, GameClock gameClock)
        {
            this.user_name = user_name;

            //Populate all player data

            Load_Database_Values();
            Compute_Credits(gameClock);
            Compute_Research(gameClock);
            Compute_Ship_Pop(gameClock);
            Compute_Scores(gameClock);
        }
Example #5
0
        private void Compute_Ship_Pop(GameClock gameClock)
        {
            ship_pop_cap = TechManager.Tech_Mod(TECH_TYPE.TECH_BASE_FLEET_CAP, tech_base_fleet_cap);

            //Ship Count
            for (int ship_type = 0; ship_type < (int)SHIP_TYPE.SHIP_LAST_SHIP; ship_type++)
            {
                ship_pop_used += Ships_Attacking[(SHIP_TYPE)ship_type];
                ship_pop_used += Ships_Defending[(SHIP_TYPE)ship_type];
            }

            if (ship_pop_used > ship_pop_cap)
            {
                MainForm.Log("Player " + user_name + " has " + ship_pop_used + " ships when their cap is " + ship_pop_cap);
            }
        }
Example #6
0
        //TODO Notifications for completed actions
        private void Process_Actions(GameClock gameClock)
        {
            //Attack Slot
            if (gameClock.CurrentTick == action_attack.End_Tick)
            {
                Do_Combat(action_attack);
            }

            //Ship Slot
            if (gameClock.CurrentTick == action_build_ship.End_Tick)
            {
                SHIP_TYPE ship_type = (SHIP_TYPE)action_build_ship.Param;

                this.Ships_Defending[ship_type]++;
            }

            //Structure Slot
            if (gameClock.CurrentTick == action_build_struct.End_Tick)
            {
                if (this.action_build_struct.Type == PLAYER_ACTION.ACTION_BUILD_STRUCTURE)
                {
                    STRUCTURE_TYPE structure_type = (STRUCTURE_TYPE)action_build_ship.Param;

                    this.Structures[structure_type]++;
                }
                else if (this.action_build_struct.Type == PLAYER_ACTION.ACTION_SELL_STRUCTURE)
                {
                    STRUCTURE_TYPE structure_type = (STRUCTURE_TYPE)action_build_ship.Param;

                    this.Structures[structure_type]--;

                    //Refund some cash on completed sell
                    credits_current += GameManager.Structure_Templates[structure_type].Cost / SELL_DIVISOR;
                }

            }

            //Research Slot
            if (gameClock.CurrentTick == action_research.End_Tick)
            {
                TECH_TYPE tech_type = (TECH_TYPE)action_research.Param;
                //TODO Cap at max tier
                switch (tech_type)
                {
                    case TECH_TYPE.TECH_SHIP_WEAPONS:
                        tech_ship_weapons++;
                        break;

                    case TECH_TYPE.TECH_SHIP_HP:
                        tech_ship_hp++;
                        break;

                    case TECH_TYPE.TECH_SHIP_ENGINE:
                        tech_ship_engine++;
                        break;

                    case TECH_TYPE.TECH_SHIP_STEALTH:
                        tech_ship_stealth++;
                        break;

                    case TECH_TYPE.TECH_STRUCT_WEAPONS:
                        tech_struct_weapons++;
                        break;

                    case TECH_TYPE.TECH_STRUCT_HP:
                        tech_struct_hp++;
                        break;

                    case TECH_TYPE.TECH_STRUCT_ECON:
                        tech_struct_econ++;
                        break;

                    case TECH_TYPE.TECH_STRUCT_RESEARCH:
                        tech_struct_research++;
                        break;

                    case TECH_TYPE.TECH_CONSTRUCT_SPEED:
                        tech_construct_speed++;
                        break;

                    case TECH_TYPE.TECH_BASE_SENSORS:
                        tech_base_sensors++;
                        break;

                    case TECH_TYPE.TECH_BASE_FLEET_CAP:
                        tech_base_fleet_cap++;
                        break;

                    case TECH_TYPE.TECH_BASE_ASTEROID_CAP:
                        tech_base_asteroid_cap++;
                        break;

                    default:
                        MainForm.Log("Error! Player " + user_name + " researched an impossible tech: " + tech_type);
                        break;
                }
            }

            //Diplomacy Slot
            if (gameClock.CurrentTick == action_diplomacy.End_Tick)
            {
                //Diplomacy on self = "Optimize Planetary Trade"
                if (action_diplomacy.Target_Player_Name == user_name)
                {
                    credits_current += Score_Diplomacy / TRADE_DIVISOR;
                }
                else
                {
                    //TODO Do Sabotage!
                }
            }

            //Direct Slot
            if (gameClock.CurrentTick == action_direct.End_Tick)
            {
                credits_current += Score_Overall / DIRECT_DIVISOR;
            }
        }
Example #7
0
        private void Compute_Research(GameClock gameClock)
        {
            research_per_tick = base_research;

            //Structure Research
            for (int structure_type = 0; structure_type < (int)STRUCTURE_TYPE.STRUCT_LAST_STRUCT; structure_type++)
            {
                research_per_tick += Structures[(STRUCTURE_TYPE)structure_type] * (GameManager.Structure_Templates[(STRUCTURE_TYPE)structure_type].Bonus_Tech * TechManager.Tech_Mod(TECH_TYPE.TECH_STRUCT_RESEARCH, tech_struct_research));
            }

            //Ship Research
            for (int ship_type = 0; ship_type < (int)SHIP_TYPE.SHIP_LAST_SHIP; ship_type++)
            {
                research_per_tick += Ships_Attacking[(SHIP_TYPE)ship_type] * (GameManager.Ship_Templates[(SHIP_TYPE)ship_type].Bonus_Tech);
            }
        }
Example #8
0
        private void Compute_Credits(GameClock gameClock)
        {
            credits_per_tick_gross = base_econ;

            //Structure Income
            for (int structure_type = 0; structure_type < (int)STRUCTURE_TYPE.STRUCT_LAST_STRUCT; structure_type++)
            {
                credits_per_tick_gross += Structures[(STRUCTURE_TYPE)structure_type] * (GameManager.Structure_Templates[(STRUCTURE_TYPE)structure_type].Bonus_Econ * TechManager.Tech_Mod(TECH_TYPE.TECH_STRUCT_ECON, tech_struct_econ));
            }

            //Ship Income
            for (int ship_type = 0; ship_type < (int)SHIP_TYPE.SHIP_LAST_SHIP; ship_type++)
            {
                credits_per_tick_gross += Ships_Attacking[(SHIP_TYPE)ship_type] * (GameManager.Ship_Templates[(SHIP_TYPE)ship_type].Bonus_Econ);
            }

            credits_per_tick_net = credits_per_tick_gross;

            //Structure Upkeep
            for (int structure_type = 0; structure_type < (int)STRUCTURE_TYPE.STRUCT_LAST_STRUCT; structure_type++)
            {
                credits_per_tick_net -= Structures[(STRUCTURE_TYPE)structure_type] * (GameManager.Structure_Templates[(STRUCTURE_TYPE)structure_type].Upkeep);
            }

            //Ship Upkeep
            for (int ship_type = 0; ship_type < (int)SHIP_TYPE.SHIP_LAST_SHIP; ship_type++)
            {
                credits_per_tick_net -= Ships_Attacking[(SHIP_TYPE)ship_type] * (GameManager.Ship_Templates[(SHIP_TYPE)ship_type].Upkeep);
            }
        }
Example #9
0
        private void Compute_Build_Slots(GameClock gameClock)
        {
            build_slots_cap = base_build_slots;
            asteroids_cap = TechManager.Tech_Mod(TECH_TYPE.TECH_BASE_ASTEROID_CAP, tech_base_asteroid_cap);

            //Asteroid slots
            for (int asteroid_type = 0; asteroid_type < (int)SHIP_TYPE.SHIP_LAST_SHIP; asteroid_type++)
            {
                build_slots_cap += Asteroids[(ASTEROID_SIZE)asteroid_type] * GameManager.Asteroid_Templates[(ASTEROID_SIZE)asteroid_type].Slots;
                asteroids_used += Asteroids[(ASTEROID_SIZE)asteroid_type];
            }

            //Structures used
            for (int structure_type = 0; structure_type < (int)STRUCTURE_TYPE.STRUCT_LAST_STRUCT; structure_type++)
            {
                build_slots_used += Structures[(STRUCTURE_TYPE)structure_type];
            }

            if (build_slots_used > build_slots_cap)
            {
                MainForm.Log("Player " + user_name + " has " + build_slots_used + " structures when their cap is " + build_slots_cap);
            }

            if (asteroids_used > asteroids_cap)
            {
                MainForm.Log("Player " + user_name + " has " + asteroids_used + " asteroids when their cap is " + asteroids_cap);
            }
        }
Example #10
0
        public void Do_Tick(GameClock gameClock)
        {
            Process_Actions(gameClock);
            Compute_Credits(gameClock);
            Compute_Research(gameClock);
            Compute_Ship_Pop(gameClock);

            credits_current += credits_per_tick_net;

            Compute_Scores(gameClock);
        }
Example #11
0
        public void Compute_Scores(GameClock gameClock)
        {
            Score_Overall = 0;
            Score_Combat = 0;
            Score_Diplomacy = 0;
            Score_Econ = 0;
            Score_Tech = 0;

            //Ship Scores
            for (int ship_type = 0; ship_type < (int)SHIP_TYPE.SHIP_LAST_SHIP; ship_type++)
            {
                Score_Combat += Ships_Attacking[(SHIP_TYPE)ship_type] * ((GameManager.Ship_Templates[(SHIP_TYPE)ship_type].Combat_Rating) * TechManager.Tech_Mod(TECH_TYPE.TECH_SHIP_WEAPONS, tech_ship_weapons));
                Score_Combat += Ships_Defending[(SHIP_TYPE)ship_type] * ((GameManager.Ship_Templates[(SHIP_TYPE)ship_type].Combat_Rating) * TechManager.Tech_Mod(TECH_TYPE.TECH_SHIP_WEAPONS, tech_ship_weapons));

                Score_Diplomacy += Ships_Attacking[(SHIP_TYPE)ship_type] * (GameManager.Ship_Templates[(SHIP_TYPE)ship_type].Bonus_Diplomacy);
                Score_Diplomacy += Ships_Defending[(SHIP_TYPE)ship_type] * (GameManager.Ship_Templates[(SHIP_TYPE)ship_type].Bonus_Diplomacy);

                Score_Econ += Ships_Attacking[(SHIP_TYPE)ship_type] * (GameManager.Ship_Templates[(SHIP_TYPE)ship_type].Bonus_Econ);
                Score_Econ += Ships_Defending[(SHIP_TYPE)ship_type] * (GameManager.Ship_Templates[(SHIP_TYPE)ship_type].Bonus_Econ);

                Score_Tech += Ships_Attacking[(SHIP_TYPE)ship_type] * (GameManager.Ship_Templates[(SHIP_TYPE)ship_type].Bonus_Tech);
                Score_Tech += Ships_Defending[(SHIP_TYPE)ship_type] * (GameManager.Ship_Templates[(SHIP_TYPE)ship_type].Bonus_Tech);
            }

            //Structure Scres
            for (int structure_type = 0; structure_type < (int)STRUCTURE_TYPE.STRUCT_LAST_STRUCT; structure_type++)
            {
                Score_Combat += Structures[(STRUCTURE_TYPE)structure_type] * ((GameManager.Structure_Templates[(STRUCTURE_TYPE)structure_type].Bonus_Combat) * TechManager.Tech_Mod(TECH_TYPE.TECH_STRUCT_WEAPONS, tech_struct_weapons));

                Score_Diplomacy += Structures[(STRUCTURE_TYPE)structure_type] * ((GameManager.Structure_Templates[(STRUCTURE_TYPE)structure_type].Bonus_Diplomacy) * TechManager.Tech_Mod(TECH_TYPE.TECH_STRUCT_DIPLOMACY, tech_struct_diplomacy));

                Score_Econ += Structures[(STRUCTURE_TYPE)structure_type] * ((GameManager.Structure_Templates[(STRUCTURE_TYPE)structure_type].Bonus_Econ) * TechManager.Tech_Mod(TECH_TYPE.TECH_STRUCT_ECON, tech_struct_econ));

                Score_Tech += Structures[(STRUCTURE_TYPE)structure_type] * ((GameManager.Structure_Templates[(STRUCTURE_TYPE)structure_type].Bonus_Tech) * TechManager.Tech_Mod(TECH_TYPE.TECH_STRUCT_RESEARCH, tech_struct_research));
            }

            Score_Overall = Score_Combat + Score_Diplomacy + Score_Econ + Score_Tech;
        }