一个C++控制台小游戏

1 篇文章 0 订阅
1 篇文章 0 订阅

公测版:

#include<bits/stdc++.h>
#include<windows.h>
#include<stdio.h>
#include<conio.h>
#include<time.h>
using namespace std;
string val;int ans;
int money=0,sz1,time2;
bool isout=false;
bool Black;
void Color(int a){
    if(Black==1) {SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0);return;}
    if(a==0) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
    if(a==1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
    if(a==2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
    if(a==3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);
    if(a==4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
    if(a==5) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
    if(a==6) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
    if(a==7) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_BLUE);
    if(a==8) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN);
    if(a==9) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_BLUE);
    if(a==10) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED);
    if(a==11) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN);
    if(a==12) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
}
void tab(int a,bool b)
{
	for(int i=1;i<=a;i++)
		cout<<'-';
	if(b)cout<<'\n';
	return ;
}
void csz()
{
	while(!isout)
	{
		system("cls");
		Color(2);
		tab(8,1);
		cout<<"游戏猜数字:\nmoney:"<<money<<"\n0:你猜\n1:computer猜(暂不支持)\n2:退出\n请选择(0~2)----";
		cin>>val;
		if(val=="0")
		{
			if(time(0)!=time2)
			{
				unsigned long long seed=time(0);
				srand(seed);
				time2=seed;
			}
			sz1=abs(rand())%100+1;
			cout<<"7次机会,把握好吧!\n";
			for(int i=1;i<=7;i++)
			{
				tab(8,1);
				cout<<"还剩"<<7-i+1<<"次机会,请输入(1-100)----";
				cin>>ans;
				if(ans<=0||ans>101)
				{
					Color(4);
					cout<<"\t错误:#001\n";
					Color(2);
					system("pause");
					exit(1);
				}
				if(ans==101)
				{
					Color(4);
					cout<<"确定退出吗?(0否,1是)";
					tab(4,0);
					cin>>val;
					Color(2);
					if(val=="1")
						break;
					else
						i--;
				}
				if(ans<sz1)
					cout<<"It's too small!\n";
				else if(ans==sz1)
				{
					Color(11);
					cout<<"恭喜你,猜到了"<<sz1<<'\n',money+=7-i+1;
					Sleep(500);
					break;
				}
				else if(ans>sz1&&ans!=101)
					cout<<"It's too big!\n";
			}
			Sleep(500);
		}
		else if(val=="2")
			isout=true;
	}
}
int main()
{
	while(!isout)
	{
		Color(2);
		tab(8,1);
		cout<<"money:"<<money<<"\n0:退出游戏\n1:游戏猜数字\n2:读取存档\n3:查看版本信息\n4:存档\n请选择(0~4)----";
		cin>>val;
		if(val=="0")
		{
			Color(4);
			cout<<"是否存档?会覆盖原来的。(0否,1是)----";
			cin>>val;
			Color(2);
			isout=true;
			if(val=="1")
			{
				Color(5);
				cout<<"正在存档中...\n";
				ofstream out("游戏存档.out");
				out<<money;
				Sleep(500);
				cout<<"存档完毕!\n";
				Color(2);
			}
		}
		else if(val=="1")
		{
			csz();
			isout=false;
		}
		else if(val=="2")
		{
			Color(5);
			cout<<"正在打开存档中...\n";
			ifstream in("游戏存档.out");
			in>>money;
			Sleep(500);
			cout<<"打开存档完毕!\n";
			Color(2);
		}
		else if(val=="3")
		{
			Color(5);
			cout<<"版本:1.0.10.3公测版\n作者:wbw121124\n邮箱:wbw121124@163.com  wbw121124@qq.com\n错误信息:\n\t#001:输入错误\n";
			Color(2);
			system("pause");
		}
		else if(val=="4")
		{
			Color(4);
			cout<<"是否存档?会覆盖原来的。(0否,1是)----";
			cin>>val;
			Color(2);
			if(val=="1")
			{
				Color(5);
				cout<<"正在存档中...\n";
				ofstream out("游戏存档.out");
				out<<money;
				Sleep(500);
				cout<<"存档完毕!\n"; 
				Color(2);
			}
		}
		system("cls");
	}
	tab(8,1);
	system("pause");
	return 0;
}

