C++像素游戏

2023-11-04

我的作品:

鼠标板:黑科技之橡素

代码:

#include <bits/stdc++.h>
#include <windows.h>
#include <ctime>
#include "conio.h"

using namespace std;

#define leftspace 3
#define upspace 3

#define up 119
#define down 115
#define right 100
#define left 97

#define UP 72 
#define DOWN 80
#define RIGHT 77
#define LEFT 75

#define esc 27
#define enter 13
#define tab 9
#define space 32

//主要函数 
void game();
    void gaming();      //"开始游戏" 
    void introduce();   //"游戏介绍"
    void setgame();     //"游戏设置" 
//其它函数 
void start();           //开始游戏动画 
void go(int x,int y);   //改变光标坐标 
void color(int a);      //设置颜色 
void savefile();        //保存数据 
void readfile();        //读取数据 
void full_screen();     //全屏窗口 
void hide_cursor();     //隐藏光标 

int Map[45][45];
int cc=247;
int dc=15;
int x,y; 

int main(){
    COORD coord;coord.X=100,coord.Y=100;
    SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE),coord);
    go(5,5);color(13);printf("本游戏可能加载较慢,请耐心等待......(游戏本身无延迟)");
    go(5,6);printf("(。··)ノ"); 
    system("mode con cols=150 lines=200");//设置控制台大小90 28 
    for(int i=0;i<45;i++)
        for(int j=0;j<45;j++)
            Map[i][j]=dc;//初始化Map(并不是不会用memset,而是我的memset有问题qaq)
    CONSOLE_CURSOR_INFO cursor_info={1,0};
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);//隐藏光标 
    color(dc);
    start();
    game();//进入游戏
    return 0;
}

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

void go(int x,int y)  //光标移动函数,X表示横坐标,Y表示纵坐标。
{
    COORD coord;         //使用头文件自带的坐标结构
    coord.X=(x+leftspace)*2;            //这里将int类型值传给short,不过程序中涉及的坐标值均不会超过short范围
    coord.Y=y+upspace;
    HANDLE a=GetStdHandle(STD_OUTPUT_HANDLE);  //获得标准输出句柄
    SetConsoleCursorPosition(a,coord);         //以标准输出的句柄为参数设置控制台光标坐标
}

void full_screen(){   
    HWND hwnd = GetForegroundWindow();
    int cx = GetSystemMetrics(SM_CXSCREEN);            /* 屏幕宽度 像素 */
    int cy = GetSystemMetrics(SM_CYSCREEN);            /* 屏幕高度 像素 */
    LONG l_WinStyle = GetWindowLong(hwnd,GWL_STYLE);   /* 获取窗口信息 */
    /* 设置窗口信息 最大化 取消标题栏及边框 */
    SetWindowLong(hwnd,GWL_STYLE,(l_WinStyle | WS_POPUP | WS_MAXIMIZE) & ~WS_CAPTION & ~WS_THICKFRAME & ~WS_BORDER);
    SetWindowPos(hwnd, HWND_TOP, 0, 0, cx, cy, 0);
}

