在控制台中实现“单词竞猜”游戏 C# 猜词游戏

				版权声明:本文为博主原创文章,未经博主允许不得转载。					https://blog.csdn.net/u011528448/article/details/24670471				</div><link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css"><link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css"><div class="htmledit_views" id="content_views">

  场景

设计规则

a) 这是一个单人玩的游戏。

b) 可以分三个级别,分别是高级、中级、低级。不同级别对应的单词系列也不一样。要求一旦玩家选定了要玩的级别,应当先提示它关于此级别最高分是多少,是谁创下的记录,然后再开始游戏。

c) 游戏开始后,应显示如下信息:

i. 剩余可用竞猜次数(竞猜次数的初始值等于被猜的单词遗漏的字符数加5),

ii. 玩家所得分数:完全猜对一个单词得一分。

iii. 已用时间:要每10秒更新一次已用时间的显示。

iv. 竞猜的单词。只显示每个单词的部分字母,并且这些字母是随机显示出来的。刻意遗漏的字母应当使用*替代。应当有多少字母被显示出来,视单词的长度而定,如果单词本身较长,则多显示,反之亦然。

d) 游戏结束前,比较一家玩家的成绩与文件中存储的词汇通英雄的成绩,如果前者成绩更高,需要将如下信息保存在文件中。(成绩:猜对的单词数*100/一共花费的时间)

i. 玩家姓名

ii. 所用时间

iii. 分数。

另外,要注意的是,如果发现他们分数相同就比较使用的时间。

还有,不同级别的词汇通英雄信息应当分别放在不同的文件中。

e) 如果玩家在给定次数内(选取20次)没有猜出5个单词,则游戏结束。

实验方法

参照学生信息管理系统。

1.    创建一个线程专门负责时间提醒

2.    采用两种用户,管理员负责将游戏初始化,更新词汇表,之前自动更新和逐个输入

3.    玩家玩游戏

