• 网络学院
  • IT资讯
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
C++
  站点:
  • 首 页
  • 最新软件
  • 文章教程
  • 国内软件
  • 国外软件
  • 绿色软件
  • 源码下载
  • 字体下载
C++ Builder构建算二十四点小游戏
软件发布 C++ Builder构建算二十四点小游戏
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件 绿软下载
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回文章教程首页 >> 编程技术 >> BCB教程 >> C++ Builder构建算二十四点小游戏

C++ Builder构建算二十四点小游戏

添加时间: 2007-7-9 3:20:34  作者: BCB教程  阅读次数:95   来源: http://www.d9soft.com

       

    所谓算二十四点可能是不少读者朋友童年喜欢玩的扑克游戏之一,玩法是:把一副扑克牌从A到10选出来均分成两份,两个小朋友各持一份即可开始游戏,每人随机抽两张出来组成四张牌,把这四张牌加减乘除凑成结果为二十四,先算出来的一方赢得对方的两张牌,进行下一轮,如果都没计算出来为和局,直到把对方所有的扑克牌全部缴获,游戏方告结束。

  想要自己算的最快吗?那最好是让程序来替你做个二十四点王。

  用程序实现二十四点的算法很多,但大都比较繁杂。考虑到凑出结果的可能情况并不是太多,在这里我们将主要靠自己穷举可能的演算式外加循环计算来实现。

  一、四张牌的排列组合

  四张牌A B C D共有多少种排列组合?公式为P44,即1×2×3×4=24共24种组合。

  为什么要把四张牌的所有排列组合都罗列出来呢?因为我们将要采用的算法简单说就是:穷举所有算术式,比如A+B+C+D、A+B+C-D等等,让每一个算术式的四个变量都去排列组合一次,寻找是否存在一个排列组合使算术式的值为24。举个例子A+B+C-D:

  把四张牌(四个变量)放入表2的(Pos.1、Pos.2、Pos.3、Pos.4)四个位置中去,总共应该有24种放置方法。

  如果在表3内找到一个公式使A+B+C-D的值等于24,则打印出此算术式,否则说明此算术式不满足需要,再进行下一个算术式的变量的排列组合。如果穷举所有的算术式都不能满足要求,那么表示此题无解。

  一、穷举所有算术式

  这个工作比较烦琐,但很考验你的逻辑演算能力。笔者按加、减、乘、除、括号的顺序基本罗列完了所有算术式,表4—表6只罗列了一部分,剩下的读者可以自己来完成:

  二、制作游戏

  有了前面的基础后,开始编程。笔者在这里使用的是Borland C++ Builder,下面简单介绍一下制作流程并讲解其中的难点:

  1.动手设计一个人性化的界面。

  2.程序编制流程:

  不管是手动输入四个数还是随机产生,都把这四个数值存储起来,然后进行求解。求解时遵循这样的规律:这里共有45种算术式(包括无解),从第一个算术式开始不断调用排列组合,如果成立(结果为24),退出求解过程并输出结果,不成立则尝试下一个算术式,直到最后一个算术式的调用,如果都不满足则打印无解。

  3.随机产生数字:

  产生四个数,一种方式是手动录入,一种方式是随机产生,这里只给出随机产生数字的代码:(程序里的变量没作说明均为全局变量)

void __fastcall TForm1::Button2Click(TObject *Sender)
{
flag=false;
randomize();
NumberA=random(10)+1;
NumberB=random(10)+1;
NumberC=random(10)+1;
NumberD=random(10)+1;
Edit1->Text=FloatToStr(NumberA);
Edit2->Text=FloatToStr(NumberB);
Edit3->Text=FloatToStr(NumberC);
Edit4->Text=FloatToStr(NumberD);
Button4->SetFocus();
}
 

  4.求解过程:

////////////求解
for(j=1;j<=45;j++)
{
switch(j)
{
///////////////
case 2://对应表4的第二种情况
for(i=1;i<=24;i++)//注意case1只循环1次,因为四个变量求和不必考虑变量的位置
{
kind(i);//调用子函数
answer=A+B+C-D;
if(answer==24)
{
flag=true; //设置标志
result=FloatToStr(A)+"+"+FloatToStr(B)+"+"+FloatToStr(C)+"-"+FloatToStr(D)+"=24";
Label1->Caption=result;
Label1->Visible =true;
break;
}
}
if(flag==true)break;//退出switch
……………………//余下的求解算术式的方法与case2相似,这里就不重复了。
case 45:
flag=true;
result="无解";
Label1->Caption=result;
Label1->Visible =true;
break;
if(flag==true)break;
//////////////////////
/////////////////////
}
if(flag==true)//退出循环
break;
}

  子函数:

int kind(int k)
{
switch(k)//排列组合4个数,对应表1
{
case 1:A=NumberA;B=NumberB;C=NumberC;D=NumberD;break;
case 2:A=NumberA;B=NumberB;D=NumberC;C=NumberD;break;
case 3:A=NumberA;C=NumberB;B=NumberC;D=NumberD;break;
case 4:A=NumberA;D=NumberB;B=NumberC;C=NumberD;break;
……
case 22:D=NumberA;B=NumberB;A=NumberC;C=NumberD;break;
case 23:D=NumberA;B=NumberB;C=NumberC;A=NumberD;break;
default:D=NumberA;C=NumberB;B=NumberC;A=NumberD;
}
}

  小结:

  值得注意的是在罗列算术式时既要避免重复,如A+B×C+D与A×B+C+D是一致的,需要丢弃一个,又要列举全面,还要考虑到排除掉不可能实现的算术式,此程序的算法不难理解,关键在于算术式的准确。理清楚了算法,编程是很快的。

 

 

上下文章:

 

上一篇文章: 用BCB开发有身份认证功能的Email程序 下一篇文章: C++ Builder 初学问与答(十六)

相关文章:

  • 比比国内“免费游戏”中的“强化”谁更黑
  • 电脑游戏人物中最经典的10大不死坏蛋角色
  • FIFA游戏十六年 各版本海报大集合
  • 宿命的对决 EA与暴雪之间的游戏战争
  • 《红色警戒3》游戏正版拆包全展示

相关软件:

  • 多多真人视频棋牌游戏 2.21 Beta
  • 意趣可视频棋牌游戏大厅 8.11.2
  • 游戏修改大师 2.76
  • 扑克游戏 81.93
  • 超级QQ游戏大厅多开补丁 1.29
  • Demo Builder 7.0

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

编程技术分类导航

  • ASP & ASP.NET教程
  • PHP教程
  • JSP教程
  • C/C++教程
  • VB & VB.NET教程
  • VC教程
  • Delphi教程
  • BCB教程
  • VFP教程
  • PB教程
  • JAVA教程
  • XML教程
  • C#教程
  • CGI教程

本类经典文章推荐

  • 如何在C++ Builder环境中实现在菜...
  • Windows下DLL编程技术及应用
  • 在BCB中使用DirectX
  • 用C++Builder开发动画DLL
  • 用C++Builder建立多线程COM服务器
  • C++Builder定制系统菜单
  • ODBC中的同步与异步执行模式
  • C++ Builder下数据库报表Master/D...
  • BCB环境下CORBA实做之客户端
  • 在C++Builer中多线程的实现

BCB教程阅读排行

  • C++ Builder 初学问与答(一)
  • 在 C++ Builder中利用串行通信控件...
  • C++ Builder 初学问与答(二)
  • 漫谈C++ Builder多线程编程技术
  • C++ Builder 初学问与答(十六)
  • C++ Builder 初学问与答(八)
  • 在C++ Builder中用Ole控制Excel表
  • C++ Builder 初学问与答(六)
  • C++ Builder 初学问与答(七)
  • C++ Builder 初学问与答(四)

编程技术阅读总排行

  • VB入门教程之一
  • Java连接数据库实例
  • VC++之List Box/Check List Box控...
  • 第二章 PowerBuilder 入门之创建新...
  • VC++ List Ctrl控件
  • 第一章 什么是PowerBuilder
  • VC++ Combo Box/Combo Box Ex控件
  • 学C++不得不看的一篇文章
  • VB入门教程之二
  • VC++之Button控件

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有