void game()
{
    system("cls");
    system("color 0F");
    color(15);
    system("cls");
    color(15); 
    go(13,1);printf("像素game");
    go(12,16);printf("WS/上下控制选择");
    go(12,9);printf("  游戏介绍  ");
    go(12,13);printf("  游戏设置  ");
    color(127);
    go(12,4);printf("■■■■■■");
    go(12,5);printf("■");color(124);printf("开始游戏");color(127);printf("■");
    go(12,6);printf("■■■■■■");
    readfile(); 
    int l=1;
    while(1){
        int c=getch();
        switch(c){
            case up:
            case UP:
                if(l!=1)l--;
                break;
            case down:
            case DOWN:
                if(l!=3)l++;
                break;
        }
        switch(l){
            case 1:
                color(127);
                go(12,4);printf("■■■■■■");
                go(12,5);printf("■");color(124);printf("开始游戏");color(127);printf("■");
                go(12,6);printf("■■■■■■");
                color(15);
                go(12,8);printf("            ");
                go(12,9);printf("  游戏介绍  ");
                go(12,10);printf("            ");
                break;
            case 2:
                color(15);
                go(12,4);printf("            ");
                go(12,5);printf("  开始游戏  ");
                go(12,6);printf("            ");
                go(12,12);printf("            ");
                go(12,13);printf("  游戏设置  ");
                go(12,14);printf("            ");
                color(127);
                go(12,8);printf("■■■■■■");
                go(12,9);printf("■");color(124);printf("游戏介绍");color(127);printf("■");
                go(12,10);printf("■■■■■■");
                break;
            case 3:
                color(127);
                go(12,12);printf("■■■■■■");
                go(12,13);printf("■");color(124);printf("游戏设置");color(127);printf("■");
                go(12,14);printf("■■■■■■");
                color(15);
                go(12,8);printf("            ");
                go(12,9);printf("  游戏介绍  ");
                go(12,10);printf("            ");
                break;
        }
        if(c==enter)break;
    }
    switch(l){
        case 1:
            gaming();
            break;
        case 2:
            introduce();
            break;
        case 3:
            setgame();
            break;
    } 
}

void color(int a)
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}

void gaming()
{
    int px,py,q;
    while(x<=0||y<=0||x>=101||y>=101){ 
        system("cls");
        go(3,2);printf("请输入地图大小");
        go(3,3);printf("x[0<x<21]:");cin >> x;
        go(3,4);printf("y[0<x<21]:");cin >> y;
        if(x>0&&y>0&&x<21&&y<21)break;
        go(3,5);color(12);printf("输入有误,请重新输入");Sleep(1500);color(15);
    }
    system("cls");
    color(dc);
    for(int i=0;i<x;i++){
        for(int j=0;j<y;j++){
            go(2+i,3+j);
            color(Map[i][j]);
            printf("■");
        }
    }
    px=py=0;
    go(2+px,3+py);color(cc);printf("■");
    go(x+5,int(y/2-1)+2);printf("当前颜色标号为:");color(249);printf("%d",Map[px][py]);color(cc);
    int pt;
    while(1){
        int c=getch();
        switch(c){
            case up:
            case UP:
                if(py!=0){
                    go(2+px,3+py);color(Map[px][py]);printf("■");
                    py--;
                    go(2+px,3+py);color(cc);printf("■");
                }
                break;
            case down:
            case DOWN:
                if(py!=y-1){
                    go(2+px,3+py);color(Map[px][py]);printf("■");
                    py++;
                    go(2+px,3+py);color(cc);printf("■");
                }
                break;
            case left:
            case LEFT:
                if(px!=0){
                    go(2+px,3+py);color(Map[px][py]);printf("■");
                    px--;
                    go(2+px,3+py);color(cc);printf("■");
                }
                break;
            case right:
            case RIGHT:
                if(px!=x-1){
                    go(2+px,3+py);color(Map[px][py]);printf("■");
                    px++;
                    go(2+px,3+py);color(cc);printf("■");
                }
                break;
            case space:
                color(247);
                while(1){
                    go(x+5,int(y/2-1));color(14);printf("请输入颜色标号:");cin >> pt;
                    if(pt<=271){
                        go(x+5,int(y/2-1));color(0);Map[px][py]=pt;printf("                  ");
                        break;
                    }
                    go(x+5,int(y/2-1)+1);color(12);printf("输入错误!颜色标号上限为271");
                    go(x+5,int(y/2-1)+1);color(0);Sleep(1500);printf("                           ");
                    go(x+5,int(y/2-1));printf("                      ");
                }
                go(2+px,3+py);color(Map[px][py]);printf("■");q=pt;
                break;
            case esc:
                go(2+px,3+py);color(Map[px][py]);printf("■");color(247);
                go(x+5,int(y/2-1)+1);printf("(输入任意键以显示光标.......)");
                while(!kbhit());
                go(x+5,int(y/2-1)+1);color(0);printf("                               ");
                break;
            case tab:
                game();
                break;
            case int('q'):
                Map[px][py]=q;
                break;
            case int('e'):
                Map[px][py]=dc;
                break;
            case int('x'):
                savefile();
                break;
        }
        color(247);go(x+5,int(y/2-1)+2);printf("当前颜色标号为:");color(249);printf("%d",Map[px][py]);color(0);printf("   ");
    }
}

