① 如何实现俄罗斯方块的自动控制
rtyery
② 谁能介绍一些打俄罗斯方块的技巧
玩俄罗斯方块技巧
要玩好俄罗斯方块很难...
操作说明
游戏界面上的按钮以鼠标操作
键盘 [ 左、右 ] 用来控制落下砖块的左右移动
键盘 [ 下 ] 用来控制砖块加速下落
键盘 [ 上 ] 用来控制砖块变形
键盘 [ 空格 ] 用来控制砖块直接落到底
键盘 [1-6 (大键盘) ] 用来对指定座位的玩家使用道具(玩家座位号在玩家信息栏有显示)
键盘 [s] 用来切换道具,将所有道具依次往右移动一格,最右边的道具移动到最左边
(以上的键位设置是游戏默认的设置,您也可以按自己的习惯随时更改。)
道具说明:
道具分为红色(攻击)和蓝色(防御)两种
红色:
加一层 ,在被使用者的游戏池中从底部起增加一层方块。
加两层 ,在被使用者的游戏池中从底部起增加两层方块。
加三层 ,在被使用者的游戏池中从底部起增加三层方块。
加速 , 使被使用者的方块下落速度加快 20 秒。
蓝色:
减一层 ,在被使用者的游戏池中从底部起减一层方块。
减两层 ,在被使用者的游戏池中从底部起减两层方块。
减三层 ,在被使用者的游戏池中从底部起减三层方块。
减速 , 使被使用者的方块下落速度减慢 20 秒。
全消 , 把被使用者的游戏池清空。
现在讲解技巧...
1对1..... 首先要的是速度....利用空格键使方块直接落下...玩的不熟的玩家要熟悉一下....
我们先是消掉一两行...然后道具就会出来....然后继续越快越好....得到了道具马上用(红色对别人用,蓝色对自己用)...
我们狂阴别人..别人的游戏池越来越高...而我们的游戏池还是那么低..哈哈...就着样..有道具就用他...反正他没有什么道具..
先用道具的那个人胜率是80%...但主要的是速度...看准就放..
多人混战.... 这个来说...比较难打...我们先是多行一起消(3行以上)....那样其他人的游戏池就会上升....这样一直多行消下去...他们的游戏池就越来越高....你就慢慢的来也能赢..但如果有人像你一样....多行一起消...那就看看道具条....一定有很多道具..那就狂加他咯...反正红的是他..蓝的是自己...哈...那又赢了....队战也一样.....
积分规则(等级)
失败方按照游戏队伍数目和失败玩家的名次,扣分如下:
两个玩家: - 12 (第二名)
三个玩家: - 6 (第二名) , - 12 (第三名)
四个玩家: - 6 (第二名) , - 6 (第三名) , - 12 (第四名)
五个玩家: - 6 (第二名), - 8 (第三名), - 10 (第四名), - 12 (第五名)
六个玩家: - 6 (第二名), - 8 (第三名), - 10 (第四名), - 12 (第五名), - 12 (第六名)
玩家按照积分划分为以下等级:
学徒=0
雇佣工人=25
泥土工人=50
砌墙工人=150
建筑队长=300
建筑师傅=500
建筑工头=700
建筑工头★=900
制图工程师=1100
制图工程师★=1400
见习工程师=1700
见习工程师★=2100
助理工程师=2500
助理工程师★=3100
工程师=3500
工程师★=4100
建筑艺术家=4700
建筑艺术家★=5500
房屋设计师=6200
房屋设计师★=7200
高级设计师=8200
高级设计师★=9200
名誉设计师=10000
名誉设计师★=11000
设计总监=15000
设计总监★=20000
皇家建筑师匠=50000
神匠=100000
巧夺天工=500000
鬼斧神工=1000000
③ 用VC写俄罗斯方块时如何实现图形的控制啊
VC++也有相应的函数
主要就是绘图类
CDC类
就是其中的关键
主要是处理画图和图象处理的工作
建议使用
视图/文档
的界面来操作
比较方便
可以响应键盘
鼠标消息
以及画图等等
④ QQ火拼俄罗斯方块键位设置
【键盘及游戏设置】
想要打好方块,键盘太烂肯定是不行的。选择键盘的首要条件就是手感舒适,按键
轻松,弹性好。接下来是键盘的传输速度(每秒字节数),一般新点的都在1500以上,
没有必要强求太高,除非你喜欢打十速。
键位的设置,没得商量,肯定要双手分工!单手是绝对打不过双手的(要是对方奇
菜无比那当我没说过),现在就向大家推荐以下的设置,也就是我的设置:
〖推荐·游戏设置〗
左移 :← 右移 :→
丢下 :空格
下落 :↓
旋转:E
方向 :逆时针
(根据各人习惯而定,但90%的方块类游戏都是逆时针)
这套设置的好处是双手指头各司其职,右手食指和无名指负责左右移动,中指负责
降(联众的定义不好,我将丢下改为落,将下落改为降),左手食指负责旋转,大拇指
负责落,食指和大拇指分别能轻松按到F2、Y和N(敲击回车效果和N相同),使一局
游戏里到头来几乎用不着鼠标。
〖推荐·关于提高游戏速度〗
不少朋友老是抱怨自己的速度慢,“太卡”,这可能跟机器太烂有关系,但80%是因为一些没有意义的事情引起的。当你开着下载程序、聊着QQ、
听着歌曲去玩方块时,没有理由使你不卡。尤其是在QQ接到系统消息时,你百分之百会卡!所以建议关闭不必要的程序,QQ隐身,此外强烈建议关闭游戏设置中的“声音效果”和“方块消失的渐变效果”!前者直接导致跟歌曲和QQ冲突,而后者严重压抑你冲锋和防守时的速度!
〖开局要旨〗
(一)平均、平缓,避免一开始就造大山。
(二)秉承“能低不高,能平不立,能靠不压”的基本原则。
(三)在造盆地时注意造成两格或四格。
(四)尽量不在边上留坑,绝不在边上留洞,将洞开向主攻方向。
⑤ 怎么用vb制作俄罗斯方块游戏啊,简单点的。
visual basic继承了basic语言易学易用的特点,特别适合于初学者学习windows系统编程。随着21世纪信息社会的到来,计算机在人们的工作和生活中的深入,要求我们越来越多地与计算机打交道,为了使用户在繁忙的日程工作中得到放松,于是出现了各种各样的休闲软件,如聊天工具,游戏等等。于是我们小组着手设计开始一个这样的游戏软件。通过这学期来Visual Basic的学习,我初步掌握了Visual Basic语言的最基本的知识,于是在牛荣和李鹏等老师的指导下动手用Visual Basic编写俄罗斯方块游戏。
我们之所以选择开发俄罗斯方块游戏,无可争议,《俄罗斯方块》是有史以来最伟大的游戏之一。 在曾经发布过的所有游戏中,《俄罗斯方块》还被认为是仅有的一个能够真正吸引广泛人群的作品。谁能说清楚,迄今为止人们究竟花了多少万个小时在这个游戏上?也许这些时间本来可以被花在更具生产力的活动上。某些批评家也许会声称,《俄罗斯方块》要比过去二十年间出现的任何东西都要浪费人们的时间。至于我们,则要欣然提名它为GameSpot评选出的历史上最伟大游戏之一。
为了怀念经典,也为了能够给大多的计算机用户在工作之余找到一个休闲、娱乐的一个方式,我们小组开始着手用VB语言开发一个经典的俄罗斯方块游戏。
工程概况
2.1 项目名称
俄罗斯方块游戏
2.2 设计平台
VB 全称Visual Basic,它是以Basic语言作为其基本语言的一种可视化编程工具。
Vb是microsoft公司于1991年退出的windows应用程序开发工具visual意思是“可视化的”。在它刚推出来时,自身还存在一些缺陷,功能也相对少一些。但是经过多年的开发研究。最近microsoft公司又推出了VB6.0版本
VB6.0运行环境:硬件,要求486以上的处理器、16MB以上内存,50MB 以上的硬盘,cd-rom驱动器,鼠标。软件:要求windows 95以上版本。
2.3程序设计思想
游戏是用来给大家娱乐的,所以要能在使用的过程中给大家带来快乐,消除大家的疲劳,所以我们在游戏中添加了漂亮的场景和动听的音乐,设置了过关升级的功能,激发大家的娱乐激情。
从游戏的基本玩法出发,主要就是俄罗斯方块的形状和旋转,我们在设计中在一个图片框中构造了一个4*4的网状小块,由这些小块组合成新的形状,每四个小块连接在一起就可以构造出一种造型,因此我们总共设计了7中造型,每种造型又可以通过旋转而变化出2到4种形状,利用随机函数在一个欲览窗体中提前展示形状供用户参考,然后将展示的形状复制到游戏窗体中进行摆放,在游戏窗体中用户就可以使用键盘的方向键来控制方块的运动,然后利用递归语句对每一行进行判断,如果有某行的方块是满的,则消除这行的方块,并且使上面的方块自由下落,其中,方块向下的速度是有时钟控件控制的,在游戏中,用户也可以使用向下键加快下落速度,定义一个变量,对消除的函数进行记录,最后就可以得出用户的分数,用if 语句对分数判断,达到一定的积分就可以升级到下一个档次。
俄罗斯方块游戏设计的主要步骤为以下10个方面:
(1)游戏界面的设计。
(2)俄罗斯方块的造型。
(3)俄罗斯方块的旋转。
(4)俄罗斯方块的运动情况(包括向左,向右和向下)。
(5)俄罗斯方块的自动消行功能。
(6)游戏级别的自由选择。
(7)游戏速度的自由选择。
(8)游戏得分的计算。
(9)游戏菜单选项的设计及功能实现。
(10)游戏的背景音乐及特效。
2.4运用的控件和主要对象
我们在设计过程中主要用到的控件有:command控件,image控件,picture控件,label控件,timer控件,text控件,windows media player控件等等。
2.5主要实现的功能
我们开发的俄罗斯方块游戏,主要实现了以下几种功能:
1.可以灵活控制方块在图形框中运动。
2.游戏过程中方块可以自由旋转。
3.当某一行的方块排列满时,将自动将这一行方块消除,然后将上面所有方块向下移动,可以支持连续消行。
4.游戏前可以选择游戏的速度和游戏的等级,游戏速度既为方块下落速度,游戏等级为初始游戏时在基层随机生成一定行数的无规律方块,生成的行数由你来选择,每行至少产生5个以上的无规律方块,这样增加了游戏难度,对于游戏高手来说,无疑不是一个新的挑战。
5.游戏的得分支持积分,并且按照公式:
得分 = 原来分数+ 100 * (2 ^ 同时消除的行数-1)
这样,你同一时间消除的行数越多,你的得分也就越高,当游戏积分到了一定时可以自动升级,这个升级指速度升级。
6.游戏中提供了一个漂亮的场景和动听的音乐,给你带来无限激情。
2.6开发人员
由于这次课程设计所选的题目太复杂,而时间又比较紧张,指导老师建议和同学分工完成。我们小组成员包括组长孙磊周,副组长邹海星,此游戏由我们两个人共同开发而成。
正文
3.1游戏设计的具体实现
在我们两个人共同努力下,此次设计,终于能够圆满完成。由于时间的紧促,在设计中,也许会有一些考虑不周之处,但其功能已经能够满足大多用户的需求,相信假以时日,一定能做出一个更经典,更完美的俄罗斯方块游戏,下面我们将对每一步的具体如何实现展示给大家。
3.1.1游戏界面的设计和背景音乐及特效的实现
俄罗斯方块游戏主要由两个界面构成,登陆界面和开始游戏界面,在登陆界面中我们可以首先看到圣诞节的晚上飘梅花的场景,梅花从窗体顶部做函数曲线的下落运动,在窗体中定义一个Image控件组,在通用中定义梅花X坐标变量动态数组,Y坐标变量动态数组,步距X的变量动态数组,步距Y的变量动态数组,以及振幅变量动态数组。然后在窗体form_load中可以定义梅花的数量,利用随机函数产生随机的梅花坐标,步距和振幅,Image控件在运行时候就调用梅花图片,Image控件就可以由时钟控件控制下落速度,可以自由调节,梅花按snow(i).Left = xp(i) + am(i) * Sin(dx(i))函数在做纵向的正玄函数轨迹运动,竖直方向上为自由下落运动,,有am(i)来控制梅花的左右移动振幅。因此,我们就可以看到一个梅花在空中自由飘舞的画面了。
背景画面是用photoshop软件处理的漂亮图案,原本画面中的动画效果都是由Image控件制作的,还有点击进入游戏的按钮是由Label控件实现的,因为Image控件没有置前置后功能,不能将下雪的场景体现完整性,所以将这些图案全部放在背景上,不影响雪花飘落的效果,当点击画面的时候一样可以进入游戏界面。
游戏的背景音乐是由一段代码调用系统播放器Windows Player播放背景音乐,由于本次设计主要是针对游戏如何设计的,所以在这里就不对播放背景音乐的功能做介绍了。
3.1.2俄罗斯方块的造型
相信朋友们都玩过俄罗斯方块,对这个游戏的玩法和方块形状都比较熟悉。我们这个游戏只选择了最基本的7中造型,包括长条型,正方型,正S型,反S型,正7型,反7型,T型。如果需要我们可以添加更多的造型。将游戏界面的游戏区图片框分割成10*20的小块,每个小块放置一个command控件,预览区图片框按同样比例分割成4*4的小块,同样有command控件构成,我们可以把预览区图片框看作是从游戏区图片框中选取的一个部分,游戏区的小方块编号和欲览区编号如下图:
0 1 2 3 4 5 6 7 8 9
… … … … … … … … … …
… … … … … … … … … …
90 91 92 93 94 95 96 97 98 99
3 4 5 6
13 14 15 16
23 24 25 26
33 34 35 36
游戏区编号 欲览区编号
利用Select将方块的7中造型列出,比如长条型的设计,在欲览区中分别有3.4.5.6和5.15.25.35四个方块构成两中形态,用数组为:
m(0) = 3: m(1) = 4: m(2) = 5: m(3) = 6: situation2 = 0
m(0) = 5: m(1) = 15: m(2) = 25: m(3) = 35: situation2 = 1
将它的形状编号为0和1,在后面方便调用,其他的方块造型同样的方法。
3.1.3俄罗斯方块的旋转
俄罗斯方块的旋转主要将方块的位置加以变换得到的,例如上述范例,长条型有两中样式,根据小方块的编号变动来实现整个造型的旋转,比如:
If n(0) - 18 >= 2 And n(3) + 9 <= 198 Then
If cmdfang(n(0) - 18).Visible = False And _
cmdfang(n(1) - 9).Visible = False And _
cmdfang(n(3) + 9).Visible = False Then
hidefang 0
n(0) = n(0) - 18
n(1) = n(1) - 9
n(3) = n(3) + 9
showfang 0
situation = 1
End If
End If
方块的造型在旋转的时候存在一个公式,当然首先要判断是否满足旋转的要求,以上是一个长条型由横着变成竖立状态的旋转,我们以它的造型中的第三个小方块n(3)为中心旋转,这样,在开始运动的时候,长条形要发生旋转最少要运动到第三行,才能由横着变成竖立状态,游戏区图形框中第三行的第一个方块的编号为20,所以长条造型的第一个小方块的编号n(0)必须要大于20。同样,长条型方块在下落到底部的时候也有限制。如果长条下落到最后一行也将无法由横着变成竖立状态。
3.1.4如何实现方块的运动和自动消除满行的方块
我们的这个俄罗斯方块游戏主要是利用command控件的visible属性完成效果的,其实在游戏区图形框可以看成是由许多的command小方块组成,方块运动的过程就是造型里方块显示或者隐藏,就像现在的霓虹灯效果一样,由时钟控件控制visible属性改变的速度,上一层的消失,下一层的显示,这样,从视觉效果可以看到方块的下落运动效果。
方块在下落的过程中会自动判断每一行方块的visible属性,如果全部为true时,就会将这一行小方块的visible属性全部变成false,在将上面的小方块向下移动,利用for语句进行循环判断,将所有这样情况的行改变小方块visible属性。当有多行同时出现这样情况时使用递归调用,实现连续消行。具体程序代码如下:
For i = 190 To 10 Step -10
If cmdfang(i).Visible = True And _
cmdfang(i + 1).Visible = True And _
cmdfang(i + 2).Visible = True And _
cmdfang(i + 3).Visible = True And _
cmdfang(i + 4).Visible = True And _
cmdfang(i + 5).Visible = True And _
cmdfang(i + 6).Visible = True And _
cmdfang(i + 7).Visible = True And _
cmdfang(i + 8).Visible = True And _
cmdfang(i + 9).Visible = True Then
For j = i + 4 To i Step -1
t = 1
cmdfang(j).Visible = False
cmdfang(2 * i + 9 - j).Visible = False
For k = 1 To 4000
DoEvents
Next
t = 0
Next
linenum = linenum + 1
For j = i - 1 To 0 Step -1
If cmdfang(j).Visible = True Then
cmdfang(j).Visible = False
cmdfang(j + 10).Visible = True
End If
Next
clearline '为了实现连消数行,这里使用递归调用
End If
Next
3.1.5游戏速度和游戏级别自由选择
游戏速度的自由选择无非就是改变时钟控件的频率,我们在菜单中添加了选择速度的功能,还有添加了考验功能,将欲览窗中的方块造型隐藏,给玩家提高了难度,如果你不愿意接受考验也可以点击显示还原成原来状态。
游戏级别的自由选择是让用户选择游戏开始时候,游戏区底部出现一定行数的随机方块,同样给玩家增加了难度,功能代码如下:
For i = 19 To 20 - Val(txthard.Text) Step -1
For j = i * 10 To i * 10 + 9
If Rnd >= 0.5 Then cmdfang(j).Visible = True
Next
Next
可以根据你选择的难度系数在底层的每一行随机产生超过半数(即5个以上)以上的小方块,这样适合喜欢高难度的玩家。
3.1.6游戏得分的计算和游戏菜单的编辑
游戏得分的计算主要是根据消除的行数来决定的,当然每一次同时消除的行数不一样,每一行的得分也不一样,如果你每次消除的行数为1,则最后得分是100分,如果同时消除2行,则最后得分是300分,同时消除3行,得分为700分,同时消除4行,得分为1500分,这由公式:得分 = 原来分数+ 100 * (2 ^ 同时消除的行数-1)。
游戏的编辑,读者可以参照下面的功能介绍。
3.2 游戏功能的介绍
文件-------开始:开始游戏。
继续:继续游戏。
暂停:暂时停止游戏,点击继续的时候可以继续游戏。
退出:退出游戏。
设置-------选择游戏级别。
选择游戏速度。
考验-------显示:显示欲览去方块。
隐藏:隐藏欲览去方块。
帮助-------操作提示以及版本信息和作者资料。
用户界面具体如图:
图—登陆界面 图—游戏界面
图—菜单编辑界面 图—游戏帮助界面
有关说明
经过两个多星期的设计和开发,俄罗斯方块游戏已经成功。其功能基本符合用户需求,能够完成游戏的控制,方块的变换以及消层等功能。并提供游戏设置,对于一些技术性比较过硬的玩家,可以调游戏级别、以及游戏速度,使得玩家能够充分的发挥竞技游戏的特色,可以不断的挑战自我,挑战极限。
4.1游戏设计中的不足之处
但是由于课程设计时间较短,所以该游戏还有许多不尽如人意的地方,比如方块类型太少,退出游戏不能存储进度等多方面问题。这些都有待进一步改善,我们在游戏中还可以更换背景音乐,以适合不同的玩家,在每通过一关可以给玩家播放一段flash,吸引玩家去挑战极限,不断提高玩家的兴趣,相信在以后的制作过程中我们将给大家带来一个更新功能更全面的游戏。
4.2VB与C语言之间的不同之处
我们这个小游戏也可以用C语言来实现,在程序的编程上没有VB语言方便实用,C语言和VB语言之间存在很多的共同点,虽然语法方面有点差异,但是在编程思路上完全一样,VB能够实现很多C#不能做到的功能,如When语句、Optional参数、局部Static变量、对象实例访问静态方法、Handles绑定事件、On Error处理异常、Object直接后期绑定等等。VB和C#语言,编译出来的是同样的CIL,但为什么VB支持很多有趣的特性呢。我们一起来探究一下。
4.21局部静态变量
VB支持用Static关键字声明局部变量,这样在过程结束的时候可以保持变量的数值:
Public Sub Test1()
Static i As Integer
i += 1 '实现一个过程调用计数器
End Sub
我们实现了一个简单的过程计数器。每调用一次Test,计数器的数值就增加1。其实还有很多情况我们希望保持变量的数值。而C#的static是不能用在过程内部的。因此要实现过程计数器,我们必须声明一个类级别的变量。这样做明显不如VB好。因为无法防止其他过程修改计数器变量。这就和对象封装一个道理,本来应该是一个方法的局部变量,现在我要被迫把它独立出来,显然是不好的设计。那么VB是怎么生成局部静态变量的呢?将上述代码返汇编,我们可以清楚地看到在VB生成的CIL中,i不是作为局部变量,而是作为类的Field出现的: .field private specialname int32 $STATIC$Test1$2001$i
也就是说,i被改名作为一个类的字段,但被冠以specialname。在代码中试图访问$STATIC$Test1$2001$i是不可能的,因为它不是一个有效的标识符。但是在IL中,将这个变量加一的代码却与一般的类字段完全一样,是通过ldfld加载的。我觉得这个方法十分聪明,把静态变量变成生命周期一样的类字段,但是又由编译器来控制访问的权限,让它成为一个局部变量。同时也解释了VB为什么要用两个不同的关键字来声明静态变量——Static和Shared。由于局部静态变量的实质是类的字段,所以它和真正的局部变量还是有所不同的。比如在多线程条件下,对局部静态变量的访问就和访问字段相同。
4.2.2Handles和WithEvents
VB除了可以用C#那样的方法来处理事件响应以外,还有从VB5继承下来的独特的事件处理方式——WithEvents。
我喜欢称这种事件处理方式为静态的事件处理,书写响应事件的方法时就已经决定该方法响应的是哪一个事件,而C#则是在代码中绑定事件的。VB中WithEvents静态方法是非常有用的,它可以显着增强代码可读性,同时也让VB.net中的事件处理非常方便,不像C#那样离开了窗体设计器就必须手工绑定事件。
4.2.3类型转换运算符
在Visual Basic 2005中将加入一个新的运算符——TryCast,相当于C#的as运算符。我一直希望VB有这样一个运算符。VB目前的类型转换运算符主要有CType和DirectCast。他们的用法几乎一样。我详细比较了一下这两个运算符,得出以下结论:
1.在转换成引用类型时,两者没有什么区别,都是直接调用castclass指令,除非重载了类型转换运算符CType。DirectCast运算符是不能重载的。
2.转换成值类型时,CType会调用VB指定的类型转换函数(如果有的话),比如将String转换为Int32时,就会自动调用。
4.2.4默认属性和属性参数
在原先的VB6里,有一项奇特的功能——默认属性。在VB6中,对象的名称可以直接表示该对象的默认属性。
4.2.5可选参数和按名传递
VB从4.0开始支持“可选参数”这一特性。就是说,函数或子程序的参数有些是可选的,调用的时候可以不输入。其实VB从1.0开始就有一些函数带有可选参数,只不过到了4.0才让用户自己开发这样的过程。在VB4里,可选参数可以不带默认值,而在VB里,如果使用可选参数,则必须带有默认值。在调用的时候,VB若发现参数被省略,则自动读取.param部分的默认值,并显式传递给过程。这一部分完全由编译器处理,而且没有任何性能损失,和手工传递所有参数是完全一样的。至于按名传递,VB会自动调整参数的顺序,其结果与传统方式的传递也没有任何的不同。这说明我们可以放心地使用这项便利。而且带有可选参数的过程拿到C#中,顶多变成不可选参数,也不会造成什么其他的麻烦。
PS.很多COM组件都使用了默认参数,而且有些过程的参数列表非常长,在VB里可以轻松地处理它们,而在C#中经常让开发者传参数传到吐血。
4.2.6在经过对比之后可得以下一个结论:
1.目前的主流编程语言没有简单的,如果你想学精通的话。
2.VB的门槛比较低,编程思想较容易接受。
3.学习C不能短期内见到成效。
4.据用户调查69%的考生觉得VB更容易接受
致谢
在本次课程设计中,我从指导老师牛荣和李鹏身上学到了很多东西。老师认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我收益匪浅。他无论在理论上还是在实践中,都给与我很大的帮助,使我得到不少的提高这对于我以后的工作和学习都有一种巨大的帮助,感谢他耐心的辅导。
另外,在游戏开发过程中化希耀老师和杜义君老师也给于我们很大的帮助,帮助解决了不少的难点,使得游戏能及时开发完成,还有所有的同学同样给与我不少帮助,这里一并表示感。
参考文献:
[1]Vsual Basic 程序设计教程 作者:龚沛曾,陆慰民,杨志强 高等教育出版社出版
[2]Vsual Basic 6.0程序设计 作者:刘新民,蔡琼,白糠生 清华大学出版社出版
[3]80例上手 VB6 编程 作者:唐凯军,汤惠莉 山东电子音像出版社
[4]Vsual Basic 实例教程 作者:卢毅 科学出版社出版
[5]Vsual Basic 经典范例50讲 作者:赵欣胜,亢慧娟,刘晟宏 科学出版社出版
⑥ 俄罗斯方块的游戏规则
游戏规则:完整的横条会随即消失。
由小方块组成的不同形状的板块陆续从屏幕上方落下来,玩家通过调整板块的位置和方向,使它们在屏幕底部拼出完整的一条或几条。这些完整的横条会随即消失,给新落下来的板块腾出空间,与此同时,玩家得到分数奖励。没有被消除掉的方块不断堆积起来,一旦堆到屏幕顶端,玩家便告输,游戏结束。
名字起源
俄罗斯方块自然是俄罗斯人发明的。这人叫阿列克谢·帕基特诺夫(Алексей Пажитнов 英文:Alexey Patnov)。
俄罗斯方块原名是俄语Тетрис(英语是Tetris),这个名字来源于希腊语tetra,意思是“四”,而游戏的作者最喜欢网球(tennis)。于是,他把两个词tetra和tennis合而为一,命名为Tetris,这也就是俄罗斯方块名字的由来。
⑦ 用c++怎么样才能实现对俄罗斯方块自动下落的控制
#define ELUOSIWIDGET_H
#include <QtGui/QWidget>
#include <QPainter>
#include <QPaintEvent>
#include <QKeyEvent>
#include <string.h>
#include <time.h>
#define REC_SIZE 25 //方块大小
#define SCENE_W 16 //场景列数
#define SCENE_H 10 //场景行数
enum direction{UP,DOWN,LEFT,RIGHT,SPACE};
typedef struct {
int pos_x; //方块x坐标
int pos_y; //方块y坐标
⑧ C++编俄罗斯方块:怎样用键盘控制上下翻转
这个是没有专门的函数来控制俄罗斯方块的翻转的,
一般来讲,是通过如下的方式来实现俄罗斯方块的翻转:
首先,用3维数组来存放七种基本方块图形:
例如:
int BOX[7][4][4]={
{
{1,1,1,1}, // ----型
{0,0,0,0},
{0,0,0,0},
{0,0,0,0}
},
{
{1,1,1,0}, // ┌--型
{1,0,0,0},
{0,0,0,0},
{0,0,0,0}
},
{
{1,1,1,0}, // --┐型
{0,0,1,0},
{0,0,0,0},
{0,0,0,0}
},
{
{1,1,1,0}, // -┬-型
{0,1,0,0},
{0,0,0,0},
{0,0,0,0}
},
{
{1,1,0,0}, // -T_型
{0,1,1,0},
{0,0,0,0},
{0,0,0,0}
},
{
{0,1,1,0}, // _T-型
{1,1,0,0},
{0,0,0,0},
{0,0,0,0}
},
{
{1,1,0,0}, // 田型
{1,1,0,0},
{0,0,0,0},
{0,0,0,0}
}
};
如果希望实现用键盘控制翻转,需要做两件事情:
1.接收并响应键盘按键事件
2.在进行按键事件处理时,进行翻转
由于1比较简单,就不多说了。
对于2,其实有两种方法实现:
1.进行矩阵的转置处理(也就是右转90度),按一次键,转置一次
2.将19种变换图形也用3维数组来存放,通过数组元素的下标访问找到旋转后的形状
例如:
L型:
{
{1,0,0,0}, // L型
{1,0,0,0},
{1,1,0,0},
{0,0,0,0}
},
{
{1,1,1,0}, // ┌--型
{1,0,0,0},
{0,0,0,0},
{0,0,0,0}
},
{
{1,1,0,0}, // ┐型
{0,1,0,0},
{0,1,0,0},
{0,0,0,0}
},
{
{0,0,1,0}, // --┘型
{1,1,1,0},
{0,0,0,0},
{0,0,0,0}
},
为了方便读取,减少程序中算法上的开销(比如进行4*4矩阵的转置),
我建议你采取将19种变换图形也用3维数组来存放的方式
⑨ 用链表怎么实现俄罗斯方块
1、考虑怎么存储俄罗斯方块
俄罗斯方块的形状一共有19种类型,如果拿数组来表示的话,可能会比较会浪费空间(网上有很多实现代码)
考虑到每种方块形状的范围是4 *4的小方块,用 字模点阵的方式来存储,即设置一个4行4列的数组,元素置1即代表这个位置有小
方块,元素置0即代表这个位置无小方块,这个整个的4*4的数组组成俄罗斯方块的形状。
1000
1000
1100
0000
上述4*4来表示L形状的方块。
4*4 =16 bit 正好为short类型,所以每一个方块可以用一个short类型的数据来表示。我们把俄罗斯方块点阵的数位存在rockArray中,我们可以事先把这19种方块的字模点阵自己转化成十六进制,然后在rockArray数组的初始化时赋值进去。
但是这种方式扩展性不好,每当有一种新方块时需要改动,
所以可以写一个配置文件来表示19种方块。(RockShape.ini)
@###@###@@######1234
从配置文件中读取方块的类型的代码在(Init.h的ReadRock函数中)在下面3中解释下代码如何实现
2如何画出方块
可以使用EasyX库来画出简单的图形,
EasyX库是在VC下实现TC的简单绘图功能的一个库,这个库很容易学会(直接 网络EasyX库,里面有详细的教程)
那么如何画出方块,方块已经存储到一个short类型中了
从short中读取出,可以用一个掩码mask = 1来与short的每个bit位相与,结果为1,则画出一个小方块;
函数声明:
void DisplayRock(int rockIdx, RockLocation_t* LocatePtr, bool displayed)1
参数1:表示在数组中的下标,取出short类型的方块表示数据
参数2:表示当前坐标,即画出方块的左上角的坐标x,y
参数3:true表示画出该方块,false 表示擦除该方块。
//方块在图形窗口中的位置(即定位4*4大块的左上角坐标) typedef struct LOCATE
{ int left; int top;
} RockLocation_t;123456
3如何实现同一种类型方块的翻转,
在按‘↑’时应该翻转同一种类型的方块,
比如下面的横杆和竖杆
@###@###@###@###@@@@############****1234567891011
typedef struct ROCK
{ //用来表示方块的形状(每一个字节是8位,用每4位表示方块中的一行)
unsigned short rockShapeBits; int nextRockIndex; //下一个方块,在数组中的下标 } RockType;123456
定义一个RockType类型的数组来存储19种方块
RockType RockArray[19] = { (0, 0) };
当我们按“↑”时,把传入画方块函数DrawRock中的rockIndex变为当前方块结构体中的nextRockIndex即可。
简单解释下ReadRock函数的实现:当读取到空行的时候表示 一种方块已经读取完毕,当读取到**** 行时 表示同一种类型的方块读取完毕,具体看代码实现,代码中具体的注释
4、主要游戏实现的逻辑
贴一个预览图吧
注:上述预览图的游戏控制区和游戏显示区在Draw.h的DrawGameWindow()函数实现的
(1)在初始位置画出方块,在预览区画出下一次的方块
(2)方块有两种行为:响应键盘命令UserHitKeyBoard(),自由下落
如果敲击键盘了(w ,a ,s ,d, )空格表示暂停,如果在规定时间内没有敲击键盘的话,方块自由下落一个单位
if (kbhit()) //如果敲击键盘了 就处理按键
{
userHit = getch();
UserHitKeyBoard(userHit, &curRockIndex, &curRockLocation);
} //没有 就自动下移一个单位 :不能用else,因为可能按键不是上下左右
DWORD newtime = GetTickCount(); if (newtime - oldtime >= (unsigned int)(300) && moveAbled == TRUE)
{
oldtime = newtime;
DisplayRock(curRockIndex, &curRockLocation, false);
curRockLocation.top += ROCK_SQUARE_WIDTH; //下落一格
}1234567891011121314
(3)当方块落地(即不能下移了)时,判断是否满行,如果满行则消除,然后再判断游戏是否结束,游戏结束的话,直接退出游戏
判断满行:FullLine()函数,从最底下的一行开始判断,直到遇到一行空行,
while (count != xROCK_SQUARE_NUM ) //遇到空行 14
{
linefull = true; count = 0; for (int i = 1; i <= xROCK_SQUARE_NUM; ++i)
{ if (game_board[idx][i] == 0)
{
linefull = false; count++;
}
} if (linefull) //满行,消除当前行,更新分数
{
DelCurLine(idx);//消除满行
game_socres += 3;
UpdateSocres(game_socres);
idx++;//因为下面要减1
}
idx--;
}
(4)消除满行
将要删除的满行擦除:即将方块化成与背景色相同的,该代码为黑色
然后将上面的一行向下移,移一行删除一行,直到遇到空行
具体看代码的具体实现 game.h
void DelCurLine(int rowIdx)
(4)判断方块是否能移动
在game.h中实现
bool MoveAble(int rockIndex, RockLocation_t* currentLocatePtr, int f_direction)1
**比较当前位置的坐标(左上角)开始,能否放下rockIndex的方块。
注:f_direction为”↑”的话,则传入的rockIndex为下一个方块**
如果不能移动的话,给游戏game_board设置标记表示该位置被占有
//全局变量-游戏板的状态描述(即表示当前界面哪些位置有方块) //0表示没有,1表示有(多加了两行和两列,形成一个围墙,便于判断方块是否能够移动) int game_board[yROCK_SQUARE_NUM + 2][xROCK_SQUARE_NUM + 2] = { 0 };123
实现过程遇到的一些问题
(1)在快速下落的时候,可能方块会掉出围墙的范围内,
快速下落是使方块每次下落2个单位距离。
在判断不能下落时,使当前坐标的top即y减去一个单位的距离
(2)遇到多行满行时消除不了,
在判断满行时,循环找出满行,找出一个满行,就消除一行,然后继续判断是否满行,直到遇到空行
具体源代码的实现:【C语言】俄罗斯方块的源代码
也可以直接在GitHub下载:【C语言】俄罗斯方块的源代码
注:可能还在存在一些问题,欢迎各位大神来改正
版权声明:本文为wenqiang1208原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wenqiang1208/article/details/71244843
⑩ 玩俄罗斯方块怎么使键盘快速移动啊
一提到俄罗斯方块,许多人不由想起黑白手掌机和红白机上的方块游戏。把不断下落的七种不同形状方块左右移动、旋转、落块,最后垒成一层消除掉;落块的速度随着消掉的层数和级别越来越快,非常刺激和具有挑战性。也许有些朋友会不屑一顾,发出“Easy,太Easy的游戏了!当年我还是打方块的高手呢。”诸如此类的话。且慢!《E块冒险》虽然是一款以俄罗斯方块为主题的休闲游戏,但它是网络对战类型的,你的对手将不再是呆板迟缓、智能低下的机器。看到那些俄罗斯方块高手,有如“下雨”般的落块(顶级选手每秒落3块以上),道具魔法纷飞,几乎不用任何思考的时间,也许你的骄傲将无影无踪,剩下的只有钦佩和感叹了。 那么,高手是如何达到这样一种境界的呢?这个问题想必是许多俄罗斯方块爱好者心中共同的疑惑。除了热爱和大量的练习外,一些基本的修改和设置是必不可少的,下面就给大家介绍一下吧。 修改控制键位 均匀分布操作 一般新手玩俄罗斯方块游戏都喜欢用默认键位,即右手操作←、→方向键控制方块的左右移动,↑键控制方块旋转,↓键加速方块下落,左手操作空格键使方块直接落到底。这种默认键位如果仅仅是作为人机对战娱乐是可以的,但用在网络对战中就要吃亏。因为右手承担了大部分的操作,一只手要按3个键,而左手按一个键又相对空闲,这样操作强度分布非常不均匀,右手很累,落块速度也提不上去。实际上新手不是不想修改默认键位,更多的是不知道还可以改和怎么改,等发现需要修改的时候已经习惯了常用键位,想改已经非常困难了。如果你想水平更上一层楼,甚至成为“会当凌绝顶”一代方块高手的话,修改控制键位是必须要做的事了。 《E块冒险》中提供了非常灵活的键位修改功能,在“游戏设置”的“游戏操作”下“键盘设置”中修改,足足有15项之多,想怎么改就怎么改。 科学的操作方法是每只手控制两个键,一只手负责直接落底和旋转,另一只手负责左右移动。游戏中还可以使用道具和对指定座位号的对手攻击,所以键位尽量设置在中间的字母键上比较方便。 设置方法可根据习惯因人而异,这里给出一种常见的键位设置供参考:右手J键左移,L键右移,K键加速下落;左手键D旋转,F键群发道具,空格键落底。还有稍微复杂些带指定座位使用道具的设置,需要经过一番练习才能熟练掌握:右手J键左移,L键右移,K键快速下落,U键攻5号,I 键攻6号,O键攻7号,P键攻8号;左手D键顺时针旋转,F键逆时针旋转,S键群发道具,空格键直接落底,Q键给自己加血、W键攻2号、E键攻3号、G键攻4号。注意使用道具时键位对应座位号的选手随你的位置有所不同,例如你是1~4号位,那么1~4号其他位置上就是你的同伴,5~8号定义的键位是要攻击对手,反之亦然。 这样设置左、右手分工在团队战或混战中操作就会更加灵活从容,也不容易累,更中重要的是熟练以后速度能提升不少。开始的时候有些不习惯,一般坚持3天就能恢复以前的水平,后面就会明显感觉提高了一个档次。 巧用“超级键盘” 速度再加倍 当适应新设置练习了一段时间后,会不会感觉速度提高很多呢?不过,你可能又要觉得键盘跟不上思维了。恭喜恭喜,你的方块水平又上了个新台阶。当通过大量的练习水平达到一定程度后,各种方块摆法会形成一种无意识的条件反射,用高手们的话说“不知道为什么这么摆,完全凭感觉”。这时键盘速度就成了新的“拦路虎”,限制了水平发挥,现在可以考虑换个速度快的键盘了。 手指按下键帽后会有一个响应和延迟时间,如果缩短键盘的响应间隔时间,也就是加快反应速度,是不是操作起来更灵敏,更快速呢?现在俄罗斯方块爱好者中流行一种修改键盘电阻的阻值使键盘加速的方法。不过这种修改需要具备一定的电子知识,选择键盘也有学问,而且硬件修改后键盘速度过快,没有较长的适应过程根本控制不了,平时打字都很困难,游戏中也经常出现按一下落好几块的情况。所以,这种高速键盘适合水平已经很高的时候选用。 对于普通玩家而言,加速键盘需要一步步的适应。《E块冒险》提供了“超级键盘”的功能,可以使键盘速度随着水平提高逐步调整到所需的速率,省去硬件修改键盘的麻烦。 建议新手使用“超级键盘”时,最开始用2200档,然后再2800、3500、4000……5400逐步提高。适应键盘不要操之过急,最好每次感觉键盘慢了再提高一档。 相信通过以上的修改和一段时间的练习,研究速度和摆法的配合,你的骄傲感会重新找回。
满意请采纳