鱼C论坛

 找回密码
 立即注册
查看: 1815|回复: 16

[已解决]大佬啊,有一事求问

[复制链接]
发表于 2018-9-25 14:36:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <Windows.h>

void map(char(*square)[20])
{
        int i, j;
        for (i = 0; i < 10; i++)
        {
                for (j = 0; j < 20; j++)
                {
                        printf("%c", *(*(square + i) + j));
                }
                printf("\n");
        }
}

static void GotoXY(int x, int y)
{
        COORD position = {2*x, y };
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), position);
}

static void HideCursor()
{
        CONSOLE_CURSOR_INFO cci;
        cci.bVisible = FALSE;
        cci.dwSize = sizeof(cci);
        HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
        SetConsoleCursorInfo(handle, &cci);
}

int main()
{
        HideCursor();
        printf("请输入大写的WASD进行操作,了解操作请按回车\n");

        char square[10][20] = { "--------------------",\
                                                        "|                  |",\
                "|                  |",\
                "|                  |", \
                "|                  |", \
                "|                  |", \
                "|                  |",\
                "|                  |",\
                "|                  |",\
                "--------------------" };
        map(square);

        COORD pos = { 1, 1 };

        getchar();
        system("cls");
        map(square);
        GotoXY(1, 1);
        puts("■");

        while (1)
        {
                
                char z = getch();
                system("cls");
                map(square);
                if (z == 'W' || 'A' || 'S' || 'D')
                {
                        if (z == 'W')
                                pos.Y--;
                        if (z == 'A')
                                pos.X--;
                        if (z == 'S')
                                pos.Y++;
                        if (z == 'D')
                                pos.X++;

                        if (pos.X < 1)
                                pos.X = 1;
                        if (pos.Y < 1)
                                pos.Y = 1;
                        if (pos.X > 9)
                                pos.X = 9;
                        if (pos.Y > 8)
                                pos.Y = 8;
                        GotoXY(pos.X, pos.Y);

                        puts("■");
                }


        }

        getchar();
        return 0;

}


这个可以做到在一个框里■四处走动,但是为了保证y轴只有一个■而用了system("cls"),但这样也导致了我做的框每次都会被删除然后重新显示,所以我想问问有什么办法可以让框不消失,而■在y轴也只显示一个?
最佳答案
2018-9-25 22:41:59
#include <stdio.h>
#include <string.h>
#include <Windows.h>

void map(char *square[])
{
        for(int i = 0; square[i]; ++i)
                puts(square[i]);
}

static void GotoXY(int x, int y)
{
        COORD position = {x, y};
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), position);
}

static void HideCursor()
{
        CONSOLE_CURSOR_INFO cci;
        cci.bVisible = FALSE;
        cci.dwSize = sizeof(cci);
        HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
        SetConsoleCursorInfo(handle, &cci);
}

int main(void)
{
        HideCursor();

        printf("请输入大写的WASD进行操作,了解操作请按回车\n");
        getchar();
        system("cls");

        char *square[] = {
                "--------------------",
                "|                  |",
                "|                  |",
                "|                  |",
                "|                  |",
                "|                  |",
                "|                  |",
                "|                  |",
                "|                  |",
                "--------------------",
                NULL
        };
        const int MAP_WIDTH = 20 - 3;
        const int MAP_HEIGHT = 10 - 2;

        map(square);
        COORD pos = {1, 1};
        COORD old_pos = pos;
        while(1)
        {
                GotoXY(old_pos.X, old_pos.Y);
                puts(" ");
                GotoXY(pos.X, pos.Y);
                puts("■");

                int ch = getch();
                old_pos = pos;
                switch(ch)
                {
                case 'W':
                case 'w':
                        --pos.Y;
                        break;
                case 'S':
                case 's':
                        ++pos.Y;
                        break;
                case 'A':
                case 'a':
                        --pos.X;
                        break;
                case 'D':
                case 'd':
                        ++pos.X;
                        break;
                }
                if(pos.X < 1)
                        pos.X = 1;
                if(pos.Y < 1)
                        pos.Y = 1;
                if(pos.X > MAP_WIDTH)
                        pos.X = MAP_WIDTH;
                if(pos.Y > MAP_HEIGHT)
                        pos.Y = MAP_HEIGHT;
        }

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-25 15:29:51 | 显示全部楼层
#include <stdio.h>
#include <Windows.h>

void map(char(*square)[20], int x, int y)
{
        int i, j;
        for (i = 0; i < 10; i++)
        {
                for (j = 0; j < 20; j++)
                {
                        if(i == y && j == x)
                                printf("■");
                        else
                                printf("%c", *(*(square + i) + j));
                }
                printf("\n");
        }
}

static void GotoXY(int x, int y)
{
        COORD position = { x * 2, y };        // unicode
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), position);
}

