使用C语言实现珠玑妙算Mastermind小游戏

引言

最近玩到过一款十分好玩的益智类桌游——珠玑妙算-Mastermind,这款游戏也出现在热片《拆弹专家2》里,该款游戏就是有四个槽位,而要将6种颜色依次放入槽位之中,然后由出题人反馈正确位置及错误位置正确颜色数,再通过逻辑推理,推出正确的颜色及位置。因为这种游戏为多人游戏,一个人不能自己出题、判断及推理,我在手机上搜找相关游戏却没有找到相应游戏,于是,萌生自主编写的想法。

( Mastermind(珠玑妙算)是一种可供两名玩家使用的密码破译棋盘游戏。在1970年由Mordecai Meirowitz发明,他是一位以色列邮政和电信专家。 但游戏类似早期一种利用铅笔和纸进行的游戏,游戏名为“公牛和母牛”,可能追溯到一个世纪或更长时间。)

代码

这里其实原理与代码十分简单,是通过几个条件进行的逻辑判定。

#include<stdio.h>
#include <stdlib.h>
#include<time.h>
 main()
{
 int a,b,c,d,x,y,z,w,flag1=0,i=0,j=0,l=0,m=0;
 srand(time(NULL));//用机器时间设置随机种子
 x=rand()%6+1;//生成6个随机数字
 do
 {y=rand()%6+1;}
 while(y==x);
 do
 {z=rand()%6+1;}
 while(z==x || z==y);
 do
 {w=rand()%6+1;}
 while(w==z || w==x || w==y);//设置的6个随机数互不相同
 while(flag1==0)
 {
  printf("请依次输入4个数字(1-6中),谢谢,这是第 %d 次尝试\n-\n ",m+1);
  scanf("%d %d %d %d",&a,&b,&c,&d);
  if(a==x)
  i++;
  if(b==y)
  i++;
  if(c==z)
  i++;
  if(d==w)
  i++;     //确定正确位置个数
     if(a!=x && (x==b || x==c || x==d))
     j++;
     if(b!=y && (y==a || y==c || y==d))
     j++;
     if(c!=z && (z==a || z==b || z==d))
     j++;
     if(d!=w && (w==a || w==b || w==c))
     j++;     //确定错误位置、正确数值个数
     printf("\n正确位置及数值有 %d 个,正确数值错误位置有 %d 个\n",i,j);
     if(i==4)//完全推出情况返回答案,反馈推理次数,跳出循环
     {
      m++;
   printf("\n恭喜你答对了,你用了 %d 次,答案是: %d %d %d %d\n",m,x,y,z,w);
   flag1++;
  }
     m++;//次数加一
     i=0;
     j=0;//判断正确位置个数及确定错误位置、正确数值个数清零
 }
}

运行尝试

结语

用C语言实现了该款游戏后,这款游戏还是十分的简陋,此后我会继续优化该款游戏图形化界面等方面。

