| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3548 人关注过本帖
标题:无聊至极,弄了一个控制台游标模块,可用于写贪食蛇游戏
取消只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:24 
无聊至极,弄了一个控制台游标模块,可用于写贪食蛇游戏
test_Console.exe.zip (8 KB)


附件为EXE可运行程序,不用解压,修改文件后缀即可。



以下是运行图样:



[ 本帖最后由 TonyDeng 于 2011-10-7 02:51 编辑 ]
搜索更多相关主题的帖子: 贪食蛇 控制台 游戏 运行程序 
2011-10-07 02:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
不可能的事

授人以渔,不授人以鱼。
2011-10-07 09:52
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
源代码:

程序代码:
#include "myTools.h"
#include "Console.h"
#include <conio.h>

void Block_Move(const WCHAR* block, COORD& position, USHORT& direction, DWORD time);

Console console;

void main(void)
{
    const WCHAR block[] = L"";
    const DWORD time(120);
    COORD position = {0, 0};
    USHORT direction(6);

    console.SetTitle(L"控制台按键测试程序");
    console.ClearScreen(BACKGROUND_BLUE);
    console.SetTextColor(FOREGROUND_WHITE | BACKGROUND_BLUE);
    console.WriteText(L"←↑→↓控制方块运动方向,PgUp加速,PgDn减速,Esc键结束", console.GetMaxRow(), 0);
    console.SetTextColor(FOREGROUND_YELLOW | BACKGROUND_BLUE);
    console.SetCursor(false);

    Block_Move(block, position, direction, time);
}

void Block_Move(const WCHAR* block, COORD& position, USHORT& direction, DWORD time)
{
    int keycode;

    while (true)
    {
        if (_kbhit())
        {
            keycode = console.ReadKey();
            if (keycode == K_ESC)
            {
                break;
            }
            switch (keycode)
            {
            case K_UP:
                direction = 8;
                break;
            case K_DOWN:
                direction = 2;
                break;
            case K_LEFT:
                direction = 4;
                break;
            case K_RIGHT:
                direction = 6;
                break;
            case K_PGUP:
                time -= 50;
                if (time < 0)
                {
                    time = 0;
                }
                break;
            case K_PGDN:
                time += 50;
                if (time > 1000)
                {
                    time = 1000;
                }
                break;
            default:
                break;
            }
        }
        console.WriteText(block, position.Y, position.X);
        Sleep(time);
        console.WriteText(L" ", position.Y, position.X);
        switch (direction)
        {
        case 2:
            ++position.Y;
            if (position.Y > console.GetMaxRow() - 1)
            {
                position.Y = 0;
            }
            break;
        case 4:
            --position.X;
            if (position.X < 0)
            {
                position.X = console.GetMaxCol() - 1;
            }
            break;
        case 6:
            ++position.X;
            if (position.X > console.GetMaxCol())
            {
                position.X = 0;
            }
            break;
        case 8:
            --position.Y;
            if (position.Y < 0)
            {
                position.Y = console.GetMaxRow() - 1;
            }
            break;
        default:
            break;
        }
        console.WriteText(block, position.Y, position.X);
    }
}
收到的鲜花
  • Devil_W2011-10-07 11:44 送鲜花  -3朵   附言:不值一文。
  • 小鱼儿c2011-10-07 17:38 送鲜花  4朵   附言:分享就好了,看不那些所谓的高手到处乱喷

授人以渔,不授人以鱼。
2011-10-07 10:01
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 6楼 cosam
两个双引号括着的头文件都是我自己写的,当然没有。那部分没发出来,运行程序看效果就成了。用VS2010写的,我不知道在目标机器上要不要.NETFrameword 4库支持,希望有人测试一下,仅仅靠这个.EXE文件,在什么配置上能执行、什么配置上不能执行?

授人以渔,不授人以鱼。
2011-10-07 11:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
这个程序所有源代码(连空格和注释)加起来,是5687byte,编译生成的可执行机器码,是8Kbyte,C++的编译效率还是挺高的。

