博弈游戏(取石子)C++实现

标签: 游戏 c++
382人阅读 评论(0) 收藏 举报
分类:

一、游戏思路:

欢迎来到“取石子”游戏世界,这是一个减法游戏。两名对手交替从某给定的总数减去一个数,每个对手只能减去1或者2, 谁第一个把总数减到零或者更小的数算谁赢。比如说:
(1)、我们从数字8开始,你先动手;
(2)、你从总数里减去2,还剩下6;
(3)、我也减去2,还剩下4;
(4)、你再减去2,还剩下2
(5)、我在减去2,等于零
(6)、我赢了
这是一个很简单的游戏,只需要考虑总数是的情况,不管你减去1还是2,我都可以在下一次把它减成零,从而获胜。简单的说,只要保证每次减后总数为3的倍数,那么最后一定会赢,不信的话,现在你就可以跟身边的这位测一测!!!

下面我将从编程角度来看问题,创建一个完整的游戏,并为计算机准备一个最佳策略,用户必须每一步都正确才能赢,一起来看看吧!!

二、游戏代码:

//#include"stdafx"
#include<iostream>
using namespace std;;
int main ()
{
    int total;
    int n;

    cout<<"欢迎来到取石子游戏"<<endl;
    cout<<"\n"<<endl;
    cout<<"请任意选择一个数开始游戏:"<<endl;
    cin>>total;
    while(true)
    {
        if(total%3==2)
        {
            total-=2;
            cout <<"我要减去2 ,现在的数为"<<total<<endl;
            cout<<"\n"<<endl;
        }
        else{  
                total-=1; 
                cout<<"我要减去1,现在的数字为:"<<total<<endl;
                cout<<"\n"<<endl;
             }
        if(total<=0)
             {
                 cout<<"我赢啦,你要加油哟"<<endl;
                 cout<<"\n"<<endl;
                    break;
                 }
        cout<<"该你说要减去的数啦,记得只能减1或者2唷:〉"<<endl;
        cin>>n;
        cout<<"\n"<<endl;
        while(n<1 ||n>2)
        {
            cout<<"每次只能减去1或者2, 你这人怎么能耍赖皮呢!!! "<<endl;
            cout<<"\n"<<endl;
            cout<<"快点重新说你要减去几!!!!"<<endl;
            cin>>n;
        }
        total-=n;
        cout<<"好啦,现在的数字为:"<<total<<endl;
        if(total<=0)
        {
            cout<<"好吧,算你赢"<<endl;
            break;
        }
}
}

三、执行结果

俗话说,什么样的性格写出什么样的代码,我这个大大咧咧宇宙无敌超级捣蛋鬼,写出的游戏自然十分俏皮了,你如果不喜欢游戏里面我的提示方式,可以添加你喜欢的语句,鄙人并不介意,那我就把草名写的程序的运行结果展示给大家,见下图:

这里写图片描述

四、简单分析:

该程序十分基本,只要涉猎C或者C++的人肯定不难理解,主要运用while( )循环和if()…..else 判断语句,另外,需要特别说明的是,在游戏中,如果对手不按规则来,也就是说,他一旦减的数字不是1或者2,需要作出提醒,要求重新输入。

五:特别说明:

本人学疏才浅,也是正走在编成路上的学者,不足之处还望海涵,另外,我会在写一些学术博客的同时,分享一些小游戏,使得我们的编程之路更加有趣生动!!
good night (:>

查看评论

openjudge 6266取石子游戏 博弈论 c++

博弈
  • MityKif
  • MityKif
  • 2016-11-17 07:44:42
  • 1057

简单博弈论

简单博弈论 1.HDOJ 2147         这道题目的意思就是说给你一个n*m的格子,每次只能从右上角出发,只能往下,往左,往左下角走,每次只能走一步,谁不能走了,谁就输。其实就是谁先到达左下...
  • gscsdlz
  • gscsdlz
  • 2016-07-24 09:42:01
  • 325

简单博弈

题目描述   话说,小C经过上次被小T实力坑了一把以后呀,他就决定发明一个数字游戏来坑一坑小T!游戏规则是这样~ 在游戏开始前,小C会任意的选出一个正整数n(1≤n≤2^32-1),同时令m=...
  • fengyuzhiren
  • fengyuzhiren
  • 2017-02-04 11:23:30
  • 198

类Nim取石子游戏

题目:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&pr...
  • ACdreamers
  • ACdreamers
  • 2013-11-29 19:03:32
  • 3240

Nim取石子游戏

Nim取石子有戏是组合数学中非常有意思的一个问题,经过学习,我对其解法也有了自己的认识。 Nim取石子游戏是这样的:有两堆石子,每一堆都有若干石子,两个人轮番地从其中任意一堆中石子,限制是每次只能在...
  • wzt2817
  • wzt2817
  • 2015-01-08 11:21:54
  • 301

博弈论之NIM取石子游戏与SG函数

前言: 恩,本文会简要介绍一下NIM取石子游戏与SG函数,并附上一些有趣的例题。 1.简单的取石子游戏 首先,让我们来看一看最简单的取石子游戏。 游戏1 规则: ...
  • shengtao96
  • shengtao96
  • 2015-09-20 23:19:37
  • 478

算法-巴什博奕

巴什博奕 背景:只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。 发现假设 n=m+1 ,当先取者无论拿多少个...
  • YaokunLu
  • YaokunLu
  • 2016-07-23 03:27:52
  • 304

一排石头的游戏(取石头)C语言实现

问题描述: N块石头排成一行,每块石头有各自固定的位置。 两个玩家依次取石头,每个玩家可以取其中任意一块石头,或者相邻的两块石头,石头在游戏过程中不移位。 最后能将石头一次取光的玩家获胜。 ...
  • Zidane_2014
  • Zidane_2014
  • 2015-05-13 09:46:24
  • 1277

第三届蓝桥杯C/C++组第十题 取球游戏(博弈)

今盒子里有n个小球,A、B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并且两人都很聪明,不会做出错误的判断。       我们约定:         ...
  • qq_30076791
  • qq_30076791
  • 2016-01-31 22:14:46
  • 817

取球博弈问题 蓝桥杯

取球博弈 两个人玩取球的游戏。 一共有N个球,每人轮流取球,每次可取集合{n1,n2,n3}中的任何一个数目。 如果无法继续取球,则游戏结束直接深度优先搜索肯定不行,因为如果有1000个球那么每次有三...
  • varyshare
  • varyshare
  • 2017-04-02 15:37:37
  • 502
    个人资料
    持之以恒
    等级:
    访问量: 2万+
    积分: 1192
    排名: 4万+
    最新评论