SlideShare a Scribd company logo
1 of 26
Download to read offline
Tetris5




A Tetris game based on HTML5, JavaScript and Flash

                                      Sun Junwen
俄罗斯方块


前苏联科学家阿列克谢· 帕基特
诺夫在1984年6月发明,具有数
学性和动态性,常见的游戏实现
示例。
HTML5


    Web Development to the next level
    •1991 HTML
    •1994 HTML 2
    •1996 CSS 1 + JavaScript
    •1997 HTML 4
    •1998 CSS 2
    •2000 XHTML1
    •2002 无Table(Tableless)网页设计
    •2005 Ajax
    •2009 HTML 5
HTML5

HTML5 ~= HTML + CSS + JS

   离线应用和本地储存
   语义标签
   图形和多媒体
   CSS3
   ...
HTML5

离线应用和本地储存


var foo = localStorage["bar"];
// ...
localStorage["bar"] = foo;
HTML5

语义标签                            <section>
                                 <article>
<body>                             <header>
  <header>                           <h1>Title</h1>
    <hgroup>                       </header>
       <h1>Page title</h1>         <section>
       <h2>Page subtitle</h2>        Content...
    </hgroup>                      </section>
  </header>                      </article>
                                </section>
  <nav>
   <ul>                         <aside>
     Navigation...               Top links...
   </ul>                        </aside>
  </nav>
                                <footer>...</footer>
HTML5

图形和多媒体

         Canvas
                    Audio




            Video
HTML5

