diff --git a/C-开发工具与环境/微软黄金点程序工具/OnlineGame/.gitignore b/C-开发工具与环境/微软黄金点程序工具/OnlineGame/.gitignore new file mode 100644 index 00000000..96375c15 --- /dev/null +++ b/C-开发工具与环境/微软黄金点程序工具/OnlineGame/.gitignore @@ -0,0 +1 @@ +userinfo.txt diff --git a/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/BotDemo.sln b/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/BotDemo.sln index ad87b0c6..c62ce217 100644 --- a/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/BotDemo.sln +++ b/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/BotDemo.sln @@ -5,6 +5,8 @@ VisualStudioVersion = 15.0.28307.168 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BotDemo", "BotDemo\BotDemo.csproj", "{360FBD42-7FD5-42A7-B148-E33ED486510C}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GenerationClientCode", "GenerationClientCode\GenerationClientCode.csproj", "{A06392D5-4596-4AB3-84AB-86CFBCD13DD5}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -15,6 +17,10 @@ Global {360FBD42-7FD5-42A7-B148-E33ED486510C}.Debug|Any CPU.Build.0 = Debug|Any CPU {360FBD42-7FD5-42A7-B148-E33ED486510C}.Release|Any CPU.ActiveCfg = Release|Any CPU {360FBD42-7FD5-42A7-B148-E33ED486510C}.Release|Any CPU.Build.0 = Release|Any CPU + {A06392D5-4596-4AB3-84AB-86CFBCD13DD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A06392D5-4596-4AB3-84AB-86CFBCD13DD5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A06392D5-4596-4AB3-84AB-86CFBCD13DD5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A06392D5-4596-4AB3-84AB-86CFBCD13DD5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/BotDemo/GoldenNumberService.cs b/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/BotDemo/GoldenNumberService.cs index dd6f68dd..59cdd1a1 100644 --- a/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/BotDemo/GoldenNumberService.cs +++ b/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/BotDemo/GoldenNumberService.cs @@ -3,7 +3,7 @@ //---------------------- // -// Generated using the NSwag toolchain v12.0.11.0 (NJsonSchema v9.13.13.0 (Newtonsoft.Json v9.0.0.0)) (http://NSwag.org) +// Generated using the NSwag toolchain v12.0.15.0 (NJsonSchema v9.13.22.0 (Newtonsoft.Json v9.0.0.0)) (http://NSwag.org) // //---------------------- @@ -11,7 +11,7 @@ namespace GoldenNumber { #pragma warning disable - [System.CodeDom.Compiler.GeneratedCode("NSwag", "12.0.11.0 (NJsonSchema v9.13.13.0 (Newtonsoft.Json v9.0.0.0))")] + [System.CodeDom.Compiler.GeneratedCode("NSwag", "12.0.15.0 (NJsonSchema v9.13.22.0 (Newtonsoft.Json v9.0.0.0))")] public partial class GoldenNumberService { private string _baseUrl = "https://goldennumber.aiedu.msra.cn"; @@ -148,9 +148,9 @@ namespace GoldenNumber /// User ID /// User nickname, length greater than 20 will be truncated /// A server side error occurred. - public System.Threading.Tasks.Task SetNickNameAsync(string uid, string nickName) + public System.Threading.Tasks.Task NickNameAsync(string uid, string nickName) { - return SetNickNameAsync(uid, nickName, System.Threading.CancellationToken.None); + return NickNameAsync(uid, nickName, System.Threading.CancellationToken.None); } /// Set nickname @@ -158,7 +158,7 @@ namespace GoldenNumber /// User nickname, length greater than 20 will be truncated /// A server side error occurred. /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. - public async System.Threading.Tasks.Task SetNickNameAsync(string uid, string nickName, System.Threading.CancellationToken cancellationToken) + public async System.Threading.Tasks.Task NickNameAsync(string uid, string nickName, System.Threading.CancellationToken cancellationToken) { var urlBuilder_ = new System.Text.StringBuilder(); urlBuilder_.Append(BaseUrl != null ? BaseUrl.TrimEnd('/') : "").Append("/api/NickName?"); @@ -495,9 +495,9 @@ namespace GoldenNumber /// Room ID /// If this parameter is empty, use the default room 0 /// A server side error occurred. - public System.Threading.Tasks.Task GetStateAsync(string uid, int? roomid) + public System.Threading.Tasks.Task StateAsync(string uid, int? roomid) { - return GetStateAsync(uid, roomid, System.Threading.CancellationToken.None); + return StateAsync(uid, roomid, System.Threading.CancellationToken.None); } /// Get game status @@ -506,7 +506,7 @@ namespace GoldenNumber /// If this parameter is empty, use the default room 0 /// A server side error occurred. /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. - public async System.Threading.Tasks.Task GetStateAsync(string uid, int? roomid, System.Threading.CancellationToken cancellationToken) + public async System.Threading.Tasks.Task StateAsync(string uid, int? roomid, System.Threading.CancellationToken cancellationToken) { var urlBuilder_ = new System.Text.StringBuilder(); urlBuilder_.Append(BaseUrl != null ? BaseUrl.TrimEnd('/') : "").Append("/api/State?"); @@ -717,9 +717,9 @@ namespace GoldenNumber /// Room ID /// If this parameter is empty, use the default room 0 /// A server side error occurred. - public System.Threading.Tasks.Task GetTodayGoldenListAsync(int? roomid) + public System.Threading.Tasks.Task TodayGoldenListAsync(int? roomid) { - return GetTodayGoldenListAsync(roomid, System.Threading.CancellationToken.None); + return TodayGoldenListAsync(roomid, System.Threading.CancellationToken.None); } /// Get history of golden numbers @@ -727,7 +727,7 @@ namespace GoldenNumber /// If this parameter is empty, use the default room 0 /// A server side error occurred. /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. - public async System.Threading.Tasks.Task GetTodayGoldenListAsync(int? roomid, System.Threading.CancellationToken cancellationToken) + public async System.Threading.Tasks.Task TodayGoldenListAsync(int? roomid, System.Threading.CancellationToken cancellationToken) { var urlBuilder_ = new System.Text.StringBuilder(); urlBuilder_.Append(BaseUrl != null ? BaseUrl.TrimEnd('/') : "").Append("/api/TodayGoldenList?"); @@ -817,9 +817,9 @@ namespace GoldenNumber /// Room ID /// If this parameter is empty, use the default room 0 /// A server side error occurred. - public System.Threading.Tasks.Task GetTodayNumbersAsync(int? roomid) + public System.Threading.Tasks.Task TodayNumbersAsync(int? roomid) { - return GetTodayNumbersAsync(roomid, System.Threading.CancellationToken.None); + return TodayNumbersAsync(roomid, System.Threading.CancellationToken.None); } /// Get history numbers submitted by players @@ -827,7 +827,7 @@ namespace GoldenNumber /// If this parameter is empty, use the default room 0 /// A server side error occurred. /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. - public async System.Threading.Tasks.Task GetTodayNumbersAsync(int? roomid, System.Threading.CancellationToken cancellationToken) + public async System.Threading.Tasks.Task TodayNumbersAsync(int? roomid, System.Threading.CancellationToken cancellationToken) { var urlBuilder_ = new System.Text.StringBuilder(); urlBuilder_.Append(BaseUrl != null ? BaseUrl.TrimEnd('/') : "").Append("/api/TodayNumbers?"); @@ -917,9 +917,9 @@ namespace GoldenNumber /// Room ID /// If this parameter is empty, use the default room 0 /// A server side error occurred. - public System.Threading.Tasks.Task GetTodayScoreAsync(int? roomid) + public System.Threading.Tasks.Task TodayScoreAsync(int? roomid) { - return GetTodayScoreAsync(roomid, System.Threading.CancellationToken.None); + return TodayScoreAsync(roomid, System.Threading.CancellationToken.None); } /// Get players' score @@ -927,7 +927,7 @@ namespace GoldenNumber /// If this parameter is empty, use the default room 0 /// A server side error occurred. /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. - public async System.Threading.Tasks.Task GetTodayScoreAsync(int? roomid, System.Threading.CancellationToken cancellationToken) + public async System.Threading.Tasks.Task TodayScoreAsync(int? roomid, System.Threading.CancellationToken cancellationToken) { var urlBuilder_ = new System.Text.StringBuilder(); urlBuilder_.Append(BaseUrl != null ? BaseUrl.TrimEnd('/') : "").Append("/api/TodayScore?"); @@ -1024,9 +1024,9 @@ namespace GoldenNumber /// The default value is 0, indicating that the old historical data is queried from the round startid. /// Another value is 1, indicating that the newer data is queried from the round startrid /// A server side error occurred. - public System.Threading.Tasks.Task GetHistoryAsync(int? roomid, string startrid, int? count, int? direction) + public System.Threading.Tasks.Task HistoryAsync(int? roomid, string startrid, int? count, int? direction) { - return GetHistoryAsync(roomid, startrid, count, direction, System.Threading.CancellationToken.None); + return HistoryAsync(roomid, startrid, count, direction, System.Threading.CancellationToken.None); } /// Get pagination history data @@ -1041,7 +1041,7 @@ namespace GoldenNumber /// Another value is 1, indicating that the newer data is queried from the round startrid /// A server side error occurred. /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. - public async System.Threading.Tasks.Task GetHistoryAsync(int? roomid, string startrid, int? count, int? direction, System.Threading.CancellationToken cancellationToken) + public async System.Threading.Tasks.Task HistoryAsync(int? roomid, string startrid, int? count, int? direction, System.Threading.CancellationToken cancellationToken) { var urlBuilder_ = new System.Text.StringBuilder(); urlBuilder_.Append(BaseUrl != null ? BaseUrl.TrimEnd('/') : "").Append("/api/History?"); @@ -1177,7 +1177,7 @@ namespace GoldenNumber - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.13.0 (Newtonsoft.Json v9.0.0.0)")] + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.22.0 (Newtonsoft.Json v9.0.0.0)")] public partial class UserRspModel { /// User ID in the format of Guid @@ -1200,7 +1200,7 @@ namespace GoldenNumber } - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.13.0 (Newtonsoft.Json v9.0.0.0)")] + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.22.0 (Newtonsoft.Json v9.0.0.0)")] public partial class BadRequestRspModel { /// Error message @@ -1219,7 +1219,7 @@ namespace GoldenNumber } - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.13.0 (Newtonsoft.Json v9.0.0.0)")] + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.22.0 (Newtonsoft.Json v9.0.0.0)")] public partial class NewRoomRspModel { /// Room ID @@ -1238,7 +1238,7 @@ namespace GoldenNumber } - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.13.0 (Newtonsoft.Json v9.0.0.0)")] + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.22.0 (Newtonsoft.Json v9.0.0.0)")] public partial class BaseRspModel { /// The current round ID in the current room @@ -1267,7 +1267,7 @@ namespace GoldenNumber } - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.13.0 (Newtonsoft.Json v9.0.0.0)")] + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.22.0 (Newtonsoft.Json v9.0.0.0)")] public partial class StateRspModel : BaseRspModel { /// User ID @@ -1336,7 +1336,7 @@ namespace GoldenNumber } - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.13.0 (Newtonsoft.Json v9.0.0.0)")] + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.22.0 (Newtonsoft.Json v9.0.0.0)")] public partial class SubmitRspModel { public string ToJson() @@ -1351,7 +1351,7 @@ namespace GoldenNumber } - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.13.0 (Newtonsoft.Json v9.0.0.0)")] + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.22.0 (Newtonsoft.Json v9.0.0.0)")] public partial class TodayGoldenListRspModel { /// Room ID @@ -1374,7 +1374,7 @@ namespace GoldenNumber } - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.13.0 (Newtonsoft.Json v9.0.0.0)")] + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.22.0 (Newtonsoft.Json v9.0.0.0)")] public partial class TodayNumbersRspModel { /// Room ID @@ -1403,7 +1403,7 @@ namespace GoldenNumber } - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.13.0 (Newtonsoft.Json v9.0.0.0)")] + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.22.0 (Newtonsoft.Json v9.0.0.0)")] public partial class UserNumber { /// User index number, the same user index number indicates the number submitted by the same user in different rounds @@ -1434,13 +1434,18 @@ namespace GoldenNumber } - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.13.0 (Newtonsoft.Json v9.0.0.0)")] + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.22.0 (Newtonsoft.Json v9.0.0.0)")] public partial class TodayScoreRspModel { /// Player score list [Newtonsoft.Json.JsonProperty("scoreList", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] public System.Collections.Generic.ICollection ScoreList { get; set; } + /// Date + [Newtonsoft.Json.JsonProperty("date", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required(AllowEmptyStrings = true)] + public System.DateTimeOffset Date { get; set; } + public string ToJson() { return Newtonsoft.Json.JsonConvert.SerializeObject(this); @@ -1453,7 +1458,7 @@ namespace GoldenNumber } - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.13.0 (Newtonsoft.Json v9.0.0.0)")] + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.22.0 (Newtonsoft.Json v9.0.0.0)")] public partial class UserScore { /// User ID @@ -1484,7 +1489,7 @@ namespace GoldenNumber } - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.13.0 (Newtonsoft.Json v9.0.0.0)")] + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.22.0 (Newtonsoft.Json v9.0.0.0)")] public partial class HistoryRspModel { /// Array of rounds @@ -1508,7 +1513,7 @@ namespace GoldenNumber } - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.13.0 (Newtonsoft.Json v9.0.0.0)")] + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.22.0 (Newtonsoft.Json v9.0.0.0)")] public partial class RoundNumbers { /// Round ID @@ -1544,7 +1549,7 @@ namespace GoldenNumber } - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.13.0 (Newtonsoft.Json v9.0.0.0)")] + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "9.13.22.0 (Newtonsoft.Json v9.0.0.0)")] public partial class UserNumber2 { /// User ID @@ -1575,7 +1580,7 @@ namespace GoldenNumber } - [System.CodeDom.Compiler.GeneratedCode("NSwag", "12.0.11.0 (NJsonSchema v9.13.13.0 (Newtonsoft.Json v9.0.0.0))")] + [System.CodeDom.Compiler.GeneratedCode("NSwag", "12.0.15.0 (NJsonSchema v9.13.22.0 (Newtonsoft.Json v9.0.0.0))")] public partial class SwaggerException : System.Exception { public int StatusCode { get; private set; } @@ -1598,7 +1603,7 @@ namespace GoldenNumber } } - [System.CodeDom.Compiler.GeneratedCode("NSwag", "12.0.11.0 (NJsonSchema v9.13.13.0 (Newtonsoft.Json v9.0.0.0))")] + [System.CodeDom.Compiler.GeneratedCode("NSwag", "12.0.15.0 (NJsonSchema v9.13.22.0 (Newtonsoft.Json v9.0.0.0))")] public partial class SwaggerException : SwaggerException { public TResult Result { get; private set; } diff --git a/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/BotDemo/Program.cs b/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/BotDemo/Program.cs index cff7fda3..ea9db2e1 100644 --- a/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/BotDemo/Program.cs +++ b/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/BotDemo/Program.cs @@ -5,6 +5,7 @@ using GoldenNumber; using System; using System.Collections.Generic; using System.Diagnostics; +using System.IO; using System.Linq; using System.Net.Http; using System.Text; @@ -16,12 +17,19 @@ namespace BotDemo { static void Main(string[] args) { - Console.WriteLine("Input room id: "); - string inputRoomId = Console.ReadLine(); int roomId = 0; - if (!int.TryParse(inputRoomId, out roomId)) + + // Read roomid from args --room + var index = args.ToList().FindIndex(item => item.Equals("--room", StringComparison.OrdinalIgnoreCase)); + if (index < 0 || args.Length <= index + 1 || !int.TryParse(args[index + 1], out roomId)) { - Console.WriteLine("Parse room id failed, default join in to room 0"); + // Input the roomid if there is no roomid in args + Console.WriteLine("Input room id: "); + string inputRoomId = Console.ReadLine(); + if (!int.TryParse(inputRoomId, out roomId)) + { + Console.WriteLine("Parse room id failed, default join in to room 0"); + } } RunBot(roomId).Wait(); @@ -57,21 +65,40 @@ namespace BotDemo static async Task RunBot(int roomId) { GoldenNumberService service = new GoldenNumberService(new HttpClient()); - service.BaseUrl = "https://goldennumber.aiedu.msra.cn/"; + service.BaseUrl = "https://goldennumber.aiedu.msra.cn"; try { - // Create a player - var user = await service.NewUserAsync($"AI Player {new Random().Next() % 10000}"); - var userId = user.UserId; - Console.WriteLine($"Player: {user.NickName} Id: {user.UserId}"); + var userInfoFile = "userinfo.txt"; + var userId = string.Empty; + var nickName = string.Empty; + + try + { + // Use an exist player + var userInfo = File.ReadAllText(userInfoFile).Split(','); + userId = userInfo[0]; + nickName = userInfo[1]; + + Console.WriteLine($"Use an exist player: {nickName} Id: {userId}"); + } + catch (Exception) + { + // Create a new player + var user = await service.NewUserAsync($"AI Player {new Random().Next() % 10000}"); + userId = user.UserId; + nickName = user.NickName; + Console.WriteLine($"Create a new player: {nickName} Id: {userId}"); + + File.WriteAllText(userInfoFile, $"{userId},{nickName}"); + } Console.WriteLine($"Room id: {roomId}"); while (true) { // Get the room state - var state = await service.GetStateAsync(userId, roomId); + var state = await service.StateAsync(userId, roomId); if (state.State == 2) { @@ -101,10 +128,10 @@ namespace BotDemo continue; } - Console.WriteLine($"This is round {state.FinishedRoundCount + 1}"); + Console.WriteLine($"\r\nThis is round {state.FinishedRoundCount + 1}"); // Get history of golden numbers - var todayGoldenList = await service.GetTodayGoldenListAsync(roomId); + var todayGoldenList = await service.TodayGoldenListAsync(roomId); if (todayGoldenList.GoldenNumberList.Count != 0) { diff --git a/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/GenerationClientCode/App.config b/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/GenerationClientCode/App.config new file mode 100644 index 00000000..731f6de6 --- /dev/null +++ b/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/GenerationClientCode/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/GenerationClientCode/GenerationClientCode.csproj b/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/GenerationClientCode/GenerationClientCode.csproj new file mode 100644 index 00000000..9de15081 --- /dev/null +++ b/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/GenerationClientCode/GenerationClientCode.csproj @@ -0,0 +1,80 @@ + + + + + Debug + AnyCPU + {A06392D5-4596-4AB3-84AB-86CFBCD13DD5} + Exe + GenerationClientCode + GenerationClientCode + v4.6.1 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\DotLiquid.2.0.254\lib\net45\DotLiquid.dll + + + ..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll + + + ..\packages\NJsonSchema.9.13.22\lib\net45\NJsonSchema.dll + + + ..\packages\NJsonSchema.CodeGeneration.9.13.22\lib\net451\NJsonSchema.CodeGeneration.dll + + + ..\packages\NJsonSchema.CodeGeneration.CSharp.9.13.22\lib\net451\NJsonSchema.CodeGeneration.CSharp.dll + + + ..\packages\NSwag.CodeGeneration.12.0.15\lib\net451\NSwag.CodeGeneration.dll + + + ..\packages\NSwag.CodeGeneration.CSharp.12.0.15\lib\net451\NSwag.CodeGeneration.CSharp.dll + + + ..\packages\NSwag.Core.12.0.15\lib\net45\NSwag.Core.dll + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/GenerationClientCode/Program.cs b/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/GenerationClientCode/Program.cs new file mode 100644 index 00000000..8867cab2 --- /dev/null +++ b/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/GenerationClientCode/Program.cs @@ -0,0 +1,43 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using NSwag; +using NSwag.CodeGeneration.CSharp; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace GenerationClientCode +{ + class Program + { + static void Main(string[] args) + { + Generate().Wait(); + } + + static async Task Generate() + { + var document = await SwaggerDocument.FromUrlAsync("https://goldennumber.aiedu.msra.cn/swagger/v1%20-%20English/swagger.json"); + + var settings = new SwaggerToCSharpClientGeneratorSettings + { + ClassName = "GoldenNumberService", + CSharpGeneratorSettings = + { + Namespace = "GoldenNumber" + } + }; + + var generator = new SwaggerToCSharpClientGenerator(document, settings); + var code = generator.GenerateFile(); + + var copyright = "// Copyright (c) Microsoft. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\r\n\r\n"; + + File.WriteAllText("GoldenNumberService.cs", copyright + code.Replace("\r\n", "\n").Replace("\n", "\r\n")); + } + } +} diff --git a/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/GenerationClientCode/Properties/AssemblyInfo.cs b/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/GenerationClientCode/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..73861e9d --- /dev/null +++ b/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/GenerationClientCode/Properties/AssemblyInfo.cs @@ -0,0 +1,39 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("GenerationClientCode")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("GenerationClientCode")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("a06392d5-4596-4ab3-84ab-86cfbcd13dd5")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 +// 方法是按如下所示使用“*”: : +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/GenerationClientCode/packages.config b/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/GenerationClientCode/packages.config new file mode 100644 index 00000000..8e9ef597 --- /dev/null +++ b/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInCSharp/GenerationClientCode/packages.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInPython/BotDemo.py b/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInPython/BotDemo.py index 0bc9d052..0a0dcab7 100644 --- a/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInPython/BotDemo.py +++ b/C-开发工具与环境/微软黄金点程序工具/OnlineGame/BotDemoInPython/BotDemo.py @@ -7,6 +7,7 @@ from pyswagger.contrib.client.requests import Client import random import time +import argparse def GeneratePredictionNumbers(goldenNumberList, numberCount): number1 = 0.0 @@ -26,34 +27,50 @@ def GeneratePredictionNumbers(goldenNumberList, numberCount): return number1, number2 -def main(): +def main(roomId): host = 'https://goldennumber.aiedu.msra.cn/' jsonpath = '/swagger/v1/swagger.json' app = App._create_(host + jsonpath) client = Client() - roomId = input("Input room id: ") + if not roomId: + # Input the roomid if there is no roomid in args + roomId = input("Input room id: ") + try: + roomId = int(roomId) + except: + roomId = 0 + print('Parse room id failed, default join in to room 0') + + userInfoFile = "userinfo.txt" + userId = None + nickName = None try: - roomId = int(roomId) + # Use an exist player + with open(userInfoFile) as f: + userId, nickName = f.read().split(',')[:2] + print('Use an exist player: ' + nickName + ' Id: ' + userId) except: - roomId = 0 - print('Parse room id failed, default join in to room 0') + # Create a new player + userResp = client.request( + app.op['NewUser']( + nickName='AI Player ' + str(random.randint(0, 9999)) + )) + assert userResp.status == 200 + user = userResp.data + userId = user.userId + nickName = user.nickName + print('Create a new player: ' + nickName + ' Id: ' + userId) - userResp = client.request( - app.op['Default_NewUser']( - nickName='AI Player ' + str(random.randint(0, 9999)) - )) - assert userResp.status == 200 - user = userResp.data - userId = user.userId + with open(userInfoFile, "w") as f: + f.write("%s,%s" % (userId, nickName)) - print('Player: ' + user.nickName + ' Id: ' + userId) print('Room id: ' + str(roomId)) while True: stateResp = client.request( - app.op['Default_GetState']( + app.op['State']( uid=userId, roomid=roomId )) @@ -78,10 +95,10 @@ def main(): time.sleep(1) continue - print('This is round ' + str(state.finishedRoundCount + 1)) + print('\r\nThis is round ' + str(state.finishedRoundCount + 1)) todayGoldenListResp = client.request( - app.op['Default_GetTodayGoldenList']( + app.op['TodayGoldenList']( roomid=roomId )) assert todayGoldenListResp.status == 200 @@ -93,7 +110,7 @@ def main(): if (state.numbers == 2): submitRsp = client.request( - app.op['Default_Submit']( + app.op['Submit']( uid=userId, rid=state.roundId, n1=str(number1), @@ -106,7 +123,7 @@ def main(): else: submitRsp = client.request( - app.op['Default_Submit']( + app.op['Submit']( uid=userId, rid=state.roundId, n1=str(number1) @@ -118,4 +135,9 @@ def main(): if __name__ == '__main__': - main() \ No newline at end of file + + parser = argparse.ArgumentParser() + parser.add_argument('--room', type=int, help='Room ID', required=False) + args = parser.parse_args() + + main(args.room) \ No newline at end of file