static void HideCursor()
{
        CONSOLE_CURSOR_INFO cci;
        cci.bVisible = FALSE;
        cci.dwSize = sizeof(cci);
        HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
        SetConsoleCursorInfo(handle, &cci);
}

int main(void)
{
        HideCursor();

        printf("请输入大写的WASD进行操作,了解操作请按回车");
        getchar();
        system("cls");
        char square[10][20] = { 
                "--------------------",\
                "|                  |",\
                "|                  |",\
                "|                  |", \
                "|                  |", \
                "|                  |", \
                "|                  |",\
                "|                  |",\
                "|                  |",\
                "--------------------" };
        


        COORD pos = { 0, 0 };
        while (1)
        {
                int ch = getch();
                
                system("cls");
                switch (ch)
                {
                case 'W':
                case 'w':
                        --pos.Y;
                        break;
                case 'S':
                case 's':
                        ++pos.Y;
                        break;
                case 'A':
                case 'a':
                        --pos.X;
                        break;
                case 'D':
                case 'd':
                        ++pos.X;
                        break;
                }
                if (pos.X < 0)
                        pos.X = 0;
                if (pos.Y < 0)
                        pos.Y = 0;

                //GotoXY(pos.X, pos.Y);
                //puts("■");
                map(square, pos.X, pos.Y);
        }

        return 0;
}
Console 我不会,只能做到这样,边框会有问题。大哥哥不在……@人造人
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-25 16:23:15 | 显示全部楼层
claws0n 发表于 2018-9-25 15:29
Console 我不会,只能做到这样,边框会有问题。大哥哥不在……@人造人


谢谢版主啦我更是啥都不懂,就会小甲鱼的c语言基础如果我想学更精深的该咋学啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-25 16:52:21 | 显示全部楼层
本帖最后由 claws0n 于 2018-9-25 16:54 编辑
三千芳华 发表于 2018-9-25 16:23
谢谢版主啦我更是啥都不懂,就会小甲鱼的c语言基础如果我想学更精深的该咋学啊?{ ...


先定方向,你喜欢哪一方面?找书、看视频。小甲鱼老师的确实太基础,大体的框架还建立不起来,《C和指针》应该要看一看。Console 可以直接找项目/游戏的视频吧,这方面确实没经验。
一步一步来,不要太发散,不要像 XXX 帖子……
基础 C 大致了解,我目前是数据结构与算法,之后才看 win SDK。C++ 也是基础,面对对象还不急。应该问【人造人】的,他也是版主,比我资深多了。楼上呼叫了,哥哥看到会回你吧,大概~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-25 18:50:08 | 显示全部楼层
claws0n 发表于 2018-9-25 16:52
先定方向,你喜欢哪一方面?找书、看视频。小甲鱼老师的确实太基础,大体的框架还建立不起来,《C和指 ...

嗯,知道了。那我先看看c和指针这本书吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-25 22:38:59 | 显示全部楼层
claws0n 发表于 2018-9-25 16:52
先定方向,你喜欢哪一方面?找书、看视频。小甲鱼老师的确实太基础,大体的框架还建立不起来,《C和指 ...

^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-25 22:40:44 | 显示全部楼层
#include <stdio.h>
#include <string.h>
#include <Windows.h>

void map(char *square[])
{
        for(int i = 0; square[i]; ++i)
                puts(square[i]);
}

static void GotoXY(int x, int y)
{
        COORD position = {2 * x, y};
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), position);
}

