俄罗斯方块

我在这个开源项目里找到了童年!

时光怂恿深爱的人放手 提交于 2020-03-23 18:28:47
3 月,跳不动了?>>> 提到《俄罗斯方块》(Tetris),那真是几乎无人不知无人不晓,除此之外,相信许多程序员第一个编程实践项目就是编写一个俄罗斯方块或者是坦克大战 这类的游戏各种编程语言的实现版本都有,今天和大家分享一个用React 编写的俄罗斯方块,在移动端和 PC 都能运行。 先上效果让你们预览一下: Redux 状态预览 这个游戏的框架使用的是 React + Redux,其中再加入了 Immutable,用它的实例来做来Redux的state。 Immutable 是一旦创建,就不能再被更改的数据。对 Immutable 对象的任何修改或添加删除操作都会返回一个新的 Immutable 对象。 让我们看下面一段代码: functionkeyLog(touchFn){ letdata = {key:'value'}; f(data); console.log(data.key);// 猜猜会打印什么? } 不查看f,不知道它对 data 做了什么,无法确认会打印什么。但如果 data 是 Immutable,你可以确定打印的是 value: functionkeyLog(touchFn){ letdata = Immutable.Map({key:'value'}); f(data); console.log(data.get('key'));// value }

俄罗斯方块Windows版本的实现!

假如想象 提交于 2020-03-23 17:53:06
3 月,跳不动了?>>> 自己用MFC写的第一个小游戏,应该写个文章来记录下来。 花了一周左右的时间终于写好了最终版本的俄罗斯方块,前一个版本的速度不是很快,而且代码量大,维护不方便,今天下午又花了一下午重构这些代码,使用了统一方法,使得代码量比原来少了许多,逻辑比以前也更清晰了,速度也快了些。音乐也加上去了,按钮也变成真正的按钮了。数据和显示分离,所以很多与显示无关的代码基本上都可以重用,很容易用qt写个linux版本的,有兴趣的可以去试试。这个是下载地址 http://kuai.xunlei.com/d/LJWDATTHYVJQ 。 之所以想到写这个小游戏,是在上周的图像处理课上面,又老师讲到的矩阵变换想到了小时候经常玩的俄罗斯方块的实现,花了一节课研究,大概知道了是怎么实现的了,主要还是一个2维数组,于是就决定花几天时间把它写起来,殊不知写的过程中,发送这样或那样的错误,究其原因还是根基没打好,开始写的一个方块类,信息不是太多,于是又重构,算是比较稳定的版本,然后就根据继续后续的开发工作,最后突然有点写不下去了,因为发现程序的逻辑太过繁琐,于是就上网搜了下,看了好多,本来是想看看他们是怎么写的,有各种版本的,不过我想到给容纳方块运动范围的数组加个虚拟边框,就重新回到自己的代码中来,不过没实现自己想要的结果,主要还是自己思路不够清晰,于是就继续原来的思路开始写,用了几个小时

Qt写的俄罗斯方块

北慕城南 提交于 2020-03-23 17:22:22
3 月,跳不动了?>>> 之前我在以前的旧电脑里面找到了大学时候写的俄罗斯方块,用qt写的,就把它找了出来试试还可编译运行就把它记录下来作为纪念。 首先的话整个游戏都是用c++写的,比较简单,当时的想法是先做出来看看,所以很多地方不是很完善,只能看看。qt是5.0以上的版本 截图: 界面是简单了点,但是基本都是可以玩的 项目地址: https://github.com/absolve/tetris 现在主要介绍一下基本的内容,俄罗斯方块基本上就是控制7种方块,满一行就消除得分的方式,那么当时在设计的时候我就是用坐标的方式 来记录不同的方块,每个方块根据坐标原点,长度为1的方式记录下来 那么可以根据每个坐标绘制出任意长度的方块,那么方块的旋转就是更改坐标 之后就是绘制方块的方式,根据qt自带的函数进行绘制,主要是继承QWidget类,然后重写void paintEvent(QPaintEvent *);方法进行绘图, 键盘的方式是重写void keyPressEvent(QKeyEvent *);来获取键盘的按键,整个界面的绘制都是在QWidget里面进行,只要开启一个定时器 用来下降方块就好了。游戏中需要一个数组把游戏内所有的方块全部储存起来用来进行判断游戏是否结束或者消除。 这个数组就可以用来进行保存整个游戏的信息了。 具体游戏中其他的内容都可以在代码中看到,本身游戏也比较简单。

网页版游戏(俄罗斯方块)

北城余情 提交于 2020-03-04 10:03:39
<!doctype html> <html><head> <style type="text/css"> body { background:#000; font:25px/25px 宋体;}#box { float:left;width:252px;border:#999 20px ridge;color:#9f9;text-shadow:2px 3px 1px #0f0; } #info { float:left;color:#cfc;padding:24px; }#next { padding:8px;width:105px;color:#9f9;text-shadow:2px 3px 1px #0f0; } </style> </head> <body><div id="box"></div><div id="info">NEXT:<div id="next"></div><div id="text"></div></div><script type="text/javascript"> var map=eval("["+Array(23).join("0x801,")+"0xfff]");var tatris=[[0x6600],[0x2222,0xf00],[0xc600,0x2640],[0x6c00,0x4620],[0x4460,0x2e0,0x6220

C语言俄罗斯方块代码

扶醉桌前 提交于 2020-03-04 05:52:33
这是我用Xcode编写的俄罗斯方块,我目前就读大一,很多东西还没有学,比如多线程什么的,导致方块不能实现自主下降,只能自己按‘s’来实现下降,不过这都无所谓,但是不知道为什么程序运行不了,看了好久都没看出错在哪里,希望能够得到大神的求助!感谢! 头文件,我也不知道是不是都用得上 # include <stdio.h> # include <stdlib.h> # include <time.h> # include <curses.h> 全局变量 int i , j , a [ 25 ] [ 10 ] ; char l ; 生成界面,我用的二维数组是a[25][10],周围边框的值为2,一共有6种方块,每一类型的方块都用一个数字表示,当随机生成一个数字后,相应的方块的坐标值为1,其余为0,即空格,我还同时计算出来方块最上面最下面最左边最右边的坐标方便移动和判断 int * shengcheng ( int a [ ] [ 10 ] , int up ) { int n , m , min , max , b [ 6 ] = { 1 , 2 , 3 , 4 , 5 , 6 } , c [ 8 ] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 } , d [ 6 ] , * p , flag = 0 , down ; srand ( ( int ) time (

算发帖——俄罗斯方块覆盖问题一共有多少个解

人盡茶涼 提交于 2020-02-29 22:50:11
问题的提出:如下图,用13块俄罗斯方块覆盖8*8的正方形。 那么一共可以有多少个解呢?(若通过旋转、翻转一个解而得到的新解,则两个解视为同一个解) 首先,求解的问题,已经在上一篇帖子里完成 算法帖——用舞蹈链算法(Dancing Links)求解俄罗斯方块覆盖问题 帖子里用随机的方法求解,故每次求出的解都可能不一样 那么到底有多少个解呢? 理论上,因为是随机求解,当求解次数足够多的时候,所有的解都有可能被解出,到时候统计解出的个数就可以了 于是,整个2月,每天计算200000次,然后统计每天得出的新解的个数 列表如下: 2月01日,10373个新解 2月02日,1355个新解 2月03日,646个新解 2月04日,381个新解 2月05日,256个新解 2月06日,229个新解 2月07日,169个新解 2月08日,124个新解 2月09日,104个新解 2月10日,77个新解 2月11日,73个新解 2月12日,73个新解 2月13日,53个新解 2月14日,61个新解 2月15日,41个新解 2月16日,38个新解 2月17日,44个新解 2月18日,27个新解 2月19日,24个新解 2月20日,18个新解 2月21日,24个新解 2月22日,28个新解 2月23日,24个新解 2月24日,14个新解 2月25日,16个新解 2月26日,10个新解 2月27日,11个新解

也写“JS俄罗斯方块”

这一生的挚爱 提交于 2020-02-19 07:14:40
  这个经典的小游戏被无数人玩过,也被很多数的程序员写过,在下也献丑写个出来。   由于在自己动手写之前没参考过别人写的这个游戏的代码,完全是根据自己玩这个游戏的体会写成的。也知水平有限,虽然已认真测试过,但仍可能有漏洞,感兴趣的朋友发现后还望不吝指出来。   说说自己的思路,以及编写过程中的重点难点。 思路: 1、我是在纸上先画出方块的几大类型,分成了十大类,每种类型在按“上方向键”时,有四种变化 (田字形实际只有一种形状;长条形,以及两种互相对称的“折线形”分别也只有两种变化),把 这些形状所在的位置信息放入数组中(xx,yy数组表示)。 2、把形状分类后,就要想办法把每种形状显示出来。这里利用构造函数block构造方块对象。然后 在“预览”显示的div里创建每种方块形状(initshape()),并把它们全部隐藏。 3、把“预览div”里的方块形状随机(实际有一定规律)显示一种。然后在主窗口里创建这种方块 (createBlock()),然后定时器让方块下落(fall()),下落过程中不断改变方块的位置 (setPosition()),判断是否越界(judgeLRside()和judgeBott())。当方块落到底部,或者与已 经落下的方块接触时,判断是否能消除行(removeBlocks())。然后把“预览div”里的方块形状再 显示一种(setVisible())

停课不停学,C语言版33行代码写出俄罗斯方块学习

冷暖自知 提交于 2020-02-15 23:58:28
新年新气象 哪有什么岁月静好,只不过是有人替我们负重前行——致敬那些逆行在疫情第一线的英雄们,待春暖花开之时,愿你们平安归来。 距离上一次写博客好像过去了很久的样子,虽然博客没有更新但学习上却不敢有丝毫松懈,为了能够记录自己每日的学习进展,也是决定坚持写,每周两篇,将自己所学习到的新知识,和对于一些概念的整理都通过这样的方式来进行记录包括每个月的GitHub的记录,口说无凭,附上自己的: 33行书写俄罗斯方块(学习到的) 言归正传今天通过其他的途径也是学习到了一个学长所书写出来的俄罗斯方块,说实话还没有全方位的搞懂,因此发表出来也是希望能够有更多的大神能够指点一二,对于其中存在的一系列问题大家展开讨论,对于学长这样的功底还是非常的佩服得,虽说他在书写时候挺规范的,但是对于我们这种一行一行代码敲出来的人还是能够感觉到他的语言有着一些混乱,可能也是因为要达到所谓的33行这个噱头吧,所以在大家学习的时候也是尽可能地用自己的思维将他的解读以下在进行敲写。 对于我们众多的朋友来说,既然是学习到的那就是学习到的,就像我在前面所说道的,在开始时候更多的学习其实也是为了更好的了解别人的编程思维和一些所存在的习惯,这样也是能够更好的方便和提升我们自己。 代码段 # include <stdio.h> # include <windows.h> # include <conio.h> int T ,

JavaScript 版俄罗斯方块

邮差的信 提交于 2020-01-28 05:53:46
用JavaScript 写的俄罗斯方块, 实现了几个比较简单的功能: 自定义按键, 设置初始速度,难度和方块,换肤功能。 布局用的Div+Css 演示地址: http://58.61.155.48:818/Tetris.html 下载: http://download.csdn.net/source/430506 http://58.61.155.48:818/Tetris.rar 程序主要用了三个类, 窗口类、菜单类、游戏类和一个基类。 1.基类, 定义了一些常用属性和函数. // 声明命名空间 var Freewind = {} ; // 基类 Freewind.Base = function () { // 浏览器 this ._isIE = document.all ? true : false ; // 对象索引 this ._nIndex = 0 ; // 大小 this ._nLeft = 0 ; this ._nTop = 0 ; this ._nWidth = DEF_WIN_WIDTH; this ._nHeight = DEF_WIN_HEIGHT; // 对象ID前缀 this ._sPrefix = " FW_ " ; // 文档对象 this .DOM = document; // 父对象 this ._parent = document.body; /

pyqt5开发之俄罗斯方块

故事扮演 提交于 2020-01-28 03:45:50
1 #!/usr/bin/python3 2 # -*- coding: utf-8 -*- 3 4 """ 5 ZetCode PyQt5 tutorial 6 7 This is a Tetris game clone. 8 9 """ 10 11 from PyQt5.QtWidgets import QMainWindow, QFrame, QDesktopWidget, QApplication 12 from PyQt5.QtCore import Qt, QBasicTimer, pyqtSignal 13 from PyQt5.QtGui import QPainter, QColor 14 import sys, random 15 16 class Tetris(QMainWindow): 17 18 def __init__(self): 19 super().__init__() 20 21 self.initUI() 22 23 24 def initUI(self): 25 '''initiates application UI''' 26 27 self.tboard = Board(self) 28 self.setCentralWidget(self.tboard) 29 30 self.statusbar = self.statusBar()