单词竞猜 
Program类主函数
TextOperateClass类文本操作类

 玩家主函数:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. using System.Collections;
  7. using System.Timers;
  8. using System.Threading;
  9. namespace WordsPlay
  10. {
  11. class Program
  12. {
  13. static DateTime initTime;
  14. static void Main(string[] args)
  15. {
  16. Console.WriteLine("------------------------------------------------");
  17. Console.WriteLine("------------ ------------");
  18. Console.WriteLine("------------ 欢迎来到单词竞猜游戏 ------------");
  19. Console.WriteLine("------------ CopyRight:Sunsea ------------");
  20. Console.WriteLine("------------ ------------");
  21. Console.WriteLine("------------------------------------------------");
  22. Console.WriteLine("请输入你的姓名:");
  23. string username = string.Format(Console.ReadLine()); //玩家姓名
  24. Console.WriteLine("请选择游戏级别:\n\t1.高级 \n\t2.中级 \n\t3.低级");
  25. int grade = int.Parse(Console.ReadLine()); //玩家选择的等级
  26. while (grade < 1 || grade > 3)
  27. {
  28. Console.WriteLine("请输入1~3的正整数!");
  29. grade = int.Parse(Console.ReadLine());
  30. }
  31. //查询最高分
  32. string s = TextOperateClass.ReadMaxScore(grade);
  33. int maxScore = Convert.ToInt16(s.Substring(s.IndexOf("#") + 1, s.LastIndexOf("#") - s.IndexOf("#")-1));
  34. string maxScoreUsername = s.Substring(s.LastIndexOf("#") + 1, s.Length - s.LastIndexOf("#") - 1);
  35. //输出记录信息
  36. string maxScoreMessage = string.Format("当前最高分记录{0}分,记录保持者{1}",maxScore,maxScoreUsername);
  37. Console.WriteLine(maxScoreMessage);
  38. //初始化玩家分数,没猜对一个得一分
  39. int playerScore = 0;
  40. //猜词次数
  41. int guessRightNums = 0;
  42. //可以无限制猜词,最大循环次数1000
  43. int countWhile = 1000;
  44. //如果在20次内没能猜正5个,退出
  45. initTime = DateTime.Now; //记录猜词起始时间
  46. //单独线程用于定时
  47. Thread timeThread = new Thread(TimeRemind);
  48. timeThread.Start(); //在主线程调用TimeRemind方法
  49. while (countWhile>0)
  50. {
  51. string fullWord = TextOperateClass.ReadFullWords(grade); //获取一个完整单词
  52. string vagueWord = TextOperateClass.VagueWords(fullWord); //获取一个被*替换字母的单词
  53. Console.WriteLine("请猜{0}的完整拼写:",vagueWord);
  54. //一个单词有6次参测机会
  55. int SingleWordGuessNums = 6;
  56. while (SingleWordGuessNums>0)
  57. {
  58. string playerGuessWord = Console.ReadLine(); //获取玩家猜测
  59. if (playerGuessWord.Equals(fullWord))
  60. {
  61. guessRightNums++;
  62. break;
  63. }
  64. else
  65. {
  66. Console.WriteLine("你的猜测有误,是否放弃本单词猜测:放弃<y>,不放弃继续猜!");
  67. try
  68. {
  69. //如果输入字符超过一个,抛出异常
  70. if (char.Parse(Console.ReadLine()) == 'y')
  71. break;
  72. }
  73. catch (Exception)
  74. {
  75. Console.WriteLine("输入错误");
  76. }
  77. }
  78. SingleWordGuessNums--;
  79. }
  80. //判断是继续还是退出
  81. string isContinue;
  82. while (true)
  83. {
  84. Console.WriteLine("继续请输<y>,退出请输<n>?");
  85. isContinue = Console.ReadLine();
  86. if (isContinue != "y" && isContinue != "n" && isContinue != "Y" && isContinue != "N")
  87. Console.WriteLine("请按提示正确输入,是否继续!");
  88. else
  89. break;
  90. }
  91. if (isContinue == "n")
  92. break;
  93. //猜词次数自减
  94. countWhile--;
  95. //如果在20次中没猜正5个,游戏强退
  96. if (countWhile <= 1000 - 20 && guessRightNums < 5)
  97. {
  98. Console.WriteLine("Sorry,你在20个单词中猜正确的单词不达5个,游戏结束");
  99. break;
  100. }
  101. }
  102. //获取用时
  103. DateTime endTime = DateTime.Now;
  104. TimeSpan userTime = endTime - initTime;
  105. double userTimeSeconds = userTime.TotalSeconds;
  106. #region
  107. //更新最高分
  108. if (guessRightNums > maxScore)
  109. {
  110. TextOperateClass.UpdataMaxScore(grade, guessRightNums, username);
  111. Console.WriteLine("恭喜你打破了得分记录");
  112. }
  113. string messageMaxScore = string.Format("你<{0}>在{1}中的得分是{2}", username, TextOperateClass.GradeString(grade),guessRightNums);
  114. Console.WriteLine(messageMaxScore);
  115. #endregion
  116. //词汇通英雄操作区域
  117. #region
  118. //查询词汇通英雄成绩
  119. string wordsHero =TextOperateClass.ReadMaxPerformance(grade);
  120. int maxPerformance = Convert.ToInt16(wordsHero.Substring(wordsHero.IndexOf("#", 3) + 1, wordsHero.LastIndexOf("#") - wordsHero.IndexOf("#", 3) - 1));
  121. int totalTime =Convert.ToInt16( wordsHero.Substring(wordsHero.LastIndexOf("#") + 1, wordsHero.Length - wordsHero.LastIndexOf("#") - 1));
  122. //成绩=猜对的单词数*100/一共花费的时间;
  123. playerScore = guessRightNums * 100 / (int)userTimeSeconds;
  124. //更新成绩
  125. if (playerScore > maxPerformance || (playerScore == maxPerformance && (int)userTimeSeconds < totalTime))
  126. {
  127. messageMaxScore = string.Format("恭喜你<{0}>成为{1}中新的词汇通英雄,你的成绩{2},用时{3}秒", username, TextOperateClass.GradeString(grade), playerScore, (int)userTimeSeconds);
  128. Console.WriteLine(messageMaxScore);
  129. TextOperateClass.UpdataMaxperformance(grade, username, playerScore, (int)userTimeSeconds);
  130. }
  131. #endregion
  132. timeThread.Abort();
  133. Console.WriteLine("------------------------------------------------");
  134. Console.WriteLine("------------ ------------");
  135. Console.WriteLine("----------- 欢迎再来,按任意键结束 -----------");
  136. Console.WriteLine("------------ CopyRight:Sunsea ------------");
  137. Console.WriteLine("------------ ------------");
  138. Console.Write("------------------------------------------------");
  139. Console.ReadLine();
  140. }
  141. //定时提醒 10s
  142. public static void TimeRemind()
  143. {
  144. System.Timers.Timer t = new System.Timers.Timer();
  145. t.Elapsed += new ElapsedEventHandler(writesecond);
  146. t.Interval = 10000;
  147. t.Enabled = true;
  148. Console.ReadLine();
  149. }
  150. public static void writesecond(object source, ElapsedEventArgs e)
  151. {
  152. TimeSpan userTime = DateTime.Now - initTime;
  153. Console.WriteLine(string.Format("已用时{0}秒",(int)userTime.TotalSeconds));
  154. }
  155. }
  156. }