到此这篇关于使用C语言实现珠玑妙算Mastermind小游戏的文章就介绍到这了,更多相关C语言Mastermind小游戏内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C语言中的switch语句基本用法

    switch语句: 实际生活中,需要做出很多选择,大家都知道做选择可以使用if语句,但是如果选择太多,if语句使用起来就会很繁琐,这个时候就需要一个能将代码简化的语句,也就是我们今天的主角switch语句. switch语句是一个多分支选择语句,并且可以支持嵌套. switch语句的基本格式 switch(表达式) { case 常量1:语句1 case 常量2:语句2 default:语句n break; } switch语句通过将表达式的值与常量值进行比对,如果相等则执行后面的语句,如果不相

  • C语言学习之柔性数组详解

    目录 一.前言 二.柔性数组的用法 三.柔性数组的内存分布 四.柔性数组的优势 五.总结 一.前言 仔细观察下面的代码,有没有看出哪里不对劲? struct S { int i; double d; char c; int arr[]; }; 还有另外一种写法: struct S { int i; double d; char c; int arr[0]; }; 你应该一眼就看到了,结构体的最后一个成员数组的写法是int arr[];或者是int arr[0],这两种写法是等价的,意思是这个数组

  • 一文带你了解C语言中的动态内存管理函数

    目录 1.什么是动态内存管理 2.为什么要有动态内存管理 3.如何进行动态内存管理 3.1 malloc 3.2 free 3.3 calloc 3.4 realloc 总结 1.什么是动态内存管理 平时我们写代码,一种非常常见的写法是: int a = 0; // 创建一个变量 int arr[10] = {0}; // 创建一个数组 当你创建变量a的时候,其实是向内存中申请了4个字节的空间来存放一个整数.而当你创建数组arr的时候,是向内存中申请了40个字节的空间来存放10个整数.当你这么写

  • 基于C语言实现计算生辰八字五行的示例详解

    本文介绍生辰八字和八字五行的一种算法.站内有人在查询生辰八字的算法,此题本人也感兴趣.故以此文以续貂尾. 生辰八字计算要点是节气日,年柱以立春起,月柱以是月节气日起,故先要计算月首的节气日.本节气算法的节气时刻精度差些,但确定节气日是可以的.程序启动时先计算干支表和对应的五行表.具体的计算方法参阅程序的注释.算法很简单,一看就明白.要注意的是,八字的时柱先输出的是起时,生日时辰十二个时辰对应下面的起时表计算.程序列示文本打印输出和图片显示输出二种方法供参考. 本文主要介绍生辰八字的算法,没有计算

  • C语言实现大数值金额大写转换的方法详解

    关于大数值金额大写转换,在财务管理的应用方面没什么意义.一般来说,千亿级,万亿级的数值就够了.因为在国家级层面是以亿为单位的,也就表达为千万亿,万万亿.在企业层面数值金额转换设置到千亿.万亿就行了.大的集团级企业扩大到万万亿也就行了.做企业应用软件的可根据需要设置.至于再大的数值就是天文数字,有另外的表达方法. 本人喜欢探索各种算法.前些天写了15位数值的金额大写转换.今再尝试写一个更多位数值的换算大写转换.提供给需要的同道参考. 金额大写应用在很多方面,如支票.发票.各种单据,各种财务凭证,合

  • 使用C语言实现珠玑妙算Mastermind小游戏

    引言 最近玩到过一款十分好玩的益智类桌游——珠玑妙算-Mastermind,这款游戏也出现在热片<拆弹专家2>里,该款游戏就是有四个槽位,而要将6种颜色依次放入槽位之中,然后由出题人反馈正确位置及错误位置正确颜色数,再通过逻辑推理,推出正确的颜色及位置.因为这种游戏为多人游戏,一个人不能自己出题.判断及推理,我在手机上搜找相关游戏却没有找到相应游戏,于是,萌生自主编写的想法. ( Mastermind(珠玑妙算)是一种可供两名玩家使用的密码破译棋盘游戏.在1970年由Mordecai Meir

  • C语言编一个数字益智小游戏

    程序功能及运行情况 设计的程序是一个数字益智游戏,旨在培养小朋友玩家的数学思维,提高玩家的数学能力.游戏共设有四个不同的小游戏,分别是一位数四则运算.两位数四则运算.找最值游戏.排序游戏.程序能实现产生随机题目,并能检验玩家的作答是否正确.为了小朋友能感受到游戏的乐趣,特意设置了得分系统,答对不同题目有不同的加分,并会根据总得分划分不同「段位」,呈现给玩家.另外,程序还运用了更加充满活力的设计,让玩家爱上该游戏. 程序运行截图主菜单 运算游戏 找最值游戏 排序游戏 得分统计 代码部分头文件区域

  • C语言键盘控制走迷宫小游戏

    本文实例为大家分享了C语言键盘控制走迷宫小游戏的具体代码,供大家参考,具体内容如下 在看了<啊哈C语言>之后想写一个游戏demo 游戏的截图 首先是启动界面 然后是初始化 接下来是键盘操控 地图的复杂度也很容易修改. 也支持退出.按s键选择退出游戏这个选项即可. 下面是源代码 #include <stdio.h> #include <stdlib.h> void startUp(); void gameInstructions(); void menu(char c);

  • C语言实现消消乐小游戏

    本文实例为大家分享了C语言实现消消乐小游戏的具体代码,供大家参考,具体内容如下 代码: #include<iostream> #include<cstdlib> #include<bitset> #include<conio.h> #include<time.h> #include <windows.h> #include<queue> #include<algorithm> using namespace s

  • C语言实现桌面贪吃蛇小游戏

    本篇写的是桌面贪吃蛇小游戏,大家自己看吧,感谢大家的支持,谢谢!O(∩_∩)O~~ #define _CRT_SECURE_NO_WARNINGS #include <windows.h> #include <commctrl.h> #include <time.h> #include <stdlib.h> #include "shlobj.h" #include <stdio.h> #include <string.h

  • 基于C语言实现简单的扫雷小游戏

    本文实例为大家分享了C语言实现简单的扫雷小游戏的具体代码,供大家参考,具体内容如下 首先来规划一下扫雷游戏实现的几个步骤: 初始化棋盘:二维数组的遍历及赋值 为了后续代码的简洁方便,我们用'0'来初始化 void InitBoard(char board[ROWS][COLS], int rows, int cols, char set) { int i = 0; int j = 0; for (i = 0; i < rows; i++) { for (j = 0; j < cols; j++

  • c语言轻松实现猜数字小游戏

    目录 一.前言 二.游戏逻辑 三.思维导图 四.游戏过程 五.代码分析 1.生成随机数的方法 2.设置随机数范围的方法 六.完整代码 一.前言 在学习了循环.分支.和函数之后,可以写一些简单的小游戏来给自己的编程之路增添一份乐趣.不仅提升了编码能力,还可以边学边玩,简直妙哉妙哉! 二.游戏逻辑 1.打印选择菜单(1.play.0.exit) 2.调用rand()函数生成随机数 3.设置随机数范围 4.猜数字 5.判断猜的大小 三.思维导图 四.游戏过程 五.代码分析 1.生成随机数的方法 仅仅使

  • C语言实现简易的扫雷小游戏

    这是一个用C语言实现的控制台扫雷小游戏,实现了随机布置炸弹.扫描炸弹.标记炸弹.百分百第一次不被炸死等功能. 编译器:vs2015 功能模块图 源代码 #include<stdio.h> #include<stdlib.h> #include<time.h> void show(int cbd[10][10],int u[10][10])  //界面输出函数 {     int i, j;     //for (i = 0; i < 10; i++)  //输出全

  • C语言实现纸牌24点小游戏

    本文实例为大家分享了C语言纸牌24点小游戏的具体实现代码,供大家参考,具体内容如下 此程序参考C语言实现经典24点纸牌益智游戏,并做出一些改进. 一.题目要求: 24点游戏规则: 从扑克中每次取出4张牌.使用加减乘除,第一个能得出24者为赢.(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏. 基本要求: 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题. 1.程序风格良好(

  • C语言简易版flappy bird小游戏

    假期在家无聊,想随便码点东西,故有此简陋的小游戏诞生.觉着可能对初学C语言的小伙伴练习有点帮助,故写此博客.游戏界面如下: 首先,先画出整个小游戏实现的流程图,如下: 思路很简单,整个游戏界面是由一个大的char类型数组构成,更新数组的值然后不停的打印出来就形成了动态效果. 由上图看,大循环是保证游戏一直不断的进行下去,小循环是让小鸟的速度大于游戏界面里背景(由#构成的柱子)的速度(小鸟动四下柱子才动一下). 下面是具体代码(水平有限大家多多见谅,但是效果还是有的!) Bird.c文件 #inc

随机推荐