static void HideCursor()
{
        CONSOLE_CURSOR_INFO cci;
        cci.bVisible = FALSE;
        cci.dwSize = sizeof(cci);
        HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
        SetConsoleCursorInfo(handle, &cci);
}

int main(void)
{
        HideCursor();

        printf("请输入大写的WASD进行操作,了解操作请按回车\n");
        getchar();
        system("cls");

        char *square[] = {
                "--------------------",
                "|                  |",
                "|                  |",
                "|                  |",
                "|                  |",
                "|                  |",
                "|                  |",
                "|                  |",
                "|                  |",
                "--------------------",
                NULL
        };
        const int MAP_WIDTH = (20 / 2) - 1 * 2;
        const int MAP_HEIGHT = 10 - 2;

        map(square);
        COORD pos = {1, 1};
        COORD old_pos = pos;
        while(1)
        {
                GotoXY(old_pos.X, old_pos.Y);
                puts(" ");
                GotoXY(pos.X, pos.Y);
                puts("■");

                int ch = getch();
                old_pos = pos;
                switch(ch)
                {
                case 'W':
                case 'w':
                        --pos.Y;
                        break;
                case 'S':
                case 's':
                        ++pos.Y;
                        break;
                case 'A':
                case 'a':
                        --pos.X;
                        break;
                case 'D':
                case 'd':
                        ++pos.X;
                        break;
                }
                if(pos.X < 1)
                        pos.X = 1;
                if(pos.Y < 1)
                        pos.Y = 1;
                if(pos.X > MAP_WIDTH)
                        pos.X = MAP_WIDTH;
                if(pos.Y > MAP_HEIGHT)
                        pos.Y = MAP_HEIGHT;
        }

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-25 22:41:59 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>
#include <string.h>
#include <Windows.h>

void map(char *square[])
{
        for(int i = 0; square[i]; ++i)
                puts(square[i]);
}

static void GotoXY(int x, int y)
{
        COORD position = {x, y};
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), position);
}

static void HideCursor()
{
        CONSOLE_CURSOR_INFO cci;
        cci.bVisible = FALSE;
        cci.dwSize = sizeof(cci);
        HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
        SetConsoleCursorInfo(handle, &cci);
}