文本操作类:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. using System.Collections;
  7. using System.Text.RegularExpressions;
  8. using System.Timers;
  9. namespace WordsPlay
  10. {
  11. public class TextOperateClass
  12. {
  13. //获取级别
  14. public static string GradeString(int grade)
  15. {
  16. string gradeString = ;
  17. switch (grade)
  18. {
  19. case 1:
  20. gradeString = "高级";
  21. break;
  22. case 2:
  23. gradeString = "中级";
  24. break;
  25. case 3:
  26. gradeString = "初级";
  27. break;
  28. }
  29. return gradeString;
  30. }
  31. //根据级别获取单词存储路径
  32. private static string GradePath(int grade)
  33. {
  34. string gradePath = ;
  35. switch (grade)
  36. {
  37. case 1:
  38. gradePath =@"e:\01111139\HighLevelWord.txt";
  39. break;
  40. case 2:
  41. gradePath = @"e:\01111139\MiddleLevelWord.txt";
  42. break;
  43. case 3:
  44. gradePath = @"e:\01111139\LowLevelWord.txt";
  45. break;
  46. }
  47. return gradePath;
  48. }
  49. //按级别读取最高分
  50. public static string ReadMaxScore(int grade)
  51. {
  52. //获取级别
  53. string gradeString = GradeString(grade);
  54. FileStream fs = new FileStream(@"e:\01111139\MaxScore.txt",FileMode.Open,FileAccess.Read);
  55. StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);
  56. string line = ;
  57. while ((line = sr.ReadLine()) != )
  58. {
  59. int count = line.IndexOf(gradeString);
  60. if (count == 0)
  61. {
  62. sr.Close();
  63. fs.Close();
  64. return line;
  65. }
  66. }
  67. //暂时没有记录
  68. sr.Close();
  69. fs.Close();
  70. return ;
  71. }
  72. //读取最高成绩
  73. public static string ReadMaxPerformance(int grade)
  74. {
  75. //获取级别
  76. string gradeString = GradeString(grade);
  77. FileStream fs = new FileStream(@"e:\01111139\WordsHero.txt", FileMode.Open, FileAccess.Read);
  78. StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);
  79. string line = ;
  80. while ((line = sr.ReadLine()) != )
  81. {
  82. int count = line.IndexOf(gradeString);
  83. if (count == 0)
  84. {
  85. sr.Close();
  86. fs.Close();
  87. return line;
  88. }
  89. }
  90. //暂时没有记录
  91. sr.Close();
  92. fs.Close();
  93. return ;
  94. }
  95. //更新得分 //grade及为对应的行数
  96. public static void UpdataMaxScore(int grade, int score, string username)
  97. {
  98. //获取级别
  99. string gradeString = GradeString(grade);
  100. string newLineValue = string.Format("{0}#{1}#{2}", gradeString, score, username);//要更新的行
  101. FileStream fs = new FileStream(@"e:\01111139\MaxScore.txt", FileMode.Open, FileAccess.Read);
  102. StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);
  103. //定义一个数组存放内容
  104. string[] maxScoreLine = new string[3];
  105. string line;
  106. for (int i = 0; (line = sr.ReadLine()) != ; i++)
  107. {
  108. maxScoreLine[i] = line;
  109. }
  110. sr.Close();
  111. fs.Close();
  112. //清空文档内容
  113. FileStream fsw = new FileStream(@"e:\01111139\MaxScore.txt", FileMode.Create, FileAccess.Write); //覆盖创建
  114. StreamWriter sw = new StreamWriter(fsw, System.Text.Encoding.Default);
  115. string subLine;
  116. foreach (string str in maxScoreLine)
  117. {
  118. subLine = str.Substring(0, 2);
  119. if (subLine.Equals(gradeString))
  120. {
  121. sw.WriteLine(newLineValue);
  122. }
  123. else
  124. {
  125. sw.WriteLine(str);
  126. }
  127. }
  128. sw.Close();
  129. fsw.Close();
  130. }
  131. //更新成绩
  132. public static void UpdataMaxperformance(int grade, string username, int playerScore, double userTimeSeconds)
  133. {
  134. //获取级别
  135. string gradeString = GradeString(grade);
  136. string newLineValue = string.Format("{0}#{1}#{2}#{3}", gradeString, username, playerScore, userTimeSeconds);//要更新的行
  137. FileStream fs = new FileStream(@"e:\01111139\WordsHero.txt", FileMode.Open, FileAccess.Read);
  138. StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);
  139. //定义一个数组存放内容
  140. string[] maxScoreLine = new string[3];
  141. string line;
  142. for (int i = 0; (line = sr.ReadLine()) != ; i++)
  143. {
  144. maxScoreLine[i] = line;
  145. }
  146. sr.Close();
  147. fs.Close();
  148. //清空文档内容
  149. FileStream fsw = new FileStream(@"e:\01111139\WordsHero.txt", FileMode.Create, FileAccess.Write);
  150. StreamWriter sw = new StreamWriter(fsw, System.Text.Encoding.Default);
  151. string subLine;
  152. foreach (string str in maxScoreLine)
  153. {
  154. subLine = str.Substring(0, 2);
  155. if (subLine.Equals(gradeString))
  156. {
  157. sw.WriteLine(newLineValue);
  158. }
  159. else
  160. {
  161. sw.WriteLine(str);
  162. }
  163. }
  164. sw.Close();
  165. fsw.Close();
  166. }
  167. //读取单词,
  168. //根据读取到的单词,将单词模糊化
  169. public static string VagueWords(string fullWord)
  170. {
  171. //模糊化处理
  172. //将单词转化成字符数组
  173. char[] arrWord = fullWord.ToCharArray();
  174. //*代替字符数是单词长度的1/3
  175. int nums = arrWord.Length / 3;
  176. List<int> myListRdm = new List<int>();
  177. myListRdm = CreateNum(nums,0,arrWord.Length);
  178. //将随机数对应的位置,字母特换成*
  179. int index=0;
  180. for (int i = 0; i < myListRdm.Count; i++)
  181. {
  182. index=myListRdm[i];
  183. arrWord[index] = '*';
  184. }
  185. //将arrWord[]数组中的元素生成字符串
  186. StringBuilder st = new StringBuilder();
  187. foreach (char c in arrWord)
  188. {
  189. st = st.Append(c);
  190. }
  191. string vagueWord = st.ToString();
  192. return vagueWord; //可以根据单词长度获得遗漏的字符数
  193. }
  194. //在【min,max】区间中产生num个不相等的随机数,存在数组中,返回
  195. private static List<int> CreateNum(int nums,int min,int max)
  196. {
  197. List<int> MyList = new List<int>();
  198. Random random = new Random();
  199. //循环的次数为产生随机数个数
  200. while (true)
  201. {
  202. int i = random.Next(min, max);
  203. if (!MyList.Contains(i))
  204. {
  205. if (MyList.Count < nums)
  206. {
  207. MyList.Add(i);
  208. }
  209. else
  210. break;
  211. }
  212. }
  213. return MyList;
  214. }
  215. //返回完整单词
  216. //自行产生随机数读取。随机数的范围是(0,单词总数)
  217. public static string ReadFullWords(int grade)
  218. {
  219. //获取单词获取路径
  220. string gradePath = GradePath(grade);
  221. FileStream fs = new FileStream(gradePath, FileMode.Open, FileAccess.Read);
  222. StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);
  223. string wordsString = sr.ReadToEnd();
  224. //Regex是正则表达式啊的类啊,引用using System.Text.RegularExpressions就可以看到了
  225. string[] wordsArr = Regex.Split(wordsString, " ");
  226. Random rd = new Random();
  227. int num = rd.Next(1, wordsArr.Length);
  228. return wordsArr[num];
  229. }
  230. }
  231. }

