- 东明张展奕's blog
数字炸弹(人机对战)
- 2024-8-6 10:15:24 @
复制到C++即可游玩
#include <bits/stdc++.h>
#include<windows.h>
#include <unistd.h>
using namespace std;
#define endl '\n'
#define TRACE 1
#define tcout TRACE && cout
#define fst ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
#define int long long
#define interesting long long
#define read(a) fst;cin >> (a)
#define out(a) fst;cout << (a) << endl;
#define huan fst;cout << endl;
#define all(a) (a).begin(),(a).end()
#define z_for_string(name, end) for(int name = 0; name < (end); i ++)
#define d_for_string(name, end) for(int name = (end); name > 0; i --)
#define z_rep(name, start, end) for(int name = (start); name <= (end); i ++)
#define d_rep(name, start, end) for(int name = (start); name >= (end); i --)
#define h_TRUE cout << "YES" << endl;
#define h_FALSE cout << "NO" << endl;
#define h_True cout << "Yes" << endl;
#define h_False cout << "No" << endl;
#define h_true cout << "yes" << endl;
#define h_false cout << "no" << endl;
#define k_TRUE cout << "YES" << " ";
#define k_FALSE cout << "NO" << " ";
#define k_True cout << "Yes" << " ";
#define k_False cout << "No" << " ";
#define k_true cout << "yes" << " ";
#define k_false cout << "no" << " ";
#define dext(a) return (a)
const int P = 998244353;
const int Base = 3221225477;
const int INF = 0x3f3f3f3f3f3f3f3f;
const int N = 1e6 + 10, M = 2e6 + 10;
const int Mod = 1e9+7;
void printf_red(const char *s)
{
printf("\033[0m\033[1;31m%s\033[0m", s);
}
void printf_green(const char *s)
{
printf("\033[0m\033[1;32m%s\033[0m", s);
}
void printf_yellow(const char *s)
{
printf("\033[0m\033[1;33m%s\033[0m", s);
}
int randint(int l, int r)
{
return rand() % (r - l + 1) + l;
}
void printf_pink(const char *s)
{
printf("\033[0m\033[1;35m%s\033[0m", s);
}
signed main()
{
system("cls");
printf_red("====数字炸弹====\n");
printf_yellow("* zzy制作\n");
sleep(2);
system("cls");
printf_yellow("游戏正在加载...\n\n");
sleep(randint(1,3));
printf_green("加载完成,即将进入游戏\n");
sleep(1);
system("cls");
srand(time(0));
while (1)
{
printf_pink("数字炸弹开始!\n");
int x, y;
cout << "范围:"<<endl << "x: ";
cin >> x;
cout<< "y: ";
cin >> y;
unsigned long long num = rand() % (y - x + 1) + x;
unsigned long long a = 0, maxx = max(x, y), minn = min(x, y);
bool flag = false;
while (1)
{
cout << "炸弹在" << minn << "到" << maxx << "之间(边界可选)。" << endl;
cout << "请选择数字:" << endl;
cin >> a;
if (a >= minn && a <= maxx)
{
if (a > num)
{
maxx = a - 1;
printf_yellow("请继续...\n");
}
else if (a < num)
{
minn = a + 1;
printf_yellow("请继续...\n");
}
else
{
break;
}
}
else
{
printf_red("输入错误\n");
}
if (maxx == minn)
{
flag = true;
break;
}
}
if(flag == true)
{
cout << "你赢了" << endl;
}
else
{
cout << "你输了!" << endl;
}
cout << "炸弹是" << num << endl;
cout << "按任意键重新开始游戏" << endl;
system("pause");
system("cls");
}
return 0;
}
讲解
数字炸弹算是一个简单二分
大概是这样的
给定你一个有序列表(从小到大排序,)
首先你取 之间的一个数作为数字炸弹,
然后你找一个人猜,如果他猜的数比数字炸弹大,那将 设为他猜的数
如果他猜的数比数字炸弹小,那将 设为他猜的数
还可以吧,
system("cls");
是清屏的意思