C# 之 带你玩转命令行版《2048》 -- 附源码分享

简介: C# 之 命令行版2048,自己动手做一个2048玩一下吧~

一,效果展示

请添加图片描述


二,玩法说明

  游戏的规则很简单,你需要控制所有方块向同一个方向运动,两个相同数字方块撞在一起之后合并成为他们的和,每次操作之后会随机生成一个2或者4,最终得到一个“2048”的方块就算胜利了。


三,主要逻辑

  • 4*4的二维数组, 然后遍历里面的元素,统计所有的0,放到一个list里面,然后Random.next(0,list.count)随机一个赋成2.
  • 循环开始,初始化命令行.
  • 键盘输入上下左右 对应四种操作的函数 操作之后先遍历一下有没有空格 如果有就继续 没有空格还得再判断一下能不能再动了 如果不能就死了
  • 只需要写向左和向下的逻辑,向右和向上对应取反即可
  • 如果有任何一个元素是2048 即获胜

四,代码实现

4.1 游戏开始

游戏开始:

  • 随机生成两个2
  • 开启游戏循环

    • 每次校验游戏是够结束
    • 检测用户操作(上下左右)
    • 输出当前状态到控制台
/// <summary>
/// 游戏开始
/// </summary>
public void GameStart()
{
    Add2();
    Add2();
    Output();
    while (true)
    {
        // 用于遍历检测按下按键之后和之前有没有区别用的bool型变量
        bool flag = false;
        // 胜利条件 遍历
        foreach (int item in arr)     
        {
            if (item == 2048)
            {
                Console.WriteLine("\n(ノ´▽`)ノ♪ ------ 游戏胜利 ------ (ノ´▽`)ノ♪");
                Last();
            }
        }

        // 这是用于检测按下按键之后和之前有没有区别用的备份数组​
        int[,] arrtmp = new int[4, 4];
        // 遍历给备份数组赋值
        for (int i = 0; i < 4; i++)    
        {
            for (int j = 0; j < 4; j++)
            {
                arrtmp[i, j] = arr[i, j];
            }
        }

        // 获取用户操作 --> 上下左右
        ConsoleKeyInfo info = Console.ReadKey(true);  
        switch (info.Key)
        {
            case ConsoleKey.UpArrow:
                MoveUp();
                break;
            case ConsoleKey.DownArrow:
                MoveDown();
                break;
            case ConsoleKey.LeftArrow:
                MoveLeft();
                break;
            case ConsoleKey.RightArrow:
                MoveRight();
                break;
        }

        // 遍历检测 按下方向键前的状态 和  按下方向键之后的状态是不是完全一样的
        for (int i = 0; i < 4; i++)        
        {
            for (int j = 0; j < 4; j++)
            {
                if (arrtmp[i, j] != arr[i, j])
                {
                    // 一旦有任意一个元素在之前之后不一样  那么falg改为true
                    flag = true;          
                }
            }
        }
        if (flag)
        {
            // 如果falg是true 说明变了, 如果变了 就刷一个2出来,  
            // 反之就什么也不干
            Add2();    
        }

        // 输出到控制台
        Output();

        // 检测按下方向键之后死没死
        if (!End())   
        {
            Console.WriteLine("\n(;´д`)ゞ  ------ 游戏失败 ------ (;´д`)ゞ");
            Last();
        }
    }
}

4.2 随机生成

遍历非零元素 随机把一个赋为2

public void Add2()
{
    listOfCoo.Clear();
    // 遍历所有零元素的坐标
    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            if (arr[i, j] == 0)
            {
                // 把遍历到的坐标 当成参数 实例化
                CoordinateTools coo = new CoordinateTools(i, j);
                // 把实例化的结果add到list里
                listOfCoo.Add(coo);
            }
        }
    }
    // 如果列表里一个元素都没存进来 说明表里没有空格了 直接退出
    if (listOfCoo.Count == 0)
    {
        return;
    }
    // 从表里随机取一个位置 ​
    int cooPlus = rd.Next(0, listOfCoo.Count);
    // 把这个位置赋值改写为2
    arr[listOfCoo[cooPlus].x, listOfCoo[cooPlus].y] = 2;
}