说明事项

           1、文本操作乱码问题,运行之前需要在E盘创建01111139文件夹,E:\01111139\*.txt
           2、更新文本文档中的内容可以通过将文本文档读取放在数组中,然后覆盖创建文档,
                更新数组,然后在写回。
           3、这里面用了委托机制,创建一个单独的线程负责时间提醒,个人认为:基于控制台时间提醒不适宜,会导致界面很乱,读者可以考虑删除。
           4、就问题实现要求而言,最高分和词汇通英雄有点重复,做一个即可。

 

这样玩家游戏就能用了,管理员端可以参考下一篇博客《单词竞猜游戏之管理员端》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549322.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

byvoid 神牛的tarjan算法讲解!

[有向图强连通分量] 在有向图G中&#xff0c;如果两个顶点间至少存在一条路径&#xff0c;称两个顶点强连通 (strongly connected)。如果有向图G的每两个顶点都强连通&#xff0c;称G是一个强连通图 。非强连通图有向图的极大强连通子图&#xff0c;称为强连通分量 (strongly …

在Linux下快速搭建LAMP开发平台.doc

1.安装环境操作系统&#xff1a;Red Hat Linux Enterprise AS 4.0 update4数据库&#xff1a;MySQL 5.0.27Web服务器&#xff1a;Apache 2.2.4脚本语言&#xff1a;PHP 5.2.1<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />2.安…

