用c语言编写俄罗斯方块程序 求详解

用c语言编写俄罗斯方块程序 求详解,第1张

1、用C语言绘制图形界面

EasyX图形库(>

包含库#include <graphicsh>

先初始化图形窗口

initgraph(WINDOW_WIDTH, WINDOW_HIGH) ;WINDOW_WIDTH为窗口的宽带,WINDOW_HIGH为窗口的高度。

清空绘图设备

cleardevice();

设置画笔颜色

setcolor(RED) ;

设置线条风格

setlinestyle(PS_SOLID, NULL, 0);

画矩形

rectangle

还有画线、显示文字等函数,可以参照其帮助文档。

注意:由于我们用的是EasyX图形库,故源文件后缀要为cpp,但其中内容都是C的语法。

2、存储表示出俄罗斯方块的形状

一、我们可以用编号,不同的编号代表不同的俄罗斯方块,根据编号把不同方块的画法写在代码中,这样19种

方块就得有19种相应的代码来描绘。而且这样扩展性不好,若以后设计了新的方块,则需要更改大量源代码。

二、我们很自然的想到可用字模点阵的形式来表示,即设置一个4行4列的数组,元素置1即代表这个位置有小

方块,元素置0即代表这个位置无小方块,这个整个的44的数组组成俄罗斯方块的形状。

1000

1000

1100

0000

这个方法挺靠谱,但我们还可以优化一下:不用44的数组,而是用16个bit位来表示这个点阵。这样存储起来比较方便,故我们用unsigned int 的低16位来表示方块的点阵。

我们可以用掩码与表示俄罗斯方块的位进行 *** 作,来识别并在屏幕上画出方块。

我们把俄罗斯方块点阵的数位存在rockArray中,我们可以事先把这19种方块的字模点阵自己转化成十六进制,然后在rockArray数组的初始化时赋值进去。

但这样做未免有点太费力,且扩展性也不太好,若以后设计的新方块种类加入,要改变数组rockArray中的值。

我们可以考虑把所有俄罗斯方块的点阵存储在配置文件中,在程序初始化时读取文件,把这些点阵转换成unsigned int的变量存储在rockArray中。

这样,以后我们增添新的方块形状只需要在配置文件中增加新的点阵即可。

@###

@###

@@##

####   (为使得看起来更醒目,我们用@表示1,用#表示0)

3、让图形动起来

在某位置处用函数DrawRock在屏幕上画出俄罗斯方块,然后再擦除掉(即用背景色在原位置处重绘一次方块),最后在下落的下一个位置处用函数DrawRock在屏幕上画出俄罗斯方块,如此循环,中间用计时器间隔一段时间以控制下落的速度。

同理,按下屏幕的左右键也是如此,只是在按下键盘时把方块的位置重新计算了。

那么按下上方向键时,如何让方块翻转呢?

我们在配置文件中就把方块的顺时针翻转形态放在了一起:

@###

@###

@@##

####

@@@#

@###

####

####

@@##

#@##

#@##

####

##@#

@@@#

####

####

我们每按一次上方向键改变一次方块的形状即可。若一直按上键,形状应该是循环地翻滚。

我们想到了循环链表的数据结构可实现这个效果。

可是我们若把这些一种类的方块的各种形态串成循环链表形式,那么每次重新生成方块时我们就难以随机地生成方块了。

故还是得用数组来存储,但又要有循环链表的功能,于是我们想到了静态循环链表。

我们用结构体来作为一个方块在rockArray中的元素

typedef struct ROCK

{  //用来表示方块的形状(每一个字节是8位,用每4位表示方块中的一行)

unsigned int rockShapeBits ;

int          nextRockIndex ;  //下一个方块,在数组中的下标

} RockType ;

这样,当我们按下上方向键时,把传入函数DrawRock中的rockIndex变为当前方块结构体中的nextRockIndex即可。

参考资料:

C语言图形界面篇

EasyX是一款图形界面库,可以让使用C语言编写的程序在 Windows 平台上实现界面化。EasyX提供的缩放因子是一个浮点数,用于在不同分辨率的屏幕上自动调整窗口大小和图形大小。在EasyX编程中,程序可以使用API函数 `GetScaleFactor()` 获取当前系统的缩放因子,然后根据该因子自动调整窗口大小和绘制图形的大小,以适应不同的显示环境。

在默认情况下,EasyX会自动识别系统缩放因子并进行相应的调整,使程序在不同的显示器上都能获得相同的用户体验。但是,在某些情况下,可能需要手动设置缩放因子,指定程序在特定的分辨率下的界面大小和图形大小。此时,可以使用EasyX提供的 `SetScale(double)` 函数来进行缩放因子的手动设置。

static void(int[]group)

{

int temp;

int pos=0;

for(int i=0;i< groupLength-1;i++)

{

pos=i;

for(intj=i+1;j<groupLength;j++)

{

if(group[j]<group[pos])

{

pos=j;

}

}//第i个数与最小的数group[pos]交换

temp=group[i];

group[i]=group[pos];

group[pos]=temp;

}

}

现在有两个Dialog,一个是创建工程时自己生成的Dialog1,另一个是在资源中自己添加的一个Dialog2。程序每次运行时运行的是Dialog1,现在要通过点击Dialog1上的一个BUTTON来实现关闭Dialog1同时打开Dialog2 (类似于登陆跳转),也就是对话框间的跳转。

以上就是关于用c语言编写俄罗斯方块程序 求详解全部的内容,包括:用c语言编写俄罗斯方块程序 求详解、c语言easyx中缩放因子是什么、问一下在 vs2010上安了 easyx ,用它的头文件写出来程序后能封装并在别的电脑上直接运行吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9720871.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存