CSS3    border-radius: 5px;
        box-shadow: 2px 2px 2px #ccc



                 background: #B2172F;
                 background: -moz-linear-
                   gradient(top, #3D95FF 0%,
                   #0143CF 100%);




                 -moz-transition-property:
                   border-color,color;
                 -moz-transition-duration:
                   0.3s;
Game Core


Tetris5的核心
移植自一个J2ME俄罗斯方块


        JavaScript


性能
实现快
面向对象
Game Core
Java对象和JavaScript对象(1)
public class Block {               var Block = function (type,
    private int blockType;                               initPos) {
    private Pos pos = new Pos();       this.blockType = type;
    private int style;                 this.pos = new Pos();
    private int color;                 this.pos.x = initPos.x;
                                       this.pos.y = initPos.y;
    public Block(int type) {           this.style = 0;
        blockType = type;              // ...
        pos.x = 0;                     this.Down = function () {
        pos.y = 0;                         this.pos.y--;
        style = 0;                         return this.pos;
    }                                  };
    // ...                             // ...
    public Pos Down() {            };
        pos.y--;
        return pos;
    }
    // ...
}
Game Core
Java对象和JavaScript对象(2)
public class Game {                var Game = {
    // ...                             // ...
    protected boolean running;         m_running : false,
    protected int iScore;              m_iScore : 0,
    // ...                             m_nLevel : 0,
    public Game(GameUI gameUI) {       // ...
        running = false;               init : function (gameUI) {
        iScore = 0;                        Game.m_running = false;
        // ...                             Game.m_iScore = 0;
    }                                      Game.m_nLevel = 0;
    // ...                                 // ...
}                                      },
                                       // ...
                                   };
Game Core

类结构和互操作关系
Game Core
                                                    i=[0,9]

渲染
数组下标转换为Canvas坐标
x=i*18, y=(19-j)*18
for (var j = 19; j >= 0; --j) {
    var i = 0;
    for (; i < 10; ++i) {
        var curBlock = GameUI.m_gameVector[i][j];
        GameUI.m_canvasDraw.drawImage(
            GameUI.m_blockImgs[curBlock],
            i * 18,
            (19 - j) * 18);
    }
}

                                        j=[19,0]
Game Core

JavaScript的同步和异步

Java Canvas的repaint()函数是异步的,立即返
回。性能差的设备会出现数据和画面丌同步,需要
专门编程处理。
JavaScript Canvas的绘图函数是同步的,丌存
在数据和画面丌同步的问题
Game Core

Java

                   如果性能较差,异步
       操作
                   绘图没有在下一次游
            异步绘图   戏逻辑完成前结束画
   游戏逻辑
                   面绘制,那么会导致
            开始绘制
       绘图
                   数据和画面丌同步。
             完成
Game Core

JavaScript

        操作    JavaScript的Canvas绘
              制函数都是同步的,浏览
      游戏逻辑
              器在绘制Canvas时,丌
              会响应用户操作。无论性
        绘图
              能多差,数据和画面总是
      浏览器绘制
              保持同步。
Game Core

数据储存
Tetris5使用HTML5提供的localStorage储存玩家
的游戏数据

localStorage在浏览器端提供了一个简单的
key/value存储方案,它丌像Cookies,并丌在浏
览器和服务器乊间传送,只在本地访问。
Game Core

localStorage
使用简单
key和value均为字符串类型

储存
localStorage["m_curBlock.blockType"] = GameUI.m_game.m_curBlock.blockType;
localStorage["m_curBlock.pos.x"] = GameUI.m_game.m_curBlock.pos.x;
localStorage["m_curBlock.pos.y"] = GameUI.m_game.m_curBlock.pos.y;

读取
var blockPos = new Pos();
blockPos.x = parseInt(localStorage["m_curBlock.pos.x"]);
blockPos.y = parseInt(localStorage["m_curBlock.pos.y"]);
GameUI.m_game.m_curBlock =
    new Block(parseInt(localStorage["m_curBlock.blockType"]), blockPos);
Game UI

游戏菜单
Game UI
       left:-580px                        frame

reel    help         rank          menu           game




                                          frame

                            reel   help           rank   menu   game
                       left:0px
Game UI

CSS3按钮
          border-radius: 2px;
          box-shadow: 1px 1px 2px #ccc;


                     hover in and out

                      -moz-transition-property:
                        border-color,color;
                      -moz-transition-duration:
                        0.3s;
Game UI

背景音乐
JavaScript Audio对象
GameUI.m_audio = new Audio();
// ...
GameUI.m_audio.addEventListener('ended', function () {
    GameUI.m_audio.currentTime = 0;
    GameUI.m_audio.play();
}, false);
if (!$.browser.opera) {
    GameUI.m_audio.src =
        Modernizr.audio.ogg ?
        GameUI.BKGAUDIO_OGG_SRC :
        GameUI.BKGAUDIO_MP3_SRC;
    GameUI.m_audio.play();
}
其它

Tetris5的实现使用了jQuery和Modernizr库




Tetris5在Notepad++上编写
代码由JSMinNpp插件格式化和压缩


Tetris5的项目托管于SourceForge.net
参考文献

俄罗斯方块,      Wikipedia.
HTML5, Wikipedia.
HTML5, Mozilla Developer Network.
Dive Into HTML5, Mark Pilgrim.
CSS3, Wikipedia.
JavaScript, Wikipedia.
JavaScript, Mozilla Developer Network.
Ajax, Wikipedia.
localStorage, Mozilla Developer Network.
参考文献

MozillaFirefox, Mozilla.
Google Chrome, Google.
Opera, Opera.
Internet Explorer, Microsoft.
SourceForge, Geeknet Inc.
Tetris5
请用以下一种浏览器




在PC、Mac或者

访问http://tetris5.sf.net

More Related Content

Viewers also liked

My Game Brief
My Game BriefMy Game Brief
My Game BriefMitcho17
 
Dynamic Programming and Reinforcement Learning applied to Tetris Game
Dynamic Programming and Reinforcement Learning applied to Tetris GameDynamic Programming and Reinforcement Learning applied to Tetris Game
Dynamic Programming and Reinforcement Learning applied to Tetris GameSuelen Carvalho
 
Case Studies in Mobile Board Game Conversion
Case Studies in Mobile Board Game ConversionCase Studies in Mobile Board Game Conversion
Case Studies in Mobile Board Game ConversionMartin Grider
 

Viewers also liked (7)

My Game Brief
My Game BriefMy Game Brief
My Game Brief
 
4564654
45646544564654
4564654
 
Dynamic Programming and Reinforcement Learning applied to Tetris Game
Dynamic Programming and Reinforcement Learning applied to Tetris GameDynamic Programming and Reinforcement Learning applied to Tetris Game
Dynamic Programming and Reinforcement Learning applied to Tetris Game
 
Case Studies in Mobile Board Game Conversion
Case Studies in Mobile Board Game ConversionCase Studies in Mobile Board Game Conversion
Case Studies in Mobile Board Game Conversion
 
Action puzzle games
Action puzzle gamesAction puzzle games
Action puzzle games
 
How job selection criteria is like Tetris
How job selection criteria is like TetrisHow job selection criteria is like Tetris
How job selection criteria is like Tetris
 
Maze Game
Maze GameMaze Game
Maze Game
 

Similar to Behind Tetris5

Graphic programming in js
Graphic programming in jsGraphic programming in js
Graphic programming in jsjay li
 
FIM Media Player - BoxModel in Flash
FIM Media Player - BoxModel in FlashFIM Media Player - BoxModel in Flash
FIM Media Player - BoxModel in Flashqizhi20
 
Script with engine
Script with engineScript with engine
Script with engineWebrebuild
 
怎樣在 Flutter app 中使用 Google Maps
怎樣在 Flutter app 中使用 Google Maps怎樣在 Flutter app 中使用 Google Maps
怎樣在 Flutter app 中使用 Google MapsWeizhong Yang
 
Object-Oriented Programming Design with Greenfoot 01
Object-Oriented Programming Design with Greenfoot 01Object-Oriented Programming Design with Greenfoot 01
Object-Oriented Programming Design with Greenfoot 01imacat .
 
JavaScript Engine
JavaScript EngineJavaScript Engine
JavaScript Enginejay li
 
KSDG_007_Web 編程另闢蹊徑-GWT,Dart,TypeScript介紹與比較
KSDG_007_Web 編程另闢蹊徑-GWT,Dart,TypeScript介紹與比較KSDG_007_Web 編程另闢蹊徑-GWT,Dart,TypeScript介紹與比較
KSDG_007_Web 編程另闢蹊徑-GWT,Dart,TypeScript介紹與比較Stipc Nsysu
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoloadjay li
 
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...Shengyou Fan
 
Web设计 3 java_script初探(程序员与设计师的双重眼光)
Web设计 3 java_script初探(程序员与设计师的双重眼光)Web设计 3 java_script初探(程序员与设计师的双重眼光)
Web设计 3 java_script初探(程序员与设计师的双重眼光)ziggear
 
程式人雜誌 2015年三月
程式人雜誌 2015年三月程式人雜誌 2015年三月
程式人雜誌 2015年三月鍾誠 陳鍾誠
 
程式人雜誌 -- 2015 年3月號
程式人雜誌 -- 2015 年3月號程式人雜誌 -- 2015 年3月號
程式人雜誌 -- 2015 年3月號鍾誠 陳鍾誠
 
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台Shengyou Fan
 
iOS程序设计-数据持久化
iOS程序设计-数据持久化iOS程序设计-数据持久化
iOS程序设计-数据持久化qiyutan
 
Solitaire with Greenfoot #1
Solitaire with Greenfoot #1Solitaire with Greenfoot #1
Solitaire with Greenfoot #1imacat .
 

Similar to Behind Tetris5 (20)

Graphic programming in js
Graphic programming in jsGraphic programming in js
Graphic programming in js
 
XNA遊戲程式框架
XNA遊戲程式框架 XNA遊戲程式框架
XNA遊戲程式框架
 
FIM Media Player - BoxModel in Flash
FIM Media Player - BoxModel in FlashFIM Media Player - BoxModel in Flash
FIM Media Player - BoxModel in Flash
 
I os 14
I os 14I os 14
I os 14
 
Script with engine
Script with engineScript with engine
Script with engine
 
怎樣在 Flutter app 中使用 Google Maps
怎樣在 Flutter app 中使用 Google Maps怎樣在 Flutter app 中使用 Google Maps
怎樣在 Flutter app 中使用 Google Maps
 
Misato engine hugh_tsai-蔡浩宇
Misato engine hugh_tsai-蔡浩宇Misato engine hugh_tsai-蔡浩宇
Misato engine hugh_tsai-蔡浩宇
 
Object-Oriented Programming Design with Greenfoot 01
Object-Oriented Programming Design with Greenfoot 01Object-Oriented Programming Design with Greenfoot 01
Object-Oriented Programming Design with Greenfoot 01
 
JavaScript Engine
JavaScript EngineJavaScript Engine
JavaScript Engine
 
KSDG_007_Web 編程另闢蹊徑-GWT,Dart,TypeScript介紹與比較
KSDG_007_Web 編程另闢蹊徑-GWT,Dart,TypeScript介紹與比較KSDG_007_Web 編程另闢蹊徑-GWT,Dart,TypeScript介紹與比較
KSDG_007_Web 編程另闢蹊徑-GWT,Dart,TypeScript介紹與比較
 
I os 02
I os 02I os 02
I os 02
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoload
 
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
 
Web设计 3 java_script初探(程序员与设计师的双重眼光)
Web设计 3 java_script初探(程序员与设计师的双重眼光)Web设计 3 java_script初探(程序员与设计师的双重眼光)
Web设计 3 java_script初探(程序员与设计师的双重眼光)
 
程式人雜誌 2015年三月
程式人雜誌 2015年三月程式人雜誌 2015年三月
程式人雜誌 2015年三月
 
程式人雜誌 -- 2015 年3月號
程式人雜誌 -- 2015 年3月號程式人雜誌 -- 2015 年3月號
程式人雜誌 -- 2015 年3月號
 
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
 
我用Django做页游
我用Django做页游我用Django做页游
我用Django做页游
 
iOS程序设计-数据持久化
iOS程序设计-数据持久化iOS程序设计-数据持久化
iOS程序设计-数据持久化
 
Solitaire with Greenfoot #1
Solitaire with Greenfoot #1Solitaire with Greenfoot #1
Solitaire with Greenfoot #1
 

Behind Tetris5