4.3 数字移动

已向下移动为例:

  • 非0数向下移动,遇到非0数,相同则累加,不同则保存到当前位置;
  • 向上移动的话,再翻转一下就可以了
public void MoveDown()
{
    for (int j = 0; j < 4; j++)
    {
        for (int i = 2; i >= 0; i--)
        {
            if (arr[i, j] == 0) continue;
            for (int k = i + 1; k < 4; k++)
            {
                if (arr[k, j] != 0)
                {
                    if (arr[i, j] == arr[k, j])
                    {
                        arr[k, j] += arr[i, j];
                        arr[i, j] = 0;
                        break;
                    }
                    else if (arr[i, j] != arr[k, j] && k - 1 != i)
                    {
                        arr[k - 1, j] = arr[i, j];
                        arr[i, j] = 0;
                        break;
                    }
                    else if (arr[i, j] != arr[k, j] && k - 1 == i)
                    {
                        break;
                    }
                }
                if (k == 3)
                {
                    arr[k, j] = arr[i, j];
                    arr[i, j] = 0;
                    break;
                }
            }
        }
    }
}

4.4 判断胜负

判断游戏结束:

  • 遍历数组 有任何一个空元素都说明不可能死

    • 从2开始到2048进行遍历;目的是检测 每一个数字 他上下左右相邻有没有和他一样的数字
// 判断游戏结束
public bool End()
{
    // 遍历数组 有任何一个空元素都说明不可能死
    foreach (int item in arr)
    {
        if (item == 0)
            return true;
    }
    // 从2开始到2048进行遍历   
    // 目的是检测 每一个数字 他上下左右相邻有没有和他一样的数字 
    for (int num = 2; num <= 2048; num *= 2)
    {
        List<CoordinateTools> listOfget2 = new List<CoordinateTools>();
        for (int i = 0; i < 4; i++)
        {
            for (int j = 0; j < 4; j++)
            {
                if (arr[i, j] == num)
                {
                    // 先把所有值为NUM的元素的下标 存到list里
                    CoordinateTools coo = new CoordinateTools(i, j);  
                    listOfget2.Add(coo);
                }
            }
        }
        // 如果这个list 是空的  就说明当前表里没有num 回到FOR继续
        if (listOfget2 == null)   
        {
            continue;
        }

        // 从列表里的第一个元素开始 (每一个元素存的都是一组下标x,y)
        foreach (CoordinateTools item in listOfget2)
        {
            foreach (CoordinateTools item2 in listOfget2)
            {
                // 判断 同一行的是不是列坐标差的绝对值是1  同一列的是不是行坐标差的绝对值是1
                if ((item.y == item2.y && Math.Abs(item.x - item2.x) == 1) || 
                    (item.x == item2.x && Math.Abs(item.y - item2.y) == 1))  
                {
                    // 如果有一个 就不用再循环了 肯定没死
                    return true;    
                }
            }
        }
    }
    // 全遍历完了 就说明已经死了 返回false
    return false;  
}

4.5 重新开始

判断游戏结束后,提示用户是“退出”还是“重玩”,根据用户选择进行逻辑处理

/// <summary>
/// 胜利或失败之后的选择
/// </summary>
public void Last()
{
    Console.WriteLine("\n输入X退出 输入R重新开始\n");
    while (true)
    {
        string str = Console.ReadLine();
        if (str == "x")
        {
            Environment.Exit(0);
        }
        //重新开始 --> 初始化
        if (str == "r")
        {
            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    arr[i, j] = 0;
                }
            }
            GameStart();
        }
    }
}

五,源码分享

using System;
using System.Collections.Generic;

namespace CSharp_2048
{
    class Program
    {
        static void Main(string[] args)
        {
            Class2048 class2048 = new Class2048();
            class2048.GameStart();
        }
        /// <summary>
        /// 游戏类2048
        /// </summary>
        class Class2048
        {

