⑴ 俄羅斯方塊怎麼做(要思想)
不要留空的
⑵ 風靡全球的《俄羅斯方塊》是怎麼設計出來的
國內主要流行時間段:1990年~至今 俄羅斯方塊的發明者,是當時還被稱為"蘇聯"的聯邦科學員阿萊克斯?帕吉托夫,該游戲最初是作為自我消遣的電腦游戲而被製作出來的。此後,由於政治和經濟等多方面的原因,該游戲曾經被多家公司代理過。經過多輪訴訟的爭奪後,該游戲的代理權最終還是被任天堂獲得。俄羅斯方塊對於任天堂來說意義重大,因為將它與GB搭配在一起後,產生了令人意想不到的效果,獲得了巨大的成功。而對於中國玩家來說,俄羅斯方塊可以說是第一次讓國人認識到游戲是一種老少皆宜的娛樂方式,從某種程度上扭轉了國人的"游戲是小孩子的東西"或"游戲是毒害兒童的元兇"等錯誤觀念 俄羅斯人發明的所以叫俄羅斯方塊 英文就叫teris了 沒有俄羅斯什麼的 只有中國人叫俄羅斯方塊 俄羅斯方塊自然是俄羅斯人發明的。這位偉人叫做阿列克謝·帕基特諾夫(Alexey Patnov )。英文名字應該是tetris~ 因為是來自於俄羅斯的游戲
⑶ photoshop怎麼製作俄羅斯方塊那種格子!!!!
前三步幼兒操作級別:
1,新建圖層
2,矩形選框工具,按住shift鍵,在圖上畫一個正方形(Shift鍵是為了保證長寬一致)
3,給正方形上色,然後取消螞蟻線
重點在第四步:
4.該圖層直接Fx做「斜面與浮雕」
在「斜面和浮雕」中主要調整大小,數值要根據你的方框大小來定(記得打開預覽看看你調整的結果,另外你要做的精細的話,可以再描邊上~)
然後確定,就完成了~
⑷ 俄羅斯方塊訣竅
這本來就是個手腦並用的游戲,如果硬說訣竅,眼光要敏捷,一邊看好下一組是什麼樣的一邊還要顧著眼前如何擺,怎麼消除然後會對後邊的造成何種影響,很考驗智力的游戲,經常玩兒可以開發右腦。
⑸ 做俄羅斯方塊的思路或演算法是什麼
我用MFC做過俄羅斯方塊:
整個場景是一個10*20的長方形空間,你要建立一個10*20的數組int num[20][10]模仿之,你可以想像這是200個小塊,每個小塊只有0和1兩種狀態,為0時相應該位置為空白,為1時相應該位置畫一個小方塊.
每一個圖形由4個小方塊組成,當他落到底停住時,你就要把數組num的相應數項由0改成1(num數組初始化全為0),同時在OnPaint(可能有時是OnDraw)函數中根據數組的0,1情況重繪,思路就是這樣的.很簡單
⑹ 一個長方體鋼胚鍛壓成一個正方體
考點: 長方體和正方體的體積 專題: 立體圖形的認識與計算 分析: 根據體積的意義,物體所佔空間的大小叫做物體的體積,一個長方體鋼坯鍛造成一個正方體(不計損耗),只是形狀變了,但是體積不變.據此解答. 一個長方體鋼坯鍛造成一個正方體(不計損耗),只是形狀變了,但是體積不變.答:體積與原來相比不變.故選:C. 點評: 此題考查的目的理解掌握體積的含義.
⑺ 俄羅斯方塊用二維數組構建 求教!!!
⑻ 怎樣製作俄羅斯方塊
以下代碼粘貼在主場經第一禎,測試影片就看到了:
N = 20;//行數
WIDTH = 20;//方塊邊長
level = 0;//開始等級(下落速度)
ret = new Array();//當前出現的方塊
nextret = new Array();//下一個出現的方塊
bg = new Array();//背景數組
createEmptyMovieClip("panel", 1048575);//所有方塊都在此mc里
for (i = 0; i < 5; i++) {
//初始化方塊數組,2*5格式,前四行代表每個方塊的4個小塊的位置坐標,最後一行第一列是方塊形狀,第二列是方塊旋轉方向
ret.push(new Array(2));
nextret.push(new Array(2));
}
for (i = 0; i < 20; i++) {//初始化背景數組,10*20格式
bg.push(new Array(10));
}
X = Y = panel._x = panel._y = 0;//換為X、Y表示
function reach(x:Number, y:Number, ret:Object) {
//x、y為方塊位置,ret為方塊形狀,若方塊ret下落一格碰到邊界或者方塊返回1
var i:Number, j:Number, k:Number;
for (i = 0; i < N; i++) {
for (j = 0; j < 10; j++) {
if (bg[i][j] == 219) {
for (k = 0; k < 4; k++) {
if (x + ret[k][0] == j && y + ret[k][1] + 1 == i) {
return 1;
}
}
}
}
}
return 0;
}
function lrnotout(lorr:Number, a:Object) {
//lorr==-1代表a往左邊一格可行性的判斷,lorr==1代表右邊一格可行性的判斷,lorr==0代表a的位置合理性的判斷,出現不合理則返回0
var i:Number;
if (lorr == -1) {
for (i = 0; i < 4; i++) {
if (x + a[i][0] - 1 < 0 || reach(x - 1, y - 1, a)) {
return 0;
}
}
}
if (lorr == 1) {
for (i = 0; i < 4; i++) {
if (x + a[i][0] + 1 > 9 || reach(x - 1, y + 1, a)) {
return 0;
}
}
}
if (lorr == 0) {
for (i = 0; i < 4; i++) {
if (x + a[i][0] < 0 || x + a[i][0] > 9) {
return 0;
}
}
}
return 1;
}
function rv(a:Object, ret:Object) {
//方塊賦值,將a方塊賦值到ret方塊
var i:Number;
for (i = 0; i < 5; i++) {
ret[i][0] = a[i][0], ret[i][1] = a[i][1];
}
}
function rotate(ret:Object) {
//根據方塊ret最後一行(分別是形狀指示變數和旋轉方向變數)為ret的前四行賦以具體形狀值
switch (ret[4][0]) {
case 0 ://方形
a = [[1, 0], [2, 0], [1, 1], [2, 1], [0, 0]];
rv(a, ret);
return;
case 1 ://長形
switch (ret[4][1]) {
case 1 :
a = [[0, 0], [1, 0], [2, 0], [3, 0], [1, 0]];
if (lrnotout(0, a) && !reach(x, y - 1, a)) {
rv(a, ret);
}
return;
case 0 :
a = [[1, 0], [1, 1], [1, 2], [1, 3], [1, 1]];
if (lrnotout(0, a) && !reach(x, y - 1, a)) {
rv(a, ret);
}
return;
}
case 2 ://Z形
switch (ret[4][1]) {
case 1 :
a = [[0, 1], [1, 1], [1, 2], [2, 2], [2, 0]];
if (lrnotout(0, a) && !reach(x, y - 1, a)) {
rv(a, ret);
}
return;
case 0 :
a = [[2, 0], [1, 1], [2, 1], [1, 2], [2, 1]];
if (lrnotout(0, a) && !reach(x, y - 1, a)) {
rv(a, ret);
}
return;
}
case 3 ://反Z形
switch (ret[4][1]) {
case 1 :
a = [[1, 1], [2, 1], [0, 2], [1, 2], [3, 0]];
if (lrnotout(0, a) && !reach(x, y - 1, a)) {
rv(a, ret);
}
return;
case 0 :
a = [[1, 0], [1, 1], [2, 1], [2, 2], [3, 1]];
if (lrnotout(0, a) && !reach(x, y - 1, a)) {
rv(a, ret);
}
return;
}
case 4 ://T形
switch (ret[4][1]) {
case 3 :
a = [[1, 0], [0, 1], [1, 1], [2, 1], [4, 0]];
if (lrnotout(0, a) && !reach(x, y - 1, a)) {
rv(a, ret);
}
return;
case 0 :
a = [[1, 0], [0, 1], [1, 1], [1, 2], [4, 1]];
if (lrnotout(0, a) && !reach(x, y - 1, a)) {
rv(a, ret);
}
return;
case 1 :
a = [[0, 1], [1, 1], [2, 1], [1, 2], [4, 2]];
if (lrnotout(0, a) && !reach(x, y - 1, a)) {
rv(a, ret);
}
return;
case 2 :
a = [[1, 0], [1, 1], [2, 1], [1, 2], [4, 3]];
if (lrnotout(0, a) && !reach(x, y - 1, a)) {
rv(a, ret);
}
return;
}
case 5 ://倒L形
switch (ret[4][1]) {
case 3 :
a = [[1, 0], [2, 0], [1, 1], [1, 2], [5, 0]];
if (lrnotout(0, a) && !reach(x, y - 1, a)) {
rv(a, ret);
}
return;
case 0 :
a = [[0, 1], [0, 2], [1, 2], [2, 2], [5, 1]];
if (lrnotout(0, a) && !reach(x, y - 1, a)) {
rv(a, ret);
}
return;
case 1 :
a = [[2, 0], [2, 1], [1, 2], [2, 2], [5, 2]];
if (lrnotout(0, a) && !reach(x, y - 1, a)) {
rv(a, ret);
}
return;
case 2 :
a = [[0, 1], [1, 1], [2, 1], [2, 2], [5, 3]];
if (lrnotout(0, a) && !reach(x, y - 1, a)) {
rv(a, ret);
}
return;
}
case 6 ://L形
switch (ret[4][1]) {
case 3 :
a = [[1, 0], [2, 0], [2, 1], [2, 2], [5, 0]];
if (lrnotout(0, a) && !reach(x, y - 1, a)) {
rv(a, ret);
}
return;
case 0 :
a = [[0, 1], [1, 1], [2, 1], [0, 2], [5, 1]];
if (lrnotout(0, a) && !reach(x, y - 1, a)) {
rv(a, ret);
}
return;
case 1 :
a = [[1, 0], [1, 1], [1, 2], [2, 2], [5, 2]];
if (lrnotout(0, a) && !reach(x, y - 1, a)) {
rv(a, ret);
}
return;
case 2 :
a = [[2, 1], [0, 2], [1, 2], [2, 2], [5, 3]];
if (lrnotout(0, a) && !reach(x, y - 1, a)) {
rv(a, ret);
}
return;
}
}
}
function generate(ret:Object) {//隨機產生方塊函數(可進一步修正)
ret[4][0] = Math.floor(Math.random() * 7);
ret[4][1] = Math.floor(Math.random() * 4);
rotate(ret);//完成方塊ret的具體形狀的賦值
}
function init() {//初始化背景、方塊、運動函數
var i:Number, j:Number;
for (i = 0; i < N; i++) {//初始化背景,邊界為219,其餘為' '
for (j = 0; j < 10; j++) {
if (i == N - 1) {
bg[i][j] = 219;
} else {
bg[i][j] = ' ';
}
}
}
for (i = 0; i < 5; i++) {//為當前方塊賦初值0
ret[i][0] = ret[i][1] = 0;
}
generate(ret);//產生當前方塊
generate(nextret);//產生下一個方塊
y = 0, x = 3, score = lines = 0, level=0;//當前位置坐標和計分系統初始化
_tetris.removeTextField();//如果從結束過的游戲恢復,刪除結束標志
display();//顯示畫面
frameflag = 0;//標示下落時間間隔
onEnterFrame = function () {
frameflag++;
if (10 - frameflag < level) {//根據等級level確定下落時間間隔
frameflag = 0;
go();//下落及判斷
}
};
}
function drawblock(a, b, c, d) {//繪制方塊的小塊
with (panel) {
beginFill(0x000FFF, 100);
lineStyle(1, 0xFF00FF);
moveTo(panel._x + a, panel._y + b);
lineTo(panel._x + c, panel._y + b);
lineTo(panel._x + c, panel._y + d);
lineTo(panel._x + a, panel._y + d);
lineTo(panel._x + a, panel._y + b);
endFill();
}
}
function erase() {//刪除一行方塊
var n:Number = 0, i:Number, j:Number, k:Number, l:Number;
for (i = 0; i < N - 1; i++) {
for (j = 0; j < 10; j++) {
if (bg[i][j] == ' ') {//如果該行有空,則開始判斷下一行
i++, j = -1;
if (i == N - 1) {//行N-1為底線,不判斷
break;
}
} else if (j == 9) {//判斷到該行最後一列都沒有空
for (k = i; k >= 1; k--) {//上方方塊下落
for (l = 0; l < 10; l++) {
bg[k][l] = bg[k - 1][l];
}
}
for (l = 0; l < 10; l++) {//刪除該行
bg[0][l] = ' ';
}
n++;//此次刪除行數變數增一
if ((lines + n) % 30 == 0) {//刪除行數總數到30的倍數則等級上升
level = (level + 1) % 10;
}
}
}
}
lines += n, score += (n * n + n) * 50;//總行數增n,計算得分
}
function display() {
//顯示函數,採用全部清除再重繪制的方法(因為這個程序本來是在Turbo C 2.0的文本環境下完成的)
var i:Number, j:Number;
panel.clear();
with (panel) {//畫邊界
lineStyle(1, 0x0000FF);
moveTo(panel._x, panel._y);
lineTo(panel._x + WIDTH * 10, panel._y);
lineTo(panel._x + WIDTH * 10, panel._y + WIDTH * (N - 1));
lineTo(panel._x, panel._y + WIDTH * (N - 1));
lineTo(panel._x, panel._y);
}
for (i = 0; i < 4; i++) {//當前方塊占據的地方賦值為邊界類型219
bg[y + ret[i][1]][x + ret[i][0]] = 219;
}
for (i = 0; i < N - 1; i++) {//繪制背景方塊
for (j = 0; j < 10; j++) {
if (bg[i][j] == 219) {
drawblock(j * WIDTH + X, i * WIDTH + Y, j * WIDTH + WIDTH + X, i * WIDTH + WIDTH + Y);
}
}
}
for (i = 0; i < 4; i++) {//繪制當前方塊
drawblock(nextret[i][0] * WIDTH + 14 * WIDTH + X, nextret[i][1] * WIDTH + 12 * WIDTH + Y, nextret[i][0] * WIDTH + WIDTH + 14 * WIDTH + X, nextret[i][1] * WIDTH + WIDTH + 12 * WIDTH + Y);
}
for (i = 0; i < 4; i++) {//當前方塊繪制完畢,重新將當前位置改為' '
bg[y + ret[i][1]][x + ret[i][0]] = ' ';
}
createTextField("_lvltxt", 1, 270, 100, 100, 20);//繪制計分系統
createTextField("_scrtxt", 2, 270, 130, 100, 20);
createTextField("_lnstxt", 3, 270, 160, 100, 20);
_lvltxt.text = "Level: " + level;
_scrtxt.text = "Score: " + score;
_lnstxt.text = "Lines: " + lines;
}
function go() {//下落函數
var sss:Number = reach(x, y, ret);//當前方塊下落一格是否碰到邊界或方塊
var ii:Number;
if (!sss) {
y++;//如果當前方塊下落一格沒有碰到邊界或方塊則下落一格
}
display();//重新繪制
if (sss) {//碰到邊界或方塊
score += 10;//得10分
display();//重新繪制
for (ii = 0; ii < 4; ii++) {//修改背景數組,將當前方塊的位置改為邊界類型
bg[y + ret[ii][1]][x + ret[ii][0]] = 219;
}
erase();//刪除行判斷及執行
rv(nextret, ret);//將下一個方塊賦值為當前方塊
y = 0, x = 3;//重置方塊位置
generate(nextret);//生成下一個方塊
display();//重新繪制
if (reach(x, y, ret)) {//如果下一格碰到方塊則游戲結束
createTextField("_tetris", 100000, WIDTH * 3.3, WIDTH * N / 3, 70, 20);
_tetris._x += 200;
_tetris._y += 50;
_tetris._xscale = 300;
_tetris._yscale = 300;
_tetris.background = true;
_tetris.text = "Game Over!";
onEnterFrame = function () {//停止下落
};
}
}
}
function key() {
if (Key.isDown(Key.UP)) {
rotate(ret);
display();
}
if (Key.isDown(Key.LEFT)) {
if (lrnotout(-1, ret)) {//左移可行性判斷
x--;
display();
}
}
if (Key.isDown(Key.RIGHT)) {
if (lrnotout(1, ret)) {//右移可行性判斷
x++;
display();
}
}
if (Key.isDown(Key.DOWN)) {//鍵盤控制下落
go();
}
if (Key.isDown(Key.SPACE)) {//一鍵下落到底
while (!reach(x, y, ret)) {
y++;
}
go();
}
if (Key.isDown(82)) { //重新開始游戲
init();
}
}
init();//初始化
setInterval(key, 80);//每個80毫秒執行一次鍵盤事件函數
createTextField("hinttxt",33324,200,20,300,50);
hinttxt.text="鍵盤鍵:上,下,左,右,R(reset),空格";
⑼ 如何用五種俄羅斯方塊拼出一個5x4的長方形(每個只能用一次)
答案是不可能,先假設能放。由1*4的方塊的放置入手,結合考慮到對稱性,一共有 5 中可能
經過考慮,排除掉其中3中(由正方形的放置入手來排除)
只剩下2鍾
1鍾, 1*4的方塊 在長方形的寬。
這種情況,結合對稱性,正方形的放置有2鍾可能。分析都不可能。
2鍾,1*4的方塊在長方形的高。
這種情況復雜一點,有8鍾,結合正方形的判斷,都不可能。
具體的我沒有上圖,如果這個對你很重要,我可以畫出來
⑽ 俄羅斯方塊是如何發明的
俄羅斯方塊 上手極其簡單,但是要熟練地掌握其中的操作與擺放技巧,難度卻不低。作為家喻戶曉老少皆宜的大眾游戲,其普及程度可以說是史上任何一款游戲都無法相比的。但是,誰知道這么優秀的娛樂工具,出自哪位神人之手呢? 游戲發明 顧名思義,俄羅斯方塊自然是俄羅斯人發明的。這位偉人叫做阿列克謝·帕基特諾夫(Alexey Patnov) 。 游戲介紹 俄羅斯方塊的基本規則 1、一個用於擺放小型正方形的平面虛擬場地,其標准大小:行寬為10,列高為20,以每個小正方形為單位; 2、一組由4個小型正方形組成的規則圖形,英文稱為Tetromino,中文通稱為方塊,共有7種,分別以S、Z、L、J、I、O、T這7個字母的形狀來命名; 3、通過設計者預先設置的隨機發生器不斷地輸出單個方塊到場地頂部,以一定的規則進行移動、旋轉、下落和擺放,鎖定並填充到場地中。每次擺放如果將場地的一行或多行完全填滿,則組成這些行的所有小正方形將被消除,並且以此來換取一定的積分或者其他形式的獎勵。而未被消除的方塊會一直累積,並對後來的方塊擺放造成各種影響。 4、如果未被消除的方塊堆放的高度超過場地所規定的最大高度(並不一定是20或者玩家所能見到的高度),則游戲結束。 具體到每一款不同的游戲,其中的細節規則都可能有千差萬別,但是以上的基本規則是相同的。對於俄羅斯方塊而言,相較於游戲本身內容的發展,其產權之爭所包含的意義,對於整個IT行業都有著極為深遠的影響。 俄羅斯方塊產權之爭 俄羅斯方塊是一款風靡全球的電視游戲機和掌上游戲機游戲,它曾經造成的轟動與造成的經濟價值可以說是游戲史上的一件大事。這款游戲最初是由蘇聯的游戲製作人 Alex Pajitnov 製作的,它看似簡單但卻變化無窮,令人上癮。相信大多數用戶都還記得為它痴迷得茶不思飯不想的那個俄羅斯方塊時代。 然而,很少有人知道,這個著名的游戲在80年代曾經在法律界掀起軒然大波,那就是著名的俄羅斯方塊產權之爭。這次產權爭奪,幾家歡喜,幾家哀愁,幾家公司倒閉,幾家公司賺錢,其中的是是非非,一言難盡。 1985年6月 工作於莫斯科科學計算機中心的阿列克謝·帕基特諾夫在玩過一個拼圖游戲之後受到啟發,從而製作了一個以Electronica 60(一種計算機)為平台的俄羅斯方塊的游戲。後來經瓦丁·格拉西莫夫(Vadim Gerasimov)移植到PC上,並且在莫斯科的電腦界傳播。帕基特諾夫因此開始小有名氣。 1986年7月 PC版俄羅斯方塊在匈牙利的布達佩斯被當地的一群電腦專家移植到了Apple II 和 Commodore 64 上,這些版本的軟體引起了當時英國一個叫Andromeda的游戲公司經理羅伯特·斯坦恩(Robert Stein)的注意,他向帕基特諾夫以及匈牙利的電腦專家們收購了俄羅斯方塊的版權,並且在買到版權之前把它們倒手賣給了英國的Mirrorsoft (注意不是Microsoft!) 以及美國的Spectrum Holobyte。 1986年11月 斯坦恩和帕基特諾夫經過談判,就版權收購問題未取得成果。斯坦恩甚至直接飛到莫斯科和帕基特諾夫面談,但是空手而歸。由於俄羅斯人對於已經在西方興起的電子游戲產業知道不多,斯坦恩決定竊取Tetris的版權,於是他放出謠言說這是匈牙利人開發的游戲。 與此同時,PC版的俄羅斯方塊已經由英國的Mirrorsoft出品並且在歐洲銷售,受到當時人們的極大關注。不僅僅因為這個游戲好玩,而且這是「第一個來自鐵幕國家的游戲。」當時的游戲宣傳海報上有濃郁的冷戰色彩,比如戰爭畫面,加加林太空飛行等。而斯坦恩仍然沒有正式合法的版權。 1987年6月 斯坦恩最終取得了在IBM-PC及其兼容機上的Tetris的版權,版權機種包括「其他任何電腦系統」。但是,他沒有和蘇聯方面簽署協議,也就是說,這個版權是不完全的。(譯者註: 這個「其他任何電腦系統」在原文中的描述是「any other computer system」,這種說法在當時看來也很不嚴密,從而為後來的產權之爭埋下了伏筆) 1988年1月 Tetris在電腦平台的熱銷,一時造成「洛陽紙貴」的局面。而當CBS晚報采訪了俄羅斯方塊之父帕基特諾夫之後,斯坦恩盜竊版權的計劃徹底泡湯了。一個新的公司ELORG(Electronorgtechinca,蘇聯一家軟體公司)開始和斯坦恩就游戲程序問題進行協商。ELORG的負責人亞歷山大·阿列欣科( Alexander Alexinko)知道斯坦恩雖然沒有版權,但是會以手中的游戲開發程序為籌碼威脅中斷談判。 1988年5月 經過幾個月的爭吵之後,筋疲力盡的斯坦恩終於和ELORG簽定了PC俄羅斯方塊版權的合約。當時的合約禁止開發街機版和掌機版的方塊游戲,而電腦版的Tetris則成為當時最暢銷的游戲。 1988年7月 斯坦恩與阿列欣科商談開發街機版俄羅斯方塊的問題。阿列欣科當時尚未從斯坦恩那裡拿到一分錢的版權費,但是同時的Spectrum 和 Mirrorsoft已經開始向電子游戲商出售了俄羅斯方塊的版權。Spectrum 將Tetris的游戲機和PC在日本的版權賣給了Bullet-Proof Software (FC和GB版俄羅斯方塊的製作商),而Mirrorsoft則把它在日本和北美的版權賣給了美國的Atari。這樣一來兩家公司的矛盾就開始了。1988年11月,BPS在FC上發行的俄羅斯方塊(大家不很熟悉的俄羅斯方塊1)在日本發售,銷量達200萬份。 1988年11月 隨著GB的開發,NOA(任天堂美國分公司)的經理荒川實(任天堂山內溥老爺子的女婿)希望將Tetris做成GB上的游戲。於是他聯系了BPS的總裁亨克·羅傑斯(Henk Rogers),羅傑斯再與斯坦恩聯系的時候卻吃了閉門羹。於是他直接去莫斯科購買版權。而斯坦恩覺察出風頭,也乘飛機前往莫斯科;與此同時,Spectrum的負責人羅伯特·麥克斯韋(Robert Maxwell)的兒子凱文·麥克斯韋(Kevin Maxwell) 也在向莫斯科進發。就這樣,三路人馬幾乎在同時趕到了冰天雪地的紅色都市。 1989年2月21日 羅傑斯首先會見了ELORG的代表葉甫蓋尼·別里科夫(Evgeni Belikov,和那個「裝在套子里的人」同名)。他給帕基特諾夫等蘇聯人留下了深刻印象,並且簽了手掌機方塊游戲的版權。之後他向俄國人展示了FC版Tetris,這使別里科夫極為震驚。因為他並沒有授予羅傑斯家用機的版權!羅傑斯則向他們說這是向TENGEN購買的版權,但是別里科夫也從來聽說過TENGEN這個公司的名字。羅傑斯為了緩和尷尬的局面,將斯坦恩隱瞞的事實如數告訴了別里科夫,並且答應付給蘇聯方面更多支票作為已經賣出的FC版俄羅斯方塊的版權費用。這時羅傑斯發現自己有機會買到Tetris全部機種的版權(但是當時還沒買),雖然Atari會對他虎視眈眈,但是別忘了,他和BPS的背後還有任天堂這個大靠山給自己撐腰。 注意:羅伯特·斯坦恩原先所簽的協議只是電腦版Tetris的版權,其他的版權並不是他的。 後來,斯坦恩和ELORG重新簽署了協議。別里科夫強迫他重簽的合約中修改的內容是:「電腦的定義:包含有中央處理器,監視器,磁碟驅動器,鍵盤和操作系統的機器」。而斯坦恩當時卻沒有仔細看這些定義。後來他才意識到這是羅傑斯從自己手中搶走版權而耍的花招。但是為時已晚。第二天他被告知雖然簽署的文件已經不能改過來,但是他還可以得到街機版Tetris的開發權。三天之後,他簽下了街機版的協議。 1989年2月22日 凱文·麥克斯韋訪問了ELORG。別里科夫拿出羅傑斯給他的FC游戲卡向他詢問這件事情。麥克斯韋在卡帶上看到了Mirrorsoft的名字後才想起他的公司已經把部分版權倒賣給了Atari。當他想繼續談街機和手掌機版權的問題的時候,卻發現他自己能夠簽的,就只有除電腦,街機,家用機和掌機以外的協議了。在糊塗之餘這傢伙靈機一動,告訴別里科夫說此卡帶為盜版,然後也要簽家用機的協議。 最後的結果是:凱文·麥克斯韋只帶走一張白紙,羅伯特·斯坦恩帶走了街機協議書。由於麥克斯韋聲稱所有的FC卡都是盜版,ELORG保留了家用機的版權,沒賣給任何人。假如麥克斯韋想獲得家用機版權的話,就必須出價比任天堂高才行。亨克·羅傑斯買到了掌機的版權,並且通知了荒川實。BPS就製作GB版Tetris向任天堂達成交易:這筆交易額高大500萬-1000萬美元。 1989年3月15日 亨克·羅傑斯回到莫斯科,並且代表任天堂出巨資收購家用機版Tetris的版權。版權費的價格雖然沒有向外界透露,但是這個數字將是Mirrorsoft永遠拿不出來的。連荒川實和NOA的首席執行官霍華德·林肯(Howard Lincoln)都親自前往蘇聯助陣。 1989年3月22日 ELORG和任天堂的家用機協議終於達成。任天堂方面堅持加入一款聲明,在協議簽定之後,如果和其他出現法律糾紛,蘇聯方面必須派人去美國的法庭上做證。實際上,這種法律上的爭端將是不可避免的。據說ELORG僅僅得到的定金有300-500萬美元之多。別里科夫向Mirrorsoft通知,說Mirrorsoft, Andromeda和Tengen都沒有家用機的版權,現在版權都歸任天堂所有。當天晚上任天堂和BPS的頭目們在莫斯科酒店裡舉行了慶祝party。 (也就是說,現在家用機和掌機的版權已經被任天堂和BPS分別掌握在手中。無論是Atari還是Tengen都沒有權利製作FC版的俄羅斯方塊。) 1989年3月31日 霍華德·林肯向Atari發去最後通牒(傳真),告訴他們立刻停止FC(NES)版的俄羅斯方塊游戲。這使得Atari和麥克斯韋都十分震怒。他們以Tengen的名義回信說在4月7日那天他們就已經享有家用機俄羅斯方塊的版權了。 1989年4月13日 Tengen撰寫了一份申請書,要求擁有Tetris的「影音作品,源程序和游戲音樂」版權。但是申請書中並沒有提及阿列克謝·帕基特諾夫和任天堂的游戲版權問題。 與此同時,麥克斯韋利用自己掌握的媒體勢力,企圖奪回Tetris的陣地。甚至搬出了蘇聯與英國政府,對俄羅斯方塊版權問題進行干預。結果挑起了蘇共與ELORG之間的矛盾。甚至連戈爾巴喬夫都向麥克斯韋保證「以後不用擔心日本公司的問題」。 在4月晚些時候,霍華德·林肯回到莫斯科的時候,發現ELORG已經在蘇聯政府的打壓下抬不起頭來,而就在那天半夜,NOA方面給他打電話,說Tengen已經起訴了任天堂。 第二天,他面會了別里科夫,帕基特諾夫和其他幾位ELORG的成員,以確保他們能夠為任天堂的官司佐證。(這回合同里的條款可生效了)隨後NOA立刻反訴Tengen,並且開始收集證據。 1989年5月17日 Tengen在USA Today上登載了大幅Tetris廣告,雖然法庭大戰已經迫在眉睫。 1989年6月 Tengen與任天堂的案子終於開庭審理。 論戰主要圍繞一個議題展開:NES(FC)究竟是電腦,還是電子游戲機……Atari認為NES是電腦系統,因為它擁有擴展機能,而且日本的Famicom也有網路功能存在。而任天堂的證據則更加切題:ELORG中的蘇聯人從來沒有意向出售Tetris的家用機版權,而所謂的「電腦」的概念則早在和斯坦恩的協議中提到了。 1989年6月15日 法庭召開聽證會,討論關於任天堂和Tengen互相命令對方終止生產和銷售各自的Tetris軟體的行為。法官福恩·史密斯(Fern Smith)宣布Mirrorsoft 與 Spectrum Holobyte均沒有家用機版權,因此他們提供給Tengen的權利也不能生效。任天堂的請求最後得到了許可。 1989年6月21日 Tengen版的俄羅斯方塊全部撤下了貨架,該游戲卡帶的生產也被迫中止。數十萬份軟體留在包裝盒裡,封存在倉庫中。 1989年7月 任天堂NES版Tetris在美國發售。全美銷量大約300萬。與此同時,和GB版Tetris捆綁銷售的Game Boy席捲美國,美利堅大地上颳起一陣方塊旋風。 關於Tetris的混戰此時已經告一段落。而任天堂和Tengen之間的法庭糾紛則一直持續到1993年。 尾聲 Atari Games仍然開發了街機版的Tetris,共賣出約2萬台機器。近來Atari Games 被 Williams/WMS收購,而那些封存在倉庫里的NES版Tetris的命運則沒人知道。Tengen不能從其他途徑把它們處理掉,所以估計這些軟體都被銷毀了。但是據說仍然有約10萬份Tengen版的Tetris流入了市場。 羅伯特·斯坦恩,這個版權問題的始作俑者,在Tetris上總共只賺了25萬美元。本來他可以掙多點錢的,但是Atari和Mirrorsoft在付他版稅的時候沒有給足。 Spectrum Holobyte 則需要和ELORG重新協商,以確保電腦版Tetris的版權。羅伯特·麥克斯韋的媒體堡壘在混戰中逐漸分崩離析,老麥克斯韋在做生意時做幕後黑手的事實也在調查中,而他卻突然暴病身亡。Mirrorsoft 英國公司也慘淡地退出了歷史舞台。真正的大贏家是BPS的總裁亨克·羅傑斯,還有幕後的任天堂。俄羅斯方塊究竟為任天堂賺了多少銀子呢?答案恐怕永遠說不清了。想一想吧,在美國GB都是和Tetris捆綁銷售,以增加GB的出貨量……然後因為Tetris買了GB的人還會買其他的GB卡……要是這么算起來的話,那利潤簡直就像滾雪球一樣了。現在GB版的Tetris總共生產了3000萬張,成為不朽之作。 至於蘇聯方面,除了蘇聯政府,誰也沒有從Tetris那裡得到多少好處。蘇聯解體之後,原ELORG的人員都四散到了全國乃至世界各地,許多人繼續開發游戲(比方說帕基特諾夫)。 阿列克謝·帕基特諾夫幾乎沒有從Tetris上賺到一分錢。ELORG本來打算給他Tetris的銷售權,但是旋即取消了這筆交易。不過帕基特諾夫仍然為自己能夠製作出這么一個世界聞名的優秀游戲而欣慰。他從科學院里得到一台286(當時在蘇聯可是了不起的電腦)作為獎勵。而且分到了比同事們家寬敞明亮的房子。在1996年,亨克·羅傑斯支付給他一筆報酬,帕基特諾夫組建了Tetris Company LLC 公司,終於能夠自己創作游戲,並且收取版權費了。 現在,所有經The Tetris Company官方授權許可的正統俄羅斯方塊游戲,都會註明"Authentic Tetris® Game"的商標。 衍生游戲 俄羅斯方塊由於受到歡迎,有些游戲廠商以其為藍本,開發出不同的衍生游戲: 立體方塊:將原本2D的方塊改為3D,以增加游戲的挑戰性。 臉譜方塊:將人的臉譜分割成五等份(額頭、眼睛、鼻子、嘴巴、下巴),須將隨機落下的臉譜各部份拼成正確的臉譜方可消除並得分。