void introduce()
{
    color(0);
    system("cls");
    color(dc);
    for(int i=0;i<10;i++){
        for(int j=0;j<10;j++){
            go(2+i,3+j);
            printf("■");
        }
    }
    go(2,3);color(cc);printf("■");
    go(15,4);printf("■");color(15);printf("-> 当前光标所在位置");
    go(5,14);color(1);printf("WASD");color(14);printf("键控制光标移动");
    go(5,15);color(1);printf("空格");color(14);printf("键调整当前格子颜色");
    go(5,16);color(1);printf("ESC");color(14);printf("键隐藏光标");
    go(5,17);color(1);printf("TAB");color(14);printf("键返回主界面");
    go(5,18);color(1);printf("Q");color(14);printf("键使当前格子颜色改变为上一次设置的颜色");
    go(5,19);color(1);printf("E");color(14);printf("键还原当前格子为背景色");
    go(5,20);color(1);printf("X");color(14);printf("键保存当前存档");
    go(5,21);color(15);printf("祝你玩得愉快!");
    while(!kbhit());
    game();
}

void setgame()
{
    system("cls");
    int l=1;
    go(3,1);printf("游戏光标颜色设置:");
    go(3,2);printf("游戏底色颜色设置:%d",dc);
    go(3,3);printf("(更多设置敬请研发中......)");
    go(5,5);printf("上下调换光标位置,左右改变数值");
    go(5,6);printf("Enter返回主界面");
    go(12,1);color(147);printf("%d",cc);color(15);printf("   ");
    while(1){
        int c=getch();
        switch(c){
            case up:
            case UP:
                if(l!=1)l++;
                go(12,1);color(147);printf("%d",cc);color(15);printf("   ");
                go(12,2);color(15);printf("%d   ",dc);
                break;
            case down:
            case DOWN:
                if(l!=0)l--;
                go(12,2);color(147);printf("%d",dc);color(15);printf("   ");
                go(12,1);color(15);printf("%d   ",cc);
                break;
            case right:
            case RIGHT:
                if(cc==271)cc=0;
                else if(dc==271)dc=0;
                else{
                    if(l){
                        cc++;
                        go(12,1);color(147);printf("%d",cc);color(15);printf("   ");
                    }
                    else {
                        dc++;
                        go(12,2);color(147);printf("%d",dc);color(15);printf("   ");
                    }
                }
                break;
            case left:
            case LEFT:
                if(cc==0)cc=271;
                else if(dc==0)dc=271;
                else{
                    if(l){
                        cc--;
                        go(12,1);color(147);printf("%d",cc);color(15);printf("   ");
                    }
                    else {
                        dc--;
                        go(12,2);color(147);printf("%d",dc);color(15);printf("   ");
                    }
                }
                break;
        }
        if(c==enter)break; 
    }
    for(int i=0;i<45;i++)
        for(int j=0;j<45;j++)
            Map[i][j]=dc;
    game();
}