            public int[,] arr = new int[4, 4];
            public Random rd = new Random();
            public List<CoordinateTools> listOfCoo = new List<CoordinateTools>();

            /// <summary>
            /// 输出当前状态
            /// </summary>
            public void Output()
            {
                string str = "    ";
                Console.Clear();
                Console.WriteLine("┏┉┉┉┉┉┉┉┉┳┉┉┉┉┉┉┉┉┳┉┉┉┉┉┉┉┉┳┉┉┉┉┉┉┉┉┓");
                Console.WriteLine("┋        ┋        ┋        ┋        ┋");
                Console.WriteLine("┋ {0}   ┋  {1}  ┋  {2}  ┋  {3}  ┋",
                    arr[0, 0] == 0 ? str : arr[0, 0].ToString().PadLeft(4, ' '),
                    arr[0, 1] == 0 ? str : arr[0, 1].ToString().PadLeft(4, ' '), 
                    arr[0, 2] == 0 ? str : arr[0, 2].ToString().PadLeft(4, ' '),
                    arr[0, 3] == 0 ? str : arr[0, 3].ToString().PadLeft(4, ' '));
                Console.WriteLine("┋        ┋        ┋        ┋        ┋");
                Console.WriteLine("┣┉┉┉┉┉┉┉┉╋┉┉┉┉┉┉┉┉╋┉┉┉┉┉┉┉┉╋┉┉┉┉┉┉┉┉┫");
                Console.WriteLine("┋        ┋        ┋        ┋        ┋");
                Console.WriteLine("┋  {0}  ┋  {1}  ┋  {2}  ┋  {3}  ┋", 
                    arr[1, 0] == 0 ? str : arr[1, 0].ToString().PadLeft(4, ' '),
                    arr[1, 1] == 0 ? str : arr[1, 1].ToString().PadLeft(4, ' '),
                    arr[1, 2] == 0 ? str : arr[1, 2].ToString().PadLeft(4, ' '),
                    arr[1, 3] == 0 ? str : arr[1, 3].ToString().PadLeft(4, ' '));
                Console.WriteLine("┋        ┋        ┋        ┋        ┋");
                Console.WriteLine("┣┉┉┉┉┉┉┉┉╋┉┉┉┉┉┉┉┉╋┉┉┉┉┉┉┉┉╋┉┉┉┉┉┉┉┉┫");
                Console.WriteLine("┋        ┋        ┋        ┋        ┋");
                Console.WriteLine("┋  {0}  ┋  {1}  ┋  {2}  ┋  {3}  ┋",
                    arr[2, 0] == 0 ? str : arr[2, 0].ToString().PadLeft(4, ' '),
                    arr[2, 1] == 0 ? str : arr[2, 1].ToString().PadLeft(4, ' '), 
                    arr[2, 2] == 0 ? str : arr[2, 2].ToString().PadLeft(4, ' '),
                    arr[2, 3] == 0 ? str : arr[2, 3].ToString().PadLeft(4, ' '));
                Console.WriteLine("┋        ┋        ┋        ┋        ┋");
                Console.WriteLine("┣┉┉┉┉┉┉┉┉╋┉┉┉┉┉┉┉┉╋┉┉┉┉┉┉┉┉╋┉┉┉┉┉┉┉┉┫");
                Console.WriteLine("┋        ┋        ┋        ┋        ┋");
                Console.WriteLine("┋  {0}  ┋  {1}  ┋  {2}  ┋  {3}  ┋",
                    arr[3, 0] == 0 ? str : arr[3, 0].ToString().PadLeft(4, ' '),
                    arr[3, 1] == 0 ? str : arr[3, 1].ToString().PadLeft(4, ' '),
                    arr[3, 2] == 0 ? str : arr[3, 2].ToString().PadLeft(4, ' '),
                    arr[3, 3] == 0 ? str : arr[3, 3].ToString().PadLeft(4, ' '));
                Console.WriteLine("┋        ┋        ┋        ┋        ┋");
                Console.WriteLine("┗┉┉┉┉┉┉┉┉┻┉┉┉┉┉┉┉┉┻┉┉┉┉┉┉┉┉┻┉┉┉┉┉┉┉┉┛");
                Console.WriteLine("\n<<命令行版2048>> 请按上下左右(↑←↓→)方向键操作");
            }

            /// <summary>
            /// 遍历非零元素 随机把一个赋为2
            /// </summary>
            public void Add2()
            {
                listOfCoo.Clear();
                // 遍历所有零元素的坐标
                for (int i = 0; i < 4; i++)
                {
                    for (int j = 0; j < 4; j++)
                    {
                        if (arr[i, j] == 0)
                        {
                            // 把遍历到的坐标 当成参数 实例化
                            CoordinateTools coo = new CoordinateTools(i, j);
                            // 把实例化的结果add到list里
                            listOfCoo.Add(coo);
                        }
                    }
                }
                // 如果列表里一个元素都没存进来 说明表里没有空格了 直接退出
                if (listOfCoo.Count == 0)
                {
                    return;
                }
                // 从表里随机取一个位置 ​
                int cooPlus = rd.Next(0, listOfCoo.Count);
                // 把这个位置赋值改写为2
                arr[listOfCoo[cooPlus].x, listOfCoo[cooPlus].y] = 2;
            }

            /// <summary>
            /// 游戏开始
            /// </summary>
            public void GameStart()
            {
                Add2();
                Add2();
                Output();
                while (true)
                {
                    // 用于遍历检测按下按键之后和之前有没有区别用的bool型变量
                    bool flag = false;
                    // 胜利条件 遍历
                    foreach (int item in arr)     
                    {
                        if (item == 2048)
                        {
                            Console.WriteLine("\n(ノ´▽`)ノ♪ ------ 游戏胜利 ------ (ノ´▽`)ノ♪");
                            Last();
                        }
                    }

                    // 这是用于检测按下按键之后和之前有没有区别用的备份数组​
                    int[,] arrtmp = new int[4, 4];
                    // 遍历给备份数组赋值
                    for (int i = 0; i < 4; i++)    
                    {
                        for (int j = 0; j < 4; j++)
                        {
                            arrtmp[i, j] = arr[i, j];
                        }
                    }

                    // 获取用户操作 --> 上下左右
                    ConsoleKeyInfo info = Console.ReadKey(true);  
                    switch (info.Key)
                    {
                        case ConsoleKey.UpArrow:
                            MoveUp();
                            break;
                        case ConsoleKey.DownArrow:
                            MoveDown();
                            break;
                        case ConsoleKey.LeftArrow:
                            MoveLeft();
                            break;
                        case ConsoleKey.RightArrow:
                            MoveRight();
                            break;
                    }

                    // 遍历检测 按下方向键前的状态 和  按下方向键之后的状态是不是完全一样的
                    for (int i = 0; i < 4; i++)        
                    {
                        for (int j = 0; j < 4; j++)
                        {
                            if (arrtmp[i, j] != arr[i, j])
                            {
                                // 一旦有任意一个元素在之前之后不一样  那么falg改为true
                                flag = true;          
                            }
                        }
                    }
                    if (flag)
                    {
                        // 如果falg是true 说明变了, 如果变了 就刷一个2出来,  
                        // 反之就什么也不干
                        Add2();    
                    }

                    // 输出到控制台
                    Output();

                    // 检测按下方向键之后死没死
                    if (!End())   
                    {
                        Console.WriteLine("\n(;´д`)ゞ  ------ 游戏失败 ------ (;´д`)ゞ");
                        Last();
                    }
                }
            }

            #region 核心逻辑 --> 向四个方向移动的控制
            /// <summary>
            /// 向下 非0数向下移动,遇到非0数,相同则累加,不同则保存到当前位置
            /// </summary>
            public void MoveDown()
            {
                for (int j = 0; j < 4; j++)
                {
                    for (int i = 2; i >= 0; i--)
                    {
                        if (arr[i, j] == 0) continue;
                        for (int k = i + 1; k < 4; k++)
                        {
                            if (arr[k, j] != 0)
                            {
                                if (arr[i, j] == arr[k, j])
                                {
                                    arr[k, j] += arr[i, j];
                                    arr[i, j] = 0;
                                    break;
                                }
                                else if (arr[i, j] != arr[k, j] && k - 1 != i)
                                {
                                    arr[k - 1, j] = arr[i, j];
                                    arr[i, j] = 0;
                                    break;
                                }
                                else if (arr[i, j] != arr[k, j] && k - 1 == i)
                                {
                                    break;
                                }
                            }
                            if (k == 3)
                            {
                                arr[k, j] = arr[i, j];
                                arr[i, j] = 0;
                                break;
                            }
                        }
                    }
                }
            }
            /// <summary>
            /// 向上移动: 先把数组上下翻转 然后向下移动  移动完了再翻转回来
            /// </summary>
            public void MoveUp()
            {
                for (int i = 0; i < 2; i++)
                {
                    for (int j = 0; j < 4; j++)
                    {
                        int tmp = 0;
                        tmp = arr[i, j];
                        arr[i, j] = arr[3 - i, j];
                        arr[3 - i, j] = tmp;
                    }
                }
                MoveDown();
                for (int i = 0; i < 2; i++)
                {
                    for (int j = 0; j < 4; j++)
                    {
                        int tmp = 0;
                        tmp = arr[i, j];
                        arr[i, j] = arr[3 - i, j];
                        arr[3 - i, j] = tmp;
                    }
                }
            }

            /// <summary>
            /// 向左移动
            /// </summary>
            public void MoveLeft()
            {
                for (int i = 0; i < 4; i++)
                {
                    for (int j = 1; j < 4; j++)
                    {
                        if (arr[i, j] == 0) continue;
                        for (int k = j - 1; k >= 0; k--)
                        {
                            if (arr[i, k] != 0)
                            {
                                if (arr[i, j] == arr[i, k])
                                {
                                    arr[i, k] += arr[i, j];
                                    arr[i, j] = 0;
                                    break;
                                }
                                else if (arr[i, j] != arr[i, k] && k + 1 != j)
                                {
                                    arr[i, k + 1] = arr[i, j];
                                    arr[i, j] = 0;
                                    break;
                                }
                                else if (arr[i, j] != arr[i, k] && k + 1 == j)
                                {
                                    break;
                                }
                            }
                            if (k == 0)
                            {
                                arr[i, k] = arr[i, j];
                                arr[i, j] = 0;
                                break;
                            }
                        }
                    }
                }
            }
            /// <summary>
            /// 向右移动: 先把数组左右翻转 然后向左移动  移动完了再翻转回来
            /// </summary>
            public void MoveRight()
            {
                for (int j = 0; j < 2; j++)
                {
                    for (int i = 0; i < 4; i++)
                    {
                        int tmp = 0;
                        tmp = arr[i, j];
                        arr[i, j] = arr[i, 3 - j];
                        arr[i, 3 - j] = tmp;
                    }
                }
                MoveLeft();
                for (int j = 0; j < 2; j++)
                {
                    for (int i = 0; i < 4; i++)
                    {
                        int tmp = 0;
                        tmp = arr[i, j];
                        arr[i, j] = arr[i, 3 - j];
                        arr[i, 3 - j] = tmp;
                    }
                }
            }
            #endregion

            /// <summary>
            /// 判断是否失败
            /// </summary>
            /// <returns></returns>
            public bool End()
            {
                // 遍历数组 有任何一个空元素都说明不可能死
                foreach (int item in arr)
                {
                    if (item == 0)
                        return true;
                }
                // 从2开始到2048进行遍历   
                // 目的是检测 每一个数字 他上下左右相邻有没有和他一样的数字 
                for (int num = 2; num <= 2048; num *= 2)
                {
                    List<CoordinateTools> listOfget2 = new List<CoordinateTools>();
                    for (int i = 0; i < 4; i++)
                    {
                        for (int j = 0; j < 4; j++)
                        {
                            if (arr[i, j] == num)
                            {
                                // 先把所有值为NUM的元素的下标 存到list里
                                CoordinateTools coo = new CoordinateTools(i, j);  
                                listOfget2.Add(coo);
                            }
                        }
                    }
                    // 如果这个list 是空的  就说明当前表里没有num 回到FOR继续
                    if (listOfget2 == null)   
                    {
                        continue;
                    }

                    // 从列表里的第一个元素开始 (每一个元素存的都是一组下标x,y)
                    foreach (CoordinateTools item in listOfget2)
                    {
                        foreach (CoordinateTools item2 in listOfget2)
                        {
                            // 判断 同一行的是不是列坐标差的绝对值是1  同一列的是不是行坐标差的绝对值是1
                            if ((item.y == item2.y && Math.Abs(item.x - item2.x) == 1) || 
                                (item.x == item2.x && Math.Abs(item.y - item2.y) == 1))  
                            {
                                // 如果有一个 就不用再循环了 肯定没死
                                return true;    
                            }
                        }
                    }
                }
                // 全遍历完了 就说明已经死了 返回false
                return false;  
            }

            /// <summary>
            /// 胜利或失败之后的选择
            /// </summary>
            public void Last()
            {
                Console.WriteLine("\n输入X退出 输入R重新开始\n");
                while (true)
                {
                    string str = Console.ReadLine();
                    if (str == "x")
                    {
                        Environment.Exit(0);
                    }
                    //重新开始 --> 初始化
                    if (str == "r")
                    {
                        for (int i = 0; i < 4; i++)
                        {
                            for (int j = 0; j < 4; j++)
                            {
                                arr[i, j] = 0;
                            }
                        }
                        GameStart();
                    }
                }
            }
        }