AI改编版:

#include <bits/stdc++.h>
#include <windows.h>
#include <conio.h>
using namespace std;

const int MAX_CHANCE = 7;  // 最大的猜测次数
const int MAX_NUMBER = 100;  // 最大的随机数
const string SAVE_FILE = "游戏存档.out";  // 存档文件名
const string ERROR_INPUT = "输入错误,请重新输入!";  // 输入错误提示

int money = 0;  // 当前剩余金钱
bool isout = false;  // 是否退出游戏
bool Black = false;  // 是否黑屏
unsigned int time2;  // 用于随机数种子的时间戳

int random_number() {
    // 随机生成数字
    if (time(0) != time2) {
        unsigned int seed = time(0);
        srand(seed);
        time2 = seed;
    }
    return abs(rand()) % MAX_NUMBER + 1;
}

bool is_file_exist(const string& file_name) {
    // 判断文件是否存在
    ifstream fin(file_name.c_str());
    return fin;
}

void show_main_menu() {
    // 显示主菜单
    system("cls");  // 清屏
    cout << "money:" << money << endl;
    cout << "0:退出游戏\n1:游戏猜数字\n2:读取存档\n3:查看版本信息\n4:存档\n请选择(0~4)----";
}

void show_guessmenu() {
    // 显示猜数字菜单
    system("cls");  // 清屏
    cout << "游戏猜数字:\nmoney:" << money << endl;
    cout << "0:你猜\n1:computer猜(暂不支持)\n2:退出\n请选择(0~2)----";
}

void save_game() {
    // 存档
    cout << "是否存档?会覆盖原来的。(0否,1是)----";
    string val;
    cin >> val;
    if (val == "1") {
        cout << "正在存档中......\n";
        ofstream fout(SAVE_FILE.c_str());
        if (fout) {
            fout << money;
            cout << "存档完毕!" << endl;
        } else {
            cout << "存档失败!无法写入文件!" << endl;
        }
    }
}

void load_game() {
    // 读取存档
    if (is_file_exist(SAVE_FILE)) {
        cout << "正在打开存档中......" << endl;
        ifstream fin(SAVE_FILE.c_str());
        if (fin) {
            fin >> money;
            cout << "打开存档完毕!" << endl;
        } else {
            cout << "无法打开存档文件!" << endl;
        }
    } else {
        cout << "无法找到存档文件!" << endl;
    }
}

void guess_number() {
    // 猜数字游戏
    int number = random_number();
    cout << "7次机会,把握好吧!\n";
    for (int i = 1; i <= MAX_CHANCE; i++) {
        cout << "还剩" << MAX_CHANCE - i + 1 << "次机会,请输入(1-100)----";
        int ans;
        cin >> ans;
        if (ans <= 0 || ans > MAX_NUMBER) {
            cout << ERROR_INPUT << endl;
            i--;
            continue;
        }
        if (ans < number) {
            cout << "It's too small!" << endl;
        } else if (ans == number) {
            int gain = MAX_CHANCE - i + 1;
            cout << "恭喜你,猜到了" << number << ",获得" << gain << "个金币!" << endl;
            money += gain;
            break;
        } else {
            cout << "It's too big!" << endl;
        }
    }
    system("pause");
}

void set_window() {
    // 设置窗口大小和边框
    SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), TRUE, &SMALL_RECT({0, 0, 50, 20}));
    SetWindowLong(GetConsoleWindow(), GWL_STYLE,
                    GetWindowLong(GetConsoleWindow(), GWL_STYLE) & ~(WS_MINIMIZEBOX | WS_SYSMENU));
}

void hide_cursor() {
    // 隐藏光标
    CONSOLE_CURSOR_INFO cursor_info;
    cursor_info.dwSize = 1;
    cursor_info.bVisible = false;
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}

void set_black() {
    // 黑屏
    Black = true;
    system("color 00");
}

void set_white() {
    // 白屏
    Black = false;
    system("color 07");
}