void start()
{
    system("cls");
    int PIXEL[5][21]=
    {
        {1,6,0,0,9,0,14,0,0,0,19,0,22,27,28,29,0,36,0,0,0},
        {2,0,7,0,10,0,0,15,0,20,0,0,23,0,0,0,0,37,0,0,0},
        {3,8,0,0,11,0,0,0,16,0,0,0,24,30,31,32,0,38,0,0,0},
        {4,0,0,0,12,0,0,21,0,17,0,0,25,0,0,0,0,39,0,0,0},
        {5,0,0,0,13,0,21,0,0,0,18,0,26,33,34,35,0,40,41,42,43},
    };
    int GAME[5][21]=
    {
        {0,2,1,0,0,0,0,11,0,0,0,21,0,0,0,29,0,34,39,40,41},
        {3,0,0,0,0,0,12,0,16,0,0,22,26,0,28,30,0,35,0,0,0},
        {4,0,10,9,0,0,13,20,17,0,0,23,0,27,0,31,0,36,42,43,44},
        {5,0,0,8,0,14,0,0,0,18,0,24,0,0,0,32,0,37,0,0,0},
        {0,6,7,0,0,15,0,0,0,19,0,25,0,0,0,33,0,38,45,46,47},
    };
    for(int k=1;k<=145;k++)
    {
        for(int i=0;i<5;i++)
        {
            for(int j=0;j<21;j++)
            {
                if(PIXEL[i][j]==k)
                {
                    go(j+5,i);
                    color(147);
                    printf("■");
                    Sleep(50);
                }
            }
        }
    }
    for(int k=1;k<=145;k++)
    {
        for(int i=0;i<5;i++)
        {
            for(int j=0;j<21;j++)
            {
                if(GAME[i][j]==k)
                {
                    go(j+5,i+6);
                    color(143);
                    printf("■");
                    Sleep(50);
                }
            }
        }
    }
    keybd_event(0x10,0,0,0);
    keybd_event(0x10,0,2,0);
    color(249);
    go(2,13);printf("本游戏已自动调成英文输入法......"); 
    go(2,14);system("pause");
}

void savefile(){
    ofstream ofs("C:\\Test.txt",ios::trunc);
    if(!ofs){
        go(x+5,int(y/2-1)+2);color(12);printf("保存失败!");
        return ;
    }
    ofs << x << " " << y << endl;
    for(int i=0;i<x;i++){
        for(int j=0;j<y;j++){
            ofs <<Map[i][j]<<" ";
        }
        ofs<<endl;
    }
    go(x+5,int(y/2-1)+4);color(12);printf("保存成功!");
    Sleep(500);
    go(x+5,int(y/2-1)+4);color(12);printf("          ");
    ofs.close(); 
}

void readfile(){
    ifstream input;
    input.open("C:\\Test.txt");
    if(!input){
        color(12);
        go(9,17);printf("保存数据文件未被创建或创建失败!");
        Sleep(1000);
        color(0);
        go(9,17);printf("                                ");
    }
    else{
        color(12);
        go(9,17);printf("检测到有存档文件,是否保存存档?(y/n)");
        int c=getch();
        color(0);
        go(9,17);printf("                                     ");
        if(c!=int('y')&&c!=int('Y')){
            input.close();
            ofstream ofs("C:\\Test.txt",ios::trunc);
            ofs.close();
            return ;
        }
    }
    input >> x >> y;
    for(int i=0;i<x;i++){
        for(int j=0;j<y;j++){
            input >> Map[i][j];
        }
    }
    input.close();
}

注:空格+数字选颜色

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++像素游戏 的相关文章

  • 排序算法总结(Python版)

    经典排序算法总结与实现 经典排序算法在面试中占有很大的比重 也是基础 为了未雨绸缪 这次收集整理并用Python实现了八大经典排序算法 包括冒泡排序 插入排序 选择排序 希尔排序 归并排序 快速排序 堆排序以及基数排序 希望能帮助到有需要的

