當前位置:首頁 » 課程大全 » 課程設計俄羅斯方塊

課程設計俄羅斯方塊

發布時間: 2020-11-30 01:18:40

Ⅰ 俄羅斯方塊論文怎麼寫

5月15日 16:34 游戲起源、歷史、簡介

俄羅斯方塊是一款風靡全球的電視游戲機和掌上游戲機游戲,它曾經造成的轟動與造成的經濟價值可以說是游戲史上的一件大事。這款游戲最初是由蘇聯的游戲製作人Alex Pajitnov製作的,它看似簡單但卻變化無窮,令人上癮。相信大多數用戶都還記得為它痴迷得茶不思飯不想的那個俄羅斯方塊時代。

究其歷史,俄羅斯方塊最早還是出現在PC機上,而我國的用戶都是通過紅白機了解、喜歡上它的。現在聯眾又將重新掀起這股讓人沉迷的俄羅斯方塊風潮。對一般用戶來說,它的規則簡單,容易上手,且游戲過程變化無窮,而在"聯眾俄羅斯方塊"中,更有一些聯眾網路游戲所獨有的魅力――有單機作戰與兩人在線對戰兩種模式,用戶可任選一種進行游戲。網路模式還增加了積分制,使用戶既能感受到游戲中的樂趣,也給用戶提供了一個展現自己高超技藝的場所。

★★ 一些和俄羅斯方塊有關的故事

俄羅斯方塊操作簡單,難度卻不低。作為家喻戶曉老少皆宜的大眾游戲,時至今日玩游戲的人(以及許多不怎麼玩游戲的人)中誰要是不知道的話可真所謂是火星上的熊貓了。但是,誰知道這么優秀的娛樂工具,出自哪位神人之手呢?

顧名思義,俄羅斯方塊自然是俄羅斯人發明的。這位偉人叫做阿列克謝·帕基特諾夫(Alexey Patnov) 。

然而,很少有人知道,這個著名的游戲在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上登載了大幅Tertis廣告,雖然法庭大戰已經迫在眉睫。
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流入了市場。

我們今天在64合一等游戲D版卡里玩到的所謂「俄羅斯方塊2」其實就是當年的Tengen版,平心而論,這一版的方塊比BPS的版本要好玩許多。首先,這版的操作感和按鍵設定十分到位,AB分別是正轉和反轉,而BPS版是用十字鍵的下來轉動,只支持一個方向,按A就直接「啪」地落下來,手感十分不爽;其次,它支持的二人對戰,與電腦競爭和合作的模式也讓人耳目一新。還有,音樂也是沒的說。

羅伯特·斯坦恩,這個版權問題的始作俑者,在Tetris上總共只賺了25萬美元。本來他可以掙多點錢的,但是Atari和Mirrorsoft在付他版稅的時候沒有給足。(應得的報應……)

Spectrum Holobyte 則需要和ELORG重新協商,以確保電腦版Tetris的版權。

羅伯特·麥克斯韋的媒體堡壘在混戰中逐漸分崩離析,老麥克斯韋在做生意時做幕後黑手的事實也在調查中,而他卻突然暴病身亡。(氣死的……)Mirrorsoft 英國公司也慘淡地退出了歷史舞台。

真正的大贏家是BPS的總裁亨克·羅傑斯,還有幕後的任天堂。俄羅斯方塊究竟為任天堂賺了多少銀子呢?答案恐怕永遠說不清了。想一想吧,在美國GB都是和Tetris捆綁銷售,以增加GB的出貨量……然後因為Tetris買了GB的人還會買其他的GB卡……要是這么算起來的話,那利潤簡直就像滾雪球一樣了。現在GB版的Tetris(Z版)總共生產了3000萬張。(後來GB的俄羅斯方塊又在SFC上出了復刻版,和《馬里奧醫生》一起出現在屏幕上,成為不朽之作。)

至於蘇聯方面,除了蘇聯政府,誰也沒有從Tetris那裡得到多少好處。蘇聯解體之後,原ELORG的人員都四散到了全國乃至世界各地,許多人繼續開發游戲(比方說帕基特諾夫)。