int main() {
    set_window();  // 设置窗口
    hide_cursor();  // 隐藏光标
    set_white();  // 设置背景为白色
    while (!isout) {
        show_main_menu();  // 显示主菜单
        cin >> val;
        if (val == "0") {
            save_game();  // 保存游戏
            isout = true;
        } else if (val == "1") {
            show_guessmenu();  // 显示猜数字菜单
            cin >> val;
            if (val == "0") {
                guess_number();  // 猜数字游戏
            } else if (val == "2") {
                isout = true;
            } else {
                cout << ERROR_INPUT << endl;
                system("pause");
            }
        } else if (val == "2") {
            load_game();  // 读取存档
            system("pause");
        } else if (val == "3") {
            cout << "作者:wbw121124\n邮箱:wbw121124@163.com  wbw121124@qq.com\n错误信息:\n\t#001:输入错误\n";
            system("pause");
        } else if (val == "4") {
            save_game();  // 存档
        } else {
            cout << ERROR_INPUT << endl;
            system("pause");
        }
    }
    return 0;
}

普通版:

// 游戏1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include<windows.h>
#include<stdio.h>
#include<conio.h>
#include<time.h>
#include <string>
#include <iostream>
#include <fstream>
using namespace std;
string val; int ans;
int money = 0, sz1;
unsigned int time2;
bool isout = false;
bool Black;
void set_window()
{
	SetWindowPos(GetConsoleWindow(), HWND_TOPMOST, 0, 0, 400, 200, SWP_NOMOVE);
}
void Color(int a) {
	if (Black == 1) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0); return; }
	if (a == 0) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
	if (a == 1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
	if (a == 2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
	if (a == 3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE);
	if (a == 4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
	if (a == 5) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);
	if (a == 6) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
	if (a == 7) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_BLUE);
	if (a == 8) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
	if (a == 9) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_BLUE);
	if (a == 10) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
	if (a == 11) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN);
	if (a == 12) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
void tab(int a, bool b)
{
	for (int i = 1; i <= a; i++)
		cout << '-';
	if (b)cout << '\n';
	return;
}
void csz()
{
	while (!isout)
	{
		system("cls");
		Color(2);
		tab(8, 1);
		cout << "游戏猜数字:\nmoney:" << money << "\n0:你猜\n1:computer猜(暂不支持)\n2:退出\n请选择(0~2)----";
		cin >> val;
		if (val == "0")
		{
			if (time(0) != time2)
			{
				unsigned int seed = time(0);
				srand(seed);
				time2 = seed;
			}
			sz1 = abs(rand()) % 100 + 1;
			cout << "7次机会,把握好吧!\n";
			for (int i = 1; i <= 7; i++)
			{
				tab(8, 1);
				cout << "还剩" << 7 - i + 1 << "次机会,请输入(1-100)----";
				cin >> ans ;
//				cout << ans << '\n';
				if (ans <= 0||ans>100)
				{
					Color(4);
					cout << "\t错误:#001\n";
					Color(2);
					system("pause");
					exit(1);
				}
				if (ans < sz1)
					cout << "It's too small!\n";
				else if (ans == sz1)
				{
					Color(11);
					cout << "恭喜你,猜到了" << sz1 << '\n', money += 7 - i + 1;
					Sleep(500);
					break;
				}
				else
					cout << "It's too big!\n";
			}
			Sleep(500);
		}
		else if (val == "2")
			isout = true;
	}
}
int main()
{
	set_window();
	SetWindowLongPtrA(
		GetConsoleWindow(),
		GWL_STYLE,
		GetWindowLongPtrA(GetConsoleWindow(), GWL_STYLE) & ~WS_SIZEBOX & ~WS_MINIMIZEBOX);
	SetWindowLongPtrA(
		GetConsoleWindow(),
		GWL_STYLE,
		GetWindowLongPtrA(GetConsoleWindow(), GWL_STYLE) & ~WS_SIZEBOX & ~WS_MAXIMIZEBOX & ~WS_CAPTION);
	while (!isout)
	{
		Color(2);
		tab(8, 1);
		cout << "money:" << money << "\n0:退出游戏\n1:游戏猜数字\n2:读取存档\n3:查看版本信息\n4:存档\n请选择(0~4)----";
		cin >> val;
		if (val == "0")
		{
			Color(4);
			cout << "是否存档?会覆盖原来的。(0否,1是)----";
			cin >> val;
			Color(2);
			isout = true;
			if (val == "1")
			{
				Color(5);
				cout << "正在存档中...\n";
				ofstream out("游戏存档.out");
				out << money;
				Sleep(500);
				cout << "存档完毕!\n";
				Color(2);
			}
		}
		else if (val == "1")
		{
			csz();
			isout = false;
		}
		else if (val == "2")
		{
			Color(5);
			cout << "正在打开存档中...\n";
			ifstream in("游戏存档.out");
			in >> money;
			Sleep(500);
			cout << "打开存档完毕!\n";
			Color(2);
		}
		else if (val == "3")
		{
			Color(5);
			cout << "作者:wbw121124\n邮箱:wbw121124@163.com  wbw121124@qq.com\n错误信息:\n\t#001:输入错误\n";
			Color(2);
			system("pause");
		}
		else if (val == "4")
		{
			Color(4);
			cout << "是否存档?会覆盖原来的。(0否,1是)----";
			cin >> val;
			Color(2);
			if (val == "1")
			{
				Color(5);
				cout << "正在存档中...\n";
				ofstream out("游戏存档.out");
				out << money;
				Sleep(500);
				cout << "存档完毕!\n";
				Color(2);
			}
		}
		system("cls");
	}
	tab(8, 1);
	system("pause");
	return 0;
}
// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件