随机推荐

  • Spring Boot 中的异步调用

    Spring Boot 中的异步调用 通常我们开发的程序都是同步调用的 即程序按照代码的顺序一行一行的逐步往下执行 每一行代码都必须等待上一行代码执行完毕才能开始执行 而异步编程则没有这个限制 代码的调用不再是阻塞的 所以在一些情景下 通过
  • 操作系统复习1

    1 操作系统的特征 并发 共享 虚拟 异步 1 并发 并发与并行的区别 并行 指两个或多个事件在同一时刻发生 并发 指两个或多个事件在同一时间间隔内发生 并发指在一段时间内宏观上有多个程序在同时运行 但在单处理机系统中 每一时刻却仅能有一道
  • display属性_使用这些不太常用的 CSS 属性,让我在前端布局效率上,又提高了一个层次!

    有很多CSS属性 有些人不了解 或者他们了解它们 但是忘记在需要时使用它们 其实 有时候我们用 JavaScript 来实某些交互 CSS 一个属性就能搞定了 这可以大大节约我们编码的时间 作为前端开发人员 我们经常会遇到这样的事情 所以我
  • python爬取微信好友信息

    1 准备工作 平台 windows python版本 Python3 6 IDE Pycharm5 0 2 所使用的第三方库 wxpy 想要获取微信好友的信息 只能在登录成功后才能获得 常见应用场景 控制路由 只能家具等具有开放接口的物品
  • Finding a needle in Haystack:Facebook's photo storage的理解

    博客的所有内容都是个人理解 难免有理解错误的地方 欢迎大家多多拍砖 这是facebook发在OSDI上的一篇论文 讲述了facebook用于存储用户图片的系统Haystack 目前facebook存储了260billion图片 而图片文件显
  • pod状态

    Pending 该Pod已被Kubernetes系统接受 但是尚未创建一个或多个Container映像 这包括计划之前的时间以及通过网络下载图像所花费的时间 这可能需要一段时间 Running Pod已绑定到节点 并且所有容器都已创建 至少
  • 不习惯的 Vue3 起步三 の computed 和 watch

    计算属性和侦听器 Computed计算属性 在模板内表达式非常简单 如果在模板内放入过多的逻辑会使得模板过重并且难以维护 示例
  • deepsort代码改进

    DeepSORT是一个非常流行的多目标跟踪算法 但是可以通过对其代码进行改进来提高其性能和适应性 以下是一些DeepSORT代码改进的建议 使用更好的特征提取器 DeepSORT使用卷积神经网络 CNN 来提取特征 但是可以尝试使用更好的C
  • js绑定键盘快捷键实战

    下面这个函数用来响应键盘事件 标签相应onkeydown事件后调用这个函数就可以实现按键的转换功能 设置快捷键绑定function setShortcutBinding var a window event keyCode if a 8 退
  • 观点

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 本文作者认为 深度学习只是一种计算机视觉工具 而不是包治百病的良药 不要因为流行就一味地使用它 传统的计算机视觉技术仍然可以大显身手 了解它们可以为你省去很多的时间和烦恼
  • C++构造函数是否可以定义为private

    思考下 什么时候构造函数需要定义为private 1 如果一个类的构造函数只有一个且为private 这是可以编译通过的 class Parent private Parent cout lt lt parent private lt
  • 多智能体强化学习入门(六)——MFMARL算法(Mean Field Multi-Agent RL)

    本节内容见https zhuanlan zhihu com p 56049023
  • lua 定时器以及应用

    function update timer fun for k v in pairs update timer m process time fun do v k update timer m porcess run time k end
  • qt操作excel表

    https blog csdn net cannon qi article details 79972258
  • day-37 代码随想录算法训练营(19)贪心part06

    738 单调递增的数字 思路 在给的数字中找到第一个开始递减的两个数字 将前一个数字减1 后面的数字全部变为最大值9 968 监控二叉树 思路 分三种状态 0无覆盖 1有监控 2有覆盖 分四种情况 1 两边都有覆盖 返回0 2 两边有一边无
  • 在关系数据库中。存放在数据库中的逻辑结构以什么为主 (4选一)

    C 哈希表
  • 笔试题2:如何用八进制和十六进制来表示整型数据

    八进制的含义在于每位数字的进位大小为8 也就是0 8的9个数字 十六进制的进位大小为16 除了0 9的10个数字 还包括a b c d e f来表示10 11 12 13 14 15 答案 Java的八进制采用0开头 十六进制采用0x开头
  • iOS宏定义的黑魔法 - 宏菜鸟起飞手册

    转自 OneV s Den的博客 宏定义在C系开发中可以说占有举足轻重的作用 底层框架自不必说 为了编译优化和方便 以及跨平台能力 宏被大量使用 可以说底层开发离开define将寸步难行 而在更高层级进行开发时 我们会将更多的重心放在业务逻
  • 计算机虚拟化+网络

    计算机虚拟化 网络 cookie 什么是 Cookie cookie的生命周期 cookie Cookie 用于存储 web 页面的用户信息 什么是 Cookie Cookie 是一些数据 存储于你电脑上的文本文件中 当 web 服务器向浏
  • C++像素游戏

    我的作品 鼠标板 黑科技之橡素 代码 include