用C#窗体做猜数字小游戏

玩法规则

通常由两个人玩,一方出数字,一方猜。出数字的人要想好一个没有重复数字的4个数,不能让猜的人知道。猜的人就可以开始猜。每猜一个数字,出数者就要根据这个数字给出几A几B,其中A前面的数字表示位置正确的数的个数,而B前的数字表示数字正确而位置不对的数的个数。

如正确答案为 5234,而猜的人猜 5346,则是 1A2B,其中有一个5的位置对了,记为1A,而3和4这两个数字对了,而位置没对,因此记为 2B,合起来就是 1A2B。

接着猜的人再根据出题者的几A几B继续猜,直到猜中(即 4A0B)为止。

猜数字游戏通常设有猜测次数的上限。根据计算机测算,如果采用严谨的猜测策略,任何数字最多7次就可猜出(即达到 4A0B)。值得注意的是,在有些地方把次数上限定义为最多几次猜测以后就可以肯定数字是几,但这时或还需要再猜一次才能得到 4A0B 的结果。

标准的猜数字游戏由10个数码(0-9)和4个数位组成。可以通过变化数码或数位来丰富游戏。例如,可以使用9个数码玩4个数位的游戏。

猜数字游戏的一种变体允许重复的数码。这种规则的游戏被称为 Mastermind。其规则大致为:

除了上面的规则外,如果有出现重复的数字,则重复的数字每个也只能算一次,且以最优的结果为准。例如,如正确答案为5543,猜的人猜5255,则在这里不能认为猜测的第一个5对正确答案第二个,根据最优结果为准的原理和每个数字只能有一次的规则,两个比较后应该为1A1B,第一个5位子正确,记为1A;猜测数字中的第三个5或第四个5和答案的第二个5匹配,只能记为1B。当然,如果有猜5267中的第一个5不能与答案中的第二个5匹配,因此只能记作1A0B。

窗体界面

这里用button去控制游戏

显示用了label

 主程序:

namespace WindowsFormsApp7
{public partial class Form1 : Form{public static Form1 form;   //创建一个可以在其他类调用的窗口属性public String[] GuessNum = new String[4];//存放输入的数字public  String[] RightNum = new String[4];//存放正确的数字public Form1(){InitializeComponent();form = this; //赋值给窗口属性}private void beginGame(){//首先清空数组for(int i=0; i<4;i++){GuessNum[i] = null;}label5.Text = null;label6.Text = null;Class1.display(GuessNum);}//开始游戏private void button11_Click(Object sender, EventArgs e){beginGame();Class1.random4(RightNum); //生成四个随机数Class1.display(GuessNum);//调用显示函数}//重新开始private void button12_Click(Object sender, EventArgs e){beginGame();button11_Click(sender, e); //调用开始游戏函数}//确定private void button13_Click(Object sender, EventArgs e){Class1.judgement(GuessNum, RightNum);}//退出游戏private void button14_Click(Object sender, EventArgs e){Application.Exit();//程序退出}//删除private void button15_Click(Object sender, EventArgs e){if (GuessNum[0] == null){return;//整体函数结束}for(int i=GuessNum.Length-1;i>=0;i--){if(GuessNum[i]==null){continue;//跳出本循环}GuessNum[i] = null; //删除数字Class1.display(GuessNum);//调用显示函数break;//结束}}//添加数字private void button3_Click(Object sender, EventArgs e){Class1.AddNum(GuessNum,((Button)sender).Text);//获取button的text并传入}private void button1_Click(Object sender, EventArgs e){Class1.AddNum(GuessNum, ((Button)sender).Text);//获取button的text并传入}private void button2_Click(Object sender, EventArgs e){Class1.AddNum(GuessNum, ((Button)sender).Text);//获取button的text并传入}private void button4_Click(Object sender, EventArgs e){Class1.AddNum(GuessNum, ((Button)sender).Text);//获取button的text并传入}private void button5_Click(Object sender, EventArgs e){Class1.AddNum(GuessNum, ((Button)sender).Text);//获取button的text并传入}private void button6_Click(Object sender, EventArgs e){Class1.AddNum(GuessNum, ((Button)sender).Text);//获取button的text并传入}private void button7_Click(Object sender, EventArgs e){Class1.AddNum(GuessNum, ((Button)sender).Text);//获取button的text并传入}private void button8_Click(Object sender, EventArgs e){Class1.AddNum(GuessNum, ((Button)sender).Text);//获取button的text并传入}private void button9_Click(Object sender, EventArgs e){Class1.AddNum(GuessNum, ((Button)sender).Text);//获取button的text并传入}private void button10_Click(Object sender, EventArgs e){Class1.AddNum(GuessNum, ((Button)sender).Text);//获取button的text并传入}private void Form1_Load(Object sender, EventArgs e){}private void button16_Click(Object sender, EventArgs e){Class1.display(RightNum);}}}

定义了一个类

namespace WindowsFormsApp7
{class Class1{//显示数字方法public static void display(String[] RightNum){//把传进来的值Form1 中的labelForm1.form.label1.Text = RightNum[0];//个位Form1.form.label2.Text = RightNum[1];//十位Form1.form.label3.Text = RightNum[2];//百位Form1.form.label4.Text = RightNum[3];//千位}//写数字public static void AddNum(String[] GuessNum, String wei){if (GuessNum[3] != null){return;         //如果第三位为不为null 跳出次函数}for (int i = 0; i < GuessNum.Length; i++)  //循环赋值{if (GuessNum[i] == null){GuessNum[i] = wei;    //获取传入的label的textdisplay(GuessNum);break;}}}//生成四个不重复的0—9public static void random4(String[] RightNum){//有重复的用goto重复执行ran:Random num = new Random();//生成四个随机数for (int i = 0; i < 4; i++){string ran = num.Next(0,9).ToString();RightNum[i] = ran;}if ((RightNum[0] == RightNum[1])||(RightNum[0] == RightNum[2]) ||(RightNum[0] == RightNum[3]) ||(RightNum[1] == RightNum[2])||(RightNum[1] == RightNum[3]) ||(RightNum[2] == RightNum[3]) ){goto ran;//判断是否存在重复的,一个个比较,这个方法比较有局限}else { return;//结束本函数}}// 判断几A几Bpublic static void judgement(string []GuessNum,String[] RightNum){int A = 0;int B = 0;int C = 0;for(int i=0;i<4;i++){if(GuessNum[i]==RightNum[i]){A++;  //正确的数字和猜的数字按位比较,输出A为位置正确的数字}for(int j=0;j<4;j++){if(GuessNum[i]==RightNum[j])//正确的数字每位都和猜的数字每位比较 一共16次{B++;  //B表示位正确的数字和位置不对但数对的和}    }}C = B - A;//位置不对但数对的个数if(C<=0)//C可能存在负数的情况{C = 0;}Form1.form.label5.Text = A.ToString();Form1.form.label6.Text = C.ToString();}}
}

注意在这里需要把label改成public 因为label在其他类调用的

实际效果

刚学C#程序中还有很多可以补充的,多多指教 。

C#窗体猜数字小游戏AB相关推荐

  1. Python四行代码实现的猜数字小游戏,基于thinker,带GUI界面

    Python四行代码实现的猜数字小游戏,基于thinker,带GUI界面 from tkinter import * from tkinter import messagebox 导入提示框 from ...

  2. Python:有趣的猜数字小游戏

    目录 程序要求 程序源代码 random模块使用 if--elif--else语句介绍 print()的作用 格式化字符(format方法) time模块介绍 结语 程序要求 1.系统将随机生成一个1 ...

  3. Java基于GUI完成的猜数字小游戏

    猜数字小游戏 不废话想看看效果吧! 当我们答对后就会出现: 如果你实在急着想知道答案: 简要说明: 所猜测的数字为1~1000: 只能通过按确定输出答案,未设置Enter键直接输入的监控. 退出请直接 ...

  4. 1.12 实例:猜数字小游戏

    猜数字是一个经典的小游戏,程序先产生一个随机数,然后用户输入数字,程序将输入的数字与随机数进行对比,给出用户相应的提示信息. 本节实现了一个基于 IO 流的猜数字游戏,游戏中限制玩家游戏次数,游戏试玩 ...

  5. 第三次学JAVA再学不好就吃翔(part28)--猜数字小游戏

    学习笔记,仅供参考 面向对象 猜数字小游戏 随机生成一个1 ~ 100之间的数,我来猜是几: import java.util.Scanner;class GuessNumTest {public s ...

  6. 【iVX 初级工程师培训教程 10篇文拿证】03 事件及猜数字小游戏

    目录 [iVX 初级工程师培训教程 10篇文拿证]01 了解 iVX 完成新年贺卡 [iVX 初级工程师培训教程 10篇文拿证]02 数值绑定及自适应网站制作 [iVX 初级工程师培训教程 10篇文拿 ...

  7. java 做猜数字小游戏_Java Properties类:利用Properties类制作猜数字小游戏

    在学习Random类时我们制作过猜数字小游戏,学习了Properties类后,可以为此游戏添加保存得分记录功能 游戏规则: 玩家可以选择玩游戏还是查看得分 玩游戏: 首先玩家需要选择难度: 难度级别 ...

  8. 猜数字小游戏(随机生成’三剑客‘)

    大家好,我是一只励志要翻身的小牛,废话少说,下面就给大家介绍第一个C语言小游戏--猜数字小游戏! 文章目录 一.游戏规则 二.效果展示 三.游戏设计思路 四.游戏交互界面 1.创建游戏菜单 2.创建游 ...

  9. C++猜数字小游戏1.0.1版猜数字1.1---国庆特版(双人战斗版)

    (回忆上一篇开头--) 国庆在家,你觉得无聊吗???                                                                          ...

最新文章

  1. 一个内核网络漏洞详解|容器逃逸
  2. spark 2.x ML概念与应用
  3. OA项目10:部门管理的三个细节问题的解决及处理懒加载问题
  4. LeetCode 1156. 单字符重复子串的最大长度
  5. js 点击闭包_学习Javascript闭包(Closure)
  6. LeetCode - 题 70 跳台阶 - 具体思路与python解法
  7. ARM Linux 3.x的设备树
  8. emmx用xmind打开_XMind: ZEN 2020 正式更名 XMind 2020!新名字,新招式。
  9. libevent参考手册 系列文章
  10. Segment Routing MPLS介绍
  11. android自定义sufaceview,Android自定义SurfaceView实现画板功能
  12. linux内存条查询,linux查询内存命令
  13. 【思想感悟】站在巨人的肩膀上
  14. LWC 66: 759. Employee Free Time
  15. IAP(程序内购买): 完全攻略
  16. 蓝牙技术|蓝牙助力智能手表的未来发展
  17. 假期小记 | 要一心一意搞事业
  18. 我是如何用一行代码表白学妹~❤520情人节送女朋友的3D樱花雨相册礼物❤~(程序员表白专属)...
  19. 计算机考研跨审计好跨嘛,跨专业考研,快来看看你符不符合条件
  20. 网络流(最大流和最小费用流)

热门文章

  1. 计量经济学之时间序列的平稳性、单位根检验、协整检验、时间序列数据的一般处理流程
  2. 手把手教你脑电波采集及信号处理分析 - 知乎
  3. js向jsf调用后台方法并传递参数
  4. ios 自定义键盘的按键音效和震动效果
  5. 通过替换音效文件,实现在安卓手机上使用wp/nokia/wm10按键键盘声音
  6. 前端自动化测试之chai.js断言库
  7. 大数据时代对存储发展的要求有哪些
  8. Chrome浏览器更新
  9. 七彩虹计算机主板维修,七彩虹C .H61U v28主板维修一例
  10. python 爬虫模拟点击_爬虫——模拟点击动态页面