阿列克謝·帕基特諾夫幾乎沒有從Tetris上賺到一分錢。ELORG本來打算給他Tetris的銷售權,但是旋即取消了這筆交易。不過帕基特諾夫仍然為自己能夠製作出這么一個世界聞名的優秀游戲而欣慰。他從科學院里得到一台286(當時在蘇聯可是了不起的電腦)作為獎勵。而且分到了比同事們家寬敞明亮的房子。在1996年,亨克·羅傑斯支付給他一筆報酬(還算是個知恩圖報的人),帕基特諾夫組建了Tetris Company LLC 公司,終於能夠自己創作游戲,並且收取版權費了。

註:當年俄羅斯方塊紅遍世界的各個角落,一個本來是吃大鍋飯的人在消極怠工的時候發明的娛樂工具成了造福全人類的寶貝,它的價值遠遠超越了開發這個軟體時候的預想。Atari雖然在法庭上慘敗,但是拜亞洲盜版商人所賜,Tengen版的俄羅斯方塊已經在中國玩家心目中生根發芽,長葉開花,任天堂的正統Tetris在中國反而沒人玩了。其實說了那麼多,歸根到底,平平淡淡才是真。有機會的話,下載一個FC的模擬器和一個64合一的經典ROM,回家體會一下俄羅斯方塊的魅力吧……

附上Alex Pajitnov照片一張。

該回答在5月15日 19:30由回答者修改過

Ⅱ 急求java 俄羅斯方塊小游戲課程設計報告,有源碼

- -
有點深奧!!

Ⅲ 求JAVA課程設計俄羅斯方塊代碼,流程圖,能有詳細說明介紹的更好!感激不盡!

import java.awt.*;
import java.awt.event.*;
//俄羅斯方塊類
public class ERS_Block extends Frame{
public static boolean isPlay=false;
public static int level=1,score=0;
public static TextField scoreField,levelField;

public static MyTimer timer;
GameCanvas gameScr;

public static void main(String[] argus){
ERS_Block ers = new ERS_Block("俄羅斯方塊游戲 V1.0 Author:Vincent");
WindowListener win_listener = new WinListener();
ers.addWindowListener(win_listener);
}

//俄羅斯方塊類的構造方法
ERS_Block(String title){
super(title);

setSize(600,480);
setLayout(new GridLayout(1,2));

gameScr = new GameCanvas();
gameScr.addKeyListener(gameScr);

timer = new MyTimer(gameScr);
timer.setDaemon(true);
timer.start();
timer.suspend();

add(gameScr);

Panel rightScr = new Panel();
rightScr.setLayout(new GridLayout(2,1,0,30));
rightScr.setSize(120,500);
add(rightScr);

//右邊信息窗體的布局
MyPanel infoScr = new MyPanel();
infoScr.setLayout(new GridLayout(4,1,0,5));
infoScr.setSize(120,300);
rightScr.add(infoScr);

//定義標簽和初始值
Label scorep = new Label("分數:",Label.LEFT);
Label levelp = new Label("級數:",Label.LEFT);
scoreField = new TextField(8);
levelField = new TextField(8);
scoreField.setEditable(false);
levelField.setEditable(false);
infoScr.add(scorep);
infoScr.add(scoreField);
infoScr.add(levelp);
infoScr.add(levelField);
scorep.setSize(new Dimension(20,60));
scoreField.setSize(new Dimension(20,60));
levelp.setSize(new Dimension(20,60));
levelField.setSize(new Dimension(20,60));
scoreField.setText("0");
levelField.setText("1");

//右邊控制按鈕窗體的布局
MyPanel controlScr = new MyPanel();
controlScr.setLayout(new GridLayout(5,1,0,5));
rightScr.add(controlScr);

//定義按鈕play
Button play_b = new Button("開始游戲");
play_b.setSize(new Dimension(50,200));
play_b.addActionListener(new Command(Command.button_play,gameScr));

//定義按鈕Level UP
Button level_up_b = new Button("提高級數");
level_up_b.setSize(new Dimension(50,200));
level_up_b.addActionListener(new Command(Command.button_levelup,gameScr));

//定義按鈕Level Down
Button level_down_b =new Button("降低級數");
level_down_b.setSize(new Dimension(50,200));
level_down_b.addActionListener(new Command(Command.button_leveldown,gameScr));

//定義按鈕Level Pause
Button pause_b =new Button("游戲暫停");
pause_b.setSize(new Dimension(50,200));
pause_b.addActionListener(new Command(Command.button_pause,gameScr));

//定義按鈕Quit
Button quit_b = new Button("退出遊戲");
quit_b.setSize(new Dimension(50,200));
quit_b.addActionListener(new Command(Command.button_quit,gameScr));

controlScr.add(play_b);
controlScr.add(level_up_b);
controlScr.add(level_down_b);
controlScr.add(pause_b);
controlScr.add(quit_b);
setVisible(true);
gameScr.requestFocus();
}
}

