俄罗斯方块心得体会(共18篇)由网友“小学生”投稿提供,这次小编在这里给大家整理过的俄罗斯方块心得体会,供大家阅读参考。
篇1:俄罗斯方块心得体会
俄罗斯方块心得体会
俄罗斯方块实训总结
这次实训即有收获,也有失落:
1、俄罗斯方块程序勿促完成,有很多的bug,架构也有很多不合理的地方。虽然把所有的逻辑都进行的封装,但总感觉有些牵强附会。上课时,并没有讲任何的面向对象的内容,这样的代码让学生去理解实在是勉为其难。其实先让学生以面向过程的方法去编程,过一段时间再学面向对象或许对学生更为有利。 2、代码和逻辑过于复杂,一方面学生难于理解,以至于使很多的学生丧失了继续学习程序的勇气,打击了一大片。另一方面,学生敲错代码找老师解决,如果是语法错误还容易解决掉,但如果是逻辑错误就麻烦了,有时,一个加减号的错误就要花掉很多时间,这导至了教师的工作量大增。
3、实现分数显示功能非常困难(这点是我没想到的)有几种解决方案,第一种是在界面上直接画分数,但需要传递多一个画板。第二种是使用事件(这样比较合理,但太难),事件本身就很难理解了。由于使用的Timer本身是一个多线程的Timer,还需掌握多线程的知识才能做出来,我的《C#语言参考视频》还没有做到多线程,这样就变得难上加难了。但这样也有一个好处,如果能实现,能学到并理解不少的东西。 4、在做程序时一直在考虑是否应该使用静态类,说白了就是把静态类当全局变量使用。最后是决定i用。但现在感觉还是应该使用的,至少改变参数时不用写任何代码就可以马上见到效果,也可以减少几百行的代码,有效使程序减肥。
5、实训时看到每个学生都在埋头敲代码感到很欣慰,有部分同学回到宿舍还继续奋战。虽然代码完全是照视频抄的,可能不会理解到太多的东西,但至少让他们找到了学习和互助的感觉,这一点才是最重要的。
这次实训有很多不足之处,需要改进。想了一下,大概制定了初步的解决方案,首先,程序代码不超过1000行,其次,不使用面向对象的编程方法:
1、继续使用俄罗斯方块,去掉设置界面,XML存储,也就是把砖块样式和快捷键写死在程序里面。这样一半的代码就没了。另外再使用单色的砖块样式,这样就可以使用位运算实现部份逻辑,这样不但加快了程序的运行速度,算法变得简单,也减少了部份的代码。但这样做这个游戏就变得没有特点了,可玩性大大降低。而且再重做一遍这个视频好象也不太好。
制作单机俄罗斯方块游戏心得
前面说的`是创建了Piece0, Piece1,Piece2,Piece3,Piece4,Piece5,Piece6.其中变化的方块,由于游戏开始和下一个方块出现时是随机得到不同的大方块的,在定义Piece时用changes属性(Protectec List
protected Random random = new Random();
public List
//从changes中随机得到其中一种变化
int defaultChange = random.nextInt(changes.size());
this.currentIndex = defaultChange;
return changes.get(defaultChange);
}
在Piece1,Piece2,Piece3,Piece4,Piece5,Piece6类里添加下面的语句super.setSquares(getDefault());
注意了前面只说了大方块和小方块的类。特别是小方块里的Image image属性且 前面创建了各个Piece的子类。每个子类都提供一个含有image构造器。只需从文件里读取图片就可以创建一个可以下降的大方块了。下面说说创建与显示大方块。新建一个PieceCreator接口专门用于创建大方块。(注:在这里我想不出书的作者为什么创建这个接口)并未接口提供了一个PieceCreatorImpl实现类
public interface PieceCreator {
/**
* 在x和y坐标中创建一个Square对象
*/
Piece createPiece(int x,int y);
/**
*返回一个Square对象
*/
Piece getPiece();
}
为了创建一个真正带有图片的物快,很明显需要考虑的因素是:必须得到图片,为此在PieceCreatorImpl类提供了getImge(int key)方法。(关于参数key的加入待会看了后面会明白)。从文件里得到图片要有文件的读取操作。为了不用每次都去文件里读取一个Image对象,在PieceCreatorImpl里提供了一个Map类存储读取过的image对象
Private Map
但是对于Map里的图片又是从哪里来的呢?当然是读取文件的来的。所以有设计了一个ImageUtil类来读取图片
public class ImageUtil {
public static BufferedImage getImage(String imagePath) {//注意是静态方法
try {
//使用ImageIO读取图片
return ImageIO.read(new File(imagePath));
} catch (IOException e) {
//读取图片发生异常,抛出GameException
throw new GameException(“read image error”);
}
}
}
//于是map中的图片就是下面代码得来的。从map中得到图片对象,如果map中没有对应的图片对象,则创建
private Image getImage(int key) {
if(this.images.get(key)==null) {
Image s = ImageUtil.getImage(“images/square” + key+“.jpg”);
this.images.put(key,s);//
}
return this.images.get(key);
}
(个人认为把图片放入map应该单独定义一个方法)
得到了图片下面改创建把图片加入到Square里进而创建一个大方块了,注意由于文件里保留了七种不同颜色的图片(/
/总共有七种颜色的方块
private final static int COLOR_SIZE = 7;),
所以获得图片时也是提供一个在PieceCreatorImplement类里提供了random属性
(private Random random = new Random();)
来随机读取一张图片,
public Piece createPiece(int x, int y) {
//随机得到一张方块图片
Image image = getImage(random.nextInt(COLOR_SIZE));
Piece piece = initPiece(image);
return piece;
}
/**
* 初始化各个大方快,随机创建各个大方框
*/
public Piece initPiece(Image image) {
Piece piece = null;
int pieceType = random.nextInt(SQUARE_SIZE);
if(pieceType == 0) {
piece = new Piece0(image);
}else if(pieceType == 1) {
piece = new Piece1(image);
}else if(pieceType == 2) {
piece = new Piece0(image);
}else if(pieceType == 2) {
piece = new Piece3(image);
}else if(pieceType == 3) {
piece = new Piece4(image);
}else if(pieceType == 5) {
piece = new Piece5(image);
}else if(pieceType == 6) {
piece = new Piece6(image);
}
return piece;
}
需要注意的是,游戏中大方块出现的位置和移动的位置的实现是通过改变方块位置的纵横坐标来实现的,又由于实际上大方块是由小方块组成的,只要同时改变组成大方块的所有小方块的x和y 坐标就可以了,为此Piece提供了一以下方法
//让Piece对象中所有的Square对象的x坐标都加上参数x
public void setSquareXLocation(int x) {
for(int i = 0;i //得到一个变化 List for(int j = 0;j Square s = change.get(j); s.setBeginX(s.getBeginX()+x); } } } //让Piece对象中所有的Square对象的y坐标都加上参数y public void setSquareYLocation(int y) { for(int i = 0;i //从变化容器里得到各个成有不同形状的大方块的容器 List for(int j = 0;j //得到容器里的小方块 Square s = change.get(j); s.setBeginY(s.getBeginY()+y); } } }
篇2:俄罗斯方块怎么造句
俄罗斯方块怎么造句
(1) 自打我从俄罗斯留学回来,俄罗斯方块玩的比以前玩的好多了。
(2) 人生就像俄罗斯方块,你无法预知下一步,但是在这一步开始你就要为下一步做打算。
(3) 几乎无处不在的俄罗斯方块是款益智游戏,玩家操纵一系列不断下落,随机生成的四格拼板,来创建一条没有空缺的水平方块序列。
(4) 这款鞋子的`多数图案都是老的电子游戏,比如俄罗斯方块,吃豆子,超级玛丽和塞尔达。
(5) 研究人员还发现,俄罗斯方块游戏对人脑的这种保护作用可能是其所独有的;实验中还测试了另一种电玩游戏,结果发现该游戏加重了被试者的病理性重现症状。该实验是牛津大学对其类似内容项目的一次跟进研究。
(6) 借用了俄罗斯方块的经典形象,然而又把每个造型分成四个小方块单元,每个方块单元内含一个焰心。
(7) 俄罗斯方块对机器性能几乎没有什么要求,除了智力不需要投资;国人一向强调“寓教于乐”,如果说能有什么游戏的内容足够健康、有益,那一定是智力类游戏。
(8) 一个用CSHARP基于。NET环境开发的俄罗斯方块程序,全总使用面向对象的方法实现。供大家参考和学习!
(9) 过分单纯化的游戏可能像老雅达利游戏翻版或者俄罗斯方块。
(10) 我已经累得没力气抱怨多么想玩俄罗斯方块了,于是拿起妈妈放在沙发前面的封皮破旧的精装版小说读了起来。
(11) BOY,当时不知道多少人抱着黑白屏玩着经典的俄罗斯方块游戏消磨空余时间。
(12) 这是秘密,初上团的导游一般不懂得这俄罗斯方块般挤弄时间的方式。
(13) 从小霸王学习机到wii,从单一的俄罗斯方块手掌机到PSP。
(14) 豪华版打砖块,宠物版连连看,三D版俄罗斯方块……
篇3:俄罗斯方块:混乱与秩序
206月2日,世界上最流行的休闲游戏之一――俄罗斯方块迎来了它的第25个生日,25年间,电脑业和电子游戏业发生了巨大的变化:游戏画面日渐精美、音响效果更加震撼,剧情、装备愈发丰富,大型网络游戏纷纷横空出世,换代速度之快直令人瞠目结舌。
俄罗斯方块在风云争霸的游戏世界里,仅凭其“简单”就征服了无数玩家,稳稳当当坐享一杯羹,是连其开发者帕基特诺夫都未曾想到的。而他的合作伙伴,美国蓝色行星软件公司总裁亨克・罗杰斯则作此解释:俄罗斯之所以流行是因为它超越了文化界限:它没有暴力,没有意识形态,它让玩家从混乱中创造秩序。俄罗斯方块效应
俄罗斯方块问世之初,便因受到玩家们的欢迎而迅速走红:人们四处谈论的是它,工作时分心玩的是它,晚上打发时间的固定节目还是它,骨灰级的玩家们想必都还记得那个时代,因为那个时代是属于俄罗斯方块的。
这款游戏不仅被数次评为最经典的游戏之一,甚至还创造了两项世界纪录:在最多平台上运行的视频游戏;同时也是直接连累玩家“坐牢”时间最长的游戏。并由此引申出一个科学名词,用来描述玩家结束游戏后,很长一段时间内仍然在脑中思考方块翻动的现象,这就是著名的“俄罗斯方块效应(Tetris Effect)”。
玩家们沉溺于小小方块的魔力之中欲罢而不能,,一名过分沉迷的英国玩家不听机组人员的劝阻,在飞机上用手机玩俄罗斯方块,结果被判入狱4个月,走火入魔的程度可见一斑。毫无疑问,俄罗斯方块陪伴着很多人从青涩走向成熟,它使得那些没有精力和兴趣玩大型游戏的玩家们,在忙碌的生活中得到了片刻的放松和愉悦。
截至年,俄罗斯方块游戏发售了1.25亿份,受到50多个国家和地区的玩家喜爱,有超过50种语言的版本,运行在几十种游戏平台上,从掌机、街机、个人电脑,到手机和PDA。移动设备成为俄罗斯方块新的主要平台,该领域的发售量已超过7500万份,并且还在快速增长。现在俄罗斯方块网络版的北美和欧洲 上,每天有超过100万人次玩这个游戏。游戏・人生
俄罗斯方块极易上手,游戏规则更是简单得不值一提:小小的方块以不同形状随机从屏幕上方落下,玩家通过移动和旋转,使它们在屏幕底部拼出完整的一条或几条,组合完整的横条会随即消失,同时玩家得到分数奖励;没有被消除掉的方块则会不断堆积起来,一旦堆到屏幕顶端,游戏结束,
在俄罗斯方块中,我们无法预测随机落下来的下一块是什么形状,所以,纵然是此道高手也常常会陷入被动而恨得牙根痒痒:兢兢业业地把方块码好之后,后面落下来的方块形状却偏偏不合心意,甚至像是专门来搞破坏的一样,无论如何旋转都只会让之前的努力功败垂成。
这款永远没有把握、永远无法预测的游戏赢得了玩家们的心,保持魅力长达25年之久,看样子还能继续保持下去,正是应了亨克・罗杰斯的那句话,拼图的过程是“从混乱中寻找秩序”的过程,而成就感――就是它的魅力所在。这也恰好暗合了生活中我们常常遭遇的困惑。
在生活面前,我们永远不知道明天会发生什么,人们常会被这种混乱压得喘不过气来。哈佛大学心理学家吉尔伯特(Daniel Gilbert)在《纽约时报》的专栏中写道:我们大多数人之所以会夜不能寐、抽烟发泄,并不是因为道琼斯指数要再跌1000点,而是我们不知道道指会不会下跌。
不确定性让我们如此惧怕,因为不知道将要出现什么状况,那才是真正的煎熬。而应对混乱的办法之一就是加强控制力,俄罗斯方块的魅力正在于此:无论“上帝之手”扔下怎么样的一个方块,只要游戏玩家有一套自己的解决方案,并在长期的游戏中运用纯熟,那么找到秩序便不在话下。重点是,这种成就感不仅仅源自游戏,在生活中同样适用。奥卡姆的剃刀
混乱显然是生命中不可避免的一部分:季度报告有没有问题?明天会不会失业?癌症会否光顾自己和家人?人们面临各种不确定的苦恼而身陷其中,除了每天的工作时间越来越长、工作量越来越大,除了为此失眠而让事情变得更糟糕,导致肾上腺素分泌过剩造成血压升高之外,不会再有别的什么“好处”了。
用最简单的语言来解释奥卡姆剃刀定律就是:保持事情的简单性,抓住根本,解决实质。用奥卡姆自己的话来说就是:如无必要,勿增实体。千万不要人为地把事情复杂化,因为多虑是没有用的,相反更容易使我们为自己制造的麻烦来买单。所谓兵来将挡、水来土堰,说穿了就是需要从混乱中找出秩序。
如果,我们能在游戏中发现秩序,那么就如同握有一把奥卡姆的剃刀。一种秩序加上一把剃刀,在生活中也同样可以帮助我们克服对混乱的恐惧,无往而不利。现在,还在为明天的报告而忧心忡忡吗?何不深吸一口气,静下心来玩一会儿俄罗斯方块呢。
篇4:俄罗斯方块与人生作文
俄罗斯方块与人生作文
电子游戏出现不久,俄罗斯方块就出现了。它没有激烈的对抗,没有射击的快感,亦没有波折的剧情。单调的背景前,几个方块永远都在往下落,等待玩家几经旋转之后,把它们拼合在一起。
今天,电子游戏已经出现四十年了,其中不乏经典之作,然而在这时效性强,竞争激烈的圈子里,经典很快就会被新的经典所取代。人们在娱乐的大旗下,不断追求新的刺激,抛弃了旧的。唯有俄罗斯方块没有被抛弃。设计者也绝不会想到的是,小小的俄罗斯方块中居然包有着无限的可能。换句话说,那里是一个被图解的人生。
每一个小方块的出现,永远是随机的。新手能够很快熟练,但是老手也很难精通。下一步永远是随机并且无法改变的。很多游戏只要熟练或者作弊就可以必胜无敌,但是它不能。这就像人生:人生旅途上发生的一切都是随机的,没有人能够永远成功。我们只有小心翼翼去走好每一步。
每一个方块的下落,都是不可停止或者逆转的,但每一个方块的方向却是可以改变的。让方块以正确的方向下落,缝隙间就可以得到合理的穿插。如同人生的困难总是接踵而至,没有人能够阻挡。可是,如果以巧妙的方式化解,一切困难都将会变为成功的垫脚石。
当你终于将整整齐齐一行的.方块摆得满满当当时,你以为可以松一口气了,可是那整整齐齐的一行一下消失,一切有重新开始。是啊,再大的成就,再高的荣誉也终将成为过眼云烟。抬头看看,新的方块又来了。生命不息,前进的脚步又如何能够停止?
有许多人曾想在一款游戏中模拟出一个人真实的人生。但是,那永远都模拟不出来人生的全貌。然而当年无心插柳设计出的俄罗斯方块,却俨然成了一本无字的哲理书,在无尽下落的方块中,演绎着百态的人生。
篇5:书是俄罗斯方块作文
书是俄罗斯方块作文
书是一条长河,从遥远的源头流出,被历史的车轮碾过,奔腾不息地流经现在,又不可阻挡地流向未来。渊博而深沉,灵动而鲜活,传承着一代又一代的文化,因为如此,那闪烁了千秋万载的诗歌才能熠熠生辉;那屹立了几代几世的文学巨匠,才能永垂不朽。
书是一座桥,跨越了时间的鸿沟,让你和作者沟通。你可以感受到个性流淌的思想,你也可以明白作者做人处事的'种种道理,你更可以吸收作者的知识,提高自身的涵养。
书,它更是我们生活中的俄罗斯方块。也许你的生活平淡无奇,总是两点一线,但是它可以填补我们生活中的空白。
书可以带着你,飞去战乱的三国,繁荣的盛唐,踏着祖先的步伐,寻觅历史的踪迹。书也可以给你一个不同的人生,带你飞入大观园温柔富贵芳香美丽的女儿国,书将呈现那个华丽背景下的苍凉。青灯照壁人未睡,冷雨敲窗被未湿。吞金的痛,跳井的苦,年轻早逝的脆弱,青春出家的绝望。悲与怨都值得你我去慢慢地推敲和琢磨。
书还是一帖良药,它把你心里的伤愈合,痛楚也不再痛了。像一双温暖的手,抚平你的创伤,用明亮的灯照亮前方的路,用温情的火焰驱除寒冷。暴风雨来时,我会像海燕一样勇敢地飞翔。要记住只有经过千锤百炼才能变成钢铁。
书,是美好的情感。那些在书里笑书里哭的纯真友情,那些感动着身边每个人的亲情。李白把银河引入了人间,将举杯时的月光,寄托了缠绵的祝福。
书是美景,是朱自清的《春》。有着花团锦簇的希望,有着勃勃的生机。是鲁迅笔下朔北的冬天,翻腾着的絮状雪花,有着向上的精神!
书是一个个形状不同的俄罗斯方块,要是你将它好好的组合,那么一切都会变得完美而精致;要是你善于利用它,那么它将让你弥补自己的短处,让你更加的优秀。如果你不懂得分辨是非,那么它就是漏洞百出无用的垃圾。
读书吧!读好书吧!方块会越来越高,越来越充盈!
篇6:俄罗斯方块中人生哲理散文
越往后速度越快,说明游戏难度越来越大,生活中我们钻研一门学问,或者其他方面,越深入越探究就越艰苦,也就是说,高处不胜寒。
还有就是比如你攒了很久等长条的出现,结果有时出有时到死也没出,说明成功需要运气。
无论选择哪种方法玩俄罗斯方块,都和运气有直接关系。
还有一点最重要了,就是无论何种原因,最终必死无疑。就算你一直能过,也有不想玩玩不动的时候,也就是说,人必有一死。
篇7:玩俄罗斯方块游戏的作文
关于玩俄罗斯方块游戏的作文
第一次接触俄罗斯方块,那应该是小学时期了。当然,那会我还没接触过电脑,更确切的说是我连电脑是什么都不知道哈。那个时候,电脑是非常昂贵的东西,我们是不可能见到的啦。
所以,那会儿玩的是小游戏机里的俄罗斯游戏。也不知道为什么,会对这款游戏迷恋,总觉得有些魔力什么的。看着一个个的俄罗斯方块形状被拼凑得整齐如一,心里就会觉得愉悦。但是游戏机是别人的,借来玩一会儿,过后就必须还回去了。看着它被别人取走,心里非常不舍。到了长大了,渐渐忘记了自己曾经有过这样的快乐。直到有天家里住进了一个新机器—电脑。安装好网线的时候,我的内心激动万分。浏览网页,看动画,或者下载些什么软件来研究的。
某天,我觉得累了闷了。Q上有个朋友说,一起玩俄罗斯吧。我纳闷,什么是俄罗斯啊?他说,这是QQ游戏,叫俄罗斯方块。第一次接触的时候,已经忘了曾经在很小的时候玩过这款游戏。但是当打开游戏窗口,看到介绍的时候,我的大脑一下就把那些过去的回忆回放了出来。
虽说是同一款游戏,但是这毕竟是使用键盘来操控的,有着实际操作时的不同。另外,QQ里的俄罗斯方块游戏,更增添了趣味性。比如,加了给自己和别的玩家添道具,帮助自己和给别人设置障碍的新玩法。游戏中的我,是集中力非常强的时候。应该这个时候,不能分心,不然就跟不上速度。俄罗斯游戏,要的就是速度。必须符合快、准两个字。一但速度慢下来,或者拼凑方块的时候,不够准确的对准适当的位置,那么输就成了必然。
其实游戏就是一种娱乐,但是有的人却使了歪脑筋。胜负,自然是斗争的动力。有胜才会有负。不过是娱乐,却有人在游戏当中使用了外挂。这是让人痛恨不已的。本来嘛,只是为了在日常的压力中获得游戏的乐趣,和得以轻松。在外挂袭击的时候,这情绪一下子就上来了,这比输掉游戏更让人觉得郁闷。
我不知道这些人的心态是怎样,也不想去探究。总觉得吧,这世界到底还是什么样的人都会有的。只想劝一句,你们这些弄外挂的人,在游戏中得到快乐了?享受到那种与对手畅快淋漓地竞赛的愉悦了吗?肯定没有吧。坐享其成的感觉到是更像。简单一点,透彻一点,明了一点,会得到更多的东西的。比如单纯的感受由于俄罗斯游戏里带来的'竞技的那种愉快。
要提高速度,不一定用外挂的嘛。我的一个很喜欢俄罗斯方块游戏的朋友,就有个不错的方法,而且他也因此速度更快。就是使用键盘加速器。它跟外挂不同,只是提高键盘的感应速度,使方块的各项操作进行得更快。但是要控制键盘,和它的速度,就需要一定的技巧了。这个我就没能掌握好,所以还一直处于菜鸟的程度。他以前也老说我逊,没办法哈,我只是娱乐游戏间,没想过要为成为一个俄罗斯方块游戏的高手而努力去练习如何掌握键盘和速度。
其实迷恋一款游戏,自然这款游戏会有它的吸引人的地方。我对俄罗斯钟情,是因为它干脆利落,能给我一种刺激的速度感。还因为,玩久了就有感情了。
无论是做什么,都需要怀着快乐的心情。不是光为了结果而努力,而是为了过程而快乐。当然结果,也是看重的一个部分,但绝对不是最重要的。
篇8:高考满分你作文-俄罗斯方块
摘要:无论自然,还是人生,我们无一不在竞争中寻求那和谐的一点:双赢——化异中之抵触为和中之互补。《中庸》有言:“和者,天下之大本也。”但我们在累积生活的俄罗斯方块时,难免遇到相互间的积压、碰撞,但我们只要找到长短相补的地方,就一定能筑起共同的新高度。
正文:生活照的俄罗斯方块
玩过俄罗斯方块的人都明白这个道理:要想达到游戏的成功之顶,就要学会“取长补短”。游戏如此,生活又何尝不是这样?
长短脚之恋
《吕氏春秋?不广》中记载了一种前腿如鼠,后腿如兔的奇怪动物——蛰蹶,长短不一的脚使它举步维艰。但它却经常利用自己的利齿采噬植草给一种叫蛩蛩距虚的动物——它没有利齿,却有强壮的四肢,于是山火来时,蛩蛩距虚便把蛰蹶负于背上,共同逃难。
动物的生存繁衍未尝不是一种智慧,为了生存而取长补短是大自然的法则,是生活中心领神会的潜台词,更是获取成功的不二法门。
魏玛城佳话
歌德与席勒的友情是足以照彻欧洲文学史半边天空的传奇。年长成熟的歌德给了席勒安定的呵护,而年轻激越的席勒给了歌德新的创作热情,于是《浮士德》跃出水面,它的光焰穿过历史的黑暗点亮了今天的天空。
倘若没有魏玛城中的相遇、相知、相辅相成,歌德也许仍限于琐杂的政务中,而席勒也许已在困窘的生活面前湮没无闻。无法想象,没有他们,十九世纪的文化星空将会黯淡到何种地步。更无法想象,他们若是走上互相牵绊的歧途——毕竟,天才与天才相遇总不乏竞争——历史又会是如何面目的 篇章。
结语:异种求和
翻看着生活的札记,顿悟:
无论自然,还是人生,我们无一不在竞争中寻求那和谐的一点:双赢——化异中之抵触为和中之互补。《中庸》有言:“和者,天下之大本也。”但我们在累积生活的俄罗斯方块时,难免遇到相互间的积压、碰撞,但我们只要找到长短相补的地方,就一定能筑起共同的新高度。就会如朱熹与张栻一样,“相与博约,又大进焉”。
玫瑰与花刺相遇,各自告别了俗艳与尖刻,成就了傲视群芳的铿锵战将。
乔丹与皮蓬相遇,各自告别了独角戏与狂傲腔,成就了历史上的神话公牛。
你与我在生活中相遇,请告别猜忌与功名,成就双赢的和谐 篇章,垒起更高的人生峰塔吧!
篇9:C语言编写的俄罗斯方块
Tc2.0中怎么样设置图形显示?
Tc2.0中有两种显示模式,一种是我们所熟知的字符模式,另一种是图形模式,在字符模式下只能显式字符,如ASCII字符。一般是显示25
行,每行80个字符。程序缺省的是字符模式。在字符模式下不能显式图形和进行绘图操作。要想进行图形显示和绘图操作,必须切换到图形模
式下。
Tc2.0中用initgraph函数可以切换到图形模式,用closegraph()可以从图形模式切换回字符模式。initgraph()和closegraph()都是图形
函数,使用图形函数必须包括头文件graphics.h。
void far initgraph(int far *graphdriver,int far *graphmode,char far *pathtodriver);graphdriver是上涨指向图形驱动序号变量的指针;graphmode是在graphdriver选定后,指向图形显示模式序号变量的指针。pathtodriver表示存放图形驱动文件的路径。
Tc2.0中有多种图形驱动,每种图形驱动下又有几种图形显示模式。在我的程序中图形驱动序号为VGA,图形显示模式序号为VGAHI。这是一种分辨率为640*480(从左到右坐标依次为0-639,从上到下坐标依次为0-479),能够显示16种颜色的图形模式。别的图形驱动序号和图形显示模式序号,可以从手册或联机帮助中找到。
pathtodriver指示存放图形驱动文件的路径。图形驱动序号不同,图形驱动文件也不同。序号为VGA图形驱动对应egavga.bgi这个图形驱动文件。egavga.bgi一般在Tc目录下。
void far closegraph(void);
没有参数,从图形模式直接返回字符模式。
initgraph()和closegraph()的常用用法如下:
int gdriver = VGA, gmode=VGAHI, errorcode;
/* initialize graphics mode */
initgraph(&gdriver, &gmode, e:tc2);
/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
{
printf(Graphics error: %sn, grapherrormsg(errorcode));
printf(Press any key to halt:);
getch();
exit(1); /* return with error code */
}
/* return to text mode */
closegraph();
Tc2.0中常用图形函数的用法?
在这里讲几个游戏中用到的绘图用的图形函数:
setcolor();
line();
rectangle();
settextjustify();
outtextxy();
setfillstyle();
bar();
void far setcolor(int color);
设置画线、画框和在图形模式下显示文字的当前颜色。这个函数将影响line()、rectangle()和outtextxy()函数绘图的颜色。
color可以取常的颜色常量:
BLACK ? 0
BLUE ? 1
GREEN ? 2
CYAN ? 3
RED ? 4
MAGENTA ? 5
BROWN ? 6
LIGHTGRAY ? 7
DARKGRAY ? 8
LIGHTBLUE ? 9
LIGHTGREEN ?10
LIGHTCYAN ?11
LIGHTRED ?12
LIGHTMAGENTA ?13
YELLOW ?14
WHITE ?15
void far line(int x1,int y1,int x2,int y2);
用当前颜色从(x1,y1)画一条到(x2,y2)的线段,
void far rectangle(int left,int top,int right,int bottom);
用当前颜色画一个左上角为(left,top)、右下角为(right,bottom)的矩形框。
void far settextjustify(int horz,int vert);
设置图形模式下文字输出的对齐方式。主要影响outtextxy()函数。
horiz和vert可取如下枚举常量:
horiz ?LEFT_TEXT ? 0 ?Left-justify text
?CENTER_TEXT ? 1 ?Center text
?RIGHT_TEXT ? 2 ?Right-justify text
vert ?BOTTOM_TEXT ? 0 ?Justify from bottom
?CENTER_TEXT ? 1 ?Center text
?TOP_TEXT ? 2 ?Justify from top
void far outtextxy(int x,int y,char * textstring);
在(x,y)处用当前字体(缺省的字体是DEFAULT_FONT)显示字符串textstring,字符串的对齐方式由settextjustify()指定。
void far setfillstyle(int pattern,int color);
设置图形的填充模式和填充颜色,主要影响bar()等函数。
pattern一般取枚举常量值SOLID_FILL,color的取值与setcolor(int color)中color的取值范围相同。
介绍完了前面两个问题,现在来写一个程序。这个程序演示前了面所介绍的几个图形函数。
程序prog1.c
怎样获取I盘输入?
在Tc2.0中有一个处理键盘输入的函数bioskey();
int bioskey(int cmd);
当cmd为1时,bioskey()检测是否有键按下。没有键按下时返回0;有键按下时返回按键码(任何按键码都不为0),但此时并不将检测到的按
键码从键盘缓冲队列中清除。
当cmd为0时,bioskey()返回键盘缓冲队列中的按键码,并将此按键码从键盘缓冲队列中清除。如果键盘缓冲队列为空,则一直等到有键按
下,才将得到的按键码返回。
Escape键的按键码为0x11b,下面的小程序可以获取按键的按键码。
for (;;)
{
key=bioskey(0); /* wait for a keystroke */
printf(0x%xn,key);
if (key==0x11b) break; /* Escape */
}
常用按键的按键码如下:
#define VK_LEFT 0x4b00
#define VK_RIGHT 0x4d00
#define VK_DOWN 0x5000
#define VK_UP 0x4800
#define VK_HOME 0x4700
#define VK_END 0x4f00
#define VK_SPACE 0x3920
#define VK_ESC 0x011b
#define VK_ENTER 0x1c0d
完整的程序请参见prog2.c、prog3.c。
prog2.c获取按键的按键码,按Escape键退出程序。
prog3.c根据不同的按键进行不同的操作,按Escape键退出程序。
怎样控制方块的移动?
方块移动的实现很简单,将方块原来的位置用背景色画一个同样大小的方块,将原来的方块涂去。然后在新的位置上重新绘制方块就可以
篇10:生活中的俄罗斯方块作文
生活中的俄罗斯方块作文
玩过俄罗斯方块的人都明白这个道理:要想达到游戏的成功之顶,就要学会“取长补短”。游戏如此,生活又何尝不是这样?
长短脚之恋
《吕氏春秋·不广》中记载了一种前腿如鼠,后腿如兔的奇怪动物——蛰蹶,长短不一的脚使它举步维艰。但它却经常利用自己的利齿采噬植草给一种叫蛩蛩距虚的动物——它没有利齿,却有强壮的四肢,于是山火来时,蛩蛩距虚便把蛰蹶负于背上,共同逃难。
动物的生存繁衍未尝不是一种智慧,为了生存而取长补短是大自然的法则,是生活中心领神会的潜台词,更是获取成功的不二法门。
魏玛城佳话
歌德与席勒的友情是足以照彻欧洲文学史半边天空的传奇。年长成熟的歌德给了席勒安定的呵护,而年轻激越的席勒给了歌德新的创作热情,于是《浮士德》跃出水面,它的光焰穿过历史的黑暗点亮了今天的天空。
倘若没有魏玛城中的`相遇、相知、相辅相成,歌德也许仍限于琐杂的政务中,而席勒也许已在困窘的生活面前湮没无闻。无法想象,没有他们,十九世纪的文化星空将会黯淡到何种地步。更无法想象,他们若是走上互相牵绊的歧途——毕竟,天才与天才相遇总不乏竞争——历史又会是如何面目的篇章。
结语:异种求和
翻看着生活的札记,顿悟:
无论自然,还是人生,我们无一不在竞争中寻求那和谐的一点:双赢——化异中之抵触为和中之互补。《中庸》有言:“和者,天下之大本也。”但我们在累积生活的俄罗斯方块时,难免遇到相互间的积压、碰撞,但我们只要找到长短相补的地方,就一定能筑起共同的新高度。就会如朱熹与张栻一样,“相与博约,又大进焉”。
玫瑰与花刺相遇,各自告别了俗艳与尖刻,成就了傲视群芳的铿锵战将。
乔丹与皮蓬相遇,各自告别了独角戏与狂傲腔,成就了历史上的神话公牛。
你与我在生活中相遇,请告别猜忌与功名,成就双赢的和谐篇章,垒起更高的人生峰塔吧!
篇11:俄罗斯方块迷-贺小雨作文
俄罗斯方块迷-贺小雨作文
说起罗斯方块方块和小雨,那可真是一个奇迹。那是一个星期一,我中午睡不着,就悄悄的拿出手机,挽起了俄罗斯方块,正巧,被同样也睡不着的.小雨给逮个正找。于是,她吵着要玩俄罗斯方块。我不给她玩,她就很阴险的沉着脸对我说:“你要是不给我玩,我就告发老师!”我怕呀,所以就只能忍痛割爱,把手机给她玩了……
“讨厌,才玩了10分就死掉了……”小雨又一次发出了“扰人清闲”的抱怨声。(好像据我统计,她已经抱怨了将近“100”来次了……)于是,我暗爽:哈哈,知道自己的水平了吧,跟我比,差远了!这是小雨把手机还给了我,最后还嘟囔了一句:“什么破手机啊,烂的死……”我晕过去了。
从这一天起,她就立誓要胜过我,天天抱着我的手机,玩啊玩。过了一个星期,中午,小雨又来向我要手机了,我心想:怎么样了?看看小雨水平有没有提高了?于是,我主动提出要跟她比赛,不过这一次,我没那么幸运了,小雨的水平已经赶上了我,都跟我“相提并论”了!她终于使航天不负有心人啊,最后,小雨终于胜过了我,还乐呵呵的说了一句:“ 这个手机真好!……”我顿时,人仰马翻,不省人事了……
就这样,小雨满满的喜欢上了俄罗斯方块,现在几乎每天都在玩,哎,看来,她已经走火入魔了……
俄罗斯方块迷――贺小雨作文450字小学生作文(中国大学网)
篇12:生活中的俄罗斯方块作文
玩过俄罗斯方块的人都明白这个道理:要想达到游戏的成功之顶,就要学会“取长补短”。游戏如此,生活又何尝不是这样?
长短脚之恋
《吕氏春秋不广》中记载了一种前腿如鼠,后腿如兔的奇怪动物——蛰蹶,长短不一的脚使它举步维艰。但它却经常利用自己的利齿采噬植草给一种叫蛩蛩距虚的动物——它没有利齿,却有强壮的四肢,于是山火来时,蛩蛩距虚便把蛰蹶负于背上,共同逃难。
动物的生存繁衍未尝不是一种智慧,为了生存而取长补短是大自然的法则,是生活中心领神会的潜台词,更是获取成功的不二法门。
魏玛城佳话
歌德与席勒的友情是足以照彻欧洲文学史半边天空的传奇。年长成熟的歌德给了席勒安定的呵护,而年轻激越的席勒给了歌德新的创作热情,于是《浮士德》跃出水面,它的光焰穿过历史的黑暗点亮了今天的天空。
倘若没有魏玛城中的相遇、相知、相辅相成,歌德也许仍限于琐杂的政务中,而席勒也许已在困窘的生活面前湮没无闻。无法想象,没有他们,十九世纪的文化星空将会黯淡到何种地步。更无法想象,他们若是走上互相牵绊的歧途——毕竟,天才与天才相遇总不乏竞争——历史又会是如何面目的篇章。
结语:异种求和
翻看着生活的札记,顿悟:无论自然,还是人生,我们无一不在竞争中寻求那和谐的一点:双赢——化异中之抵触为和中之互补。《中庸》有言:“和者,天下之大本也。”但我们在累积生活的俄罗斯方块时,难免遇到相互间的积压、碰撞,但我们只要找到长短相补的地方,就一定能筑起共同的新高度。就会如朱熹与张栻一样,“相与博约,又大进焉”。
玫瑰与花刺相遇,各自告别了俗艳与尖刻,成就了傲视群芳的铿锵战将。
乔丹与皮蓬相遇,各自告别了独角戏与狂傲腔,成就了历史上的神话公牛。
你与我在生活中相遇,请告别猜忌与功名,成就双赢的和谐篇章,垒起更高的人生峰塔吧!
篇13:生活中的俄罗斯方块作文
玩过俄罗斯方块的人都明白这个道理:要想达到游戏的成功之顶,就要学取长补短。游戏如此,生活又何尝不是这样?
长短脚之恋
《吕氏春秋·不广》中记载了一种前腿如鼠、后腿如兔的奇怪动物——蛰蹶,长短不一的脚使它举步维艰。但它却经常利用自己的利齿采噬植草给一种叫蛩蛩距虚的动物——它没有利齿,却有强壮的四肢,于是山火来时,蛩蛩距虚便把蛰蹶负于背上,共同逃难。
动物的生存繁衍未尝不是一种智慧,为了生存而取长补短是大自然的法则,是生活这部戏剧的潜台词,更是获取成功的不二法门。
魏玛城佳话
歌德与席勒的友情是足以照彻欧洲文学史的半边天空。年长成熟的歌德给了席勒安定与呵护,而年轻激越的席勒给了歌德新的创作热情,于是《浮士德》跃出水面,它的光焰穿过历史的黑暗点亮了今天的天空。
倘若没有魏玛城中的相遇、相知,歌德也许仍陷于繁琐的政务中,而席勒也许已在困窘的生活面前湮没无闻。无法想象,没有他们,十九世纪的文化星空将会暗淡到何种地步。更无法想象,他们若是走上互相牵绊的歧途——毕竟,天才与天才相遇总不乏竞争——历史又会是怎样的面目。
异种求和
翻看着生活的札记,顿悟:无论自然,还是人生,我们无一不竞争中寻求那和谐的一点:双赢——化异中之抵触为同中之互补。《中庸》有言:“和者,天下之大本也。”但我们在累积生活的俄罗斯方块时,难免会遇到相互间的积压、碰撞,但我们只要找到长短相补的地方,就一定能筑起共同的新高度。就会如朱熹与张栻一样,“相与博约,又大进焉”。
玫瑰与花刺相遇,各自告别了俗艳与尖刻,成就了傲视群芳的铿锵战将。
乔丹与皮蓬相遇,各自告别了独角戏与狂傲腔,成就了历史上的神话公牛。
你与我在生活中相遇,请告别猜忌与功名,成就双赢的和谐篇章,垒起更高的人生宝塔吧!
篇14:生活中的俄罗斯方块作文700字
生活中的俄罗斯方块作文700字
长短脚之恋
《吕氏春秋不广》中记载了一种前腿如鼠,后腿如兔的奇怪动物――蛰蹶,长短不一的脚使它举步维艰。但它却经常利用自己的利齿采噬植草给一种叫蛩蛩距虚的动物――它没有利齿,却有强壮的四肢,于是山火来时,蛩蛩距虚便把蛰蹶负于背上,共同逃难。
动物的生存繁衍未尝不是一种智慧,为了生存而取长补短是大自然的法则,是生活中心领神会的潜台词,更是获取成功的不二法门。
魏玛城佳话
歌德与席勒的友情是足以照彻欧洲文学史半边天空的传奇。年长成熟的'歌德给了席勒安定的呵护,而年轻激越的席勒给了歌德新的创作热情,于是《浮士德》跃出水面,它的光焰穿过历史的黑暗点亮了今天的天空。
倘若没有魏玛城中的相遇、相知、相辅相成,歌德也许仍限于琐杂的政务中,而席勒也许已在困窘的生活面前湮没无闻。无法想象,没有他们,十九世纪的文化星空将会黯淡到何种地步。更无法想象,他们若是走上互相牵绊的歧途――毕竟,天才与天才相遇总不乏竞争――历史又会是如何面目的篇章。
异种求和
翻看着生活的札记,顿悟:无论自然,还是人生,我们无一不在竞争中寻求那和谐的一点:双赢――化异中之抵触为和中之互补。《中庸》有言:“和者,天下之大本也。”但我们在累积生活的俄罗斯方块时,难免遇到相互间的积压、碰撞,但我们只要找到长短相补的地方,就一定能筑起共同的新高度。
玫瑰与花刺相遇,各自告别了俗艳与尖刻,成就了傲视群芳的铿锵战将。
乔丹与皮蓬相遇,各自告别了独角戏与狂傲腔,成就了历史上的神话公牛。
你与我在生活中相遇,请告别猜忌与功名,成就双赢的和谐篇章,垒起更高的人生峰塔吧!
篇15:你知道俄罗斯方块经典在哪里嘛?
形状各异的方块从上方落下,你要做的便是调整好它们下落的姿态,完整地摆放,这是一个很简单的前提规则,但再衬上一段恼人却能让你听上瘾电子背景音乐后(改变自俄国民歌:Korobeiniki ;译者:中译“货郎”,在线收听地址:Http://www.xiami.com/song/showcollect/id/8913735),游戏娱乐产业迎来了一场变革。
自从1986年俄罗斯方块出现在世人面前以来,这个简简单单的游戏已经占据了人们不计其数的业余时间。从那时开始,我们见证了手持游戏终端的风靡,见证了游戏界的一桩桩盛事:从《使命召唤》到《魔兽世界》。然而像俄罗斯方块这样的益智游戏依旧在我们心中留有特别的印记。它为何如此令人痴迷?
作家杰弗里(Jeffrey Goldsmith)对此也很感兴趣,他写过一篇著名的文章,更是直接质问道游戏的创造者阿列克谢(Alexey Pajitnov)是否发明了“一种电子 ”。有些玩家声称玩过数小时的游戏后做梦都能梦到形形色色的方块从天上掉下,或是走在街上都感觉一幢幢大楼要拼接在一块儿---这种现象被称为“方块效应”。这是它的一种精神强力,甚至有个建议说游戏可以用来阻止PTSD(创伤后应激失调)病人的幻觉重现。
我也有过一段“方块时期”,那时我是个青少年,本不应该花那么多时间在摆放那些下落的方块上。最近我便开始想,为什么像诸如俄罗斯方块这一类的游戏会这么令人着迷?我的结论是:这和一种根深蒂固的想把凌乱变有序的心理驱动有关。
人类的许多游戏项目都基于这种“使之有序”的驱动。比方说斯诺克,或者你不是英国人而称为撞球,就是一个好例子:第一个人把把桌面搞得一团糟(开球),然后选手按一定的顺序将球依次击入袋中。俄罗斯方块则在这个基础法则上增置了计算机引擎---不仅玩家要忙着整理方块,电脑也不停地从上空丢下不合时宜的形状让你乱上加乱。这看起来倒像是一个无意义游戏的完美例子,它不会教我们什么,不会拓展社交面,不能锻炼体力,但它就是能一直让我们一直这么痴迷。
心理学上有种现象叫蔡加尼克效应(Zeigarnik Effect),以俄国心理学家蔡加尼克(Bluma Zeigarnik)命名。上世纪30年代,蔡加尼克在一家热闹的咖啡馆里听说这里的服务员对点菜单有着惊人的记忆力,不过只能持续到食物被送到顾客的桌上为止。他们可以记得住一伙12个人中每位的食物和饮料,可是一递上桌旋即便忘;并且再也回想不起刚刚还记得清清楚楚的各类名目了,
管理资料
蔡加尼克把所有这类“未完成的事情记得牢靠”问题冠以自己的名字。
蔡加尼克效应也是机智问答类节目广受欢迎的一个原因。你也许不会注意BBC在哪一年创立;至少有一家麦当劳的国家占世界百分之几,但这些问题若是有人问过你,你便会奇怪地记住了答案。(顺便说说,答案是1927和61%)未解决的问题会悬在我们脑海中,直到它们被完全解答为止。
游戏原理
俄罗斯方块通过制造无止境的方块来保持我们的注意力。游戏中的每一步都能让我们清理部分的混乱,不留空白地填满一行或者多行让方块消除,但同时也可能自己造出新的麻烦、未完成的混乱。这种“不彻底的解决”和“新激发的麻烦”组成的链条很容易就伸延开来,耗费几个小时;就像每次不停地挠痒然后获得满足。
俄罗斯方块之所以巧妙还有一个原因:未完成的任务永远伴随着潜在的解决方案,方块形色各异从天而降,用得好它是解决之道,反之则是麻烦之源。俄罗斯方块把这个奇妙的矛盾可视化了,通过简单的五个控制键就可以去尝试寻找出路了(左移、右移、左转、右转、快下)。对方块的玩家研究发现,人们偏向于先旋转方块再打算如何适宜的放置。当然,用何种方式都可以,不过俄罗斯方块高明之处还在于它创造了一个手速比脑速快的游戏世界---这又是它如此迷人的一个原因。和生活不同,俄罗斯方块将我们寻找解决之道的洞察力和付诸行动的具体方式之间直接建立了联系。
蔡加尼克效应描述了一个心理现象,但没有解释它发生的原因。这也是心理学家的一个惯用伎俩,他们通过简单地给出一个命名,然后仿佛已然揭开了人类思维的谜题。事实上他们所作的就是想个名字而已,并未解决它。蔡氏效应存在的一个合乎的解释是我们的大脑会根据所追寻的目标进行重组,如果一些目标达到,大脑便转而关注其他的事宜了。
问答类小游戏就利用了这种目标定向机制,通过使我们在挫败感和成就感之间游走的方式。俄罗斯方块又多走了一边,建立了一条由挫败感和满足感环环相扣组成的无尽长链。就像一只聪明的寄生虫,方块游戏充分利用了大脑对完成一件事所反应出的满足感,并且在我们身上施用。
不过我们也乐于这样,享受着有序摆放行色各异的方块带来的短暂快感,即便我们之中有一两个聪明人会知道这游戏根本毫无意义。但好像所有游戏都这样,不是吗?
俄罗斯心理学研究:关注语言意识与跨文化
失恋了就去玩治愈系俄罗斯方块吧
篇16:shell版俄罗斯方块(转摘)Unix系统
shell版俄罗斯方块(转摘) 我所见的最强的shell #!/bin/bash # Tetris Game # 10.21. xhchen #颜色定义 cRed=1 cGreen=2 cYellow=3 cBlue=4 cFuchsia=5 cCyan=6 cWhite=7 colorTable=($cRed $cGreen $cYellow $cBlue $cFuchsia $cCyan $cWhite) #位置和
shell版俄罗斯方块(转摘)
我所见的最强的shell
#!/bin/bash
# Tetris Game
# 10.21.2003 xhchen
#颜色定义
cRed=1
cGreen=2
cYellow=3
cBlue=4
cFuchsia=5
cCyan=6
cWhite=7
colorTable=($cRed $cGreen $cYellow $cBlue $cFuchsia $cCyan $cWhite)
#位置和大小
iLeft=3
iTop=2
((iTrayLeft = iLeft + 2))
((iTrayTop = iTop + 1))
((iTrayWidth = 10))
((iTrayHeight = 15))
#颜色设置
cBorder=$cGreen
cScore=$cFuchsia
cScoreValue=$cCyan
#控制信号
#改游戏使用两个进程,一个用于接收输入,一个用于游戏流程和显示界面;
#当前者接收到上下左右等按键时,通过向后者发送signal的方式通知后者,
sigRotate=25
sigLeft=26
sigRight=27
sigDown=28
sigAllDown=29
sigExit=30
#七中不同的方块的定义
#通过旋转,每种方块的显示的样式可能有几种
box0=(0 0 0 1 1 0 1 1)
box1=(0 2 1 2 2 2 3 2 1 0 1 1 1 2 1 3)
box2=(0 0 0 1 1 1 1 2 0 1 1 0 1 1 2 0)
box3=(0 1 0 2 1 0 1 1 0 0 1 0 1 1 2 1)
box4=(0 1 0 2 1 1 2 1 1 0 1 1 1 2 2 2 0 1 1 1 2 0 2 1 0 0 1 0 1 1 1 2)
box5=(0 1 1 1 2 1 2 2 1 0 1 1 1 2 2 0 0 0 0 1 1 1 2 1 0 2 1 0 1 1 1 2)
box6=(0 1 1 1 1 2 2 1 1 0 1 1 1 2 2 1 0 1 1 0 1 1 2 1 0 1 1 0 1 1 1 2)
#所有其中方块的定义都放到box变量中
box=($ $ $ $ $ $ $)
#各种方块旋转后可能的样式数目
countBox=(1 2 2 2 4 4 4)
#各种方块再box数组中的偏移
ffsetBox=(0 1 3 5 7 11 15)
#每提高一个速度级需要积累的分数
iScoreEachLevel=50 #be greater than 7
#运行时数据
sig=0 #接收到的signal
iScore=0 #总分
iLevel=0 #速度级
boxNew= #新下落的方块的位置定义
cBoxNew=0 #新下落的方块的颜色
iBoxNewType=0 #新下落的方块的种类
iBoxNewRotate=0 #新下落的方块的旋转角度
boxCur=() #当前方块的位置定义
cBoxCur=0 #当前方块的颜色
iBoxCurType=0 #当前方块的种类
iBoxCurRotate=0 #当前方块的旋转角度
boxCurX=-1 #当前方块的x坐标位置
boxCurY=-1 #当前方块的y坐标位置
iMap=() #背景方块图表
#初始化所有背景方块为-1, 表示没有方块
for ((i = 0; i < iTrayHeight * iTrayWidth; i++)); do iMap[$i]=-1; done
#接收输入的进程的主函数
function RunAsKeyReceiver()
{
local pidDisplayer key aKey sig cESC sTTY
pidDisplayer=
aKey=(0 0 0)
cESC=`echo -ne “”`
cSpace=`echo -ne “”`
#保存终端属性。在read -s读取终端键时,终端的属性会被暂时改变。
#如果在read -s时程序被不幸杀掉,可能会导致终端混乱,
#需要在程序退出时恢复终端属性。
sTTY=`stty -g`
#捕捉退出信号
trap “MyExit;” INT TERM
trap “MyExitNoSub;” $sigExit
#隐藏光标
echo -ne “[?25l”
while (( 1 ))
do
#读取输入。注-s不回显,-n读到一个字符立即返回
read -s -n 1 key
aKey[0]=$
aKey[1]=$
aKey[2]=$key
sig=0
#判断输入了何种键
if [[ $key == $cESC && $ == $cESC ]]
then
#ESC键
MyExit
elif [[ $ == $cESC && $ == “[” ]]
then
if [[ $key == “A” ]]; then sig=$sigRotate #<向上键>向上键>
elif [[ $key == “B” ]]; then sig=$sigDown #<向下键>向下键>
elif [[ $key == “D” ]]; then sig=$sigLeft #<向左键>向左键>
elif [[ $key == “C” ]]; then sig=$sigRight #<向右键>向右键>
fi
elif [[ $key == “W” || $key == “w” ]]; then sig=$sigRotate #W, w
elif [[ $key == “S” || $key == “s” ]]; then sig=$sigDown #S, s
elif [[ $key == “A” || $key == “a” ]]; then sig=$sigLeft #A, a
elif [[ $key == “D” || $key == “d” ]]; then sig=$sigRight #D, d
elif [[ “[$key]” == “[]” ]]; then sig=$sigAllDown #空格键
elif [[ $key == “Q” || $key == “q” ]] #Q, q
then
MyExit
fi
if [[ $sig != 0 ]]
then
#向另一进程发送消息
kill -$sig $pidDisplayer
fi
done
}
#退出前的恢复
function MyExitNoSub()
{
local y
#恢复终端属性
stty $sTTY
((y = iTop + iTrayHeight + 4))
#显示光标
echo -e “[?25h[$;0H”
exit
}
function MyExit()
{
#通知显示进程需要退出
kill -$sigExit $pidDisplayer
MyExitNoSub
}
#处理显示和游戏流程的主函数
function RunAsDisplayer()
{
local sigThis
InitDraw
#挂载各种信号的处理函数
trap “sig=$sigRotate;” $sigRotate
trap “sig=$sigLeft;” $sigLeft
trap “sig=$sigRight;” $sigRight
trap “sig=$sigDown;” $sigDown
trap “sig=$sigAllDown;” $sigAllDown
trap “ShowExit;” $sigExit
while (( 1 ))
do
#根据当前的速度级iLevel不同,设定相应的循环的次数
for ((i = 0; i < 21 - iLevel; i++))
do
sleep 0.02
sigThis=$sig
sig=0
#根据sig变量判断是否接受到相应的信号
if ((sigThis == sigRotate)); then BoxRotate; #旋转
elif ((sigThis == sigLeft)); then BoxLeft; #左移一列
elif ((sigThis == sigRight)); then BoxRight; #右移一列
elif ((sigThis == sigDown)); then BoxDown; #下落一行
elif ((sigThis == sigAllDown)); then BoxAllDown; #下落到底
fi
done
#kill -$sigDown $$
BoxDown #下落一行
done
}
#BoxMove(y, x),测试是否可以把移动中的方块移到(x, y)的位置, 返回0则可以, 1不可以
function BoxMove()
{
local j i x y xTest yTest
yTest=
xTest=
for ((j = 0; j < 8; j += 2))
do
((i = j + 1))
((y = $ + yTest))
((x = $ + xTest))
if (( y < 0 || y >= iTrayHeight || x < 0 || x >= iTrayWidth))
then
#撞到墙壁了
return 1
fi
if ((${iMap[y * iTrayWidth + x]} != -1 ))
then
#撞到其他已经存在的方块了
return 1
fi
done
return 0;
}
#将当前移动中的方块放到背景方块中去,
#并计算新的分数和速度级。(即一次方块落到底部)
function Box2Map()
{
local j i x y xp yp line
#将当前移动中的方块放到背景方块中去
for ((j = 0; j < 8; j += 2))
do
((i = j + 1))
((y = $ + boxCurY))
((x = $ + boxCurX))
((i = y * iTrayWidth + x))
iMap[$i]=$cBoxCur
done
#消去可被消去的行
line=0
for ((j = 0; j < iTrayWidth * iTrayHeight; j += iTrayWidth))
do
for ((i = j + iTrayWidth - 1; i >= j; i--))
do
if (($ == -1)); then break; fi
done
if ((i >= j)); then continue; fi
((line++))
for ((i = j - 1; i >= 0; i--))
do
((x = i + iTrayWidth))
iMap[$x]=$
done
for ((i = 0; i < iTrayWidth; i++))
do
iMap[$i]=-1
done
done
if ((line == 0)); then return; fi
#根据消去的行数line计算分数和速度级
((x = iLeft + iTrayWidth * 2 + 7))
((y = iTop + 11))
((iScore += line * 2 - 1))
#显示新的分数
echo -ne “[1m[3$m[$;$H$ ”
if ((iScore % iScoreEachLevel < line * 2 - 1))
then
if ((iLevel < 20))
then
((iLevel++))
((y = iTop + 14))
#显示新的速度级
echo -ne “[3$m[$;$H$ ”
fi
fi
echo -ne “[0m”
#重新显示背景方块
for ((y = 0; y < iTrayHeight; y++))
do
((yp = y + iTrayTop + 1))
((xp = iTrayLeft + 1))
((i = y * iTrayWidth))
echo -ne “[$;$H”
for ((x = 0; x < iTrayWidth; x++))
do
((j = i + x))
if (($ == -1))
then
echo -ne “ ”
else
echo -ne “[1m[7m[3$m[4$m[][0m”
fi
done
done
}
#下落一行
function BoxDown()
{
local y s
((y = boxCurY + 1)) #新的y坐标
if BoxMove $y $boxCurX #测试是否可以下落一行
then
s=“`DrawCurBox 0`” #将旧的方块抹去
((boxCurY = y))
s=“$s`DrawCurBox 1`” #显示新的下落后方块
echo -ne $s
else
#走到这儿, 如果不能下落了
Box2Map #将当前移动中的方块贴到背景方块中
RandomBox #产生新的方块
fi
}
#左移一列
function BoxLeft()
{
local x s
((x = boxCurX - 1))
if BoxMove $boxCurY $x
then
s=`DrawCurBox 0`
((boxCurX = x))
s=$s`DrawCurBox 1`
echo -ne $s
fi
}
#右移一列
function BoxRight()
{
local x s
((x = boxCurX + 1))
if BoxMove $boxCurY $x
then
s=`DrawCurBox 0`
((boxCurX = x))
s=$s`DrawCurBox 1`
echo -ne $s
fi
}
#下落到底
function BoxAllDown()
{
local k j i x y iDown s
iDown=$iTrayHeight
#计算一共需要下落多少行
for ((j = 0; j < 8; j += 2))
do
((i = j + 1))
((y = $ + boxCurY))
((x = $ + boxCurX))
for ((k = y + 1; k < iTrayHeight; k++))
do
((i = k * iTrayWidth + x))
if (( $ != -1)); then break; fi
done
((k -= y + 1))
if (( $iDown > $k )); then iDown=$k; fi
done
s=`DrawCurBox 0` #将旧的方块抹去
((boxCurY += iDown))
s=$s`DrawCurBox 1` #显示新的下落后的方块
echo -ne $s
Box2Map #将当前移动中的方块贴到背景方块中
RandomBox #产生新的方块
}
#旋转方块
function BoxRotate()
{
local iCount iTestRotate boxTest j i s
iCount=$ #当前的方块经旋转可以产生的样式的数目
#计算旋转后的新的样式
((iTestRotate = iBoxCurRotate + 1))
if ((iTestRotate >= iCount))
then
((iTestRotate = 0))
fi
#更新到新的样式, 保存老的样式(但不显示)
for ((j = 0, i = ($ + $iTestRotate) * 8; j < 8; j++, i++))
do
boxTest[$j]=$
boxCur[$j]=$
done
if BoxMove $boxCurY $boxCurX #测试旋转后是否有空间放的下
then
#抹去旧的方块
for ((j = 0; j < 8; j++))
do
boxCur[$j]=$
done
s=`DrawCurBox 0`
#画上新的方块
for ((j = 0, i = ($ + $iTestRotate) * 8; j < 8; j++, i++))
do
boxCur[$j]=$
done
s=$s`DrawCurBox 1`
echo -ne $s
iBoxCurRotate=$iTestRotate
else
#不能旋转,还是继续使用老的样式
for ((j = 0; j < 8; j++))
do
boxCur[$j]=$
done
fi
}
#DrawCurBox(bDraw), 绘制当前移动中的方块, bDraw为1, 画上, bDraw为0, 抹去方块,
function DrawCurBox()
{
local i j t bDraw sBox s
bDraw=
s=“”
if (( bDraw == 0 ))
then
sBox=“”
else
sBox=“[]”
s=$s“[1m[7m[3$m[4$m”
fi
for ((j = 0; j < 8; j += 2))
do
((i = iTrayTop + 1 + $ + boxCurY))
((t = iTrayLeft + 1 + 2 * (boxCurX + ${boxCur[$j + 1]})))
#[y;xH, 光标到(x, y)处
s=$s“[$;$H$”
done
s=$s“[0m”
echo -n $s
}
#更新新的方块
function RandomBox()
{
local i j t
#更新当前移动的方块
iBoxCurType=$
iBoxCurRotate=$
cBoxCur=$
for ((j = 0; j < $; j++))
do
boxCur[$j]=$
done
#显示当前移动的方块
if (( $ == 8 ))
then
#计算当前方块该从顶端哪一行“冒”出来
for ((j = 0, t = 4; j < 8; j += 2))
do
if (($ < t)); then t=$; fi
done
((boxCurY = -t))
for ((j = 1, i = -4, t = 20; j < 8; j += 2))
do
if (($ > i)); then i=$; fi
if (($ < t)); then t=$; fi
done
((boxCurX = (iTrayWidth - 1 - i - t) / 2))
#显示当前移动的方块
echo -ne `DrawCurBox 1`
#如果方块一出来就没处放,Game over!
if ! BoxMove $boxCurY $boxCurX
then
kill -$sigExit $
ShowExit
fi
fi
#清除右边预显示的方块
for ((j = 0; j < 4; j++))
do
((i = iTop + 1 + j))
((t = iLeft + 2 * iTrayWidth + 7))
echo -ne “[$;$H ”
done
#随机产生新的方块
((iBoxNewType = RANDOM % $))
((iBoxNewRotate = RANDOM % $))
for ((j = 0, i = ($ + $iBoxNewRotate) * 8; j < 8; j++, i++))
do
boxNew[$j]=$;
done
((cBoxNew = ${colorTable[RANDOM % $]}))
#显示右边预显示的方块
echo -ne “[1m[7m[3$m[4$m”
for ((j = 0; j < 8; j += 2))
do
((i = iTop + 1 + $))
((t = iLeft + 2 * iTrayWidth + 7 + 2 * ${boxNew[$j + 1]}))
echo -ne “[$;$H[]”
done
echo -ne “[0m”
}
#初始绘制
function InitDraw()
{
clear
RandomBox #随机产生方块,这时右边预显示窗口中有方快了
RandomBox #再随机产生方块,右边预显示窗口中的方块被更新,原先的方块将开始下落
local i t1 t2 t3
#显示边框
echo -ne “[1m”
echo -ne “[3$m[4$m”
((t2 = iLeft + 1))
((t3 = iLeft + iTrayWidth * 2 + 3))
for ((i = 0; i < iTrayHeight; i++))
do
((t1 = i + iTop + 2))
echo -ne “[$;$H||”
echo -ne “[$;$H||”
done
((t2 = iTop + iTrayHeight + 2))
for ((i = 0; i < iTrayWidth + 2; i++))
do
((t1 = i * 2 + iLeft + 1))
echo -ne “[$;$H==”
echo -ne “[$;$H==”
done
echo -ne “[0m”
#显示“Score”和“Level”字样
echo -ne “[1m”
((t1 = iLeft + iTrayWidth * 2 + 7))
((t2 = iTop + 10))
echo -ne “[3$m[$;$HScore”
((t2 = iTop + 11))
echo -ne “[3$m[$;$H$”
((t2 = iTop + 13))
echo -ne “[3$m[$;$HLevel”
((t2 = iTop + 14))
echo -ne “[3$m[$;$H$”
echo -ne “[0m”
}
#退出时显示GameOVer!
function ShowExit()
{
local y
((y = iTrayHeight + iTrayTop + 3))
echo -e “[$;0HGameOver![0m”
exit
}
#游戏主程序在这儿开始.
if [[ != “--show” ]]
then
bash --show& #以参数--show将本程序再运行一遍
RunAsKeyReceiver $! #以上一行产生的进程的进程号作为参数
exit
else
#当发现具有参数--show时,运行显示函数
RunAsDisplayer
exit
fi
原文转自:www.ltesting.net
篇17:高考满分作文:生活中的俄罗斯方块
高考满分作文:生活中的俄罗斯方块
生活中的俄罗斯方块
玩过俄罗斯方块的人都明白这个道理:要想达到游戏的成功之顶,就要学会“取长补短”。游戏如此,生活又何尝不是这样?
长短脚之恋
《吕氏春秋?不广》中记载了一种前腿如鼠,后腿如兔的奇怪动物——蛰蹶,长短不一的脚使它举步维艰。但它却经常利用自己的利齿采噬植草给一种叫蛩蛩距虚的动物——它没有利齿,却有强壮的四肢,于是山火来时,蛩蛩距虚便把蛰蹶负于背上,共同逃难。
动物的`生存繁衍未尝不是一种智慧,为了生存而取长补短是大自然的法则,是生活中心领神会的潜台词,更是获取成功的不二法门。
魏玛城佳话
歌德与席勒的友情是足以照彻欧洲文学史半边天空的传奇。年长成熟的歌德给了席勒安定的呵护,而年轻激越的席勒给了歌德新的创作热情,于是《浮士德》跃出水面,它的光焰穿过历史的黑暗点亮了今天的天空。
倘若没有魏玛城中的相遇、相知、相辅相成,歌德也许仍限于琐杂的政务中,而席勒也许已在困窘的生活面前湮没无闻。无法想象,没有他们,十九世纪的文化星空将会黯淡到何种地步。更无法想象,他们若是走上互相牵绊的歧途——毕竟,天才与天才相遇总不乏竞争——历史又会是如何面目的篇章。
结语:异种求和
翻看着生活的札记,顿悟:
无论自然,还是人生,我们无一不在竞争中寻求那和谐的一点:双赢——化异中之抵触为和中之互补。《中庸》有言:“和者,天下之大本也。”但我们在累积生活的俄罗斯方块时,难免遇到相互间的积压、碰撞,但我们只要找到长短相补的地方,就一定能筑起共同的新高度。就会如朱熹与张栻一样,“相与博约,又大进焉”。
玫瑰与花刺相遇,各自告别了俗艳与尖刻,成就了傲视群芳的铿锵战将。
乔丹与皮蓬相遇,各自告别了独角戏与狂傲腔,成就了历史上的神话公牛。
你与我在生活中相遇,请告别猜忌与功名,成就双赢的和谐篇章,垒起更高的人生峰塔吧!
篇18:用纯JS做俄罗斯方块 简要思路介绍(1)
大家都知道俄罗斯方块是一款大众化的游戏了,我很小的时候就玩过,今年已经25岁了,可以说俄罗斯方块确实是历史悠久,做俄罗斯方块是我上个星期开始的想法,也许是由于自己从来没有写过这种东西吧,所以有生疏。代码的话,只完成了一小部分,大概1/5左右吧。今天还是决定先写一部分思路。
至于俄罗斯方块的话,有很多的难点,如果有JS去写的话,要考虑到碰撞啊,边界啊,下落等问题,本文这些问题大部分不会考虑到,只是提供一部分思路而已,开始已经说了,因为自己还没写完这个游戏,但是又出于想写博客记录,所以才有了这一系列的博客。
回到正题,我们首先想一想,俄罗斯方块需要什么?我做一个简单的归纳。如果我简单点说的话,就是一个俄罗斯方块对象,那么这个对象里又有些什么东西呢?我们可以想象一下,有一个平面直角坐标系,这个平面直角坐标系有X轴,有Y轴,也有“每一等分”的距离(unit),而俄罗斯方块就是一个一个的“格子”,这些格子从某一个地方开始下落,某一个地方停止下落,于是我们就规定了俄罗斯方块的“下落区域”(Area)。但是下落是一个“动作”,所以我们还要有一个类(这里定义为operate),来控制动作的下落。
好了,先就介绍到这里,我们再来做一段代码性质的归纳,表示对上面的代码做一段归纳。
/*俄罗斯方块实体类*/
function Tetris()
{
var self =this; //自身
this.area=null;//区域
this.operate=null; //操作
/*初始化X,Y,单元为5或者20*/
this.x=5;
this.y=5;
this.unit=20;
this.running=null; //是否在运行中
//俄罗斯方块实体ID
this.id=“tempid”;
//开始游戏
this.start=function()
{
this.area=new getArea(this.x,this.y,this.unit,“tempid”); //获得Area对象 ,其中TEMPID是俄罗斯方块实体类ID
this.operate=new OperateTetris(this.area,self);
//是否替换俄罗斯方块
if(this.operate.mayPlace())
{
//alert(1);
this.operate.place();
}
}
//开始游戏
document.getElementById(“startGame”).onclick=function(){self.start()};
}
那么,当我们点击StartGame的时候,开始游戏,即运行start()方法。好,我们现在开始考虑Area对象里面到底需要什么东西 function getArea(x,y,unit,id)参数需要带入4个,前面3个刚才已经说了,第四个参数就是Area的ID。我们需要area这个对象,所以通过HTML代码来设置ID。大家玩过俄罗斯方块的都知道,每一次触底,都会新加一个元素,而新的元素是“随机”的,每当一行是满的(这里不考虑颜色不同的情况),就会消掉一行,当然我们一次形成了多行可消掉的方块的时候,那么我们就可以消掉多行。下面的是代码,算是对上面的文字的一个小小的总结,还没有完成的代码。
//获得区域的横坐标和纵坐标
function getArea(x,y,unit,id)
{
this.x=x;
this.y=y;
this.unit=unit; //每个单元的大小,单位为像素
this.el=document.getElementById(id); //得到ID对象
this.board=[]; //面板,即在区域范围内的元素(俄罗斯方块)
//添加元素
this.addElement=function()
{
//得到起始元素的X开始坐标和Y开始坐标的位置(错误)
//得到X坐标的下落次数,和Y轴的左右移动的次数
var xBegin=parseInt(el.offsetLeft/unit);
var yBegin=parseInt(el.offsetTop/unit);
if(xBegin>=0&&xBegin<=this.x&&yBegin>=0&&yBegin<=this.y)
{
board[yBegin][xBegin]=el; //确定元素的位置
}
}
//消掉所有的行
this.removeFullLines=function()
{
var lines=0;
for(var i=this.y-1;y>0;y--)
{
if(this.linesRelated(y))
{
lines++;
this.y++;
}
}
}
//和线性有关的东西(判断是否满了)
this.linesRelated=function(y)
{
for(var x=this.x;x>0;x--)
{
this.removeLines(y);
if(this.board[y][x]){return false;} //不明觉厉
}
return true;
};
//去掉行
this.removeLines=function(y)
{
for(var x=0;x
{
this.el.removeChild(this.board[y][x]);
this.board[y][x]=0;
}
y--;
for(;y>0;y--)
{
/*今天暂时写到这里*/
}
};
}
需要注意的一点是,俄罗斯方块是“二维性质”的,所以我这里定义了一个board类型的二维数组,即board[行][列](board[y][x]).好了,这里我们当然还需要一个类,这个类就是控制元素下落的“动作”的类,那么这个下落“动作“的类里应该有一些什么东西呢?我们需要考虑边界,于是有了(区域),我们要考虑俄罗斯方块于是有了俄罗斯方块对象(tetris),因为方块的种类不同,有各种不同的形状于是我们必须考虑方块的类别(types),还有下一个类别(NEXTTYPE),因为方块有下一个提示;我们需要考虑方块在AREA中的位置于是有了(position),我们需要判断游戏是否暂停于是有了running,当然了,方块下落的速度SPEED肯定也是要考虑到的,如果GAME OVER了那么就要判断游戏是否停止stopped,当然了,方块是一个一个的元素于是我们要考虑elements,当然了,最重要的还是下落(falldown).下面是定义的代码:
var self=this; //当前对象
this.area=area;
this.tetris=tetris;
this.types=null; //方块的类型;
this.nextType=null; //下一个类型
//初始化X和Y
this.x=null;
this.y=null;
this.position=0; //初始位置
this.board=[]; //用来填充HTML元素的
this.elements=[];
this.running=null; //是否在运行中
this.stopped=null; //是否停止
this.fallDownId=null; //往下掉落的
this.speed=null; //速度
这么一说有点头晕,我们选一个切入点吧,我们的切入点就是如何构造方块。大家应该知道俄罗斯方块的几种形状吧,比如T形,L形,口形等等,那么我们可以想象一下,把俄罗斯方块定义成一个二维数组,然后有元素的地方为1,没元素的地方为0来构造形状,如下面的代码:
/*方块的组合方式,用数组进行组合(二维数组)
用0,1表示是否有方块存在,如果是0:不存在,1:存在,
以下的逻辑就可以非常的清楚了,
*/
this.blockComplex=[
[
[0,0,1],[1,1,1],[0,0,0] //_|
],
[
[1,0,0],[1,1,1],[0,0,0] //L
],
[
[0,1,0],[1,1,1],[0,0,0] //T
],
[
[0,0,0],[1,1,1],[0,0,0] //--
],
[
[0,0,0],[0,1,1],[0,1,1] //口
],
[
[0,1,1],[0,1,0],[1,1,0] //Z
]
];
好了,形状构造好之后,我们当然需要考虑程序的性能方面的问题,于是我创建了如下的GETTER方法,来判断是游戏是否在运行中等。
/*一连串的GETTER方法
分别是速度,X,Y轴,运行和停止的GETTER方法*/
this.getSpeed=function()
{
return this.speed;
}
this.getX=function()
{
return this.x;
}
this.getY=function()
{
return this.y;
}
this.isRunning=function()
{
return this.running;
}
this.isStopped=function()
{
return this.stopped;
}
当然了,我们如果要”重新开始游戏“,肯定是要建立一个方法reset(),说白一点,就是恢复游戏开始的状态。
//重置(初始化)
this.reset=function()
{
this.nextType=random(this.blockComplex.length);
this.types=this.nextType;
this.position=0;
this.board=[];
this.elements=[];
this.x=null;
this.y=null;
}
如果这个俄罗斯方法触底的话,那么肯定是会触发下一个俄罗斯方块的开始于是我们这里肯定要有一个方法, 内容我还没想好,就给一个架子吧。我直接返回TRUE了。
this.mayPlace=function()
{
return true;
}
下面的是最重要的方法,就是我们的替换方块的方法。先来简单做一个介绍,我也不知道自己能不能讲好,大家想想在一个坐标系中,方块如果下落了,肯定是Y--,毕竟方块是向下方下落的,当然,我们还需要有线条,假设我们一直在堆方块的话,这个线肯定是会增加的,还有我们的方块本身就是DIV,肯定是一个掉落DIV的过程,而这些DIV,肯定是在AREA范围内的。我们不妨想一想,第一步,我们来创建一个空的BOARD,就是面板,然后往这个面板里面填充东西呢?
//创建空对象,即所有的都为0的对象,并返回对象
this.createEmpty=function(x,y)
{
var elements=[];
for(var y2=0;y2
{
elements.push(new Array());
for(var x2=0;x2
{
elements[y2].push(0); }
}
return elements;
}
我们如果想下落元素的话,肯定是要知道开始下落的坐标,当然Y轴肯定是0,X轴可以依据自己的喜好来设定。当然了,下落的DIV肯定是属于这个AREA下面的子元素的,所以我们等下肯定要把这个APPENDCHILD到这里面去。下面是代码:
/*替换*/
this.place=function()
{
//初始化
var perate=this.blockComplex[this.types];
//区域开始X轴的位置
var AreaXStartPos=parseInt(this.area.x-operate[0].length);
//区域开始Y轴的位置
//var AreaYStartPos=parseInt(this.area.y-operate[0]);
var AreaYStartPos=1; //因为X轴的位置可能变化,而Y轴总是从最上面下来的,所以是1
this.x=AreaXStartPos; //把新的位置赋给X;
this.y=AreaYStartPos; //把新的位置赋给y;
//构建空对象,并存入BOARD
/*y:行,x:列*/
//alert(operate[0].length+“ ”+operate.length);
this.board=this.createEmpty(operate[0].length,operate.length);
/*线条,往下掉落,初始化*/
var lines=0;
var foundLines=false;
//循环遍历,先遍历行,每一行再来遍历列
for(var yAxis=this.board.length-1;yAxis>=0;yAxis--)
{
for(var xAxis=0;xAxis<=this.blockComplex[yAxis].length;xAxis++)
{
if(this.blockComplex[yAxis][xAxis])
{
var el=document.createElement(“div”);
el.className=“block”+this.types; //确定这个元素的CLASSNAME
//确定左边距和上边距
el.style.left=(this.x+xAxis)*this.area.unit+“px”;
el.style.top=(this.y+yAxis)*this.area.unit+“px”;
this.area.el.appendChild(el); //这个EL去APPEND主要的EL。
this.board[yAxis][xAxis]=el;
this.elements.push(el); //推入elements中
}
}
/*个人感觉这个功能应该是加速往下掉落的方法?不明觉厉*/
if(lines)
{
yAxis--;
}
if(foundLines)
{
lines++;
}
}
需要注意的是,当下一个俄罗斯方块(随机)的形成是随机的,所以我们需要定义一个RANDOM方法。其实每次下落都是一个RESET的循环,只是游戏还没有结束而已。
//随机数,产生1~6的
function random(i)
{
return Math.floor(Math.random()*i);
}
好了,今天只介绍一个思路,当然了,我也没写出来这个游戏,等下一篇出来的时候应该游戏会有一个大的架子了,还有一些代码我都不好意思放出来了,写得太差了。其实这个俄罗斯方块不完全是我自己写的,我也参考了下别人的东西,但不是抄袭,我想通过自己的努力,做一个游戏出来,这是我多年的梦想,努力!
至于全部的代码我就不贴了,因为还没写完,只是对这几天写代码的一个总结而已,高手可以无视我写的代码。
★ 老鼠国奇遇记作文
【俄罗斯方块心得体会(共18篇)】相关文章:
游世园会作文2022-09-20
励志小故事:你能坚持到底吗?2023-12-13
音乐《唱吧跳吧》的优秀教案2023-08-03
c语言:编写猜数字小游戏。2023-02-17
变的启迪为话题的作文范文2022-11-26
你也可以成为百万富翁美文摘抄2022-12-11
以我的初中生活初一话题作文2023-12-14
静夜郊外随笔2023-09-19
qq群签名2022-12-26
教学设计:图形的变换2022-11-10