### 回答1: 洛谷c是一个在洛谷平台上运行的控制台小游戏。在洛谷c里,玩家可以体验到纯粹的命令行游戏的乐趣。 洛谷c提供了丰富多样的游戏选择,包括迷宫、扫雷、数独等经典游戏。玩家可以通过键盘输入命令与游戏进行交互,通过编写c语言代码来完成各种游戏任务。 在洛谷c中,玩家可以锻炼自己的逻辑思考和编程能力。比如,在迷宫游戏中,玩家需要编写代码来实现自动寻找出口的功能;在扫雷游戏中,玩家需要编写代码来实现揭开方块、计算周围雷数等功能。 洛谷c还提供了竞赛模式,玩家可以参加各种比赛,与其他玩家切磋编程技巧。通过比赛,玩家可以学习到其他程序员的优秀代码,不断提升自己的编程水平。 洛谷c也提供了交流和学习的平台,玩家可以与其他玩家交流游戏心得、学习经验,共同进步。在洛谷c的论坛中,玩家可以提问问题、分享代码,获得其他玩家的帮助和指导。 总之,洛谷c是一个有趣并且有教育价值的控制台小游戏。通过游戏,玩家能够提高编程能力,锻炼逻辑思维,在与其他玩家的交流中不断学习和成长。 ### 回答2: 洛谷c是一个控制台小游戏,它是一个基于C语言编写的游戏平台。这个平台提供了各种类型的游戏,如迷宫游戏、飞行游戏、射击游戏等等。洛谷c的游戏都是在控制台下运行的,没有图形界面,所有的操作都是通过键盘输入和控制台输出来完成。 在洛谷c中,你可以通过学习C语言来编写自己的小游戏,也可以玩其他用户编写的游戏。这是一个很好的学习C语言的平台,通过编写小游戏可以锻炼自己的编程能力和逻辑思维。 洛谷c的游戏很有趣,而且有很多挑战性的关卡。你可以在游戏中探索各种各样的场景,解决难题,战胜敌人。游戏的难度逐渐增加,所以你需要不断提升自己的能力才能通关。 另外,洛谷c还有一个活跃的社区,你可以在社区中与其他玩家交流,分享自己的作品和经验。这样可以帮助你更好地理解游戏中的问题,并且找到解决问题的方法。 总之,洛谷c是一个可以让你学习C语言、锻炼编程能力和享受游戏乐趣的平台。无论你是初学者还是有一定编程经验的人,都可以在这里找到适合自己的游戏和挑战。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值