首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 多組件協作實戰:命名空間分層、多型形狀遊戲完整專案解析

     編輯:關於C#

理論學習終需落地實戰。本範例構建一個「形狀賭盤遊戲」,展示命名空間分層、多 DLL 參考、介面導向設計、多型分派、異常處理、工廠模式雛形等核心技能的綜合運用。

專案結構規劃

MyShape.dll       // 形狀類別庫:Shape 基類 + Rectangle/Square/Triangle 衍生類
MyMessage.dll     // 訊息顯示庫:歡迎畫面、互動提示
Client.exe        // 主程式:遊戲邏輯、隨機產生、分數結算

核心代碼亮點

1. 形狀類別體系


// MyShape.cs - 抽象基類
namespace MyShape {
    public abstract class Shape {
        public abstract void Draw();
        public abstract int GetArea();
    }
}

// rect.cs - 矩形與正方形
namespace MyShape {
    public class Rectangle : Shape {
        protected int a, b;
        public Rectangle(int w, int h) { a=w; b=h; }
        public override int GetArea() => a * b;
        public override void Draw() { /* ASCII 矩形 */ }
    }
    public class Square : Rectangle {
        public Square(int len) : base(len, len) {}
        public override void Draw() { /* ASCII 正方形 */ }
    }
}

// triangle.cs - 三角形家族
namespace MyShape {
    public abstract class Triangle : Shape { /* 海倫公式 */ }
    public class RectTriangle : Triangle { /* 直角三角形:a*b/2 */ }
    public class RectEqualTriangle : RectTriangle { /* 等腰直角:a*a/2 */ }
}

2. 訊息互動類別


// MyMessage.cs
namespace MyMessage {
    public class Message {
        public void Begin() { /* 印出 ASCII 藝術字歡迎畫面 */ }
        public bool Ask() { /* 詢問繼續/退出,回傳 bool */ }
    }
}

3. 主程式遊戲邏輯


// client.cs
using System; using MyShape; using MyMessage;

class ClientTest {
    static void Main() {
        int score = 1000;
        var rand = new Random();
        var msg = new Message();
        msg.Begin();

        while (true) {
            if (!msg.Ask()) break;
            Console.WriteLine($"當前分數:{score}");
            Console.Write("下注:");
            int bet = int.TryParse(Console.ReadLine(), out var b) ? b : 100;
            bet = Math.Min(bet, score);
            score -= bet;

            int win = 0;
            for (int round=1; round<=3; round++) {
                Shape shape = rand.Next(4) switch {
                    0 => new RectTriangle(5,4),
                    1 => new RectEqualTriangle(5),
                    2 => new Rectangle(5,4),
                    _ => new Square(5)
                };
                shape.Draw();
                win += shape.GetArea() * round * bet / 100;
                Console.WriteLine($"本回合贏得:{win}");
            }
            score += win;
            Console.WriteLine($"總分:{score}");
            if (score < 100) { Console.WriteLine("分數不足,遊戲結束"); break; }
        }
    }
}

編譯部署腳本

csc /target:library /out:MyShape.dll MyShape.cs rect.cs triangle.cs
csc /target:library /out:MyMessage.dll MyMessage.cs
csc /reference:MyShape.dll;MyMessage.dll client.cs

架構洞察

  • 命名空間隔離:MyShape、MyMessage 邏輯解耦,避免型別名稱衝突
  • 介面契約:Shape 定義 Draw/GetArea 契約,衍生類各司其職
  • 多型分派:Shape sp = new RectTriangle(...); sp.Draw() 自動調用正確實作
  • 組件邊界:DLL 獨立編譯、版本控管、可獨立升級部署
  • 建構函式鏈:Square : Rectangle(len, len) 復用基類初始化邏輯

此範例雖簡單,卻涵蓋了企業級應用的核心架構要素,是理解 .NET 組件化開發的優秀入門專案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved