C#控制台模拟热更新
简介
通过C#和lua代码,通过控制台来模拟实现热更新。Demo模拟游戏商城,副本和活动,实现活动的热更新。
代码片段
副本类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LuaDemo
{
class Work
{
public string name = "副本";
public Dictionary<int, string> itemInfo = new Dictionary<int, string>();
public Work()
{
itemInfo.Add(1, "个人挑战副本1");
itemInfo.Add(2, "个人挑战副本2");
itemInfo.Add(3, "个人挑战副本3");
itemInfo.Add(4, "个人挑战副本4");
}
public void ShowAllItem(Dictionary<int, string> itemInfo)
{
foreach (var item in itemInfo.Keys)
{
Console.WriteLine("ID:{0},副本名称:{1}", item, itemInfo[item]);
}
}
public void PK(int id)
{
string temp;
itemInfo.TryGetValue(id, out temp);
Console.WriteLine("你开始了副本{0},该副本是:{1}", id, temp);
}
}
}
商城类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LuaDemo
{
class Shop
{
public string name = "商城";
public Dictionary<string, int> itemInfo = new Dictionary<string, int>();
public Shop()
{
itemInfo.Add("材料1", 100);
itemInfo.Add("材料2", 200);
itemInfo.Add("装备1", 300);
itemInfo.Add("装备2", 400);
}
public void ShowAllItem(Dictionary<string,int> itemInfo)
{
foreach (var item in itemInfo.Keys)
{
Console.WriteLine("名称:{0},售价:{1}", item, itemInfo[item]);
}
}
public void BuyItem(string name)
{
int temp;
itemInfo.TryGetValue(name, out temp);
Console.WriteLine("您购买了:{0}物品,物品售价是:{1}金币", name,temp);
}
}
}
活动lua热更:
luanet.load_assembly("System")
Console = luanet.import_type("System.Console")
--活动名称
name = "端午节活动"
--商城数据
shopinfo = {}
shopinfo["活动材料1"] = 100
shopinfo["活动材料2"] = 200
shopinfo["活动材料3"] = 300
shopinfo["活动材料4"] = 400
--副本数据
workinfo = {}
workinfo["A"] = "活动副本A"
workinfo["B"] = "活动副本B"
workinfo["C"] = "活动副本C"
workinfo["D"] = "活动副本D"
--遍历商城副本
function showall(info)
for key,value in pairs(info) do
Console.WriteLine("{0}--{1}",key,value)
end
end
--商品的购买方法
function buyitem(name)
Console.WriteLine("拟购买的商品是{0},该商品的价格是:{1}",name,shopinfo[name])
end
--副本的挑战方法
function workpk(id)
Console.WriteLine("你挑战的副本{0},该副本的描述是:{1}",id,workinfo[id])
end
--整个模块的核心逻辑方法
function avtivity()
Console.WriteLine("||-------活动模块------||")
Console.WriteLine("1.活动商城,2.活动副本")
Console.Write("请输入你要进入的栏目ID:")
id = Console.ReadLine()
if(id == '1') then
Console.WriteLine("---------活动商城--------")
showall(shopinfo)
Console.Write("请输入你要购买的名称:")
shopname = Console.ReadLine()
buyitem(shopname)
elseif(id == '2') then
Console.WriteLine("---------活动副本--------")
showall(workinfo)
Console.Write("请输入你要进入副本的ID:")
Workid = Console.ReadLine()
workpk(Workid)
end
end
主程序:
using System;
using LuaInterface;
namespace LuaDemo
{
class Program
{
static void Main(string[] args)
{
Shop shop = new Shop();
Work work = new Work();
Lua lua = new Lua();
lua.DoFile("Activity.lua");
LuaFunction avtivity = lua.GetFunction("avtivity");
string act = lua.GetString("name");
while (true)
{
Console.WriteLine("------------------------");
Console.WriteLine("1.{0},2.{1},3.{2}", work.name, act, shop.name);
Console.WriteLine("------------------------");
Console.Write("请输入你要进入的ID:");
string index = Console.ReadLine();
switch (index)
{
case "1":
Console.WriteLine("---------副本模块--------");
work.ShowAllItem(work.itemInfo);
Console.Write("请输入你要进入副本的ID:");
int ID = Convert.ToInt32(Console.ReadLine());
work.PK(ID);
break;
case "2":
avtivity.Call();
break;
case "3":
Console.WriteLine("---------商城模块--------");
shop.ShowAllItem(shop.itemInfo);
Console.Write("请输入你要购买的名称:");
string itemname = Console.ReadLine();
shop.BuyItem(itemname);
break;
}
}
}
}
}
总结
完成程序打包发布,本程序模拟发布后只需更改lua文件即可完成对程序内活动的更改,不需要重新发布。