授人以渔,不授人以鱼。
2011-10-07 11:32
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
不是指这个效率,是语言代码和机器码很接近,说明语言接近汇编,近似于一条语言指令对应一个机器指令了。其它高级语言没这么小的。很多人说C++写出的程序比C庞大臃肿,其实也未必。

授人以渔,不授人以鱼。
2011-10-07 11:50
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
呵呵,我不做图形的,只管数据,图形设计有美工自己做,何况主业不需要用这些的。写这个东西,是想跟新手说明不要以为控制台总是黑乎乎的界面,其实也可以做到五光十色的,因为DOS时代就靠这样写程序(回想当初看到pctools是何等的钦佩,大家都模仿着那样的界面写程序,早已很成熟了)。很多人说要到Unix或Linux写程序,究其实很大程度是因为丢失了DOS的环境而到那边去寻找,以为在Windows下就只能被MFC之类控制住了。我要说,不是这样的,控制台就是原来的DOS,除了某些系统部分被限制住,对写一般意义上的程序来说,其实没有什么困难,字符窗口也一样是窗口,同样可以使用事件触发流程,不要以为学完控制台黑乎乎的界面就必须转向图形界面才能写程序。

授人以渔,不授人以鱼。
2011-10-07 13:07
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
有什么意义,在乎人怎么看的。《Hello,world》最没意义,但学任何语言之前,都很自然地先写一个《Hello,world》,意义在于测试一下这种语言输出数据是什么效果的、如何输出数据,看不到这个意义,当然说这个程序毫无意义。

Unix下不用图形处理,纯控制台写同样功能的程序,不使用操作系统的接口?没什么程序是跟系统完全无关的,简单到malloc()这样的函数调用,其实也是向操作系统申请来的,你写一句malloc(),不要以为在Windows下和Unix下是同样的机器码。真要跟操作系统无关,你自己写操作系统,那就跟别人无关,跟自己有关,迫使别人跟你有关。java才可以不重新编译在任何系统上运行,C/C++都要重新编译,它没有什么可移植性,它的所谓可移植性是在源代码上而言的,编译出来实际运行的东西,都跟平台有关,不单被操作系统限制,甚至被编译器限制。


[ 本帖最后由 TonyDeng 于 2011-10-7 13:24 编辑 ]

授人以渔,不授人以鱼。
2011-10-07 13:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
实现这些功能的意义在哪呢?

看看scanf()丑陋的界面吧!有人写学生管理系统,菜单选择,接收一个char那么简单的东西,用scanf(),你尽管试试,连敲几十个回车,界面都被破坏成怎样了?这样写出来的程序,也叫可以见人的?好,就算你懂用getch()接收单个字符,那么对字符串样式的数据怎么办?能像文本框那样进行编辑操作吗?敲了回车键光标下移之后,如何返回来?输出不是象棋中的兵,只能前进不能后退,一个无法随意定位的输出界面,就几乎没有任何美观可言,实用上也过不去。不要总用ghost,用光盘启动安装Windows试试,那个就是控制台字符界面的经典画面,人家的输出可不会只是滚屏。连那样基本的界面都写不出,靠转换平台来解决问题,也敢叫学会了、要深造了?

这个程序演示的功能,就完全解决了这些问题。输出一个金字塔,未必总要靠算法技巧从上向下输出,完全可以很直观地从下往上一层一层地到顶,代码既清晰又易于维护。甚至,可以随机地堆砌砖块垒起金字塔,什么流输出算法可以做到这样?谁又会去费力地研究、学习那样的算法?当我们面临的道路不止一条两条的时候,谁还会去钻牛角尖?

[ 本帖最后由 TonyDeng 于 2011-10-7 13:54 编辑 ]

授人以渔,不授人以鱼。
2011-10-07 13:42
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
用main()花括号里的代码计算,影响更大。
实模式和多任务模式有本质的区别,这就是我上面说受到系统某些方面限制的原因。Unix下可以直接对硬件写数据?OpenGL也隔了一层壳是吧?

[ 本帖最后由 TonyDeng 于 2011-10-7 15:16 编辑 ]

授人以渔,不授人以鱼。
2011-10-07 15:13
快速回复:无聊至极,弄了一个控制台游标模块,可用于写贪食蛇游戏
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035940 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved