C++像素游戏

#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();
}

版权:C++像素游戏

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 开发2D游戏引擎可以使用C++语言和一些常见的游戏开发库,如SDL、SFML、OpenGL等。以下是一个简单的步骤: 1. 确定游戏引擎的功能和特性,例如支持哪些平台、渲染引擎、物理引擎、音频等。 2. 使用C++语言编写游戏引擎的框架,包括游戏循环、资源管理、场景管理、输入输出、碰撞检测等基本功能。 3. 集成游戏开发库,例如SDL或SFML,来处理输入输出、图像和声音。 4. 使用OpenGL或其他可用的图形库来渲染图像,并实现2D图形渲染。 5. 实现物理引擎,例如Box2D,处理游戏中的碰撞和物理效果。 6. 开发游戏编辑器,以便游戏开发者可以轻松创建和编辑游戏世界。 7. 测试和调试游戏引擎,确保它能够正确地处理所有可能的情况。 8. 最后,使用游戏引擎创建游戏,测试游戏并发布。 以上是一个简单的步骤,开发2D游戏引擎需要大量的工作和经验。 ### 回答2: 开发2D游戏引擎是一项需要技术和创造力的任务。首先,作为开发者,我们需要掌握编程语言,如C,这使我们能够编写代码并实现游戏引擎的各种功能。C语言是一种强大的编程语言,广泛用于游戏开发领域,因为它能够提供高性能和灵活性。 在开发2D游戏引擎时,我们需要考虑许多因素。首先是游戏的图形渲染,C语言提供了许多图形库和API,例如OpenGL,我们可以利用这些库来实现游戏中的图形效果和动画。 其次,我们需要处理用户输入和游戏物理仿真。用户输入可以是键盘、鼠标或触摸屏,我们需要编写代码来捕捉和处理用户输入,以便控制游戏角色和操作。 另外,物理仿真是为了进行游戏中的物体运动模拟,例如重力、碰撞等。我们可以使用物理引擎库,如Box2D,来实现这些效果。 游戏的音频处理也是一个重要的方面。我们可以使用C语言提供的音频库,例如OpenAL,来实现游戏中的音效和音乐播放。 最后,考虑到游戏的性能和优化,我们需要进行适当的资源管理和内存管理。这可以通过编写高效的代码和使用合适的数据结构来实现。 总而言之,开发2D游戏引擎需要深入了解C语言编程和游戏开发技术。通过合理设计和实现,我们可以创造出各种精彩的2D游戏,并为玩家带来愉悦的游戏体验。 ### 回答3: C开发2D游戏引擎是一项富有挑战性的任务。2D游戏引擎是开发和运行2D游戏的软件框架,它提供了处理图像、动画、碰撞检测、物理模拟等核心功能。下面将介绍C开发2D游戏引擎的一些关键方面。 首先,需要设计并实现游戏引擎的核心结构。这包括定义场景、实体、碰撞检测等基本概念,并为其编写相应的数据结构和算法。开发者需要具备良好的数据结构和算法设计能力,以确保引擎的高效性和可扩展性。 其次,需要处理图像和动画。2D游戏引擎需要加载、显示和管理游戏中的各种图像资源,并实现动画效果。这需要使用一些图形库和技术,如SDL(Simple DirectMedia Layer)或OpenGL来处理渲染。 第三,碰撞检测是游戏引擎的另一个重要方面。它能够检测到游戏中不同实体之间的碰撞,并触发相应的事件。碰撞检测可以使用各种技术来实现,如动态边界盒、像素级检测或分层检测等。 然后,物理模拟也是2D游戏引擎的一个关键特性。它可以模拟游戏中的物理效果,如重力、摩擦力等,并使游戏更加真实和可交互。为了实现这些效果,开发者需要理解物理学原理,并编写适当的代码实现。 最后,一个成功的2D游戏引擎还需要提供一些工具和接口,以方便开发者使用。这包括编辑器、导航系统、场景管理和资源管理等功能,以及提供一些API和文档来帮助其他开发者使用你的游戏引擎。 总而言之,C开发2D游戏引擎需要开发者具备良好的编程和算法设计能力。这需要对游戏引擎的核心结构、图像处理、碰撞检测、物理模拟等方面有深入理解,并能够将这些概念转化为可工作的代码来实现一个高效、可扩展的2D游戏引擎。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值