//重寫MyPanel類,使Panel的四周留空間
class MyPanel extends Panel{
public Insets getInsets(){
return new Insets(30,50,30,50);
}
}

//游戲畫布類
class GameCanvas extends Canvas implements KeyListener{
final int unitSize = 30; //小方塊邊長
int rowNum; //正方格的行數
int columnNum; //正方格的列數
int maxAllowRowNum; //允許有多少行未削
int blockInitRow; //新出現塊的起始行坐標
int blockInitCol; //新出現塊的起始列坐標
int [][] scrArr; //屏幕數組
Block b; //對方快的引用

//畫布類的構造方法
GameCanvas(){
rowNum = 15;
columnNum = 10;
maxAllowRowNum = rowNum - 2;
b = new Block(this);
blockInitRow = rowNum - 1;
blockInitCol = columnNum/2 - 2;
scrArr = new int [32][32];
}

//初始化屏幕,並將屏幕數組清零的方法
void initScr(){
for(int i=0;i<rowNum;i++)
for (int j=0; j<columnNum;j++)
{ scrArr[i][j]=0; }
b.reset();
repaint();
}

//重新刷新畫布方法
public void paint(Graphics g){
for(int i = 0; i < rowNum; i++)
for(int j = 0; j < columnNum; j++)
drawUnit(i,j,scrArr[i][j]);
}

//畫方塊的方法
public void drawUnit(int row,int col,int type){
scrArr[row][col] = type;
Graphics g = getGraphics();
switch(type){ //表示畫方快的方法
case 0: g.setColor(Color.black);break; //以背景為顏色畫
case 1: g.setColor(Color.blue);break; //畫正在下落的方塊
case 2: g.setColor(Color.magenta);break; //畫已經落下的方法
}
g.fill3DRect(col*unitSize,getSize().height-(row+1)*unitSize,unitSize,unitSize,true);
g.dispose();
}

public Block getBlock(){
return b; //返回block實例的引用
}

//返回屏幕數組中(row,col)位置的屬性值
public int getScrArrXY(int row,int col){
if (row < 0 || row >= rowNum || col < 0 || col >= columnNum)
return(-1);
else
return(scrArr[row][col]);
}

//返回新塊的初始行坐標方法
public int getInitRow(){
return(blockInitRow); //返回新塊的初始行坐標
}

//返回新塊的初始列坐標方法
public int getInitCol(){
return(blockInitCol); //返回新塊的初始列坐標
}

//滿行刪除方法
void deleteFullLine(){
int full_line_num = 0;
int k = 0;
for (int i=0;i<rowNum;i++){
boolean isfull = true;

L1:for(int j=0;j<columnNum;j++)
if(scrArr[i][j] == 0){
k++;
isfull = false;
break L1;
}
if(isfull) full_line_num++;
if(k!=0 && k-1!=i && !isfull)
for(int j = 0; j < columnNum; j++){
if (scrArr[i][j] == 0)
drawUnit(k-1,j,0);
else
drawUnit(k-1,j,2);
scrArr[k-1][j] = scrArr[i][j];
}
}
for(int i = k-1 ;i < rowNum; i++){
for(int j = 0; j < columnNum; j++){
drawUnit(i,j,0);
scrArr[i][j]=0;
}
}
ERS_Block.score += full_line_num;
ERS_Block.scoreField.setText(""+ERS_Block.score);
}

//判斷游戲是否結束方法
boolean isGameEnd(){
for (int col = 0 ; col <columnNum; col ++){
if(scrArr[maxAllowRowNum][col] !=0)
return true;
}
return false;
}

public void keyTyped(KeyEvent e){
}

public void keyReleased(KeyEvent e){
}

//處理鍵盤輸入的方法
public void keyPressed(KeyEvent e){
if(!ERS_Block.isPlay)
return;
switch(e.getKeyCode()){
case KeyEvent.VK_DOWN:b.fallDown();break;
case KeyEvent.VK_LEFT:b.leftMove();break;
case KeyEvent.VK_RIGHT:b.rightMove();break;
case KeyEvent.VK_SPACE:b.leftTurn();break;
}
}
}

//處理控制類
class Command implements ActionListener{
static final int button_play = 1; //給按鈕分配編號
static final int button_levelup = 2;
static final int button_leveldown = 3;
static final int button_quit = 4;
static final int button_pause = 5;
static boolean pause_resume = true;

int curButton; //當前按鈕
GameCanvas scr;

//控制按鈕類的構造方法
Command(int button,GameCanvas scr){
curButton = button;
this.scr=scr;
}

//按鈕執行方法
public void actionPerformed (ActionEvent e){
switch(curButton){
case button_play:if(!ERS_Block.isPlay){
scr.initScr();
ERS_Block.isPlay = true;
ERS_Block.score = 0;
ERS_Block.scoreField.setText("0");
ERS_Block.timer.resume();
}
scr.requestFocus();
break;
case button_levelup:if(ERS_Block.level < 10){
ERS_Block.level++;
ERS_Block.levelField.setText(""+ERS_Block.level);
ERS_Block.score = 0;
ERS_Block.scoreField.setText(""+ERS_Block.score);
}
scr.requestFocus();
break;
case button_leveldown:if(ERS_Block.level > 1){
ERS_Block.level--;
ERS_Block.levelField.setText(""+ERS_Block.level);
ERS_Block.score = 0;
ERS_Block.scoreField.setText(""+ERS_Block.score);
}
scr.requestFocus();
break;
case button_pause:if(pause_resume){
ERS_Block.timer.suspend();
pause_resume = false;
}else{
ERS_Block.timer.resume();
pause_resume = true;
}
scr.requestFocus();
break;
case button_quit:System.exit(0);
}
}
}

//方塊類
class Block {
static int[][] pattern = {
{0x0f00,0x4444,0x0f00,0x4444},//用十六進至表示,本行表示長條四種狀態
{0x04e0,0x0464,0x00e4,0x04c4},
{0x4620,0x6c00,0x4620,0x6c00},
{0x2640,0xc600,0x2640,0xc600},
{0x6220,0x1700,0x2230,0x0740},
{0x6440,0x0e20,0x44c0,0x8e00},
{0x0660,0x0660,0x0660,0x0660}
};
int blockType; //塊的模式號(0-6)
int turnState; //塊的翻轉狀態(0-3)
int blockState; //快的下落狀態
int row,col; //塊在畫布上的坐標
GameCanvas scr;

//塊類的構造方法
Block(GameCanvas scr){
this.scr = scr;
blockType = (int)(Math.random() * 1000)%7;
turnState = (int)(Math.random() * 1000)%4;
blockState = 1;
row = scr.getInitRow();
col = scr.getInitCol();
}

//重新初始化塊,並顯示新塊
public void reset(){
blockType = (int)(Math.random() * 1000)%7;
turnState = (int)(Math.random() * 1000)%4;
blockState = 1;
row = scr.getInitRow();
col = scr.getInitCol();
dispBlock(1);
}

//實現「塊」翻轉的方法
public void leftTurn(){
if(assertValid(blockType,(turnState + 1)%4,row,col)){
dispBlock(0);
turnState = (turnState + 1)%4;
dispBlock(1);
}
}

//實現「塊」的左移的方法
public void leftMove(){
if(assertValid(blockType,turnState,row,col-1)){
dispBlock(0);
col--;
dispBlock(1);
}
}

//實現塊的右移
public void rightMove(){
if(assertValid(blockType,turnState,row,col+1)){
dispBlock(0);
col++;
dispBlock(1);
}
}

//實現塊落下的操作的方法
public boolean fallDown(){
if(blockState == 2)
return(false);
if(assertValid(blockType,turnState,row-1,col)){
dispBlock(0);
row--;
dispBlock(1);
return(true);
}else{
blockState = 2;
dispBlock(2);
return(false);
}
}

//判斷是否正確的方法
boolean assertValid(int t,int s,int row,int col){
int k = 0x8000;
for(int i = 0; i < 4; i++){
for(int j = 0; j < 4; j++){
if((int)(pattern[t][s]&k) != 0){
int temp = scr.getScrArrXY(row-i,col+j);
if (temp<0||temp==2)
return false;
}
k = k >> 1;
}
}
return true;
}

//同步顯示的方法
public synchronized void dispBlock(int s){
int k = 0x8000;
for (int i = 0; i < 4; i++){
for(int j = 0; j < 4; j++){
if(((int)pattern[blockType][turnState]&k) != 0){
scr.drawUnit(row-i,col+j,s);
}
k=k>>1;
}
}
}
}

//定時線程
class MyTimer extends Thread{
GameCanvas scr;

public MyTimer(GameCanvas scr){
this.scr = scr;
}

public void run(){
while(true){
try{
sleep((10-ERS_Block.level + 1)*100);
}
catch(InterruptedException e){}
if(!scr.getBlock().fallDown()){
scr.deleteFullLine();
if(scr.isGameEnd()){
ERS_Block.isPlay = false;
suspend();
}else
scr.getBlock().reset();
}
}
}
}

class WinListener extends WindowAdapter{
public void windowClosing (WindowEvent l){
System.exit(0);
}
}

Ⅳ 如何用VB製作俄羅斯方塊游戲

BAIDU一下俄羅斯源代碼,有好多個吧..

Ⅳ 請問有哪本書很詳細得講解了怎麼用VB製作俄羅斯方塊

《visual
basic程序設計》
忘了哪個出版社的了,書上有從入門開始到基本的編程
俄羅斯方塊是書中一個實例,你可以找找

Ⅵ C++ MFC 基於對話框類 俄羅斯方塊游戲 課程設計

我這里有源代碼,告訴我你郵箱

Ⅶ 如何用VB做課程設計(俄羅斯方塊或計算機一二級考試系統)

市面上有專來門講如何用源VB做游戲的書,一個典型例子就是俄羅斯方塊。
至於想學怎麼用VB,先把VB的基礎學好吧。我是搞VB的,曾經一個人用VB和SQL Server給單位做ERP,但自身水平一般。我自己做過俄羅斯方塊,不是很成功,如果需要,給我你的郵箱,我把我的代碼給你。

Ⅷ 從網上搞了個JAVA課程設計的俄羅斯方塊的代碼,出現以下問題!!!

Note: ERS_Block.java uses or overrides a deprec
這句的意思是ERS_Block.java的文件不能被使用或重載
Recompile with -deprecation for details
這句的意思是編譯出現問題.

你先檢查下代碼,出現這種情況的原因可能是因為你們使用不同版本的JDK所造成的,用高版本編輯的文件,低版本的JDK一般在編譯的時候會出現錯誤.而低版本編輯的程序,用高版本編譯也會出現問題.這是因為他們在在包\類等問題上不統一.

Ⅸ 求c語言俄羅斯方塊課程設計報告範文

自己找常式學

熱點內容
武漢大學學生會輔導員寄語 發布:2021-03-16 21:44:16 瀏覽:612
七年級學生作文輔導學案 發布:2021-03-16 21:42:09 瀏覽:1
不屑弟高考成績 發布:2021-03-16 21:40:59 瀏覽:754
大學畢業證會有成績單 發布:2021-03-16 21:40:07 瀏覽:756
2017信陽學院輔導員招聘名單 發布:2021-03-16 21:40:02 瀏覽:800
查詢重慶2018中考成績查詢 發布:2021-03-16 21:39:58 瀏覽:21
結業考試成績怎麼查詢 發布:2021-03-16 21:28:40 瀏覽:679
14中醫醫師資格筆試考試成績查分 發布:2021-03-16 21:28:39 瀏覽:655
名著賞析課程標准 發布:2021-03-16 21:27:57 瀏覽:881
北京大學商業領袖高端培訓課程 發布:2021-03-16 21:27:41 瀏覽:919