int main(void)
{
        HideCursor();

        printf("请输入大写的WASD进行操作,了解操作请按回车\n");
        getchar();
        system("cls");

        char *square[] = {
                "--------------------",
                "|                  |",
                "|                  |",
                "|                  |",
                "|                  |",
                "|                  |",
                "|                  |",
                "|                  |",
                "|                  |",
                "--------------------",
                NULL
        };
        const int MAP_WIDTH = 20 - 3;
        const int MAP_HEIGHT = 10 - 2;

        map(square);
        COORD pos = {1, 1};
        COORD old_pos = pos;
        while(1)
        {
                GotoXY(old_pos.X, old_pos.Y);
                puts(" ");
                GotoXY(pos.X, pos.Y);
                puts("■");

                int ch = getch();
                old_pos = pos;
                switch(ch)
                {
                case 'W':
                case 'w':
                        --pos.Y;
                        break;
                case 'S':
                case 's':
                        ++pos.Y;
                        break;
                case 'A':
                case 'a':
                        --pos.X;
                        break;
                case 'D':
                case 'd':
                        ++pos.X;
                        break;
                }
                if(pos.X < 1)
                        pos.X = 1;
                if(pos.Y < 1)
                        pos.Y = 1;
                if(pos.X > MAP_WIDTH)
                        pos.X = MAP_WIDTH;
                if(pos.Y > MAP_HEIGHT)
                        pos.Y = MAP_HEIGHT;
        }

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-26 10:52:33 | 显示全部楼层

人造人大哥,如果我想往做游戏,开发软件这个道路走,应该怎么做呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-26 12:39:53 | 显示全部楼层
三千芳华 发表于 2018-9-26 10:52
人造人大哥,如果我想往做游戏,开发软件这个道路走,应该怎么做呢?

这个游戏运行在什么平台?
Windows ?
Linux ?
MAC ?
Android ?
IOS ?
又或者是嵌入式单片机?
^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-26 16:09:27 | 显示全部楼层
人造人 发表于 2018-9-26 12:39
这个游戏运行在什么平台?
Windows ?
Linux ?

windows平台
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-26 22:23:23 | 显示全部楼层

什么类型的游戏?
2D的?
3D的?

你是想从零开始写游戏还是调用现成的库?
用python可以只是简单的调用一些函数就可以完成游戏开发,开发效率高
用C语言你可以弄明白游戏内部的运行原理,开发效率极低(这里指从零开始写,不调用库)
还有就是,你用python也可以研究游戏的运行原理,但是没有C语言更彻底

简单来说就是你更注重游戏的运行原理还是只关心华丽的图形界面
华丽的图形界面更注重的是美工,游戏的核心原理就是用代码让图片动起来
如果你更注重华丽的图形界面,那你应该学好美工,用代码调用现成的库,让这些华丽的图片动起来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-27 09:46:01 | 显示全部楼层
人造人 发表于 2018-9-26 22:23
什么类型的游戏?
2D的?
3D的?

开始还是2D的吧,而且我是更注重原理的,虽然python效率高,但是如果遇到太核心的问题应该还是需要知道更核心的原理才能解决吧?
那么python+c这样可以吗?
有些能快则快,有些深入研究
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-27 13:13:00 | 显示全部楼层
本帖最后由 人造人 于 2018-9-27 13:14 编辑
三千芳华 发表于 2018-9-27 09:46
开始还是2D的吧,而且我是更注重原理的,虽然python效率高,但是如果遇到太核心的问题应该还是需要知道更 ...


那么你是选择现在就去学python还是先深入C语言之后再学python ?
深入C语言,汇编语言必不可少

你应该精通一门编程语言,其他语言略懂即可
我选择深入研究C/C++
你选择什么?

我还是建议你深入C语言,虽然这条路非常漫长,但是你可以看到好多好东西
想过自己实现一下C语言的编译器吗?
C++编译器 ?
操作系统 ?
驱动程序 ?
单片机的控制程序?
又或者是写一个微处理器
计算机中的 “计算”二字是什么意思?
什么是计算机?
我正在向往这些底层

如果你是去顶层的游戏开发,我应该帮不了你太多,我不懂顶层
在我看来,去顶层应该学python,java,C#
注意,好多人都不推荐C#,但是毕竟是微软的产物,在windows平台,C#应该会发挥的很好吧,大概吧 ^_^

游戏开发是顶层的内容,先学python吧,想研究底层时再深入C语言吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-27 14:33:01 | 显示全部楼层
本帖最后由 三千芳华 于 2018-9-27 14:39 编辑
人造人 发表于 2018-9-27 13:13
那么你是选择现在就去学python还是先深入C语言之后再学python ?
深入C语言,汇编语言必不可少


我也想研究底层,我对于原理比较执着,但是我需要工作啊我对于底层的工作不太了解,只知道顶层的东西所能做的工作所以如果往底层发展有哪些出路呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-27 22:19:23 | 显示全部楼层
三千芳华 发表于 2018-9-27 14:33
我也想研究底层,我对于原理比较执着,但是我需要工作啊我对于底层的工作不太了解,只知道顶 ...

"所以如果往底层发展有哪些出路呢?"
我不知道有哪些出路
研究底层只是我的业余兴趣,我现在还在上学,未来也不打算找程序开发这样的工作,因为我认为我不能胜任这样的工作,学习这些只是兴趣,编程相关的,我没有去学别人需要用到的东西,我学的都是自己需要用到的东西
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-27 22:20:25 | 显示全部楼层
三千芳华 发表于 2018-9-27 14:33
我也想研究底层,我对于原理比较执着,但是我需要工作啊我对于底层的工作不太了解,只知道顶 ...

我认为应该把编程当做兴趣来培养
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-30 10:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表