鱼C论坛

 找回密码
 立即注册

【原创】在DOS下写小游戏的核心“部件”

热度 2已有 850 次阅读2013-8-8 22:48 |个人分类:C\C++

    在很多很多的地方都见过不少人用C,C++在DOS下写出了小游戏。我写过一个贪吃蛇,一个俄罗斯方块。因为BUG一大堆最后不好意思发出来~~。这里我不高谈阔论这游戏是怎么这么样的,一步一部是怎么实现的。这里只介绍封装好的一个函数gotoxy()函数。当然你拿去用的时候改其他函数名也行。其实这个函数在TC中是有的。不用自己封装,但是在VC,VS它却不属于标准库里的内容。所以在此封装下给大家。(其实不是我封装的,郁金香老师那偷师学艺过来的)
     void gotoxy(int x,int y)//光标跳转函数
{
 COORD XY;//就一结构体,俩成员,都是短整型,坑爹的整了几个typedef;
 HANDLE hstdout;//其实是 void* 类型,
 hstdout=GetStdHandle(STD_OUTPUT_HANDLE);//获取控制台句柄。尼玛少整点宏定义会死啊!
 XY.X=x;
 XY.Y=y;
 SetConsoleCursorPosition(hstdout,XY);//设置光标到XY的位置。
}

就是这个函数。其实核心就是 SetConsoleCursorPosition();但是这里因为它设置东西有点复杂比如第一个参数需要一个控制台的句柄,第二个需要一个坐标的结构体。
 HANDLE  句柄windows用来表示对象的一种数据结构,所以hstdout可以存放句柄。
GetStdHandle(STD_OUTPUT_HANDLE);我们用这个函数来获取控制台的句柄。它有一个参数都是宏~~~用来指定获取何种句柄。
GetStdHandle
说明
获取控制台句柄
返回值
成功返回对应的句柄,否则将返回INVALID_HANDLE_VALUE (-1) 值
格式
GetStdHandle nStdHandle
参数表
参数 类型 说明
nStdHandle STD_INPUT_HANDLE 标准输入句柄
STD_OUTPUT_HANDLE 标准输出句柄
STD_ERROR_HANDLE 标准出错信息句柄
其他
这是我找到的一张表,描述的比较详细。
下面就是给坐标结构体赋值了
然后传递给 
SetConsoleCursorPosition(hstdout,XY);
SetConsoleCursorPosition是API中定位光标位置的函数。它们(包括那些句柄,坐标结构体,)都是在windows.h头文件里的


好了~~~~有了这个哥们我们就可以写小游戏了。
怎么写呢?一个printf一个gotoxy就能把一个俄罗斯方块或者,贪吃蛇的背景画出来~~~ 比如gotoxy到坐标20和30的地方printf("━");然后多打几个就成了一条横线了(也让gotoxy中的x++达到效果),printf("┃");同样的控制gotoxy中的y的值就能很好的打印出来。不过这要注意的是这些东西占用多少个字符。
  拿贪吃蛇做例子吧~。我们可以先画好一个框框(游戏的背景,自己也可设计的独特一点)。我们可以通过一个数组去记录蛇的一个坐标信息。通过while  和sleep()函数去实现蛇的一个自由的走动,最好写成多线程的,不然不太好处理这个截取方向键阿斯科码(通过截取上下左右键控制蛇的走向)。

    那个俄罗斯方块也是这样的。跳到指定坐标puts或者printf一下,不要的地方就printf一个空格擦除原来画上去的东西,不过俄罗斯方块可比贪吃蛇要复杂的多的去了。 

呵呵~~~看到这个函数真正的威力了吧~~~~ 

 
 
                                                                                                                        ID:Crazy迷恋
 
 


 


路过

鸡蛋
2

鲜花

握手

雷人

刚表态过的朋友 (2 人)

发表评论 评论 (7 个评论)

回复 牡丹花下死做鬼 2013-8-10 14:32
不错不错虽然你经常黑我但这个我不懂学习下虽然看了还是不懂
回复 Crazy迷恋. 2013-8-10 14:41
牡丹花下死做鬼: 不错不错虽然你经常黑我但这个我不懂学习下虽然看了还是不懂
没事~~~你很快就会懂了   就是几个API而已。
回复 牡丹花下死做鬼 2013-8-10 14:44
Crazy迷恋.: 没事~~~你很快就会懂了   就是几个API而已。
恐怕今年是没戏了还有20天就开学我得把C入门彻底搞定API最早也要到寒假了那时候就是看解密系列了肯定会学到API比如(win32汇编)
回复 Crazy迷恋. 2013-8-10 14:49
牡丹花下死做鬼: 恐怕今年是没戏了还有20天就开学我得把C入门彻底搞定API最早也要到寒假了那时候就是看解密系列了肯定会学到API比如(win32汇编)
哈哈~~~牡丹  在你这个年龄能有这样的知识就已经完全的超越我了。其实我学的东西非常多非常杂。但我始终还是脱离不了菜鸟。这是我最大的悲哀。也许这是我学而不精的代价吧。~~~努力 哦~~要开学了。
回复 牡丹花下死做鬼 2013-8-10 14:53
Crazy迷恋.: 哈哈~~~牡丹  在你这个年龄能有这样的知识就已经完全的超越我了。其实我学的东西非常多非常杂。但我始终还是脱离不了菜鸟。这是我最大的悲哀。也许这是我学而不精 ...
是啊 我师父就是说我不要多而不精
所以他建议我是主修C++ 这玩意适合我
所以我到大二之前要把基础如汇编 C 数据结构 自己搞定掉
至于解密纯属 兴趣 还有甲鱼的那个P什么的也是兴趣应为那个计算机仿真我早就想学了
至于开学 我就要悲剧了 就要再次踏入那地狱 啦
回复 Crazy迷恋. 2013-8-10 14:58
牡丹花下死做鬼: 是啊 我师父就是说我不要多而不精
所以他建议我是主修C++ 这玩意适合我
所以我到大二之前要把基础如汇编 C 数据结构 自己搞定掉
至于解密纯属 兴趣 还有甲鱼的那 ...
python~~~没事,记得别学而不精就行。我去~~~还有师傅啊~~~当年我只知道瞎掰。拿个c hello world 程序瞎掰了老久
回复 牡丹花下死做鬼 2013-8-10 15:01
Crazy迷恋.: python~~~没事,记得别学而不精就行。我去~~~还有师傅啊~~~当年我只知道瞎掰。拿个c hello world 程序瞎掰了老久
那个师傅 都不管我的就和我说过一次话而已
应为已经毕业 也离开鱼C了(我是他离开前几天求他收我的)工作要紧啊每天八点至六点就是鱼C达人秀的那个Lukelqz

facelist

您需要登录后才可以评论 登录 | 立即注册

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

GMT+8, 2024-3-29 03:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部