用Delphi设计抢三十游戏

前言:“抢三十”是中国民间的一个游戏。游戏规则是:两人从1开始轮流报数,每人每次可加1或加2,谁先报到30,谁就为胜方。一个简单的游戏,要想获胜也只有掌握了其中的奥妙才行。但要想用程序去实现该如何做呢?本文就为你做一个详细的讲解。

必胜的原理

如何才能轻易获胜呢?这就要去寻找其中的规律。我制作了一个小程序,让你可以和计算机单挑。程序界面如图。


若你先报数,不是我夸口,你是一定斗不过计算机的;若计算机先报数,那么就看你的了,如果你犯任何一次错误,计算机都会抓住机会反败为胜。听起来这个程序好像很智能,其实它的道理很简单:

获胜的必要条件是:牢牢抓住3的倍数。具体来讲就是把对方报的数字与3求模,若值为1,则报的数字为对方的数字加2;若值为2,则报的数字为对方的数字加1;否则的话就随意报1或者2。这样在游戏中就能紧紧抓住3的倍数,坚持到最后就是胜利者。

把这个算法用程序实现后,电脑在与人对局的时候就智能化了。试问不知道此算法的人会是电脑的对手吗?

关键代码

在有了程序的算法和界面之后,要编写完整的程序就不是很困难了。

最关键的显示实报的数字的Edit控件的Onchange代码:

procedure TForm1.Edit1Change(Sender: TObject);
 begin
  if flag=false then //得到控制权,计算机开始自动报数
  begin
   temp1:=s+1;
   temp2:=s+2;
   if (temp1 mod 3)=0 then //你报的最后的数字与3取模,若为1,则计算机加2
   begin
    s:=temp1;
    j:=1;
   end
   else if (temp2 mod 3)=0 then //你报的最后的数字与3取模,若为2,则计算机加1
   begin
    s:=temp2;
    j:=2;
   end
   else //否则计算机随机报一个数字或两个数字
   begin
    randomize();
    j:=random(2)+1;
    s:=s+j;
   end;
   Button2.Enabled :=true; //计算机报数完毕后把报数按钮设为可用
   Button3.Enabled :=true;
   Button2.Caption :=IntToStr(s+1); //并把报数按钮的Caption设为将要选择的数字
   Button3.Caption :=IntToStr(s+2);
   Edit2.Text :=IntToStr(j); //显示计算机报的个数
   ListBox1.Items.Add('计算机报的个数: '+IntToStr(j));//写入到历史记录
   flag:=true; //交出控制权
   Edit1.Text :=IntToStr(s); //显示计算机实际报的数字
   if s>=30 then //判断游戏是否结束
   begin
    Button2.Enabled :=false;
    Button3.Enabled :=false;
    ShowMessage('嘿嘿,想赢我?动动脑筋再来吧!');
   end;
  end;
end;

难点讲解

用一个BOOL变量来交接控制权,也就是什么时候该由你报数,什么时候该由计算机报数。

Form1.Edit1Change处理时要注意,Edit1显示的是计算机实际报的数字。当控制权移交到计算机时,计算机处理完报数程序后要做两件事:1交出控制权,2刷新Edit1的显示。这里要相当小心,看起来这两件事的先后顺序不重要,可实际上要特别注意:如果先刷新Edit1的显示再交出控制权的话,数据就会溢出!

道理是这样的,当程序执行到Edit1的显示刷新时,程序不再向下执行而是回到本段程序的第一行开始依次执行,当执行到这里时再次返回到第一行……死循环就产生了!所以一旦遇到刷新Edit1的显示时,请仔细考虑所做的事情是否存在先后顺序,因为执行Edit1的显示代码后程序将不再向下继续执行,而是跳到TForm1.Edit1Change事件中,请仔细体会这段程序。

时间: 2025-01-31 01:42:56

用Delphi设计抢三十游戏的相关文章

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(三十四)

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(三十四)地图编辑器诞生啦! 到目前为止,教程示例游戏中虽然实现了A*,但是还无法轻松的为地图设置障碍物:并且游戏所有地图均为一张整的大图片,主角的移动会导致窗体对地图的不停切割,越大的地图带来的负面性能损耗越明显.对地图进行切片处理则可达到性能的最大优化:载入的时候按需加载,地图根据主角的位置仅显示特定部份:并且如果还能配上任意勾勒的遮挡物,那么这一切的一切将更能完美的诠释我们的游戏.开发制作地图编辑器已迫在眉

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(三十二)

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(三十二) 雷.混.冰.毒.火.风 - 幻化中的魔法魅力 本节,我将为大家演示如何为游戏中的魔法增加华丽的附加属性. 第一步,定义规则: 1)定义魔法附加属性分类:在本教程示例游戏中,我将魔法附加属性定义为6类:雷.混.冰.毒.火.风,为什么要以这样无规律的方式去命名?因为是教程,我们需要学习的是如何实现对应效果,此6类属性算是目前网游中最流行的六大魔法属性,如果大家都掌握了,无论是中国式5行还是诸如其他的风格设

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(三十九)

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(三十九)向Silverlight移植① 一.主要改进: 1)Silverlight3.0上的右键实现: //注册右键事件 HtmlPage.Document.AttachEvent("oncontextmenu", Game_MouseRightButtonDown); //鼠标右键事件 private void Game_MouseRightButtonDown(object sender, H

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(三十八)

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(三十八)地图间的传送与切换 终于到了地图处理的最后一节,本节我将为大家讲解如何通过传送点实现主角在地图间的传送以及地图之间的切换.地图转换的关键在于把握好移除与添加:即移除之前地图上除主角之外的所有对象,然后再重新加载新地图上的所有对象.本教程示例游戏中,每张地图的信息都详细的记录于Config.xml配置文件中,包括每张地图的表层.遮挡层.障碍物层等等,然后再附加上本节后面将向大家讲解的传送点信息:这样,

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(三十六)

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(三十六)地图自定义切片与导出 做为提升游戏性能的一个重要环节就是地图的优化,作为基于Web的游戏来说,可以通过将地图切成若干同尺寸的片后,根据主角的位置进行时时的按需加载.举个简单例子,好比一幅20000*20000的地图,我们将之以400*400像素为一个地图片单位切成2500片,假若游戏窗口尺寸为800*600,那么我们每次只需加载以主角为中心的周围9块地图片(1200*900像素)即可实现填充,这比起

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(三十五)

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(三十五)地图编辑器的初步使用 上一节我们制作好了地图编辑器,并初步实现了导出地图中的障碍物信息及实现A*模拟寻路.那么当我们得到了包含有障碍物数据信息的xml文件后,又该如何将之应用到本教程的示例游戏中呢? 本节还是以上一节的那幅地图为例,我们首先通过编辑器载入该地图并在上面描绘出所有障碍物: 然后点击导出障碍物按钮,我们将得到一个包含有类似如下信息的xml障碍物数据文件: <Item ID="Obstr

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(三十)

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(三十) 大法师 – 华丽经典之轮回 从红白机到PS3,从286到奔腾N核:曾记否孩时的回忆?与玩伴并肩闯关.往日的经典已化为过眼烟云,那些神话般的游戏角色是否仍徘徊于你的梦里?UO开创了网络游戏新时代,虚拟世界敞开了魔幻华丽的心扉:于是我坚定了信念,用自己的双手去开启这道华丽的轮回! 在传统的MMORPG游戏中,魔法种类大致分为:单攻魔法.群攻魔法.辅助魔法.地图魔法等,其中单攻魔法又可以细分为带过程的(如飞箭

三十项调整助力 Ubuntu 13.04 更上一层楼

在Ubuntu 13.04 Raring Ringtail安装完成之后,我们还有三十项调整需要进行. 1.Ubuntu 13.04 Raring Ringtail安装完毕后,我又进行了一系列工作 大家想知道Ubutnu最新版本带来哪些新内容吗?我认为其中引发讨论最多的话题在于,与前代版本相比(即12.10'Quantal Quetzal')新系统的性能表现并不理想.它不仅延迟明显,而且存在严重的稳定性问题.Raring Ringtail也并不在黄油计划的适用范围之内.但无论如何,Ubuntu 1

027_《Delphi Direct X 图形与游戏程序设计》

<Delphi Direct X 图形与游戏程序设计> Delphi 教程 系列书籍 (027) <Delphi Direct X 图形与游戏程序设计> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Pdf 书名:Delphi/Direct X图形游戏程序设计 作者:(美)艾尔斯著 ISBN号:7-81065-666-X 价格:CNY9.00 出版地:成都 出版社:电子科技大学出版社 出版时间:2001 内容简介 本书的主要目的是教会读者在Delphi环