当时在大一下学期学习c时和两位同学做的.这个也标志着我开始喜欢写程序.从中确实学到很多东西,感谢我的这些同学!========================================================================
文件名:elsfk.c 和 elsfk.h
文件描述:dos平台下的俄罗斯方块游戏(详见使用说明)
开发工具:TURBOC2.0
创建人:baojian yanqingguo zuozhekui 2005年11月20日
版本号:1.0
========================================================================
elsfk.c中包含开发此程序的原代码,elsfk.h是用来声明,所有代码在TURBOC2.0下调试通过。
本程序开发的难度在于没有图象库函数,所有的都是程序写作者自己写,采用的是直接读写视频
缓冲区的方法,大大加快了程序执行的效率。
/////////////////////////////////////////////////////////////////////////////
在开发过程中分成两大模块:界面和方块的驱动。在这两个模块中用到了ROOM[14][22],NextFk,
totalscore,curscore作为两者的接口; 其中room[14][22]的值为0~7 ,分别对应7中方块颜色及背景
,NextFk值为1~7 下一个方块的样式,totalscore值为总得分,int curscore值为当前得分(100 300
500 1000),并且用showroom()对ROOM[14][22]进行扫描,ROOM[I][J]值为0,表示没有方块,这就将方
块的移动过程成功的显示在界面上来;
/////////////////////////////////////////////////////////////////////////////
开发的详细过程:
在13模式下仿造WINDOWS的界面,在此曾对VB开发的界面配色进行分析,并用调色板相关的
int palette(int index, int red, int green, int blue)(设置13H模式颜色调色板)
int setpalette()函数配出需要的个种颜色。接下来写出在此图形模式下的图形库函数:
int screen(char mode)(设置屏幕模式)
int text(int cx, int cy, char *str, char c);(在03h和13h模式屏幕输出文本(单个字符))
int pset(int x, int y, int color);(直接写视频缓冲区,即画点函数,
首地址char far *p = (char far *(0x0a0000000L);)
int pget(int x ,int y);(直接读视频缓冲区)
void lineto(int x1,int y1,int x2,int y2,int color);(画直线函数,但不对称的直线处理不
好)
void box(int x1,int y1,int x2,int y2,int color);(画框函数)
void bkgroundset(int color);(背景设置函数)
void fillflod(int x1,int y1,int x2,int y2,int color);(填充函数)
在这些图形函数下,有各种窗口组件(按钮,显示窗口,掌示台等);这些开发的组件结构良好,在屏幕
上的位置均用预定义设定坐标,只要改动均可对应的改变。如#define win1x 35 #define win1y 40 是
定义第一个窗口的坐标。
对应的组件有如下函数:
int showplat(int x,int y);(显示展示台),该函数画出方块的显示区域,为12*8 + 20*7像素
;
void drawframe();(画框架)该函数用到前面的配色作出渐变的效果;
int buttonset(int x1,int y1,int x2,int y2,int d,int *p);(显示按钮)int *p是保存汉字和
位图 的信;
int setbutton(int x1,int y1,int x2,int y2,char *p);(显示小按钮)上下左右,
用来设置鼠标响应的区域;
int showwindows(int x1,int y1,int x2,int y2);(显示分数的窗口);最后通过int
drawwidget()函 数画出各个组件。
自此基本的界面已经出来;考虑到鼠标是一种重要的输入设备,在此程序中就加进来,下面是本
程序中用到的关于鼠标函数:
static int xnow,ynow,button定义全局变量,保存鼠标此时的信息,方便对鼠标的操作;
void initcursor();(鼠标的位图)
void mousesetxy(int x,int y);(设置鼠标的XY)
void on_mouse(int xnow,int ynow);(用来画鼠标,并保存鼠标所在地方的点的信息)
void off_mouse(int xnow,int ynow);(将原来的鼠标隐藏,还原原来的点的值)
int InitMs(void);(鼠标复位)
int movemouse();(判断鼠标是否移动)
int MouseRead();(读取鼠标新的信息)
void button_press(int button,int *counter,int *x,int *y,int infor);(取得鼠标移动的信息
,INFOR为0是调用5,1时调用6号)后面通过该函数获得鼠标的移动距离
int getinfor();(每次鼠标点击的信息,返回结果1-8为对应各个组件)
程序通过一个死循环不断通过ovemouse()判断鼠标是否移动,是就off_mouse(int xnow,int ynow)
并
on_mouse(int xnow,int ynow),并在此过程中通过getinfor()取得各种信息,实现对鼠标事件的响
应;
下面是鼠标在本程序中用到的事件:
各个组件对应的信息分别用1-8表示,当鼠标左键点击第一个按钮时(即1)被getinfor()捕获
,并返回其值,通过
void dealclick();(处理每次的点击)
void mousepast();(鼠标经过时引起的事件)
函数对对应的事件调用对应的函数进行处理,即dealclick()对对应的信息1开始游戏,
其他的事件和此过程相同:
3----------------调用int changecolor(int color)函数实现换肤
(即改变展示台的背景色)功能;
4----------------调用int screen(char mode)和exit(0)函数实现退出功能;
5----------------调用int getclick()(处理每次的点击)和void dealinput()(处
理键 盘和鼠标的输入)实
现变行的功能;
6----------------调用int getclick()(处理每次的点击)和void dealinput()(处
理键 盘和鼠标的输入)实现
左移的功能;
7----------------调用int getclick()(处理每次的点击)和void dealinput()(处
理键 盘和鼠标的输入)实
现右移的功能;
8----------------调用int getclick()(处理每次的点击)和void dealinput()(处
理键 盘和鼠标的输入)实
现移到底的功能;
(具体过程可参考源程序)
还有是拖动展示台和鼠标经过按钮浮动的效果通过以下函数实现
void mousepast();(鼠标经过时引起的事件)
void dragwindows()(拖动窗口)(详见源程序)
下面是在开发过程中遇到鼠标方面的问题即解决方法:
1. 鼠标热点的问题:为了让用户不至于盲点击按钮,我们采用到了对应按钮的热点即把
鼠标隐 藏起来;
2.鼠标一次点击停留的时间过长引起多次点击的问题:在程序中用到while()循环直到
鼠标的 按键状态改变为止。(详见源程
序)
具体的是: 用二维数组room[列][行](12列 20行),每一个数组单元对应于屏幕中的一个方块
更新屏幕时 就根据该二维数组的值来显示不同颜色的方块
这样就使得 界面和内核基本只用数组room联系 将来如果要根改界面 或内核 都不用改变另一
半了
旋转 int turn();
方块的旋转部分 原设置了两个旋转方向 逆时针Left 顺时针Right 程序中采用了逆时针方向
左旋则以左下角方块或空格的右上角为旋转中心
右旋则以右下角方块或空格的左上角为旋转中心
然后是下落部分的调整
每次下落前都会留有一定时间,在这段时间内 可以旋转,左移或右移
下落和旋转都是在数组room中进行的
具体过程
一般是先将方块在room中对应的单元置0
然后计算并测试 方块下一个位置,看看是否出界或与其它已有方块重叠
根据测试结果 来决定是恢复其在room中的值 还是在新位置写入颜色值
最后更新屏幕显示
其中 下落和左移 右移 采用函数int move(int dx, int dy);
dx,dy分别 是指方块的运动方向的横向 和 纵向
其取值范围 dx为 -1, 0, 1 分别表示 左移 横向不动 右移
dy 为 0, 1 分别表示 纵向不动 下移
方块的驱动:
程序采用映射法每次更新屏幕中的每个方块 以便分工处理不同部分的程序块
具体的是: 用二维数组room[列][行](12列 20行),每一个数组单元对应于屏幕中的一个方块
更新屏幕时 就根据该二维数组的值来显示不同颜色的方块
这样就使得 界面和内核基本只用数组room联系 将来如果要根改界面 或内核 都不用改变另
一半了
旋转 int turn();
方块的旋转部分 原设置了两个旋转方向 逆时针Left 顺时针Right 程序中采用了逆时针方向
左旋则以左下角方块或空格的右上角为旋转中心
右旋则以右下角方块或空格的左上角为旋转中心
然后是下落部分的调整
每次下落前都会留有一定时间,在这段时间内 可以旋转,左移或右移
下落和旋转都是在数组room中进行的
具体过程:
一般是先将方块在room中对应的单元置0
然后计算并测试 方块下一个位置,看看是否出界或与其它已有方块重叠
根据测试结果 来决定是恢复其在room中的值 还是在新位置写入颜色值
最后更新屏幕显示
其中 下落和左移 右移 采用函数int move(int dx, int dy);
dx,dy分别 是指方块的运动方向的横向 和 纵向
其取值范围 dx为 -1, 0, 1 分别表示 左移 横向不动 右移
dy 为 0, 1 分别表示 纵向不动 下移
鼠标功能:
右边八个按钮分别为:
开始,暂停(只需移动鼠标到上面),改变展示台的颜色,退出游戏(均为鼠标左键);
UP变形,DW快速下降,LF向左移动,RT向右移动;
点击鼠标右键可以加上或去掉网格;
展示台可以用鼠标左键拖动到其他地方;
键盘功能:
ENTER 可以暂停;
方向键用来控制方向;
空格用来快速下降;
窗口说明:
中间的为展示台,显示俄罗斯方块;
左边的窗口分别为下一个方块的样式,总的得分,当前的得分(根据当前消去的行数来定);
- fk.rar (71.5 KB)
- 描述: 源代码
- 下载次数: 15
分享到:
相关推荐
【标签】"Dos俄罗斯方块游戏"再次强调了游戏的平台和类型。DOS作为标签,意味着游戏的运行环境;而俄罗斯方块是游戏的核心内容,是一款风靡全球的益智游戏,玩家需要通过旋转和排列下落的方块来消除行,以达到得分和...
dos界面下的俄罗斯方块游戏
在8086汇编语言编程领域,创建一个在DOS环境下运行的俄罗斯方块程序是一项挑战性的任务,它涉及到大量的低级系统调用和内存管理。以下是对这个项目的详细解析: 1. **8086汇编语言**:8086是Intel公司推出的一种16...
DOS版的《俄罗斯方块》则是将这个游戏经典移植到了早期个人电脑的操作系统——MS-DOS上,让玩家在那个年代也能享受到这款游戏的魅力。 在MS-DOS环境下,游戏通常以命令行界面运行,没有图形用户界面。《俄罗斯方块...
在DOS版的俄罗斯方块游戏中,EasyX库可能被用来绘制游戏界面,包括方块、背景、得分和其他用户界面元素。 C++面向对象编程是这个项目的核心技术。面向对象编程(OOP)是一种编程范式,它将数据和操作数据的方法封装...
《C++纯DOS俄罗斯方块》是一款基于C++编程语言,在DOS环境下实现的经典游戏。这个项目的主要目的是为了在C++课程设计中提供一个简单的实践案例,帮助学习者理解和运用C++的基本语法以及控制台界面的游戏开发。下面将...
此俄罗斯方块游戏是基于C语言编写的一个简易版本,可在DOS环境下运行。游戏的核心逻辑包括方块生成、移动、旋转以及消除满行等基本功能。 #### 二、全局变量定义 在代码中,定义了多个全局变量来存储游戏状态及...
【标题】"俄罗斯方块游戏代码(DOS下TurboC2.0编译)"涉及到的知识点主要涵盖了两个核心领域:经典游戏开发和DOS环境下的编程语言——TurboC2.0。 首先,我们来讨论“俄罗斯方块”这款游戏。俄罗斯方块是一款由俄罗斯...
注意:要在windows xp下运行 如果想在windows7或8下通过Dosbox运行 需要自行修改方块的下降速度 自己修改下源代码就行了) ">俄罗斯方块游戏课程设计 用c语言在TC的图形界面下实现 设计文档(设计思想 算法描述 ...
《俄罗斯方块》最初就是在这样的环境下运行,玩家需要在DOS环境下启动游戏文件tetris.exe来开始游戏。DOS游戏通常对硬件要求较低,因此即使在当时的低配置电脑上也能流畅运行。 游戏的基本玩法是不同形状的方块从...
【俄罗斯方块游戏源代码】是一个编程学习资源,包含了实现经典游戏俄罗斯方块的源代码。这个项目可能适合那些对游戏开发、C语言编程或图形界面设计感兴趣的IT初学者和爱好者。通过研究这些源代码,你可以了解到游戏...
### C语言实现的俄罗斯方块游戏解析 #### 一、项目背景与介绍 在学习编程的过程中,通过实际项目来理解编程语言的特点是非常重要的一个环节。本篇文档将深入解析一个用C语言编写的俄罗斯方滴游戏源代码。该源代码...
《C语言实现的俄罗斯方块小游戏》 C语言是一种基础且强大的编程语言,它以其简洁、高效的特性在软件开发领域占据着重要的地位。本项目是一个使用C语言编写的俄罗斯方块小游戏,它展现了C语言在游戏开发中的应用,...
总的来说,这个“C#编写的俄罗斯方块”项目展示了C#在游戏开发中的应用,涵盖了面向对象编程、事件处理、图形界面设计和游戏逻辑实现等多个核心知识点。通过学习和分析这个项目,开发者不仅可以掌握C#编程技能,还能...
《TC版俄罗斯方块——dos系统下的经典游戏重现》 在电脑游戏发展的早期阶段,有一款游戏以其简单而富有挑战性的玩法风靡全球,那就是“俄罗斯方块”。它由俄罗斯程序员阿列克谢·帕基特诺夫在1984年创作,随后成为...
/* 定义俄罗斯方块的方向(我定义他为4种)*/ #define F_DONG 0 #define F_NAN 1 #define F_XI 2 #define F_BEI 3 #define NEXTCOL 20 /* 要出的下一个方块的纵坐标*/ #define NEXTROW 12 /* 要出的下一个...