关于NLP你还不会却必须要学会的事儿—NLP实践教程指南第一编

作者 | Dipanjan (DJ) Sarkar 编译 | 姗姗 出品 | 人工智能头条&#xff08;公众号ID&#xff1a;AI_Thinker&#xff09; 【人工智能头条导读】在研究和处理自然语言处理的很多问题时&#xff0c;除了关注各种各样基础的数据&#xff0c;高级的深度学习模型、算法外&#x…

ORACLE中表死锁的处理

在进行数据库管理的过程中,经常会出现数据表被用户的一些不合理操作而导致表被锁定的情况,以下主要介绍如何查找哪些表被哪个用户所锁定,以及如何解除锁定: 1.查找被锁定的表: select object_name,session_id,os_user_name,oracle_username,process,locked_mode,status from v$…

记录重要的NLP学习资源链接

整理一些NLP学习资源(不止NLP&#xff0c;本人主要关注NLP)&#xff0c;如果有更好的&#xff0c;欢迎分享_ NLP 中文自然语言处理相关资料 https://github.com/crownpku/Awesome-Chinese-NLP Contents 列表 Chinese NLP Toolkits 中文NLP工具 Toolkits 综合NLP工具包 Pop…

asp.net文件上传进度条控件(破解版~没有时间限制) 多项自定义

原版只能用30天&#xff0c;这个破解版可以长期用了&#xff08;设置了时间2010-2110&#xff09;. 注册控件&#xff1a;<% Register TagPrefix"fup" Namespace"OboutInc.FileUpload" Assembly"FileUpload" %>调用控件&#xff1a;<fo…

2010年开年的一地鸡毛

2010年开年的一地鸡毛文 小刀马2010年的网络开年一点儿也不顺利&#xff0c;刚刚半月有余&#xff0c;就接连爆发出两个大事。一是百度被黑&#xff0c;李彦宏惊叹地连说史无前例&#xff0c;史无前例。二是谷歌的退出。两大互联网搜索巨头接连“出事”&#xff0c;不知道是不是…

Java中的向下转型与向上转型

java转型问题其实并不复杂&#xff0c;只要记住一句话&#xff1a;父类引用指向子类对象。 什么叫父类引用指向子类对象&#xff0c;且听我慢慢道来. 从2个名词开始说起&#xff1a;向上转型(upcasting)、向下转型(downcasting). 举个例子&#xff1a;有2个类&#xff0c;Fathe…

细粒度审计 FGA

传统的 Oracle 数据库审计选件允许您在宏观级别上跟踪用户在对象上所执行的操作 — 例如&#xff0c;如果您审计对某个表的 SELECT 语句&#xff0c;则可以跟踪是谁从表中选择了数据。但是&#xff0c;您不知道他们选择了什么。利用数据操纵语句 — 如 INSERT、UPDATE 或 DELET…

矩阵连乘问题的算法分析

问题描述&#xff1a;给定n个矩阵&#xff1a;A1,A2,...,An&#xff0c;其中Ai与Ai1是可乘的&#xff0c;i1&#xff0c;2...&#xff0c;n-1。确定计算矩阵连乘积的计算次序&#xff0c;使得依此次序计算矩阵连乘积需要的数乘次数最少。输入数据为矩阵个数和每个矩阵规模&…

等一分钟看了会流泪

转载于:https://blog.51cto.com/hljheiwangwei/269127

Silverlight 解谜游戏 之十六 消失的蒙娜丽莎

在《Silverlight 解谜游戏 之三 消除名单》中我们通过在物品轮廓画出Path 来达到消除物品的效果&#xff0c;由于游戏中的物品都是Office 图片的一部分所以无法使其真正消失&#xff0c;本篇我们将添加一个独立于Office 图片的物品&#xff0c;使其能动态消失。 看看题板上多出…

明令禁止工作“996”,是对“生而为人”的基本尊重

离GitHub上996.ICU项目的发布时间已过去好一段时间了&#xff0c;作为一名计算机专业的在读生&#xff0c;对996有一点体会&#xff0c;最直观的体会就是为了提升技术&#xff0c;连续一个学期在实验室工作超过10个小时。 人民日报发文《被“996”围困的年轻人&#xff0c;像是…

ASP.NET教程5

添加方法&#xff0c;在Sql Server创建表&#xff0c;主表与外键表关联&#xff0c;在asp.net中如何绑定下拉式选单DropDownList&#xff0c;并如何重构DropDownList Web控件&#xff0c;创建SELECT与Insert存储过程&#xff0c;以及应用Transaction事务。 文件格式&#xff1a…

火柴 UVa11375

1.题目描述&#xff1a;点击打开链接 2.解题思路&#xff1a;本题利用递推关系解决。首先可以把“已经使用过的火柴数i”看做状态&#xff0c;可以得到一个图&#xff0c;从前往后每添加一个数字x&#xff0c;就从状态i转移到了ic[x]&#xff0c;其中c[x]代表数字x需要的火柴数…

EntitySpaces2009的开发文档地址

EntitySpaces2009的开发文档地址&#xff0c;开发文档做得还是很不错的&#xff0c;主要的和关键的问题都在其中说明了&#xff0c;比示例做得好。 http://developer.entityspaces.net/documentation/Default.aspx转载于:https://www.cnblogs.com/Rising/archive/2010/01/31/16…

ACM 博弈专题(5种模板)

最近算法课在学博弈论的知识&#xff0c;顺手把算法题中的涉及到博弈论一并总结了 这篇文章的有些内容是参考了大佬的 可能有遗漏。。。。 (一)巴什博弈&#xff08;BAsh Game) 题目模板 只有一堆n个物品两个人轮流取&#xff0c;每次只能取1~m个物品&#xff0c;谁先取完&am…

让sky Driver成为你的可见硬盘

网盘就不用多说了&#xff0c;国内国外的都很多&#xff0c;但是sky Driver以25G的大容量还是吸引着我&#xff0c;看来还是盖茨比较称钱&#xff08;sorry&#xff0c;方言&#xff0c;意思就是nb的意思&#xff09;&#xff0c;但是一向以用户体验非常不错著称的microsoft在这…

初学博弈论

一、巴什博奕(Bash Game) 基本描述&#xff1a; 只有一堆n个石子&#xff0c;两个人轮流从这堆石子中取石子&#xff0c;规定每次至少取一个&#xff0c;最多取m个&#xff0c;最后取完的人获胜。 分析&#xff1a; 当n < m的时候&#xff0c;显然先手获胜&#xff0c;因…

设计模式----Adapter(适配器)

作用: 将一个类的接口转换成客户希望的另外一个接口。Adapt 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 UML示意图 1)采用继承原有接口类的方式 2)采用组合原有接口类的方式 解析: Adapt模式其实就是把完成同样的一个功能但是接口不能兼容的类桥接在一起…