ADO.Net(五)——實戰:對戰游戲

来源:http://www.cnblogs.com/H2921306656/archive/2016/08/26/5810848.html
-Advertisement-
Play Games

對戰游戲 要求: 數據連接類: 實體類: namespace ConsoleApplication1 { public class Player { private string name; //玩家姓名 public string Name { get { return name; } set { ...


對戰游戲

要求:

  1. 自建數據表(例如:數據表包含:代號,姓名,性別,血量,攻擊力,防禦力,命中,閃避,等級等欄位)
  2. 需要通過程式向數據表添加人員
  3. 添加的時候,根據用戶輸入的名字,自動計算生成相應的血量、攻擊力、防禦力等(例如,名字的前兩個字作為種子生成血量,名字的第一個字作為種子生成攻擊力,名字的第二個字作為種子生成防禦力等)
  4. 添加完成用戶可以輸入兩個用戶進行對戰
  5. 通過程式邏輯實現對戰雙方的血量變化並顯示(使用隨機數浮動攻擊防禦)
  6. 最終血量先到達0的失敗,勝利的一方屬性增加(比如等級level加1,血量加一些,攻擊力加一些等)
  7. 訪問資料庫採用三個類的模式

數據連接類:

namespace ConsoleApplication1
{
    public class DBConnect
    {
        private static string connstring = System.Configuration.ConfigurationSettings.AppSettings["connstring"];
        public static SqlConnection Conn
        {
            get
            {
                return new SqlConnection(connstring);
            }
        }
    }
}

實體類:

namespace ConsoleApplication1
{
    public class Player
    {
        private string name;
        //玩家姓名
        public string Name     
        {
            get { return name; }
            set { name = value; }
        }
        private bool sex;
        //玩家性別
        public bool Sex
        {
            get { return sex; }
            set { sex = value; }
        }
        private int lev;
        //玩家等級
        public int Lev
        {
            get { return lev; }
            set { lev = value; }
        }
        private int blood;
        //血量
        public int Blood
        {
            get { return blood; }
            set { blood = value; }
        }
        private int attack;
        //攻擊
        public int Attack
        {
            get { return attack; }
            set { attack = value; }
        }
        private int defense;
        //防禦
        public int Defense
        {
            get { return defense; }
            set { defense = value; }
        }
        private int hit;
        //命中
        public int Hit
        {
            get { return hit; }
            set { hit = value; }
        }
        private int dodge;
        //閃避
        public int Dodge
        {
            get { return dodge; }
            set { dodge = value; }
        }
    }
}
View Code

數據訪問類:

namespace ConsoleApplication1
{
    public class PlayerDA
    {
        private SqlConnection _conn;
        private SqlCommand _cmd;
        private SqlDataReader _dr;
        public PlayerDA()
        {
            _conn = DBConnect.Conn;
            _cmd = _conn.CreateCommand();
        }
        //添加人員
        public bool AddPlayer(string name_p, bool sex_p)
        {
            //初始屬性
            Player p = new Player();
            int seed = (int)Convert.ToChar(name_p.Substring(0, 1)) + (int)Convert.ToChar(name_p.Substring(1, 1));
            Random rand = new Random(seed);
            p.Lev = 1;
            p.Blood = 1500 + rand.Next(1000);
            p.Attack = 100 + rand.Next(100);
            p.Defense = 10 + rand.Next(100);
            p.Hit = 50 + rand.Next(80);
            p.Dodge = 10 + rand.Next(80);
            //添加
            _cmd.CommandText = "insert into Player values(@name,@sex," + p.Lev + "," + p.Blood + "," + p.Attack + "," + p.Defense + "," + p.Hit + "," + p.Dodge+ ")";
            _cmd.Parameters.Clear();
            _cmd.Parameters.AddWithValue("@name", name_p);
            _cmd.Parameters.AddWithValue("@sex", sex_p);
            _conn.Open();
            int add = _cmd.ExecuteNonQuery();
            _conn.Close();
            if (add > 0)
            {
                return true ;
            }
            else
            {
                return false; 
            }
        }
        //查詢
        public  List<Player> Select(string name_p)
        {
            _cmd.CommandText = "select *from Player where Name=@name";
            _cmd.Parameters.Clear();
            _cmd.Parameters.AddWithValue("@name", name_p);
            _conn.Open();
            _dr = _cmd.ExecuteReader();         
            List<Player> list = new List<Player>();
            if (_dr.HasRows)
            {
                while (_dr.Read())
                {
                    Player data = new Player();
                    data.Name = _dr[1].ToString();
                    data.Sex =Convert.ToBoolean(_dr[2]);
                    data.Lev = Convert.ToInt32(_dr[3]);
                    data.Blood = Convert.ToInt32(_dr[4]);
                    data.Attack = Convert.ToInt32(_dr[5]);
                    data.Defense = Convert.ToInt32(_dr[6]);
                    data.Hit = Convert.ToInt32(_dr[7]);
                    data.Dodge = Convert.ToInt32(_dr[8]);
                    list.Add(data);
                }
            }
            _conn.Close();
            return list;
        }

        //修改
        public bool Update(string name)
        {
            List<Player> list = Select(name);
            list[0].Lev += 1;
            list[0].Blood += 150;
            list[0].Attack += 10;
            list[0].Defense += 10;
            list[0].Hit += 15;
            list[0].Dodge += 10;
            _cmd.CommandText = "update Player set Lev=" + list[0].Lev + ",Blood=" + list[0].Blood + ",Attack=" + list[0].Attack + ",Defense=" + list[0].Defense + ",Hit=" + list[0].Hit + ",Dodge=" + list[0].Dodge + " where Name=@name";
            _cmd.Parameters.Clear();
            _cmd.Parameters.AddWithValue("@name", name);
            _conn.Open();
            int n = _cmd.ExecuteNonQuery();
            _conn.Close();
            if (n > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
}
View Code

添加人物:

namespace ConsoleApplication1
{
    class program1
    {
        static void Main1(string[] args)
        {
            while (true)
            {
                Console.WriteLine("請輸入姓名:");
                string name = Console.ReadLine();
                Console.WriteLine("請輸入性別:");
                bool sex = Console.ReadLine() == "" ? true : false;
                PlayerDA da = new PlayerDA();
                if (da.AddPlayer(name, sex))
                {
                    Console.WriteLine(name + "的屬性信息為:");
                    List<Player> list = da.Select(name);
                    foreach (Player data in list)
                    {
                        string ssex = data.Sex ? "" : "";
                        Console.WriteLine("姓名:" + data.Name + "\t" + "性別:" + data.Sex + "\t" + "等級:" + data.Lev + "\t" + "血量:" + data.Blood + "\t" + "攻擊:" + data.Attack + "\t" + "防禦:" + data.Defense + "\t" + "命中:" + data.Hit + "\t" + "閃避:" + data.Dodge + "\t");
                    }
                }
                else
                {
                    Console.WriteLine("添加人物失敗!");
                }
                Console.WriteLine("是否繼續添加人物?Y or N");
                string yn = Console.ReadLine();
                if (yn == "Y")
                {
                }
                else
                {
                    Console.WriteLine("輸入完畢");
                    break;
                }
            }
            Console.ReadLine();
        }
    }
}
View Code

對戰:

namespace ConsoleApplication1
{
    class program
    {
        //攻擊函數
        static Player gj(Player p_1, Player p_2)
        {
            Random rand = new Random();
            Console.ForegroundColor = ConsoleColor.Gray;
            Console.WriteLine(p_1.Name + "準備發起攻擊... ...");
            Console.ForegroundColor = ConsoleColor.Black;

            System.Threading.Thread.Sleep(1000);
            int h2 = rand.Next(100) + p_1.Hit;
            int d1 = rand.Next(100) + p_2.Dodge;
            if (h2 > 100)
            {
                if (d1 > 150)
                {
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine(p_2.Name + "躲開了" + p_1.Name + "的攻擊");
                    Console.ForegroundColor = ConsoleColor.Black;
                }
                else
                {
                    int sh = rand.Next(200) + p_1.Attack;
                    p_2.Blood = p_2.Blood - sh + p_2.Defense;
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine(p_1.Name + "攻擊掉" + p_2.Name + (sh - p_2.Defense) + "");
                    Console.ForegroundColor = ConsoleColor.Black;
                }
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.DarkYellow;
                Console.WriteLine(p_1.Name + "攻擊失誤");
                Console.ForegroundColor = ConsoleColor.Black;
            }
            return (p_2);
        }
        static void Main(string[] args)
        {
            Console.BackgroundColor = ConsoleColor.White;
            Console.ForegroundColor = ConsoleColor.Black;
            
            PlayerDA da = new PlayerDA();
            Console.Write("請輸入第一個玩家的姓名:");
            string Name_1 = Console.ReadLine();

            List<Player> p1 = da.Select(Name_1);
            Console.WriteLine("*************************");

            Console.Write("請輸入第二個玩家的姓名:");
            string Name_2 = Console.ReadLine();

            List<Player> p2 = da.Select(Name_2);
            Console.WriteLine("*************************");
            
            //pk階段
            while (p1[0].Blood > 0 && p2[0].Blood > 0)
            {
                Player pp2 = gj(p1[0],p2[0]);
                p2[0] = pp2;
                Player pp1 = gj(p2[0],p1[0]);
                p1[0] = pp1;
                Console.WriteLine(p2[0].Name + ":"+(p2[0].Blood<0?0:p2[0].Blood)+"————————"+p1[0].Name+":"+(p1[0].Blood<0?0:p1[0].Blood));
                Console.WriteLine();
                Console.WriteLine();
                System.Threading.Thread.Sleep(2000);
            }
            //pk結束
            Console.WriteLine("**********戰鬥結束**********");
            Console.WriteLine();
            if (p1[0].Blood <= 0 && p2[0].Blood > 0)
            {
                Console.WriteLine(p2[0].Name + "贏了,恭喜升了一級!");
                Console.WriteLine("屬性提升為:");
                if (da.Update(Name_2))
                {
                    List<Player> list = da.Select(Name_2);
                    foreach (Player data in list)
                    {
                        string ssex = data.Sex ? "" : "";
                        Console.WriteLine("姓名:" + data.Name + "\t" + "性別:" + ssex + "\t" + "等級:" + data.Lev + "\t" + "血量:" + data.Blood + "\t" + "攻擊:" + data.Attack + "\t" + "防禦:" + data.Defense + "\t" + "命中:" + data.Hit + "\t" + "閃避:" + data.Dodge + "\t");
                    }
                }
                else
                {
                    Console.WriteLine("錯誤!");
                }
            }
            else if (p2[0].Blood <= 0 && p1[0].Blood > 0)
            {
                Console.WriteLine(p1[0].Name + "贏了,恭喜升了一級!");
                Console.WriteLine("屬性提升為:");
                if (da.Update(Name_1))
                {
                    List<Player> list = da.Select(Name_1);
                    foreach (Player data in list)
                    {
                        string ssex = data.Sex ? "" : "";
                        Console.WriteLine("姓名:" + data.Name + "\t" + "性別:" + ssex + "\t" + "等級:" + data.Lev + "\t" + "血量:" + data.Blood + "\t" + "攻擊:" + data.Attack + "\t" + "防禦:" + data.Defense + "\t" + "命中:" + data.Hit + "\t" + "閃避:" + data.Dodge + "\t");
                    }
                }
                else
                {
                    Console.WriteLine("錯誤!");
                }
            }
            else if (p1[0].Blood<=0&&p2[0].Blood<=0)
            {
                Console.WriteLine("同歸於盡!");
            }
            Console.ReadLine();
        }
    }
}
View Code

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 自定義標題欄 一、設計界面樣式 <UserControl x:Class="WpfApplication6.TitleListControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="htt ...
  • 燈光的測試例子:光源參數可以調節的測試場景 先看一下測試場景和效果。 場景中可以切換視圖, 以方便觀察三維體和燈光的位置。環境光,漫射光,鏡面反射光都可以在四種顏色間切換。 燈光位置和攝像機位置(LookAt)可以輸入數值或者點動調節,也可以按鍵盤的QEWASD六個鍵進行調節。 你還會註意到:球體對 ...
  • .net環境下通信主要掌握 通信協議(UDP&TCP). 網路抓包工具().:使用方法 點對點通信,IP組播,廣播通信 c#中結構體轉為位元組流方式 c#結構體與c++結構體轉換對應關係 開源的通信模塊:http://www.networkcomms.net/getting-started/ ...
  • 問題:最近在項目中遇到,不同客戶機安裝不同Office版本,在導出Excel時,發生錯誤。 找不到Excel Com組件,錯誤信息如下。 未能載入文件或程式集“Microsoft.Office.Interop.Excel, Version=12.0.0.0, Culture=neutral, Pub ...
  • 先說幾句,作為一個還在學習的程式員,掌握的知識有限;但我利用自身所學,給一些像我一樣還在學習的碼農提供我的綿薄之力! 寫的不好,但是儘力了,希望大牛指點。多多吐槽!!! 好了開始說項目需求: 實現新增員工;使用DataGridView控制項展示員工信息;實現根據員工工號進行模糊查詢;實現刪除員工信息; ...
  • 公共語言運行庫(.net運行庫)即CLR 1、C#先編譯為IL,IL為ms的中間語言,IL是平臺無關性的。 2、CLR再將IL編譯為平臺專用語言。 3、CLR在編譯IL時為即時編譯(JIT) VB、VC++、VF均可編譯為IL然後與C#進行交互 ...
  • SVN源代碼無說明提交異常:exception throw in progress runner thread ...
  • ScrumBasic 是本人基於Asp.net mvc6 最新的core 1.0寫的一個敏捷項目管理軟體。 目前只是一個基礎版本的功能。只支持1個project。 後期會在這個基礎上做擴展和許可權管理。 自己順便也整理強化一下asp.net core的使用方法。 地址:[email protected]:C ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...