        /// <summary>
        /// 工具类 用于存储搜索到的数组的下标
        /// </summary>
        class CoordinateTools
        {
            public int x { set; get; }
            public int y { set; get; }
            public CoordinateTools(int i, int j)
            {
                this.x = i;
                this.y = j;
            }
        }
    }
}
相关文章
|
6月前
|
开发框架 前端开发 JavaScript
C# 6.0+JavaScript云LIS系统源码  云LIS实验室信息管理新型解决方案
云LIS是为区域医疗提供临床实验室信息服务的计算机应用程序,可协助区域内所有临床实验室相互协调并完成日常检验工作,对区域内的检验数据进行集中管理和共享,通过对质量控制的管理,最终实现区域内检验结果互认。其目标是以医疗服务机构为主体,以医疗资源和检验信息共享为目标,集成共性技术及医疗服务关键技术,建立区域协同检验,最大化利用有限的医疗卫生资源。
171 1
|
6月前
|
数据采集 安全 JavaScript
C#医院手术麻醉信息管理系统源码 对接院内HIS、LIS、PACS
手麻系统的功能涵盖了麻醉临床业务管理、麻醉运营业务管理以及手术进程管理等,实现了将多种麻醉病历文书与医院HIS系统的有效关联,让手术室人员、设备资源和信息资源高度共享;实现了手术安排、各种统计报表等科室管理和科研工作的需求,可借其收集临床数据、进行整合分析,为围术期临床信息、管理、科研提供整体解决方案;该系统的运行,为医护人员提供了流程化、信息化、自动化、智能化的临床业务综合管理。
105 5
|
6月前
|
前端开发 Java C#
java/C#语言开发的医疗信息系统11套源码
java/C#语言开发的医疗信息系统11套源码
111 2
|
4月前
|
存储 Oracle 关系型数据库
PACS源码,C#语言数字医学影像系统成品源码
**数字医学影像系统(RIS/PACS)**采用C#开发,基于C/S架构,配Oracle数据库,具备自主版权,适用于项目实施。系统包含分诊、超声、放射、内镜、病理等工作站,支持基本信息维护、报表查询和系统维护。功能亮点有:WorkList管理、影像采集传输、存储检索、图像处理、多序列浏览、流程控制、报告录入与审核、支持多种影像设备及高级影像处理。RIS与PACS数据库同步,并集成HIS、电子病历等系统接口。全面遵循DICOM3.0标准。
PACS源码,C#语言数字医学影像系统成品源码
|
4月前
|
BI 数据处理
一体化的医学实验室信息系统源码,C#LIS系统源码
面向医学实验室的一体化平台提供标本流程管理、报告发布及科室管理支持。它与HIS无缝对接,简化患者信息录入,实现检验结果实时同步。系统自动处理数据、分类样本、计算参考范围,并对异常结果预警。条码管理简化样本追踪,质控管理提升检测准确性。平台还支持数据审核发布、历史结果查询对比、灵活报表打印及统计分析等功能,辅助科室管理和试剂库存控制,加强科室间沟通协作。
一体化的医学实验室信息系统源码,C#LIS系统源码
|
5月前
|
开发框架 前端开发 .NET
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
集成于VS 2019,EXT.NET前端和ASP.NET后端,搭配MSSQL 2018数据库。系统覆盖样品管理、数据分析、报表和项目管理等实验室全流程。应用广泛,包括生产质检(如石化、制药)、环保监测、试验研究等领域。随着技术发展,现代LIMS还融合了临床、电子实验室笔记本和SaaS等功能,以满足复杂多样的实验室管理需求。
81 3
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
|
4月前
|
数据采集 监控 BI
C#实验室检验LIS信息系统源码 微生物检验、质控维护
LIS系统的主要目标是为检验室开展检验工作提供更加有效的系统支持。该系统将尽量减少以人工操作的方式来实现信息转移,减少在接收检验项目、报告结果和保存记录等工作中可能会出现的人为误差,为检验结果查询提供更有效的方法,节省了管理信息所需的琐碎时间和精力。为实验室技术人员提供智能化的运行模式,使处理诸如按照规程审核检验结果、取消检验项目、分析、处理存在重大疑问的检验结果、执行特殊的命令和处理质量控制等问题更轻松自如,这将使检验人员更快地获得准确清晰的检验结果。为临床医护人员提供在线设施,使他们可以及时准确地获得相关实验室信息。确保检验结果的可靠性和准确性,利用实验室管理信息系统的仪器监控和质量控制,
45 0
|
6月前
|
存储 运维 BI
基于C#-VC-MSSQL开发的全套PACS系统源码 3D PACS系统源码:可实现医学影像获取、存档、观片、处理、打印多项应用
PACS的功能价值在于通过连接不同的影像设备,存储与管理图像,图像的调用与后处理,实现资源共享,降低成本,达到提高工作效率、提升医疗水平的目地;
80 1
基于C#-VC-MSSQL开发的全套PACS系统源码  3D PACS系统源码:可实现医学影像获取、存档、观片、处理、打印多项应用
|
5月前
|
监控 C#
技术经验解读:【转】c#实现魔兽(warIII)中显血和改键功能(附源码)(不影响聊天打字)
技术经验解读:【转】c#实现魔兽(warIII)中显血和改键功能(附源码)(不影响聊天打字)
91 0
|
6月前
|
数据采集 存储 安全
C#手术麻醉系统源码 可对接HIS LIS PACS 医疗系统各类设备
术麻醉信息管理系统主要还是为了手术室开发提供全面帮助的系统,其主要是由监护设备数据采集子系统和麻醉临床系统两个子部分组成。包括从手术申请到手术分配,再到术前访视、术中记录及术后恢复的全过程中都可以得到全方位的保障。
49 4
C#手术麻醉系统源码 可对接HIS  LIS   PACS 医疗系统各类设备