⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 business.cs

📁 经典游戏程序设计:visual c++ 上的杀人游戏源代码
💻 CS
📖 第 1 页 / 共 2 页
字号:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;
using Utility;
using System.Data.Linq;
using System.Linq.Expressions;

namespace KillingManager
{
    public static class Business
    {

        #region Logon
        public static void NewServer()
        {
            using (DataMappingDataContext db = new DataMappingDataContext(true))
            {
                var onlinePlayers = from p in db.Users
                        where p.IsOnline == (int)IsOnlineFlag.Online
                        select p;
                
                foreach (var user in onlinePlayers)
                {
                    user.IsOnline = (int)IsOnlineFlag.Offline;
                }

                db.SubmitChanges();
            }
        }
        public static bool Logon(User user)
        {
            using (DataMappingDataContext db = new DataMappingDataContext(true))
            {
                if (db.Users.Where(p => p.UserID == user.UserID).Count() <= 0)
                {
                    if (user.Password != null && user.Password != string.Empty)
                    {
                        user.PlayNum = 0;
                        user.IsOnline = (int)IsOnlineFlag.Online;
                        user.WinNum = 0;
                        db.Users.InsertOnSubmit(user);
                        db.SubmitChanges();
                    }
                }
                else
                {
                    var q = db.Users.Where(p => p.UserID == user.UserID
                        && p.Password == user.Password);
                    if (q.Count() == 1)
                    {
                        User u = q.Single();
                        if (u.IsOnline == (int)IsOnlineFlag.Online)
                        {
                            //player.IsOnline = 2;
                            //throw new Exception("Error, you already logon !!");
                            
                            u.IP = user.IP;
                            db.SubmitChanges();
                        }
                        else
                        {
                            u.IsOnline = (int)IsOnlineFlag.Online;
                            u.IP = user.IP;
                            //p.PlayNum += 1;
                            db.SubmitChanges();
                        }
                    }
                    else
                    {
                        throw new Exception("Error password!!");
                    }
                }
            }
            return true;
        }

        public static void Logoff(User player)
        {
            using (DataMappingDataContext db = new DataMappingDataContext(true))
            {

                var u = db.Users.Single(p1 => p1.UserID == player.UserID);

                if (u.IsOnline == (int)IsOnlineFlag.Online)
                {
                    u.IsOnline = (int)IsOnlineFlag.Offline;
                    u.PlayNum += 1;

                    db.SubmitChanges();
                }
            }
        }

        public static void AllLogoff()
        {
            using (DataMappingDataContext db = new DataMappingDataContext(true))
            {
                var u = from p in db.Users
                              where p.IsOnline == (int)IsOnlineFlag.Online
                              select p;

                foreach (var item in u)
                {
                    item.IsOnline = (int)IsOnlineFlag.Offline;
                    item.PlayNum += 1;
                }
                db.SubmitChanges();
            }
        }
        #endregion

        #region NewGame
        public static Game CreateNewGame(User user, ref Player player)
        {
            using (DataMappingDataContext db = new DataMappingDataContext(true))
            {
                Game game = new Game();
                game.StartTime = DateTime.Now;
                player = new Player();
                player.Game = game;
                player.UserID = user.UserID;
                player.RoleID = (int)RoleFlag.Killer;
                player.IsActive = (int)IsActiveFlag.Active;

                db.Games.InsertOnSubmit(game);
                db.Players.InsertOnSubmit(player);
                db.SubmitChanges();
                return game;
            }
        }

        public static Game CreateNewGame()
        {
            //TODO:
            //CreateGame            
            //Set everone's role
            using (DataMappingDataContext db = new DataMappingDataContext(true))
            {
                User p = db.Users.Where(c => c.IsOnline == (int)IsOnlineFlag.Online)
                    .First();
                Player pInGame = new Player();
                Game game = CreateNewGame(p, ref pInGame);
                
                var q = db.Users.Where(c => c.IsOnline == (int)IsOnlineFlag.Online);
                RoleFlag role = RoleFlag.Civilian;

                foreach (var u in q)
                {
                    if (!object.ReferenceEquals(p, u))
                    {
                        JoinOneGame(u, game, role);
                    }
                }

                return game;
            }
        }

        /// <summary>
        /// Join one game
        /// </summary>
        /// <param name="player"></param>
        /// <param name="game"></param>
        /// <returns></returns>
        public static Player JoinOneGame(User user, Game game, RoleFlag role)
        {
            using (DataMappingDataContext db = new DataMappingDataContext(true))
            {
                Player p = new Player();
                p.GameNo = game.GameNo;
                p.UserID = user.UserID;
                p.RoleID = (int)role;
                p.IsActive = (int)IsActiveFlag.Active;

                db.Players.InsertOnSubmit(p);
                db.SubmitChanges();
                return p;
            }
        }
        #endregion

        #region Activity
        public static Activity CreateNewActivity(Game game)
        {
            using (DataMappingDataContext db = new DataMappingDataContext(true))
            {
                int count = db.Activities.Where(a => a.GameNo == game.GameNo).Count();

                int typeID;
                if (count == 0)
                {
                    typeID = (int)ActivityTypeFlag.Vote;
                }
                else
                {
                    typeID = db.Activities.Where(c => c.ActivityNo ==
                        db.Activities.Where(d => d.GameNo == game.GameNo).Max(a => a.ActivityNo))
                        .Select(c => c.ActivityTypeID).Single();
                    typeID = NextActivity(typeID);
                }

                Activity activity = new Activity();
                activity.GameNo = game.GameNo;
                activity.ActivityTypeID = typeID;
                activity.RoundCount = 1;

                db.Activities.InsertOnSubmit(activity);
                db.SubmitChanges();

                return activity;
            }
        }

        private static int NextActivity(int typeID)
        {
            int returnTypeID;
            switch (typeID)
            {
                case (int)ActivityTypeFlag.Vote:
                    returnTypeID = (int)ActivityTypeFlag.Kill;
                    break;
                case (int)ActivityTypeFlag.Kill:
                    returnTypeID = (int)ActivityTypeFlag.Vote;
                    break;
                default:
                    returnTypeID = (int)ActivityTypeFlag.Vote;
                    break;

            }

            return returnTypeID;
        }
        #endregion


        #region Vote
        public static List<PlayerEntity> Vote(Vote vote, Activity activity)
        {
            using (DataMappingDataContext db = new DataMappingDataContext(true))
            {
                if (db.Votes.Where(v => v.ActivityNo == vote.ActivityNo

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -