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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...