精华内容
下载资源
问答
  • C++控制台游戏效果

    2018-12-21 08:20:06
    这是在VS2013中用C++实现的控制台游戏,可以在装VS的环境中运行
  • c++ 控制台游戏打砖块

    2019-07-24 20:06:28
    c++ 控制台游戏打砖块 代码: #include<iostream> #include<conio.h> #include<Windows.h> using namespace std; enum{ RightUp, RightDown, LeftUp, LeftDown, Over }; void hui(int map[20...

    c++ 控制台游戏打砖块

    这个代码逻辑有点问题(出现了六个无法消除的幸运星),正在修改。
    代码:

    #include<iostream>
    #include<conio.h>
    #include<Windows.h>
    using namespace std;
    enum{
    	RightUp,
    	RightDown,
    	LeftUp,
    	LeftDown,
    	Over
    };
    void hui(int map[20][20]){
    	for (int i = 0; i < 20; i++){
    		for (int j = 0; j < 20; j++)
    		{
    			if (map[i][j] == 0){
    				cout << "  ";
    			}
    			else if (map[i][j] == 4 || map[i][j] == 5){
    				cout << "■";
    			}
    			else if (map[i][j] == 3){
    				cout << "★";
    			}
    			else if (map[i][j] == 2){
    				cout << "〓";
    			}
    			else if (map[i][j] == 1)
    			{
    				cout << "●";
    			}
    		}
    		cout << endl;
    	}
    }
    void move(COORD & ball,int cx, int cy,int map[20][20],int & Gstate){
    	map[ball.X][ball.Y] = 0;
    	ball.X += cx;
    	ball.Y += cy;
    	if (ball.Y==19&&Gstate==RightDown){
    		ball.Y--;
    		ball.X--;
    		Gstate = LeftDown;
    	}
    	else if (ball.Y == 19 && Gstate == RightUp)
    	{
    		ball.Y--;
    		ball.X++;
    		Gstate = LeftUp;
    	}
    	else if (ball.Y == 0 && Gstate == LeftUp)
    	{
    		ball.Y++;
    		ball.X++;
    		Gstate = RightUp;
    	}
    	else if (ball.Y == 0 && Gstate == LeftDown)
    	{
    		ball.Y++;
    		ball.X--;
    		Gstate = RightDown;
    	}
    	else if (ball.X == 0 && Gstate == RightUp)
    	{
    		ball.X++;
    		ball.Y--;
    		Gstate = RightDown;
    	}
    	else if (ball.X == 0 && Gstate == LeftUp)
    	{
    		ball.X++;
    		ball.Y++;
    		Gstate = LeftDown;
    	}
    	else if (map[ball.X][ball.Y] == 3 && Gstate == LeftUp)
    	{
    		map[ball.X][ball.Y+1] = 0;
    		ball.X++;
    		ball.Y++;
    		Gstate = LeftDown;
    	}
    	else if (map[ball.X][ball.Y-1] == 3 && Gstate == RightUp)
    	{
    		map[ball.X][ball.Y-1] = 0;
    		ball.X++;
    		ball.Y--;
    		Gstate = RightDown;
    	}
    	else if (map[ball.X][ball.Y] == 2 && Gstate == LeftDown)
    	{
    		ball.X--;
    		ball.Y++;
    		Gstate = LeftUp;
    	}
    	else if (map[ball.X][ball.Y] == 2 && Gstate == RightDown)
    	{
    		ball.X--;
    		ball.Y--;
    		Gstate = RightUp;
    	}
    	else if (ball.X == 19)
    	{
    		ball.X--;
    		Gstate = Over;
    	}
    	map[ball.X][ball.Y] = 1;
    }
    void minego(COORD & mine, int sy, int map[20][20]){
    	for (int i = mine.X; i <= mine.Y; i++){
    		map[18][i] = 0;
    	}
    	mine.X += sy;
    	mine.Y += sy;
    	if (mine.X > 0 && mine.Y < 19){
    		for (int i = mine.X; i <= mine.Y; i++){
    			map[18][i] = 2;
    		}
    	}
    	else
    	{
    		mine.X -= sy;
    		mine.Y -= sy;
    		for (int i = mine.X; i <= mine.Y; i++){
    			map[18][i] = 2;
    		}
    	}
    }
    void main(){
    	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    	CONSOLE_CURSOR_INFO CursorInfo;
    	GetConsoleCursorInfo(handle, &CursorInfo);//获取控制台光标信息
    	CursorInfo.bVisible = false; //隐藏控制台光标
    	SetConsoleCursorInfo(handle, &CursorInfo);
    	int map[20][20]={};
    	for (int i = 0; i < 20;i++){
    		for (int j = 0; j < 20; j++)
    		{
    			if (i==0 || j == 0 || j == 19){
    				map[i][j] = 5;
    			}
    			else if (i == 19){ 
    				map[i][j] = 4; 
    			}
    			else if (i<4){
    				map[i][j] = 3;
    			}
    		}
    	}
    	COORD ball = { 17, 10 };
    	COORD mine = { 9, 11 };
    	map[ball.X][ball.Y] = 1;
    	for (int i = mine.X; i <= mine.Y; i++){
    		map[18][i] = 2;
    	}
    	hui(map);
    	int Gstate = RightUp;
    	HANDLE hOutput;
    	COORD coord = { 0, 0 };
    	hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    
    	//创建新的缓冲区
    	HANDLE hOutBuf = CreateConsoleScreenBuffer(
    		GENERIC_READ | GENERIC_WRITE,
    		FILE_SHARE_READ | FILE_SHARE_WRITE,
    		NULL,
    		CONSOLE_TEXTMODE_BUFFER,
    		NULL
    		);
    
    	//设置新的缓冲区为活动显示缓冲
    	SetConsoleActiveScreenBuffer(hOutBuf);
    
    	//隐藏两个缓冲区的光标
    	CONSOLE_CURSOR_INFO cci;
    	cci.bVisible = 0;
    	cci.dwSize = 1;
    	SetConsoleCursorInfo(hOutput, &cci);
    	SetConsoleCursorInfo(hOutBuf, &cci);
    
    	//双缓冲处理显示
    	DWORD bytes = 100;
    	char data[1600];
    	while (Gstate!=Over)
    	{
    		ReadConsoleOutputCharacterA(hOutput, data, 1600, coord, &bytes);
    		WriteConsoleOutputCharacterA(hOutBuf, data, 1600, coord, &bytes);
    		system("cls");
    		hui(map);
    		Sleep(100);
    		char Control;
    		if (_kbhit())
    		{
    			Control = _getch();
    			switch (Control)
    			{
    			case 'a':minego(mine, -1, map); break;
    			case 'd':minego(mine,1, map); break;
    			default:
    				break;
    			}
    		}
    		switch (Gstate)
    		{
    		case RightUp:move(ball, -1, 1, map, Gstate); break;
    		case RightDown:move(ball, 1, 1, map, Gstate); break;
    		case LeftUp:move(ball, -1, -1, map, Gstate); break;
    		case LeftDown:move(ball, 1, -1, map, Gstate); break;
    		default:
    			break;
    		}
    
    	}
    	ReadConsoleOutputCharacterA(hOutput, data, 1600, coord, &bytes);
    	WriteConsoleOutputCharacterA(hOutBuf, data, 1600, coord, &bytes);
    	cout << "游戏结束" << endl;
    	system("pause");
    }
    

    PS:没写注释,逻辑可能有点小复杂,欢迎交流。

    展开全文
  • C++控制台游戏3合一

    2011-01-12 19:41:23
    这是我自己写的 C++控制台游戏3合一 知识点: 包含了用户登录 保存积分 读取文档 扑克牌算法 UML设计等 需要学习的朋友可以下载
  • C++初学者,使用控制台 写的一个斗地主的游戏,斗地主的所有牌型都可以出,但是电脑出牌不是很智能,还有很多需要改进的地方。
  • c/c++控制台游戏

    2014-06-13 22:50:02
    本人自己写的一个小游戏 控制台类型,由于地图过大 导致刷屏会比较慢,运行需要vs2005以上,使用了xml来保存游戏进度,游戏中有任务系统,技能,打怪。游戏结束的条件是打死魔王 wasd控制上下左右 h键 呼出菜单,请...
  • 包括了67个控制台游戏 游戏不是编者做的,作者有权声明 和之前一个一样的
  • C++控制台游戏2048

    千次阅读 2015-03-04 09:32:24
    2048这个游戏相信好多人都玩过,想想其实功能挺简单的,无非就是上下左右移动,然后判断数字,接着随机出现2或者4。 原来我是我用好多函数实现的,显得有点乱。然后看到别人用类实现,创建对象,调用成员函数,感觉...

    2048这个游戏相信好多人都玩过,想想其实功能挺简单的,无非就是上下左右移动,然后判断数字,接着随机出现2或者4。
    原来我是我用好多函数实现的,显得有点乱。然后看到别人用类实现,创建对象,调用成员函数,感觉写的非常好,借鉴了好多地方改了改。

    1. 我们先来看看主函数:

    int main()
    {
        unsigned int x = 1, y = 1;
        while (x == y)
        {
            srand((unsigned)time(NULL));
            x = rand() % 16;
            y = rand() % 16;
        }
        Array a(x, y);
        cout << a;
        char c;
        while (c=_getch())
        {
            bool flag = false;
            switch (c)
            {
            case 'w':
                flag = a.moveUp();
                break;
            case 's':
                flag = a.moveDown();
                break;
            case 'a':
                flag = a.moveLeft();
                break;
            case 'd':
                flag = a.moveRight();
                break;
            default:
                break;
            }
            if (flag)
            {
                a.upDate();
                system("cls");
                cout << a;
            }
            if (a.checkGame())
            {
                cout << endl;
                cout << "  **********************" << endl;
                cout << "  小     game over!   妖" << endl;
                cout << "  小       拜拜       妖" << endl;
                cout << "  **********************" << endl;
                Sleep(10000);
                return 0;
            }
        }
        return 0;
    }

    a. 上面的x 和y是为了启动游戏时随机位置出现2。
    b. 重载了输出符<<.
    c. 然后就是上下左右移动了,为了方便判断是否执行成功,我们用bool类型作为这些函数的返回值。
    d. checkGame()是一个检查游戏是否结束的函数。

    2.我们看看这几个函数怎么实现的。

    Array::Array(int x1, int x2)
    {
        int* p = &m_num[0][0];//定义一个指针,指向数组的首地址
        memset(m_num, 0, sizeof(m_num));//初始化数组,memset用法:memset(数组名,初始化数字,数组大小)
        *(p + x1) = 2;//刚运行程序后出现的两个数字
        *(p + x2) = 2;
    }
    bool Array::checkGame()
    {
        bool flag = true;
        unsigned int i, j;
        for (i = 0; i < 3; i++)
        {
            for (j = 0; j < 3; j++)
            {
                if (m_num[i][j] == 0 || m_num[i][3] == 0 || m_num[3][i] == 0 || m_num[3][3]==0
                    || m_num[i][j] == m_num[i][j + 1] || m_num[j][i] == m_num[j + 1][i]
                    || m_num[i][3]==m_num[i+1][3] || m_num[3][i]==m_num[3][i+1])
                {
                    flag = false;
                    return flag;
                }
            }
        }
        return flag;
    }
    
    bool Array::moveUp()
    {
        unsigned int i, j, k, m;
        int temp[4][4];
        bool flag = false;
    
        for (i = 0; i < 4; i++)
        {
            for (j = 0; j < 4; j++)
            {
                temp[i][j] = m_num[i][j];
            }
        }
    
        for (i = 0; i < 4; i++)//每行四个数字
        {
            for (k = 0; k < 3; k++)//若是将下一行的数字为0,移动上去后,还是0,所以要每行都再次比较一下
            {
                for (j = 0; j < 3; j++)//上下比较三个数字
                {
                    if (m_num[j][i] == 0)
                    {
                        for (m = j; m < 3; m++)
                        {
                            m_num[m][i] = m_num[m + 1][i];//第N行时,将下面的几行向上移动一次
                        }
                        m_num[3][i] = 0;//最后一行赋值0
                    }
    
                }
            }
        }
    
        for (i = 0; i < 4; i++)
        {
            for (j = 0; j < 3; j++)//上下比较三个数字
            {
                if (m_num[j][i] == m_num[j + 1][i])
                {
                    m_num[j][i] += m_num[j + 1][i];
    
                    for (m = j + 1; m < 3; m++)//下下一行向上移动
                    {
                        m_num[m][i] = m_num[m + 1][i];
                    }
                    m_num[3][i] = 0;//最后一行赋值0
    
                }
    
            }
        }
    
        for (i = 0; i < 4; i++)
        {
            for (j = 0; j < 4; j++)
            {
                if (temp[i][j] != m_num[i][j])//移动后和以前的数字不一样,证明还能移动
                {
                    flag = true;
                    return flag;
                }
            }
        }
        return flag;
    }
    

    (上下左右移动的函数差不多,只改几个数字而已,这里仅列出向上移动的函数)

    bool Array::addNum(int i)
    {
        bool flag = false;
        int *p = &m_num[0][0];
    
        if (*(p + i) == 0)
        {
            srand((unsigned)time(NULL));
    
            int x = rand() % 4;//此处定义出现2和4的概率,我定义为1:4
            if (x == 1)
                *(p + i) = 4;
            else
                *(p + i) = 2;
            flag = true;
        }
        return flag;
    }
    
    ostream& operator<<(ostream& is, const Array& array)
    {
        is << "   上(w) 下(s) 左(a) 右(d)   " << endl;
        is << "-----------------------------" << endl;
        for (unsigned int i = 0; i < 4; i++)
        {
            for (unsigned int j = 0; j < 4; j++)
            {
                is << "|" << setw(6);
                if (array.m_num[i][j] != 0)
                    is << array.m_num[i][j];
                else
                    is << " ";
            }
            is << "|" << endl;
            for (unsigned int j = 0; j < 4; j++)
            {
                is << "|" << setw(6) << " ";
            }
            is << "|" << endl;
            is << "-----------------------------" << endl;
        }
        return is;
    }

    这是我运行的截图:
    这里写图片描述
    这里写图片描述

    展开全文
  • (反正我是没有怎么玩过)这里将用C++控制台程序简单实现这个扫雷游戏。 Win7下的扫雷就是下面这个画风的: 首先,我们分析以下这个游戏: 地图由正方形小方块组成的矩形,每个小方块内要么有雷,要么没有雷 ...

    扫雷 MineSweeper

    用过Windows XP的用户一定不会忘记那一款有趣、烧脑(maybe)的扫雷游戏。(反正我是没有怎么玩过)这里将用C++控制台程序简单实现这个扫雷游戏。
    Win7下的扫雷就是下面这个画风的:

    此处输入图片的描述

    首先,我们分析以下这个游戏:

    • 地图由正方形小方块组成的矩形,每个小方块内要么有雷,要么没有雷
    • 随意点击一个方块开始,如果有雷,爆炸了,则游戏结束,没有爆炸则继续
    • 没有爆炸的方块会显示出以它为中心的九宫格内的雷的数量,为空则表示没有
    • 一次点击后,如果没有爆炸,且周围有雷,则不会显示出多余方块,如果周围没有雷,则会显示出周围所有没有雷的方块,并且显示出数字的方块会作为边界
    • 为什么要这样呢?因为为空白的话,可以直接将周围剩余8个方块依次点击出来(都没有雷),所以电脑帮我们做了这一步,让我们进行接下来的分析

    可以看到,上面的过程中最重要的就是:点击的块周围没有雷时,显示出整个可以确定没有雷的一块区域和边界。这很显然要用到广度优先搜索,用队列实现,并不复杂。

    实现效果图:
    my-mine-sweeper

    因为是纯粹的C++控制台游戏,所以输入坐标进行挖雷。
    游戏逻辑就是:每一次接受输入,然后挖雷,刷新状态,清屏,输出,挖到雷就结束。
    雷的数量作为输入,自己设置。然后程序随机生成雷的位置。

    实现

    IDE:VS 2017 Community

    文件结构

    |
    |----block.h        //block类以及Map类的声明
    |----stdafx.h       //VS必须有这个头文件,可以将一些所有源文件都能用到的头文件在其中声明
    |----block.cpp      //Map类的方法实现
    |____game-MineSweeper.cpp       //主函数,逻辑主体
    • block.h——blockMap 类定义
    // 2018.4.5 In XDU 
    // block class and Map class definition
    // IDE: VS 2017 Community
    
    #pragma once
    #include <cstdlib>
    #include <iostream>
    #include <queue>
    #include <ctime>
    using std::cout;
    using std::cin;
    using std::endl;
    using std::queue;
    using std::pair;
    
    const int max_X = 20;       //也可以将block改造为模板类,将这两个参数作为模板参数传入接口
    const int max_Y = 20;       //如果要实现输入控制地图大小,可在堆上分配数组,作为参数传入构造函数,一维数组模拟二维数组即可
    const int offset_X = 5;     //打印地图时相对纵轴偏移量,下为横轴
    const int offset_Y = 3;
    
    template<typename T>
    T max(T a, T b)
    {
        return a > b ? a : b;
    }
    template<typename T>
    T min(T a, T b)
    {
        return a < b ? a : b;
    }
    
    struct block
    {
        bool has_mine;          //是否有雷
        int mine_around_num;    //周围的雷的数量
        bool digged;            //是否已经被挖开,挖开有雷则直接返回,没有则显示周围的雷的数量
    };
    class Map
    {
    private:
        block Cube[max_X][max_Y];
    public:
        //传入雷的数量,将Cube初始化
        Map(int n);
        //应该要采用广度优先搜索,将所有位置显示出来,挖到雷返回false
        bool dig(int x, int y);
        //打印地图,若碰到有雷炸了的情况,最后由下一个函数清屏打印最终结果
        void print();
        //雷挖炸了之后,将所有位置情况打印出来
        void print_end();
    };
    • block.cpp——Map的成员函数实现

    其中广搜很容易实现。print函数很多都是处理输出格式的内容。

    
    #include "stdafx.h"
    #include "block.h"
    
    传入雷的数量,对其进行初始化
    Map::Map(int n)
    {
        memset(Cube, 0, sizeof(Cube));
        srand(time(0));                     //随机数种子
        for (int i = 0; i < n; i++)         //随机埋上n个雷
        {
            int x = rand() % max_X;
            int y = rand() % max_Y;
            Cube[x][y].has_mine = true;
            //cout << "(" << x << "," << y << ")" << endl;
        }
        for (int i = 0; i < max_X; i++)     //对地图进行初始化
            for (int j = 0; j < max_Y; j++)
                for (int x = max(i - 1, 0); x <= min(i + 1, max_X - 1); x++)
                    for (int y = max(j - 1, 0); y <= min(j + 1, max_Y - 1); y++)
                        if (Cube[x][y].has_mine)
                            Cube[i][j].mine_around_num++;
    }
    
    //应该要采用广度优先搜索,将所有位置显示出来,挖到雷返回false
    bool Map::dig(int x, int y)
    {
        Cube[x][y].digged = true;
        if (Cube[x][y].has_mine)
            return false;
        else
        {
            if (Cube[x][y].mine_around_num != 0)
                return true;
            else
            {
                queue<pair<int, int>> Q;            //采用队列进行广度优先搜索
                Q.push({ x,y });
                while (!Q.empty())
                {
                    int curx = Q.front().first;     //最初挖出来的位置入队
                    int cury = Q.front().second;
                    Q.pop();
                    for (int i = 1; i <= 4; i++)    //表示方向,1~4分别为上下左右
                    {
                        int tmpx = curx;
                        int tmpy = cury;
                        switch (i)                  //不会出现default的情况
                        {
                        case 1: tmpx = max(curx - 1, 0);            break;
                        case 2: tmpx = min(curx + 1, max_X - 1);    break;
                        case 3: tmpy = max(cury - 1, 0);            break;
                        case 4: tmpy = min(cury + 1, max_Y - 1);    break;
                        }
                        if (!Cube[tmpx][tmpy].digged && !Cube[tmpx][tmpy].has_mine) //没有被dig且没有雷且周围没有雷则入队
                        {
                            if (Cube[tmpx][tmpy].mine_around_num == 0)  //挖出来的区域的中间位置,即周围没有雷的位置
                            {
                                Q.push({ tmpx,tmpy });
                                Cube[tmpx][tmpy].digged = true;
                            }
                            else
                                Cube[tmpx][tmpy].digged = true;         //被挖出来区域的边界,周围有雷,置其状态但不入队
                        }
                    }
                }
            }
            cout << endl;
            return true;
        }
    }
    
    
    //打印地图,就是这样
    void Map::print()
    {
        for (int oy = 0; oy < offset_Y; oy++)
            cout << endl;
        for (int ox = 0; ox < offset_X + 2 + max_X / 2; ox++)
            cout << "  ";
        cout << "Y" << endl;
        cout << " ";
        for (int oy = 0; oy < offset_X + 1; oy++)
            cout << "  ";
        for (int ox = 0; ox < max_Y; ox++)
        {
            cout << ox;
            if (ox < 10)
                cout << " ";
        }
        cout << endl;
        //以上均为控制横向偏移
        for (int i = 0; i < max_X; i++)
        {
            for (int ox = 0; ox < offset_X; ox++)
                cout << "  ";
            if (i == (max_Y) / 2)
                cout << "X";
            else
                cout << " ";
            if (i < 10)
                cout << " ";
            cout << i;
            //以上为纵向偏移控制
            for (int j = 0; j < max_Y; j++)
            {
                if (!Cube[i][j].digged)         //没有被挖
                    cout << "■";
                else if (Cube[i][j].has_mine)   //被挖了且有雷
                    cout << "×";
    
                else if (Cube[i][j].mine_around_num != 0)   //被挖了且没有雷且周围有雷
                    cout << " " << Cube[i][j].mine_around_num;
                else
                    cout << "  ";
            }
            cout << endl;
        }
    }
    
    
    //雷挖炸了之后,将所有位置情况打印出来,也可以选择只用print()打印出踩中的位置
    void Map::print_end()
    {
        for (int oy = 0; oy < offset_Y; oy++)
            cout << endl;
        for (int ox = 0; ox < offset_X + 2 + max_X / 2; ox++)
            cout << "  ";
        cout << "Y" << endl;
        cout << " ";
        for (int oy = 0; oy < offset_X + 1; oy++)
            cout << "  ";
        for (int ox = 0; ox < max_Y; ox++)
        {
            cout << ox;
            if (ox < 10)
                cout << " ";
        }
        cout << endl;
        //以上均为控制横向偏移
        for (int i = 0; i < max_X; i++)
        {
            for (int ox = 0; ox < offset_X; ox++)
                cout << "  ";
            if (i == (max_Y) / 2)
                cout << "X";
            else
                cout << " ";
            if (i < 10)
                cout << " ";
            cout << i;
            //以上为纵向偏移控制
            for (int j = 0; j < max_Y; j++)
            {
                if (Cube[i][j].has_mine)        //有雷
                    cout << "×";
    
                else if (Cube[i][j].mine_around_num != 0)   //没有雷且周围有雷
                    cout << " " << Cube[i][j].mine_around_num;
                else
                    cout << "  ";
            }
            cout << endl;
        }
    }
    • game-MIneSweeper.cpp——主函数
    // 2018.4.5 In XDU 
    // MineSwepper, classic game in Windows XP, a simple implementation with WIN32 console.
    // IDE: VS 2017 Community
    // author : Tiko
    // Github : aojueliuyun
    // I'm a student , happy to study annd sahre, welcome to communicate with me !
    
    #include "stdafx.h"
    #include "block.h"
    
    int main(void)
    {
        int n;
        cout << "一个简单的扫雷游戏,向 Windows XP 的扫雷致敬!" << endl;
        cout << "核心算法:广度优先搜索 " << endl;
        cout << "默认地图大小:20 * 20 , 可在头文件block.h中修改。" << endl;
        cout << "另外横向纵向的偏移量也可在block.h中修改。" << endl;
        cout << "规则:" << endl << "使用■表示未挖开的位置,×表示挖开炸掉了的雷," << endl;
        cout << "数字表示以该格点为中心的九宫格内的雷的数量,空白为没有雷!" << endl;
        cout << "玩法:" << endl << "因为是纯控制台,所以采用做标输入的方式挖雷。" << endl;
        cout << "请输入地雷的数量(20左右为宜):";
        cin >> n;
        Map mymap(n);
        int x, y;
        system("cls");
        while (true)
        {
            mymap.print();
            cout << "\t  请输入坐标(x,y),用空格隔开! ps: x为纵,y为横" << endl;
            cout << "\t\t\t";
            cin >> x >> y;
            while (cin.fail() || x<0 || x >= 20 || x >= max_X || y >= max_Y)    //读取输入失败或者输入不在指定范围
            {
                system("cls");
                mymap.print();
                cout << "\t  请输入坐标(x,y),用空格隔开! ps: x为纵,y为横" << endl;
                cout << "\t\t输入有误,请重新输入!" << endl;
                cin.clear();        //更改cin状态标示符
                cin.ignore();       //清空输入缓冲区
                cout << "\t\t\t";
                cin >> x >> y;
            }
            if (!mymap.dig(x, y))
            {
                system("cls");
                mymap.print();      //亦可选择print_end()函数,将所有位置打印出来
                cout << "\t\t你踩中了(" << x << "," << y << ")" << endl;
                cout << "\t\t恭喜客官中雷,慢走不送了,您吶!" << endl;
                break;
            }
            system("cls");      //清屏,很好用的感觉
        }
        cout << "\t\t查看所有雷的位置 y/n ? ";
        char c;
        cin.get();      //读取回车
        if (cin.get(c) && c == 'y')
        {
            system("cls");
            mymap.print_end();
        }
        cout << "\t\t";
        return 0;
    }

    另外VS中的stdafx.h等文件请自行添加。

    结语

    本来想写一个控制台的RPG游戏,有等级、经验、地图、道具、材料、装备、NPC等元素的勇士屠龙然后变成龙的RPG游戏的。但是大概很多个小时之后,发现很多地方的设计有问题。所有暂时搁置,等到先把 Bjarne Stroustrup 大佬的 The C++ programming language 看完了之后再来写。所以今天先写了一个扫雷,大概写了两个小时,调Bug又花了两个小时,然后控制格式逻辑什么的又花了大概两个小时。一天就这么就过去了,其实说到底就是一个广度优先搜索而已。以后要提高效率。

    源码

    Github直接下载源码

    展开全文
  • 这次更新总体幅度不大,但谢谢大家的支持与关注 上代码 #include<iostream> #include<windows.h> #include<conio.h> #include<unistd.h> #include<cstdlib>...#incl

    这次更新总体幅度不大,但谢谢大家的支持与关注
    上代码

    #include<iostream>
    #include<windows.h>
    #include<conio.h>
    #include<unistd.h>
    #include<cstdlib>
    #include<time.h>
    #include<cmath> 
    #include<fstream>
    #include<bits/stdc++.h>
    #include<cstdio>
    #include<cmath>
    #define color(p) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),p);
    using namespace std;
    int c[10000];
    int qian=398,xue=150,fangyu=5,gongji=10,guai_xue,guai_gongji,guai_fangyu,xue_shangxian,dengji;
    int xiaoxueping,daxueping,jingyan;
    int lieniaochi,huangxuefuyi,baliaozhuaya,minwangya; 
    int jiuweihuzhiwei,jiejinzhuyou,binjing,binren,linhunmugun,fuhuojuanzhou,linhunzhang,shejin,guchongtui,sheyaoxingzang;//基础物品 
    int tiejian=1,binshuangjian,yongzhegong,jifengyi;
    int tiejian_zhuangbei,binshuangjian_zhuangbei,yongzhegong_zhuangbei,jifengyi_zhuangbei;
    int tiejian_naijiu=30,binshuangjian_naijiu,yongzhegong_naijiu,jifengyi_naijiu; 
    int dianhuoshi,lvmaopige,chigu,rongyanpianjia,baoxue,linhunsuipian;//基础物品 
    int qingtongjia;
    int qingtongjia_naijiu;
    int qingtongjia_zhuangbei;
    int qingtong; 
    bool BUFF_xuruo;
    int BUFF_xuruo_daojishi; 
    int BUFF_xuruo_yijing;
    int cd_yn;
    int start;
    COORD pos;
    void set_wz(int x,int y,int bl)
    {
        pos.X=x;
        pos.Y=y;
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
        printf("%d",bl);
    }
    void dqcd()//读档
    {
    	ifstream infile;
        ofstream outfile;
     	int i=1; 
        infile.open("仙界存档信息(请勿删除).dll"); 
        while (!infile.eof()&&i<=200)
        {
            infile >> c[i];
    		i++;            
        } 
    	qian=c[1];
    	cd_yn=c[2];
    	xue=c[3];
    	dengji=c[4];
    	fangyu=c[5];
    	gongji=c[6];
    	xiaoxueping=c[7];
    	daxueping=c[8];
    	jingyan=c[9];
    	jiuweihuzhiwei=c[10];
    	jiejinzhuyou=c[11];
    	binjing=c[12];
    	binren=c[13];
    	linhunmugun=c[14];
    	fuhuojuanzhou=c[15];
    	linhunzhang=c[16];
    	shejin=c[17];
    	guchongtui=c[18];
    	sheyaoxingzang=c[19];
    	tiejian=c[20];
    	tiejian_zhuangbei=c[21];
    	tiejian_naijiu=c[22];
    	binshuangjian=c[23];
    	binshuangjian_zhuangbei=c[24];
    	binshuangjian_naijiu=c[25];
    	yongzhegong=c[26];
    	yongzhegong_naijiu=c[27];
    	yongzhegong_zhuangbei=c[28]; 
    	lieniaochi=c[29];
    	minwangya=c[30];
    	baliaozhuaya=c[31];
    	huangxuefuyi=c[32];
    	qingtongjia=c[33];
    	qingtongjia_naijiu=c[34];
    	qingtongjia_zhuangbei=c[35];
    	qingtong=c[36];
    	lieniaochi=c[37];
    	jifengyi=c[38];
    	jifengyi_naijiu=c[39];
    	jifengyi_zhuangbei=c[40];
    	dianhuoshi=c[41];
    	lvmaopige=c[42];
    	chigu=c[43];
    	rongyanpianjia=c[44];
    	baoxue=c[45];
    	linhunsuipian=c[46];
    }
    void swcd()//存档 
    {
    	ofstream outfile[3];
        c[1]=qian;
        c[2]=cd_yn;
        c[3]=xue;
        c[4]=dengji;
        c[5]=fangyu;
        c[6]=gongji;
        c[7]=xiaoxueping;
        c[8]=daxueping;
        c[9]=jingyan;
        c[10]=jiuweihuzhiwei;
    	c[11]=jiejinzhuyou;
    	c[12]=binjing;
    	c[13]=binren;
    	c[14]=linhunmugun;
    	c[15]=fuhuojuanzhou;
    	c[16]=linhunzhang;
    	c[17]=shejin;
    	c[18]=guchongtui;
    	c[19]=sheyaoxingzang;
    	c[20]=tiejian;
    	c[21]=tiejian_zhuangbei;
    	c[22]=tiejian_naijiu;
    	c[23]=binshuangjian;
    	c[24]=binshuangjian_zhuangbei;
    	c[25]=binshuangjian_naijiu;
    	c[26]=yongzhegong;
    	c[27]=yongzhegong_naijiu;
    	c[28]=yongzhegong_zhuangbei; 
    	c[29]=lieniaochi;
    	c[30]=minwangya;
    	c[31]=baliaozhuaya;
    	c[32]=huangxuefuyi;
    	c[33]=qingtongjia;
    	c[34]=qingtongjia_naijiu;
    	c[35]=qingtongjia_zhuangbei;
    	c[36]=qingtong;
    	c[37]=lieniaochi;
    	c[38]=jifengyi;
    	c[39]=jifengyi_naijiu;
    	c[40]=jifengyi_zhuangbei;
    	c[41]=dianhuoshi;
    	c[42]=lvmaopige;
    	c[43]=chigu;
    	c[44]=rongyanpianjia;
    	c[45]=baoxue;
    	c[46]=linhunsuipian;
        outfile[0].open("仙界存档信息(请勿删除).dll");
        for(int i=1;i<=200;i++)
    		outfile[0]<<c[i]<<endl;
    }
    void pingzhixianshi(string xianshi_1,string xianshi_2)
    {
    	if(xianshi_2=="绿")
    	{
    		color(10);
    	}
    	if(xianshi_2=="蓝")
    	{
    		color(11); 
    	} 
    	if(xianshi_2=="红")
    	{
    		color(12);
    	}
    	if(xianshi_2=="金")
    	{
    		color(14);
    	}
    	if(xianshi_2=="紫")
    	{
    		color(13);
    	}
    	cout<<xianshi_1;
    	color(15);
    }
    void goumai(int jiage)
    {
    	if(jiage<=qian)
    	{
    		color(10);
    	}
    	else
    	{
    		color(12);
    	}
    }
    void siwang()
    {
    	while(1)
    	{
    		system("cls");
    		color(12); 
    		printf("你死了\n");
    		color(10);
    		printf("请选择方式复活\n");
    		color(15);
    		printf("<按1>使用复活卷轴[剩余%d]<按1>\n",fuhuojuanzhou);
    		printf("<按2>掉落随机绿色~红色品质物品<按2>");
    		int si_choose=getch();
    		if(si_choose=='1')
    		{
    			if(fuhuojuanzhou>=1)
    			{
    				fuhuojuanzhou-=1;
    				xue=xue_shangxian;
    				break;
    			}
    			else
    			{
    				printf("你还没有复活卷轴!");
    				Sleep(800);
    			}
    		}
    		if(si_choose=='2')
    		{
    			int i=rand()%1;
    			if(i==0)
    			{
    				if(jiejinzhuyou>=1)
    				{
    					jiejinzhuyou-=1;
    				}
    				if(shejin>=1)
    				{
    					shejin-=1;
    				}
    			}
    			Sleep(800);
    			xue=xue_shangxian;
    			break;
    		}
    	}
    }
    void wuqi_jisuan()
    {
    	if(tiejian_zhuangbei==1)
    	{
    		tiejian_naijiu-=1;
    		if(tiejian_naijiu<=0)
    		{
    			tiejian-=1;
    			gongji-=10;
    			tiejian_naijiu=0;
    			tiejian_zhuangbei=0;
    		}
    	}
    	if(binshuangjian_zhuangbei==1)
    	{
    		binshuangjian_naijiu-=1;
    		if(binshuangjian_naijiu<=0)
    		{
    			binshuangjian-=1;
    			gongji-=160;
    			fangyu-=20;
    			binshuangjian_naijiu=0;
    			binshuangjian_zhuangbei=0;
    		}
    	}
    	if(yongzhegong_zhuangbei==1)
    	{
    		yongzhegong_naijiu-=1;
    		if(yongzhegong_naijiu<=0)
    		{
    			yongzhegong-=1;
    			gongji-=10;
    			fangyu-=10;
    			yongzhegong_naijiu=0;
    			yongzhegong_zhuangbei=0;
    		}
    	}
    	if(qingtongjia_zhuangbei==1)
    	{
    		qingtongjia_naijiu-=1;
    		if(qingtongjia_naijiu<=0)
    		{
    			qingtongjia-=1;
    			fangyu-=10;
    			qingtongjia_naijiu=0;
    			qingtongjia_zhuangbei=0;
    		}
    	}
    }
    void zhanchang()
    {
    	int xianshi_guai_xue=guai_xue;
    	int zhanchang_gongji=gongji;
    	int zhanchang_fangyu=fangyu;
    	BUFF_xuruo_yijing=0;//BUFF状态初始化 
    	while(1)
    	{
    		wuqi_jisuan();
    		color(15);
    		system("cls");
    		printf("+=====[我方]========[敌方]=+\n");
    		printf("|血量:                     |\n");
    		printf("|攻击:                     |\n");
    		printf("|防御:                     |\n");
    		printf("+==========================+\n");
    		printf("<攻击>===按1\n");
    		printf("<补给>===按2\n");
    		pos.X=6;
        	pos.Y=1;
        	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
        	cout<<xue<<"/"<<xue_shangxian;
        	pos.X=19;
        	pos.Y=1;
        	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
        	cout<<guai_xue<<"/"<<xianshi_guai_xue;
        	pos.X=6;
        	pos.Y=2;
        	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
        	cout<<zhanchang_gongji;
        	pos.X=19;
        	pos.Y=2;
        	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
        	cout<<guai_gongji;
        	pos.X=6;
        	pos.Y=3;
        	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
        	cout<<zhanchang_fangyu;
        	pos.X=19;
        	pos.Y=3;
        	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
        	cout<<guai_fangyu;
        	pos.X=19;
        	pos.Y=5;
        	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
        	if(BUFF_xuruo==true)
        	{
        		printf("我方BUFF:虚弱 [我方攻击-50%][消失时间:%d]",BUFF_xuruo_daojishi);
    		}
    		if(BUFF_xuruo==true&&BUFF_xuruo_daojishi<=0)
    		{
    			BUFF_xuruo=false;
    			BUFF_xuruo_daojishi=0;
    			BUFF_xuruo_yijing=0;
    			zhanchang_gongji=zhanchang_gongji*2;
    		}
    		if(BUFF_xuruo==true&&BUFF_xuruo_yijing==0)
    		{
    			BUFF_xuruo_yijing=1;
    			zhanchang_gongji=zhanchang_gongji*0.5;
    		}
    		int choose_5=getch();
    		BUFF_xuruo_daojishi-=1;
    		if(choose_5=='1')
    		{
    			guai_xue-=(zhanchang_gongji-guai_fangyu);
    			printf("你对对方造成%d点伤害\n",(zhanchang_gongji-guai_fangyu));
    			Sleep(500);
    		}
    		if(choose_5=='2')
    		{
    			if(xiaoxueping>=1)color(10)
    			else color(12); 
    			printf("<按1>--小血瓶--<按1>[血量+40]\n");
    			color(15);
    			int zhanchang_choose_3=getch();
    			if(zhanchang_choose_3=='1')
    			{
    				if(xiaoxueping>=1)
    				{
    					xue+=40;
    					xiaoxueping-=1;
    					printf("血量+40");
    				}
    				else
    				{
    					printf("你还没有小血瓶!\n");
    				}
    				Sleep(500);
    			}
    		}
    		xue-=(guai_gongji-zhanchang_fangyu);
    		printf("对方对你造成%d点伤害\n",(guai_gongji-zhanchang_fangyu));
    		Sleep(500);
    		if(xue<=0||guai_xue<=0)break;
    	}
    	if(xue<=0)siwang();
    }
    void maoxian()
    {
    	while(1)
    	{
    		system("cls");
    		printf("<按0返回>\n");
    		printf("<按1>--简单--<按1>\n");
    		printf("<按2>--中等--<按2>\n");
    		printf("<按3>--困难--<按3>\n");
    		int choose=getch();
    		if(choose=='0')break;
    		if(choose=='1')
    		{
    			int i=rand()%5;
    			if(i==0)
    			{
    				printf("你遇到1级蛇妖[攻击:5 防御:5 血量:20]\n");
    				printf("<按1>---开战 <按2>--取消\n");
    				int choose_4=getch();
    				if(choose_4=='1')
    				{
    					guai_gongji=5;
    					guai_fangyu=5;
    					guai_xue=20;
    					int xianshi_guai_xue=guai_xue;
    					zhanchang();
    					if(guai_xue<=0)
    					{
    						printf("你获得$10 经验2");
    						Sleep(800);
    						qian+=10;
    						jingyan+=2;
    					}
    				}
    			}
    			if(i==1)
    			{
    				printf("你遇到2级蛇妖[攻击:10 防御:10 血量:30]\n");
    				printf("<按1>---开战 <按2>--取消\n");
    				int choose_4=getch();
    				if(choose_4=='1')
    				{
    					guai_gongji=10;
    					guai_fangyu=10;
    					guai_xue=30;
    					int xianshi_guai_xue=guai_xue;
    					zhanchang();
    					if(guai_xue<=0)
    					{
    						printf("你获得$20");
    						Sleep(800);
    						qian+=20;
    					}	
    				}
    			}
    			if(i==2)
    			{
    				printf("你遇到1级古虫[攻击:3 防御:1 血量:50]\n");
    				printf("<按1>---开战 <按2>--取消\n");
    				int choose_4=getch();
    				if(choose_4=='1')
    				{
    					guai_gongji=3;
    					guai_fangyu=1;
    					guai_xue=50;
    					int xianshi_guai_xue=guai_xue;
    					zhanchang();
    					if(guai_xue<=0)
    					{
    						printf("你获得$5");
    						Sleep(800);
    						qian+=5;
    					}	
    				}
    			}
    			if(i==3)
    			{
    				printf("你遇到2级古虫[攻击:6 防御:2 血量:60]\n");
    				printf("<按1>---开战 <按2>--取消\n");
    				int choose_4=getch();
    				if(choose_4=='1')
    				{
    					guai_gongji=6;
    					guai_fangyu=2;
    					guai_xue=60;
    					int xianshi_guai_xue=guai_xue;
    					zhanchang();
    					if(guai_xue<=0)
    					{
    						printf("你获得$5\n");
    						int i=rand()%5;
    						if(i!=4)
    						{
    							printf("你获得");
    							pingzhixianshi("古虫腿","绿");
    							color(15);
    							printf("*2\n");
    							guchongtui+=2; 
    						} 
    						Sleep(800);
    						qian+=5;
    					}	
    				}
    			}
    			if(i==4)
    			{
    				printf("你遇到1级烈鸟[攻击:20 防御:5 血量:140]\n");
    				printf("<按1>---开战 <按2>--取消\n");
    				int choose_4=getch();
    				if(choose_4=='1')
    				{
    					guai_gongji=20;
    					guai_fangyu=5;
    					guai_xue=140;
    					int xianshi_guai_xue=guai_xue;
    					zhanchang();
    					if(guai_xue<=0)
    					{
    						printf("你获得$48\n");
    						int i=rand()%2;
    						if(i!=0)
    						{
    							printf("你获得");
    							pingzhixianshi("烈鸟翅","红");
    							color(15);
    							printf("*1\n");
    							lieniaochi+=1; 
    						} 
    						Sleep(800);
    						qian+=48;
    					}	
    				}
    			}
    			if(i==5)
    			{
    				printf("你遇到2级烈鸟[攻击:10 防御:10 血量:140]\n");
    				printf("<按1>---开战 <按2>--取消\n");
    				int choose_4=getch();
    				if(choose_4=='1')
    				{
    					guai_gongji=10;
    					guai_fangyu=10;
    					guai_xue=140;
    					int xianshi_guai_xue=guai_xue;
    					zhanchang();
    					if(guai_xue<=0)
    					{
    						printf("你获得$48\n");
    						int i=rand()%2;
    						if(i!=0)
    						{
    							printf("你获得");
    							pingzhixianshi("烈鸟翅","红");
    							color(15);
    							printf("*2\n");
    							lieniaochi+=2; 
    						} 
    						Sleep(800);
    						qian+=48;
    					}	
    				}
    			}
    		} 
    		if(choose=='2')
    		{
    			int i=rand()%5;
    			if(i==0)
    			{
    				printf("你遇到3级蛇妖[攻击:15 防御:15 血量:70]\n");
    				printf("<按1>---开战 <按2>--取消\n");
    				int choose_4=getch();
    				if(choose_4=='1')
    				{
    					guai_gongji=15;
    					guai_fangyu=15;
    					guai_xue=70;
    					int xianshi_guai_xue=guai_xue;
    					zhanchang();
    					if(guai_xue<=0)
    					{
    						printf("你获得$10 经验2");
    						int i=rand()%5;
    						if(i==0||i==1)
    						{
    							printf("获得");
    							pingzhixianshi("蛇妖心脏","红");
    							color(15);printf("*1\n");
    							sheyaoxingzang+=1;
    						}
    						Sleep(800);
    						qian+=10;
    						jingyan+=2;
    					}
    				}
    			}
    			if(i==1)
    			{
    				printf("你遇到4级蛇妖[攻击:20 防御:20 血量:80]\n");
    				printf("<按1>---开战 <按2>--取消\n");
    				int choose_4=getch();
    				if(choose_4=='1')
    				{
    					guai_gongji=20;
    					guai_fangyu=20;
    					guai_xue=80;
    					int xianshi_guai_xue=guai_xue;
    					zhanchang();
    					if(guai_xue<=0)
    					{
    						printf("你获得$20");
    						int i=rand()%5;
    						if(i==0||i==1)
    						{
    							printf("获得");
    							pingzhixianshi("蛇妖心脏","红");
    							color(15);printf("*1\n");
    							sheyaoxingzang+=1;
    						}
    						Sleep(800);
    						qian+=20;
    					}	
    				}
    			}
    			if(i==2)
    			{
    				printf("你遇到1级古虫[攻击:3 防御:1 血量:50]\n");
    				printf("<按1>---开战 <按2>--取消\n");
    				int choose_4=getch();
    				if(choose_4=='1')
    				{
    					guai_gongji=3;
    					guai_fangyu=1;
    					guai_xue=50;
    					int xianshi_guai_xue=guai_xue;
    					zhanchang();
    					if(guai_xue<=0)
    					{
    						printf("你获得$5");
    						Sleep(800);
    						qian+=5;
    					}	
    				}
    			}
    			if(i==3)
    			{
    				printf("你遇到2级古虫[攻击:6 防御:2 血量:60]\n");
    				printf("<按1>---开战 <按2>--取消\n");
    				int choose_4=getch();
    				if(choose_4=='1')
    				{
    					guai_gongji=6;
    					guai_fangyu=2;
    					guai_xue=60;
    					int xianshi_guai_xue=guai_xue;
    					zhanchang();
    					if(guai_xue<=0)
    					{
    						printf("你获得$59\n");
    						int i=rand()%5;
    						if(i!=4)
    						{
    							printf("你获得");
    							pingzhixianshi("古虫腿","绿");
    							color(15);
    							printf("*2\n");
    							guchongtui+=2; 
    						} 
    						Sleep(800);
    						qian+=59;
    					}	
    				}
    			}
    			if(i==4)
    			{
    				printf("你遇到1级九尾狐[攻击:20 防御:15 血量:400]\n");
    				printf("<按1>---开战 <按2>--取消\n");
    				int choose_4=getch();
    				if(choose_4=='1')
    				{
    					guai_gongji=20;
    					guai_fangyu=15;
    					guai_xue=400;
    					int xianshi_guai_xue=guai_xue;
    					zhanchang();
    					if(guai_xue<=0)
    					{
    						printf("你获得$188 经验7");
    						Sleep(800);
    						qian+=188;
    						jingyan+=7;
    					}
    				}
    			}
    		} 
    		if(choose=='3')
    		{
    			int i=rand()%2;
    			if(i==0)
    			{
    				printf("你遇到1级毒獠血蛭[攻击:55 防御:2 血量:10]\n");
    				printf("<按1>---开战 <按2>--取消\n");
    				int choose_4=getch();
    				if(choose_4=='1')
    				{
    					int i=rand()%2;
    					if(i==0)BUFF_xuruo=true,BUFF_xuruo_daojishi=5;
    					guai_gongji=55;
    					guai_fangyu=2;
    					guai_xue=10;
    					int xianshi_guai_xue=guai_xue;
    					zhanchang();
    					if(guai_xue<=0)
    					{
    						printf("你获得$40\n");
    						int i=rand()%5;
    						if(i!=0)
    						{
    							printf("你获得");
    							pingzhixianshi("八獠爪牙","蓝");
    							color(15);
    							printf("*1\n");
    							baliaozhuaya+=1; 
    						} 
    						Sleep(800);
    						qian+=40;
    					}	
    				}
    			}
    			if(i==1)
    			{
    				printf("你遇到2级毒獠血蛭[攻击:100 防御:5 血量:25]\n");
    				printf("<按1>---开战 <按2>--取消\n");
    				int choose_4=getch();
    				if(choose_4=='1')
    				{
    					int i=rand()%2;
    					if(i==0)BUFF_xuruo=true,BUFF_xuruo_daojishi=5;
    					guai_gongji=100;
    					guai_fangyu=5;
    					guai_xue=25;
    					int xianshi_guai_xue=guai_xue;
    					zhanchang();
    					if(guai_xue<=0)
    					{
    						printf("你获得$120\n");
    						int i=rand()%5;
    						if(i!=0)
    						{
    							printf("你获得");
    							pingzhixianshi("八獠爪牙","蓝");
    							color(15);
    							printf("*2\n");
    							baliaozhuaya+=2; 
    						} 
    						Sleep(800);
    						qian+=120;
    					}	
    				}
    			}
    		}
    	}
    }
    void shangdian()
    {
    	while(1)
    	{
    		system("cls");
    		srand(time(0));
    		int i=rand()%1;
    		int choose_1;
    		if(i==0)
    		{
    			printf("+-------[按0返回]-------+\n");
    			color(15);printf("|1,");
    			pingzhixianshi("小血瓶","绿");
    			printf("      ");
    			goumai(20);
    			printf("$20\n");
    			color(15);printf("|2,");
    			pingzhixianshi("九尾狐之尾","红");
    			printf("  ");
    			goumai(200);
    			printf("$200\n");
    			color(15);printf("|3,");
    			pingzhixianshi("复活卷轴","蓝");
    			printf("    ");
    			goumai(50);
    			printf("$50\n");
    			color(15);printf("|4,");
    			pingzhixianshi("冰刃","紫");
    			printf("        ");
    			goumai(800);
    			printf("$800\n");
    			color(15);printf("|5,");
    			pingzhixianshi("荒血蝠翼","红");
    			printf("    ");
    			goumai(800);
    			printf("$248\n");
    			color(15);printf("|6,");
    			pingzhixianshi("冥王牙","紫");
    			printf("      ");
    			goumai(1288);
    			printf("$1288\n");
    			color(15);printf("|7,");
    			pingzhixianshi("青铜甲","绿");
    			printf("      ");
    			goumai(110);
    			printf("$110\n");
    			color(15);printf("|8,");
    			pingzhixianshi("疾风衣","金");
    			printf("      ");
    			goumai(2300);
    			printf("$2300\n");
    			choose_1=getch();
    			if(choose_1=='0')break;
    			if(choose_1=='1')
    			{
    				if(qian>=20)
    				{
    					qian-=20;
    					xiaoxueping+=1;
    					printf("购买成功!");
    					Sleep(500);
    				}
    				else
    				{
    					printf("金币不足!");
    					Sleep(500);
    				}
    			}
    			if(choose_1=='2')
    			{
    				if(qian>=200)
    				{
    					qian-=200;
    					jiuweihuzhiwei+=1;
    					printf("购买成功!");
    					Sleep(500);
    				}
    				else
    				{
    					printf("金币不足!");
    					Sleep(500);
    				}
    			}
    			if(choose_1=='3')
    			{
    				if(qian>=50)
    				{
    					qian-=50;
    					fuhuojuanzhou+=1;
    					printf("购买成功!");
    					Sleep(500);
    				}
    				else
    				{
    					printf("金币不足!");
    					Sleep(500);
    				}
    			}
    			if(choose_1=='4')
    			{
    				if(qian>=800)
    				{
    					qian-=800;
    					binren+=1;
    					printf("购买成功!");
    					Sleep(500);
    				}
    				else
    				{
    					printf("金币不足!");
    					Sleep(500);
    				}
    			}
    			if(choose_1=='5')
    			{
    				if(qian>=248)
    				{
    					qian-=248;
    					huangxuefuyi+=1;
    					printf("购买成功!");
    					Sleep(500);
    				}
    				else
    				{
    					printf("金币不足!");
    					Sleep(500);
    				}
    			}
    			if(choose_1=='6')
    			{
    				if(qian>=1288)
    				{
    					qian-=1288;
    					minwangya+=1;
    					printf("购买成功!");
    					Sleep(500);
    				}
    				else
    				{
    					printf("金币不足!");
    					Sleep(500);
    				}
    			}
    			if(choose_1=='7')
    			{
    				if(qian>=110)
    				{
    					qian-=110;
    					qingtongjia+=1;
    					qingtongjia_naijiu=40;
    					printf("购买成功!");
    					Sleep(500);
    				}
    				else
    				{
    					printf("金币不足!");
    					Sleep(500);
    				}
    			}
    			if(choose_1=='8')
    			{
    				if(qian>=2300)
    				{
    					qian-=2300;
    					jifengyi+=1; 
    					jifengyi_naijiu=120;
    					printf("购买成功!");
    					Sleep(500);
    				}
    				else
    				{
    					printf("金币不足!");
    					Sleep(500);
    				}
    			}
    		}
    	}
    }
    void jisuan()
    {
    	xue_shangxian=100+dengji*50;
    	if(jingyan>=(dengji*7))
    	{
    		jingyan-=(dengji*7);
    		dengji++;
    	}
    	if(xue>xue_shangxian)
    	{
    		xue=xue_shangxian;
    	}
    }
    void beibao()
    {
    	while(1)
    	{
    		system("cls");
    		color(15);
    		printf("~~~~~~~~{按0返回}~~~~~~~~~\n");
    		printf("|<按1>-----武器-----<按1>|\n");
    		printf("|<按2>-----防具-----<按2>|\n");
    		printf("|<按3>----基础品----<按3>|\n");
    		int choose_6=getch();
    		if(choose_6=='0')break;
    		if(choose_6=='1')
    		{
    			printf("~~~~~~~~{按0返回}~~~~~~~~\n");
    			color(15);printf("|1,");
    			pingzhixianshi("铁剑","绿");
    			color(15);
    			printf("*%d",tiejian);
    			printf("    耐久*%d",tiejian_naijiu);
    			if(tiejian_zhuangbei==0)
    			{
    				printf("----<按1装备>\n");
    			}
    			else
    			{
    				printf("----<按1卸下>\n");
    			}
    			color(15);printf("|2,");
    			pingzhixianshi("冰霜剑","金");
    			color(15);
    			printf("*%d",binshuangjian);
    			printf("    耐久*%d",binshuangjian_naijiu);
    			if(binshuangjian_zhuangbei==0)
    			{
    				printf("----<按2装备>\n");
    			}
    			else
    			{
    				printf("----<按2卸下>\n");
    			}
    			color(15);printf("|3,");
    			pingzhixianshi("勇者弓","蓝");
    			color(15);
    			printf("*%d",yongzhegong);
    			printf("    耐久*%d",yongzhegong_naijiu);
    			if(yongzhegong_zhuangbei==0)
    			{
    				printf("----<按3装备>\n");
    			}
    			else
    			{
    				printf("----<按3卸下>\n");
    			}
    			int choose_8=getch();
    			if(choose_8=='1')
    			{
    				if(tiejian>=1)
    				{
    					if(tiejian_zhuangbei==0)
    					{
    						printf("装备成功!");
    						gongji+=10;
    						tiejian_zhuangbei=1;
    						Sleep(500);
    					}
    					else
    					{
    						printf("卸下成功!");
    						gongji-=10;
    						tiejian_zhuangbei=0;
    						Sleep(500);
    					}
    				}
    				else
    				{
    					printf("你先得拥有此武器"); 
    					Sleep(800); 
    				}
    			}
    			if(choose_8=='2')
    			{
    				if(binshuangjian>=1)
    				{
    					if(binshuangjian_zhuangbei==0)
    					{
    						printf("装备成功!");
    						gongji+=160;
    						fangyu+=20;
    						binshuangjian_zhuangbei=1;
    						Sleep(500);
    					}
    					else
    					{
    						printf("卸下成功!");
    						gongji-=160;
    						fangyu-=20;
    						binshuangjian_zhuangbei=0;
    						Sleep(500);
    					}
    				}
    				else
    				{
    					printf("你先得拥有此武器"); 
    					Sleep(800); 
    				}
    			}
    			if(choose_8=='3')
    			{
    				if(yongzhegong>=1)
    				{
    					if(yongzhegong_zhuangbei==0)
    					{
    						printf("装备成功!");
    						gongji+=10;
    						fangyu+=10;
    						yongzhegong_zhuangbei=1;
    						Sleep(500);
    					}
    					else
    					{
    						printf("卸下成功!");
    						gongji-=10;
    						fangyu-=10;
    						yongzhegong_zhuangbei=0;
    						Sleep(500);
    					}
    				}
    				else
    				{
    					printf("你先得拥有此武器"); 
    					Sleep(800); 
    				}
    			}
    		}
    		if(choose_6=='2')
    		{
    			printf("~~~~~~~~{按0返回}~~~~~~~~\n");
    			color(15);printf("|1,");
    			pingzhixianshi("青铜甲","绿");
    			color(15);
    			printf("*%d",qingtongjia);
    			printf("    耐久*%d",qingtongjia_naijiu);
    			if(qingtongjia_zhuangbei==0)
    			{
    				printf("----<按1装备>\n");
    			}
    			else
    			{
    				printf("----<按1卸下>\n");
    			}
    			color(15);printf("|2,");
    			pingzhixianshi("疾风衣","金");
    			color(15);
    			printf("*%d",jifengyi);
    			printf("    耐久*%d",jifengyi_naijiu);
    			if(jifengyi_zhuangbei==0)
    			{
    				printf("----<按2装备>\n");
    			}
    			else
    			{
    				printf("----<按2卸下>\n");
    			}
    			int choose_8=getch();
    			if(choose_8=='1')
    			{
    				if(qingtongjia>=1)
    				{
    					if(qingtongjia_zhuangbei==0)
    					{
    						printf("装备成功!");
    						fangyu+=10;
    						qingtongjia_zhuangbei=1;
    						Sleep(500);
    					}
    					else
    					{
    						printf("卸下成功!");
    						fangyu-=10;
    						qingtongjia_zhuangbei=0;
    						Sleep(500);
    					}
    				}
    				else
    				{
    					printf("你先得拥有此防具!"); 
    					Sleep(800); 
    				}
    			}
    			if(choose_8=='2')
    			{
    				if(jifengyi>=1)
    				{
    					if(jifengyi_zhuangbei==0)
    					{
    						printf("装备成功!");
    						fangyu+=35;
    						gongji+=15;
    						jifengyi_zhuangbei=1;
    						Sleep(500);
    					}
    					else
    					{
    						printf("卸下成功!");
    						fangyu-=35;
    						gongji-=15;
    						jifengyi_zhuangbei=0;
    						Sleep(500);
    					}
    				}
    				else
    				{
    					printf("你先得拥有此防具!"); 
    					Sleep(800); 
    				}
    			}
    		}
    		if(choose_6=='3')
    		{
    			printf("~~~~~~~~{按0返回}~~~~~~~~\n");
    			color(15);printf("|1,");
    			pingzhixianshi("九尾狐之尾","红");
    			color(15);
    			printf("*%d\n",jiuweihuzhiwei);
    			color(15);printf("|2,");
    			pingzhixianshi("结晶猪油","蓝");
    			color(15);
    			printf("*%d\n",jiejinzhuyou);
    			color(15);printf("|3,");
    			pingzhixianshi("古虫腿","绿");
    			color(15);
    			printf("*%d\n",guchongtui);
    			color(15);printf("|4,");
    			pingzhixianshi("冰晶","红");
    			color(15);
    			printf("*%d\n",binjing);
    			color(15);printf("|5,");
    			pingzhixianshi("烈鸟翅","红");
    			color(15);
    			printf("*%d\n",lieniaochi);
    			color(15);printf("|6,");
    			pingzhixianshi("冥王牙","紫");
    			color(15);
    			printf("*%d\n",minwangya);
    			color(15);printf("|7,");
    			pingzhixianshi("八獠爪牙","蓝");
    			color(15);
    			printf("*%d\n",baliaozhuaya);
    			color(15);printf("|8,");
    			pingzhixianshi("电火石","蓝");
    			color(15);
    			printf("*%d\n",dianhuoshi);
    			int choose_7=getch();
    		}
    	}
    }
    void gonggao()
    {
    	system("cls");
    	printf("**********[公告]**********\n");
    	printf("#本次游戏更新内容:[V1.0.5]#\n");
    	printf("#1,修复若干BUG           #\n");
    	printf("#2,更新疾风衣            #\n");
    	printf("#3,更新了2级烈鸟         #\n");
    	printf("#4,虚弱BUFF              #\n");
    	printf("*********[按1确认]********\n");
    	printf("\n");
    	int gg_choose=getch(); 
    }
    void gongjiangtai()
    {
    	while(1)
    	{
    		color(15);
    		system("cls");
    		printf("++++++++{按0返回}++++++++\n");
    		printf("|<按1>--武器合成--<按1> |\n");
    		int choose_9=getch();
    		if(choose_9=='0')break;
    		if(choose_9=='1')
    		{
    			printf("++++++++{按0返回}++++++++\n");
    			color(15);printf("|1,");
    			pingzhixianshi("冰霜剑","金");
    			pingzhixianshi("  冰晶","红");
    			color(15);printf("*5");
    			pingzhixianshi("  九尾狐之尾","红");
    			color(15);printf("*1");
    			pingzhixianshi("  冰刃","紫");
    			color(15);printf("*1");
    			if(binjing>=5&&jiuweihuzhiwei>=1&&binren>=1)
    			{
    				color(10);printf("----<按1合成>\n");
    			}
    			else
    			{
    				color(12);printf("----<按1合成>\n");
    			}
    			color(15);printf("|2,");
    			pingzhixianshi("勇者弓","蓝");
    			pingzhixianshi("  蛇筋","绿");
    			color(15);printf("*3");
    			pingzhixianshi("  古虫腿","绿");
    			color(15);printf("*5");
    			if(shejin>=3&&guchongtui>=5)
    			{
    				color(10);printf("----<按2合成>\n");
    			}
    			{
    				color(12);printf("----<按2合成>\n");
    			}
    			color(15);printf("|3,");
    			pingzhixianshi("疾风衣","金");
    			pingzhixianshi(" 结晶猪油","蓝");
    			color(15);printf("*6");
    			pingzhixianshi("  烈鸟翅","红");
    			color(15);printf("*2");
    			if(jiejinzhuyou>=6&&lieniaochi>=2)
    			{
    				color(10);printf("----<按3合成>\n");
    			}
    			else
    			{
    				color(12);printf("----<按3合成>\n");
    			}
    			int choose_10=getch();
    			if(choose_10=='1')
    			{
    				if(binjing>=5&&jiuweihuzhiwei>=1&&binren>=1)
    				{
    					binjing-=5;
    					jiuweihuzhiwei-=1;
    					binren-=1;
    					binshuangjian+=1;
    					binshuangjian_naijiu+=70;
    					printf("合成成功!");
    					Sleep(800);
    				}
    				else
    				{
    					printf("材料不足!");
    					Sleep(800);
    				}
    			}
    			if(choose_10=='2')
    			{
    				if(shejin>=3&&guchongtui>=5)
    				{
    					shejin-=3;
    					guchongtui-=5;
    					yongzhegong+=1;
    					yongzhegong_naijiu+=50;
    					printf("合成成功!");
    					Sleep(800);
    				}
    				else
    				{
    					printf("材料不足!");
    					Sleep(800);
    				}
    			}
    			if(choose_10=='3')
    			{
    				if(jiejinzhuyou>=6&&lieniaochi>=2)
    				{
    					jiejinzhuyou-=6;
    					lieniaochi-=2;
    					jifengyi+=1;
    					jifengyi_naijiu+=120;
    					printf("合成成功!");
    					Sleep(800);
    				}
    				else
    				{
    					printf("材料不足!");
    					Sleep(800);
    				}
    			}
    		}
    	}
    }
    void show()
    { 
    	gonggao();
    	while(1)
    	{
    		jisuan();
    		color(15);
    		srand(time(0));
    		system("cls");
    		printf("+--------------------------+\n");
    		printf("|");color(6);
    		printf("等级:");color(15);
    		printf("                     |\n");
    		printf("|");color(12);
    		printf("血量:");color(15);
    		printf("                     |\n");
    		printf("|攻击:          防御:      |\n");
    		printf("|金钱:                     |\n");
    		printf("+--------------------------+\n");
    		printf("|<按0>------存档------<按0>|\n");
    		printf("|<按1>------商店------<按1>|\n");
    		printf("|<按2>------冒险------<按2>|\n");
    		printf("|<按3>------背包------<按3>|\n");
    		printf("|<按4>-----工匠台-----<按4>|\n");
    		printf("+--------------------------+\n"); 
    		set_wz(6,1,dengji);
    		printf("    ");
    		cout<<jingyan<<"/"<<(dengji*7);
    		pos.X=6;
        	pos.Y=2;
        	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
        	cout<<xue<<"/"<<xue_shangxian;
        	set_wz(6,3,gongji);
        	set_wz(21,3,fangyu); 
        	set_wz(6,4,qian);
        	int choose;
        	choose=getch();
        	switch(choose)
        	{
        		case '0':
        			swcd();
        			break;
        		case '1':
        			shangdian();
        			break;
        		case '2':
        			maoxian();
        			break;
        		case '3':
        			beibao();
        			break;
        		case '4':
        			gongjiangtai();
        			break;
    		}
    	}
    }
    void xingshoujiaocheng()
    {
    	int start_yema=1,start_op;
    	while(1)
    	{
    		system("cls");
    		if(start_yema==1)
    		{
    			printf("请将仙界存档信息.dll与仙界放在同一个文件夹或者一起放在桌面上,否则读档会出错\n\n");
    			printf("按空格翻页    ");
    			cout<<start_yema;
    			printf("/4");
    		}
    		if(start_yema==2)
    		{
    			printf("游戏中物品品质分为5个等级,稀有度升序为:\n");
    			color(10);
    			printf("绿");
    			color(15);
    			printf("<");
    			color(11);
    			printf("蓝");
    			color(15);
    			printf("<");
    			color(12)
    			printf("红");
    			color(15);
    			printf("<");
    			color(14);
    			printf("金");
    			color(15);
    			printf("<");
    			color(13);
    			printf("紫\n");
    			color(15);
    			printf("按空格翻页    ");
    			cout<<start_yema;
    			printf("/4");
    		}
    		if(start_yema==3)
    		{
    			printf("时刻关注活动以及新发布的联动,你能从其中获得丰富的奖励!\n\n");
    			printf("按空格翻页    ");
    			cout<<start_yema;
    			printf("/4");
    		}
    		if(start_yema==4)
    		{
    			printf("记得按0存档哦!\n\n");
    			printf("按空格翻页    ");
    			cout<<start_yema;
    			printf("/4");
    		}
    		start_op=getch();
    		if(start_op==' ')
    		{
    			start_yema++;
    		}
    		if(start_yema>4)break;
    	}
    }
    int main()
    {
    	system("title 仙界 作者QQ:2099008248");
    	printf("+----仙界----+\n");
    	printf("|            |\n");
    	printf("|===按1开始==|\n");
    	printf("|            |\n");
    	printf("+------------+\n");
    	start=getch();
    	if(start=='1')
    	{
    		dqcd();
    		if(cd_yn==1)
    		{
    			show();
    		}
    		if(cd_yn==0)
    		{
    			xue=150;
    			dengji=1;
    			qian=398;
    			cd_yn=1;
    			gongji=10;
    			fangyu=5;
    			tiejian=1;
    			tiejian_naijiu=30;
    			swcd();
    			xingshoujiaocheng();
    			show();
    		}
    	}
    } 
    
    
    展开全文
  • C++控制台游戏【推箱子】有源代码

    热门讨论 2010-08-12 11:34:04
    都是用C写的,因为当时我只会C,现在学了C++,用C++写了这个游戏 【推箱子】这个源代码【C-free】【VC++6.0】送给喜欢编程的朋友们参考..... Author: 王云飞 【QQ:283371828】 Last Change: 2010.4.25
  • 小镇物语 1.7.2更新内容 1,究极炸药,可以高效炸矿啦! 2,性能提升,更快的运行速度 3,更丰富的订单 上代码! #include<iostream> #include<windows.h> #include<conio.h> #include<...#i
  • 本次BUG修复内容: 1,奶茶坊无法获得,修复后您可以在绿色品质抽奖中的单抽来获得它! 2,玫瑰园无法购买,现在您可以在综合商店中购买! 感谢您的支持,代码可以白嫖! 相信我们会做的更好的,有什么意见可以再评论区指出,...
  • C++控制台扫雷游戏

    2017-05-06 18:10:49
    C++控制台扫雷游戏,博客原文http://blog.csdn.net/XieNaoban/article/details/71275194
  • c++ 控制台 打怪小游戏.cpp
  • 主要为大家详细介绍了C++控制台实现贪吃蛇,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • C++控制台打飞机小游戏

    万次阅读 多人点赞 2019-10-24 17:26:22
    文章目录前言介绍 前言 我终于决定还是把这个放出来。...更多控制台操作可以看之前写的鼠标操作的文章,也可以直接在这个上面复制。 MinGW编译无错误无警告。 只有一个文件,没有任何其他的东西...
  • 本人初学C++,编写了c++控制台游戏;界面有些丑,请见谅
  • 主要为大家详细介绍了C++控制台实现俄罗斯方块游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 提供了c++控制台编写扫雷游戏的关键代码,供大家参考
  • C++控制台RPG小游戏

    2018-06-05 21:04:03
    大学自己研究出来的一个带简单图形的控制台RPG小游戏,包括各种功能。 大学自己研究出来的一个带简单图形的控制台RPG小游戏,包括各种功能。 大学自己研究出来的一个带简单图形的控制台RPG小游戏,包括各种功能。 ...
  • c++控制台24点游戏

    2011-05-24 22:03:43
    本人写的c++控制台24点游戏,支持+ - * /表达式以及括号匹配。
  • C++控制台游戏

    千次阅读 2020-02-12 14:32:25
    游戏入门编程-C++ 简介     使用C++编写一些简单怀旧的小游戏,没有实现其中的玩法之类的,只实现核心功能 运行说明 运行平台是Windows     下载压缩包或者使用git都行,完成后使用clion(其他支持cmake工程的...
  • C++控制台游戏及其源代码 数组地图,简单AI,简单特效。
  • c++控制台程序游戏

    2014-01-19 12:49:23
    一款关于赌博的游戏,使用键盘和Enter键控制,好玩
  • C++控制台RPG游戏(序) 最近打算自学C++,为了给自己个目标就想用C++复刻下自己学C#时写的控制台游戏。打算在CSDN更新下制作过程,当个记录。不会用到高级技巧,目前想到的主要只有屏幕显示刷新、文件读写、随机...
  • 一个用C++写的控制台贪吃蛇小游戏,可以在游戏的开始生成随机的地图,有计分功能,基本实现了贪吃蛇应有的功能,只是还有一些bug。注意用VS2015来打开该文件。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 737
精华内容 294
关键字:

c++控制台游戏

c++ 订阅