C語言編寫俄羅斯方塊論文_第1頁(yè)
C語言編寫俄羅斯方塊論文_第2頁(yè)
C語言編寫俄羅斯方塊論文_第3頁(yè)
C語言編寫俄羅斯方塊論文_第4頁(yè)
C語言編寫俄羅斯方塊論文_第5頁(yè)
已閱讀5頁(yè),還剩41頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、俄羅斯方塊學(xué) 號(hào): 班 級(jí):姓 名:指導(dǎo)教師:完成日期:2012年5月目錄1. 引言 11.1 開發(fā)工具 11.1.1 C是中級(jí)預(yù)言 11.1.2 C是結(jié)構(gòu)化語言 11.1.3 C語言功能齊全 11.1.4 C語言可移植性好 12 游戲設(shè)計(jì) 22.1 游戲設(shè)計(jì)要求 22.1.1. 設(shè)計(jì)題目:俄羅斯方塊游戲 . 22.1.2. 設(shè)計(jì)容: . 22.1.3. 功能模塊劃分:. 22.2 游戲設(shè)計(jì)思想 . 22.2.1 游戲界面: 22.2.2 設(shè)計(jì)思路 . 22.3 :游戲功能 32.3.1 :開始部分 32.3.2. 運(yùn)行部分 . 33. 實(shí)驗(yàn)總結(jié): 43.1 開發(fā)背景與需求分析 . 43.2

2、系統(tǒng)功能介紹 . 44. 核心代碼: 8總結(jié) 21參考文獻(xiàn): 22基于C語言的俄羅斯方塊游戲摘要:俄羅斯方塊是一款風(fēng)靡全球的電視游戲機(jī)和掌上游戲機(jī)游戲。俄羅斯方塊的基本規(guī)則是移動(dòng)、旋轉(zhuǎn)和擺放游戲自動(dòng)輸出的各種方塊,使之排列成完整的一行或多行并 且消除得分。由于上手簡(jiǎn)單、老少皆宜,從而家喻戶曉,風(fēng)靡世界。關(guān)鍵詞:C語言;心得體會(huì);影響1.引言隨著社會(huì)的發(fā)展,人們生活的步調(diào)日益加快,越來越多的人加入了全球化的世界人們不在拘泥于一小塊天地加班,出差成了現(xiàn)代人不可避免的公務(wù)而此時(shí)一款可以隨時(shí)隨地娛樂的游戲成了必需品.在手機(jī)和電腦成為人們?nèi)沼闷返纳鐣?huì),一款能在其上能便捷運(yùn)行的游戲成為買家的參考點(diǎn)現(xiàn)在我們

3、所要設(shè)計(jì)的這一款基于C語言的游戲一一貪吃蛇,就是滿足以上要求而設(shè)計(jì)出來的,希望能給玩家?guī)韸蕵?貪吃蛇這一游戲簡(jiǎn)單易行,操作方便,娛樂性較強(qiáng),吸引了不少人.這一款游戲緊緊地抓住了人們的心理,雖然簡(jiǎn)單,卻起樂無窮,在人們不斷追求更多的欲望下,該游戲給人們帶來了追逐的快感,以及成功后的滿足感,對(duì)于一直處于高壓下的現(xiàn)代人是很好的放松工具1.1開發(fā)工具C/C+程序設(shè)計(jì)學(xué)習(xí)與試驗(yàn)系統(tǒng)該系統(tǒng)繼承了 Turbo C2.0/C+3.0、GCC Visua C+6.0這四種常見的編譯器,可以很好滿足目前主流的C語言教材的實(shí)驗(yàn)需求。C語言具有下列特點(diǎn):1.1.1 C 是中級(jí)預(yù)言它把高級(jí)語言的基本結(jié)構(gòu)和語句與低級(jí)語

4、言的實(shí)用性結(jié)合起來,C語言可以像匯編語言一樣對(duì)位、字節(jié)和地址進(jìn)行操作,通常還是稱C為高級(jí)語言。1.1.2 C 是結(jié)構(gòu)化語言結(jié)構(gòu)化語言的特點(diǎn)是程序的各個(gè)部分除了必要地?cái)?shù)據(jù)交流外彼此獨(dú)立。這種結(jié)構(gòu)化方式可使程序?qū)哟吻逦?,便于使用,維護(hù)及調(diào)試。1.1.3 C語言功能齊全C語言具有多種數(shù)據(jù)類型,并引入了指針概念,可使程序效率更高;C語言也具有強(qiáng)大的圖形功能;具有較強(qiáng)的計(jì)算功能、邏輯判斷功能。1.1.4 C語言可移植性好與匯編語言相比,C語言程序適用圍大,可用于各種操作系統(tǒng)和各種型號(hào)的計(jì)算機(jī)。2游戲設(shè)計(jì)2.1游戲設(shè)計(jì)要求2.1.1. 設(shè)計(jì)題目:俄羅斯方塊游戲2.1.2. 設(shè)計(jì)容:一組由4個(gè)小型正方形組成

5、的規(guī)則圖形,中文通稱為方塊共有7種,分別以 S、Z、L、J、I、0、T這7個(gè)字母的形狀來命名。通過設(shè)計(jì)者預(yù)先設(shè)置的隨機(jī)發(fā)生器不斷地輸出單個(gè)方塊 到場(chǎng)地頂部,以一定的規(guī)則進(jìn)行移動(dòng)、旋轉(zhuǎn)、下落和擺放,鎖定并填充到場(chǎng)地中。每次擺放 如果將場(chǎng)地的一行或多行完全填滿,則組成這些行的所有小正方形將被消除,并且以此來?yè)Q 取一定的積分或者其他形式的獎(jiǎng)勵(lì)。而未被消除的方塊會(huì)一直累積,并對(duì)后來的方塊擺放造 成各種影響。如果未被消除的方塊堆放的高度超過場(chǎng)地所規(guī)定的最大高度則游戲結(jié)束。2.1.3. 功能模塊劃分:系統(tǒng)功能模塊2.2游戲設(shè)計(jì)思想2.2.1游戲界面:方塊堆積。遇整則消。2.2.2設(shè)計(jì)思路10,列高為20,

6、以每個(gè)小正Tetromino,中文通稱為方塊I :一次最多消除四層J1、一個(gè)用于擺放小型正方形的平面虛擬場(chǎng)地,其標(biāo)準(zhǔn)大小:行寬為 方形為單位。2.、一組由4個(gè)小型正方形組成的規(guī)則圖形,英文稱為 共有7種,分別以S Z、L、J、I、O T這7個(gè)字母的形狀來命名。(左右):最多消除三層,或消除二層L:最多消除三層,或消除二層O:消除一至二層S(左右):最多二層,容易造成孔洞Z (左右):最多二層,容易造成孔洞T:最多二層(1)部分游戲有單格方塊,可以穿透固定的方塊到達(dá)最下層空位。其他的改版中出現(xiàn)更多特別的造 型。方塊會(huì)從區(qū)域上方開始緩慢繼續(xù)落下。(2)玩家可以做的操作有:以 90度為單位旋轉(zhuǎn)方塊,

7、以格子為單位左右移動(dòng)方塊,讓方塊加速落下。(3)方塊移到區(qū)域最下方或是著地到其他方塊上無法移動(dòng)時(shí),就會(huì)固定在該處,而新的方塊出現(xiàn)在區(qū)域上方開始落下。(4)當(dāng)區(qū)域中某一列橫向格子全部由方塊填滿,則該列會(huì)消失并成為玩家的得分。同時(shí)刪除的列數(shù)越多,得分指數(shù)上升。(5)當(dāng)固定的方塊堆到區(qū)域最上方而無法消除層數(shù)時(shí),則游戲結(jié)束。(6)一般來說,游戲還會(huì)提示下一個(gè)要落下的方塊,熟練的玩家會(huì)計(jì)算到下一個(gè)方塊,評(píng)估現(xiàn)在要如何 進(jìn)行。由于游戲能不斷進(jìn)行下去對(duì)商業(yè)用游戲不太理想,所以一般還會(huì)隨著游戲的進(jìn)行而加速提高 難度。3、通過設(shè)計(jì)者預(yù)先設(shè)置的隨機(jī)發(fā)生器不斷地輸出單個(gè)方塊到場(chǎng)地頂部,以一定的規(guī)則進(jìn)行移動(dòng)、旋轉(zhuǎn)、下

8、落和擺放,鎖定并填充到場(chǎng)地中。每次擺放如果將場(chǎng)地的一行或多行完全填滿, 則組成這些行的所有小正方形將被消除,并且以此來?yè)Q取一定的積分或者其他形式的獎(jiǎng)勵(lì)。而未被 消除的方塊會(huì)一直累積,并對(duì)后來的方塊擺放造成各種影響。4、如果未被消除的方塊堆放的高度超過場(chǎng)地所規(guī)定的最大高度(并不一定是20或者玩家所能見到的高度),則游戲結(jié)束。具體到每一款不同的游戲,其中的細(xì)節(jié)規(guī)則都可能有千差萬別,但是以上的基本規(guī)則是相同的。2.3 :游戲功能2.3.1 :開始部分游戲是運(yùn)行在圖形模式下的,所以第一步一定是初始化圖形模式,接著要有開始的界面,就像 書有封面一樣,我設(shè)置了一個(gè)游戲的標(biāo)題畫面,除了游戲標(biāo)題畫面我還設(shè)置了

9、一個(gè)歡迎畫面。標(biāo)題 畫面以后,還要為游戲的運(yùn)行部分作初始化,包括繪制游戲運(yùn)行時(shí)的背景,對(duì)游戲某些重要變量的初始化。2.3.2.運(yùn)行部分俄羅斯方塊的要求為: 不同形狀組合的方塊從界面上方落下。通過鍵盤上的四個(gè)光標(biāo)控制方塊下落時(shí)的形狀轉(zhuǎn)換和下落方向。方塊堆積在一起,將區(qū)域占滿時(shí)則會(huì)消除以增加游戲分?jǐn)?shù)。整個(gè)游戲過程分為三個(gè)步驟:1、按游戲界面的開始”按鈕或者F2鍵來開始游戲,自己使用右邊的窗口,對(duì)手使用左邊的窗口2、 鍵盤操作:系統(tǒng)缺省設(shè)置使用右邊的窗口,用光標(biāo)操作 ,”-左移一格;t右移一格;” f 旋 轉(zhuǎn)方塊;J方塊丟下(方塊下落到底),”E nd健可以一格格的下落,用戶還可以自定義習(xí)慣的按鍵

10、來操作游戲。3、 計(jì)分牌顯示的容:“分?jǐn)?shù)”為雙方本局的分?jǐn)?shù),計(jì)分標(biāo)準(zhǔn)為下落一個(gè)塊10分,一次消一行100 分、2行200分、3行400分、4行800分。等級(jí)”為雙方的游戲設(shè)置等級(jí),當(dāng)分?jǐn)?shù)達(dá)到一定的值, 等級(jí)就會(huì)提升、速度加快?!靶袛?shù)”第一行為雙方消的行數(shù),第二行是送給對(duì)方的行數(shù)?!氨确帧睘殡p方贏的局?jǐn)?shù)。2.3.3 :結(jié)束部分:游戲結(jié)束時(shí),顯示“ GAME OVER3. 實(shí)驗(yàn)總結(jié) :3.1 開發(fā)背景與需求分析隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,人們的生活越來越離不開網(wǎng)絡(luò),網(wǎng)絡(luò)給人們帶來了 各種各樣的信息和更多更新的娛樂。據(jù)統(tǒng)計(jì)。每天上網(wǎng)的人群中75%的人用來豐富自己的生活。其中游戲最為常見和普遍。所以,這次課程

11、設(shè)計(jì)我想實(shí)現(xiàn)一個(gè)小 游戲:俄羅斯方塊。需求分析1) 游戲面板(畫布) GameCanvas類,完成游戲顯示;2) 方 塊繪畫 drawUnit 類,方塊下落過程中的各種形態(tài);3) 主 界面實(shí)現(xiàn)游戲的開始,退出,暫停,提高級(jí)數(shù),降低級(jí)數(shù)功能及圖像界面排版;4) 通 過鍵盤按鍵實(shí)現(xiàn)游戲,并且可以調(diào)節(jié)游戲速度。3.2 系統(tǒng)功能介紹俄羅斯方塊是一個(gè)非常復(fù)雜但比較有趣并且耐玩的游戲,相信很多人對(duì)俄羅斯方塊并不陌生,如下圖所示,游戲中共有七種方塊,每種方塊都有四個(gè)方格 組成。這七種方塊可以旋轉(zhuǎn) 90 度、 180 度、 270 度,因此每種方塊有四種狀態(tài), 七種方塊總有 28 種狀態(tài),這 28 種狀態(tài)的方

12、塊隨機(jī)產(chǎn)生,自由下落,落下時(shí)可由 玩家通過鍵盤上的上、下、左、右控制鍵來控制方塊的反轉(zhuǎn)、移動(dòng)和加速下落。 如果下落時(shí),方塊填滿某一行則這一行消失,同時(shí)給玩家加分,若由存在空格的 方塊填滿整個(gè)窗口,則游戲結(jié)束。包鍛吳fi上快寺威0 Airthor:eatBE炭髙紅孜腿if致館咸直厚用岀叢卻圖1-1初始狀態(tài)ffc寥瞞必映3&或 VI* U Autb.ox : Vxoc-?inll-lftlfx111圖1-2 開始游戲圖1-3 消除一行H直計(jì)斯方坎潘戲T II _ U Aulhtir : 3.ncmt.dK圖1-4 消除兩行B 俄羅 JJf 方塊3&戲 U U Ant hor s me ent圖1-

13、5 消除四行找零斷方菇亦VI. 0 Author ;UicBnLL 1巧|僅圖1-6游戲結(jié)束4. 核心代碼:import java.awt.*;import java.awt.eve nt.*;/俄羅斯方塊類public class computer exte nds Frame public static boolea n isPlay = false;public static in t level = 1, score = 0;public static TextField scoreField, levelField;public static MyTimer timer;GameCa

14、 nvas gameScr;/ 聲明一個(gè)屬于畫布類得變量public static void main( Stri ng argus) computer ers = new computer( 俄羅斯方塊游戲V1.0 Author:Vi nee nt);運(yùn)用構(gòu)造方法為框架名Win dowListe ner winiste ner = new Win Liste ner();定義一個(gè)窗口監(jiān)聽事件對(duì)象為框架添加該監(jiān)聽器ers.addWi ndowListe ner(winiste ner);/computer(String title)/俄羅斯方塊類的構(gòu)造方法super(title);/調(diào)用父類得

15、構(gòu)造方法設(shè)置框架的布局流setSize(600, 480);/ 設(shè)置框架的尺寸 setLayout(new GridLayout(1, 2);/ gameScr = new GameCanvas();gameScr.addKeyListener(gameScr);/ 為該對(duì)象注冊(cè)鍵盤點(diǎn)擊監(jiān)聽器timer = new MyTimer(gameScr); timer.setDaemon(true);timer.start(); timer.suspend();add(gameScr);Panel rightScr = new Panel(); rightScr.setLayout(new Grid

16、Layout(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);/ 定義標(biāo)簽和初始值Label scorep = new Label(分?jǐn)?shù) :, Label.LEFT);Label levelp = new Label(級(jí)數(shù) :, Label.LEFT);scor

17、eField = 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.setSiz

18、e(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);/ 定義按鈕 playButton play_b = new Button( 開始游戲 ); play_b.setSize(new

19、Dimension(50, 200);play_b.addActionListener(new Command(Command.button_play, gameScr);/ 定義按鈕 Level UPButton level_up_b = new Button(提高級(jí)數(shù) );level_up_b.setSize(new Dimension(50, 200);level_up_b.addActionListener(new Command(Command.button_levelup, gameScr);/ 定義按鈕 Level DownButton level_down_b = new Bu

20、tton(降低級(jí)數(shù) );level_down_b.setSize(new Dimension(50, 200); level_down_b.addActionListener(newCommand(Command.button_leveldown,gameScr);/ 定義按鈕 Level PauseButton pause_b = new Button( 游戲暫停 ); pause_b.setSize(new Dimension(50, 200);pause_b.addActionListener(new Command(Command.button_pause,gameScr);/ 定義按

21、鈕 QuitButton 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.

22、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; /小方塊邊長(zhǎng)int rowNum; /正方格的行數(shù)int columnNum; /正方格的列數(shù)int maxAllowRowNum; / 允許有多少行未削

23、int blockInitRow; / 新出現(xiàn)塊的起始行坐標(biāo) int blockInitCol; / 新出現(xiàn)塊的起始列坐標(biāo) int scrArr; /屏幕數(shù)組Block b; / 對(duì)方快的引用/ 畫布類的構(gòu)造方法GameCanvas() rowNum = 15; columnNum = 10;maxAllowRowNum = rowNum - 2;b = new Block(this); blockInitRow = rowNum - 1;blockInitCol = columnNum / 2 - 2; scrArr = new int3232;/ 初始化屏幕,并將屏幕數(shù)組清零的方法 voi

24、d initScr() for (int i = 0; i rowNum; i+)for (int j = 0; j columnNum; j+)scrArrij = 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, scrArrij);/ 畫方塊的方法public void drawUnit(int row, int col, int type) scrArrrowc

25、ol = 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; / 畫已經(jīng)落下的方法g.fill3DRect(col * unitSize, getSize().height - (row + 1) * unitSize, unitSize, unitSize, tru

26、e);g.dispose();public Block getBlock() return b; / 返回 block 實(shí)例的引用/ 返回屏幕數(shù)組中 (row,col) 位置的屬性值public int getScrArrXY(int row, int col) if (row = rowNum | col = columnNum) return (-1);elsereturn (scrArrrowcol);/ 返回新塊的初始行坐標(biāo)方法 public int getInitRow() return (blockInitRow); /返回新塊的初始行坐標(biāo)/ 返回新塊的初始列坐標(biāo)方法public

27、int getInitCol() return (blockInitCol); / 返回新塊的初始列坐標(biāo) / 滿行刪除方法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 (scrArrij = 0) k+;isfull = false;break L1;if (isfull)full_line_num+;if (k != 0 & k - 1 != i &

28、!isfull)for (int j = 0; j columnNum; j+) if (scrArrij = 0)drawUnit(k - 1, j, 0);elsedrawUnit(k - 1, j, 2);scrArrk - 1j = scrArrij;for (int i = k - 1; i rowNum; i+) for (int j = 0; j columnNum; j+) drawUnit(i, j, 0);scrArrij = 0;computer.score += full_line_num; computer.scoreField.setText( + computer

29、.score); / 判斷游戲是否結(jié)束方法boolean isGameEnd() for (int col = 0; col columnNum; col+) if (scrArrmaxAllowRowNumcol != 0)return true;return false;public void keyTyped(KeyEvent e) public void keyReleased(KeyEvent e) / 處理鍵盤輸入的方法public void keyPressed(KeyEvent e) if (!computer.isPlay)return;switch (e.getKeyCod

30、e() case KeyEvent.VK_DOWN:b.fallDown(); break;case KeyEvent.VK_LEFT:b.leftMove();break;case KeyEvent.VK_RIGHT: b.rightMove();break;case KeyEvent.VK_UP:b.leftTurn(); break;/ 處理控制類給按鈕分配編號(hào)class Command implements ActionListener static final int button_play = 1; / static final int button_levelup = 2;sta

31、tic final int button_leveldown = 3; static final int button_quit = 4;static final int button_pause = 5;static boolean pause_resume = true;int curButton; / 當(dāng)前按鈕GameCanvas scr;/ 控制按鈕類的構(gòu)造方法Command(int button, GameCanvas scr) curButton = button;this.scr = scr;/ 按鈕執(zhí)行方法public void actionPerformed(ActionEv

32、ent e) switch (curButton) case button_play:if (!computer.isPlay) scr.initScr();computer.isPlay = true;computer.score = 0;computer.scoreField.setText(0); computer.timer.resume();scr.requestFocus();break;case button_levelup:if (computer.level 1) computer.level-;computer.levelField.setText( + computer.

33、level);computer.score = 0;computer.scoreField.setText( + computer.score);scr.requestFocus();break;case button_pause:if (pause_resume) computer.timer.suspend();pause_resume = false; else computer.timer.resume();pause_resume = true;scr.requestFocus();break;case button_quit:System.exit(0);/ 方塊類class Bl

34、ock static int pattern = 0x0f00, 0x4444, 0x0f00, 0x4444 ,/用十六進(jìn)至表示,本行表示長(zhǎng)條四種狀態(tài) 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; /塊的模式號(hào)( 0-6

35、 )int turnState; /塊的翻轉(zhuǎn)狀態(tài)( 0-3 )int blockState; / 快的下落狀態(tài) int row, col; /塊在畫布上的坐標(biāo)GameCanvas scr;/ 塊類的構(gòu)造方法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();/ 重新初始化

36、塊,并顯示新塊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);/ 實(shí)現(xiàn)“塊”翻轉(zhuǎn)的方法public void leftTurn() if (assertValid(blockType, (turnState + 1) % 4, row, col) dispBlock(0);tu

37、rnState = (turnState + 1) % 4;dispBlock(1);/ 實(shí)現(xiàn)“塊”的左移的方法public void leftMove() if (assertValid(blockType, turnState, row, col - 1) dispBlock(0);col-;dispBlock(1);/ 實(shí)現(xiàn)塊的右移public void rightMove() if (assertValid(blockType, turnState, row, col + 1) dispBlock(0);col+;dispBlock(1);/ 實(shí)現(xiàn)塊落下的操作的方法public boo

38、lean 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+) f

39、or (int j = 0; j 4; j+) if (int) (patternts & k) != 0) int temp = scr.getScrArrXY(row - i, col + j); if (temp 1;return true;/ 同步顯示的方法public synchronized void dispBlock(int s) int k = 0x8000;for (int i = 0; i 4; i+) for (int j = 0; j 1;/ 定時(shí)線程class MyTimer extends Thread GameCanvas scr;public MyTimer(

40、GameCanvas scr) this.scr = scr;public void run() while (true) try sleep(10 - computer.level + 1) * 100); catch (InterruptedException e) if (!scr.getBlock().fallDown() scr.deleteFullLine();if (scr.isGameEnd() computer.isPlay = false;suspend(); elsescr.getBlock().reset();class WinListener extends Wind

41、owAdapter public void windowClosing(WindowEvent l) System.exit(0);總結(jié)1 感悟:當(dāng)今計(jì)算機(jī)應(yīng)用在生活中可以說得是無處不在。因此作為二十一世紀(jì)的大學(xué)來說掌握程序開發(fā)技術(shù)是十分重要的,而C語言又是最常見,功能最強(qiáng)大的一種高級(jí)語言,因此做好C語言課程設(shè)計(jì)是十分必要的。 回顧起此次課程設(shè)計(jì),至今我們?nèi)愿锌H多,的確,自從拿到題目到完成 整個(gè)編程,從理論到實(shí)踐,在這么長(zhǎng)的時(shí)間里,可以學(xué)到很多很多的東西,同時(shí)不僅可以鞏固了以 前所學(xué)過的知識(shí),而且學(xué)到了很多在書本上所沒有學(xué)到過的知識(shí)。通過這次課程設(shè)計(jì)使我們懂得了 理論與實(shí)際相結(jié)合是很重要的,

42、只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合 起來,從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。 在設(shè)計(jì)的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會(huì)遇到過各種各樣的問 題,同時(shí)在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,對(duì)一些前面學(xué)過的知識(shí)理解得不夠深刻,掌握得 不夠牢固,比如說結(jié)構(gòu)體,指針,鏈表通過這次課程設(shè)計(jì)之后,我們把前面所學(xué)過的知識(shí)又重 新溫故了一遍。我做的是做俄羅斯方塊游戲。簡(jiǎn)單的一個(gè),但對(duì)我來說卻是一個(gè)很大的困難。更加是第一次做基于C語言的課程設(shè)計(jì),所以連續(xù)幾天翻閱書籍或是參考網(wǎng)上容卻絲毫沒有進(jìn)展,最主要是不知從 何開始

43、,這個(gè)時(shí)候才知道上課老師們不厭其煩的教導(dǎo)是多么的寶貴,這個(gè)時(shí)候才后悔上課的時(shí)候沒 有認(rèn)真的聽講??墒乾F(xiàn)在一切都晚了,還好時(shí)間還算是充裕,只好拿出書本重新復(fù)習(xí)一下。不過經(jīng) 過幾天的努力,大體上把課本上的知識(shí)點(diǎn)看了一遍,知識(shí)點(diǎn)也都基本是撐握了,所以一下一步就是 開始正式的編程序了。不過畢竟水平有限,還是不知如何下手,于是就在網(wǎng)上下了一篇類似的程序, 經(jīng)過仔細(xì)的研究,終于讀懂了 C 語言編程的基本過程和方法。 經(jīng)過一波三折,終于開始正式編程。而且編程是一件高精度、?;氖虑?,稍有疏乎都會(huì)影響全局,也可能因?yàn)槟骋惶幍男〉腻e(cuò)誤 而導(dǎo)致整個(gè)程序的無法運(yùn)行。所以認(rèn)真仔細(xì)就是非常重要的了。開始的時(shí)候真的感覺編

44、程是一件很 無聊的事情,所以就在網(wǎng)上下載的程序的基礎(chǔ)上開始行動(dòng)了,不過當(dāng)一個(gè)程序運(yùn)行成功的時(shí)候那種 喜悅是無法言語的,那種成就感是無法比擬的。又經(jīng)過幾天的努力,終于把程序完成了,盡管程序 還是有很多錯(cuò)誤和漏洞,不過還是很高興的。無論如何是自己的勞動(dòng)成果,是自己經(jīng)過努力得到的 成績(jī),同時(shí)也是學(xué)習(xí) C 語言的一次實(shí)踐作業(yè),自己進(jìn)步的證明。通過這次課程設(shè)計(jì),使我對(duì) C語言有了更進(jìn)一步的認(rèn)識(shí)和了解,要想學(xué)好它要重在實(shí)踐,要通 過不斷的上機(jī)操作才能更好地學(xué)習(xí)它,我也發(fā)現(xiàn)我的好多不足之處,首先是自己在指法上還不行, 經(jīng)常按錯(cuò)字母,通過學(xué)習(xí)也有所改進(jìn);再有對(duì) C語言的一些標(biāo)準(zhǔn)庫(kù)函數(shù)不太了解,還有對(duì)函數(shù)調(diào)用

45、的正確使用不夠熟悉,還有對(duì) C語言中經(jīng)常出現(xiàn)的錯(cuò)誤也不了解,通過實(shí)踐的學(xué)習(xí),我認(rèn)識(shí)到學(xué)好 計(jì)算機(jī)要重視實(shí)踐操作,不僅僅是學(xué)習(xí) C語言,還是其它的語言,以及其它的計(jì)算機(jī)方面的知識(shí)都 要重在實(shí)踐,所以后在學(xué)習(xí)過程中,我會(huì)更加注視實(shí)踐操作,使自己便好地學(xué)好計(jì)算機(jī)。在該游戲設(shè)計(jì)過程中,收獲知識(shí),提高能力的同時(shí),我也學(xué)到了很多人生的哲理,懂得怎么樣 去制定計(jì)劃,怎么樣去實(shí)現(xiàn)這個(gè)計(jì)劃,并掌握了在執(zhí)行過程中怎么樣去克服心理上的不良情緒。2 感謝:經(jīng)過兩個(gè)星期的苦心鉆研,系統(tǒng)終于制作完畢。在本次課程設(shè)計(jì)中困 難遇到不少,也讓我學(xué)到了很多。在這次系統(tǒng)開發(fā)的過程中,我深深地體會(huì)到了 做一個(gè)系統(tǒng),首先進(jìn)行需求分析的

46、重要性。了解了一個(gè)系統(tǒng)的制作,從功能分析 到功能模塊分析,與其他系統(tǒng)的關(guān)系,這些都有待以后進(jìn)一步的改進(jìn)。通過實(shí)踐 對(duì)我以后的學(xué)習(xí)是一筆不小的財(cái)富!在此,感謝班上同學(xué)對(duì)我的幫助和指點(diǎn),沒有他們所提供的資料,僅憑我個(gè) 人力量,在短短的兩周時(shí)間里是很難完成這個(gè)設(shè)計(jì)的。更要感謝的是我的老師, 感謝老師孜孜不倦的教誨,一絲不茍的精神和一視的教學(xué)風(fēng)格。我會(huì)僅記老師的 教誨,一步一個(gè)腳印的完成自己的學(xué)業(yè)!參考文獻(xiàn):1 . 裘宗燕 著,從問題到程序科學(xué),北京大學(xué), 1999年 4 月。2 .C程序設(shè)計(jì)(第二版),譚浩強(qiáng)編,清華大學(xué),1999年12月。3 .C語言編程常見問題解答,美Paul S. R. Chi

47、shohm 等著,芳妮 呂波譯,清 華大學(xué), 11996年 12月。4 .The CProgramming Language, by Brian W.Kernighan and Dennis M. Ritchie.Pubilished by Prentice-Hall in 1988。5 . 朱若愚. 數(shù)據(jù)結(jié)構(gòu) M. 北京: 電子工業(yè) , 2006.16 . 傅清祥,王曉東. 數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì) M. 北京: 電子工業(yè) , 2006.37 .春葆.數(shù)據(jù)結(jié)構(gòu)(C語言版)習(xí)題與解析M.北京:清華大學(xué),2006.18. 大有. 數(shù)據(jù)結(jié)構(gòu) M. 北京: 高等教育, 2006.39. 王敬華,靜. C

48、語言程序設(shè)計(jì) M. 北京: 清華大學(xué), 2007.10 10. 徐孝凱. 數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)明教程 .M. 北京: 清華大學(xué) , 2006.04課程設(shè)計(jì)俄羅斯方塊游戲源代碼本程序共三個(gè)類, 建一個(gè)包 square 。把三個(gè)類都封裝到一個(gè)包里面, 三個(gè)類分別是 ControllerMain , Squarepackage square;import javax.swing.JPanel; import java.awt.Color; / java 程序是會(huì)報(bào)錯(cuò)的。事倒入 java 程序所需要的類庫(kù)文件。如果不倒入相應(yīng)的文件。import javax.swing.JLabel;public class C

49、ontroller extends Thread /Controller類從定義從父類繼承來來的某些成員變量和成員方法,游戲控制線程 private int x; /private int y;private Square sq; / private Square next; / private JPanel sc; / private boolean state; / private int sorce;/private int speed;/private JLabel jl1;/private JLabel jl2;private JPanel jp; / private JPanel

50、sc2;private int sleepTime; /方塊左上角的坐標(biāo)方塊對(duì)象的引用當(dāng)前 下一個(gè)方塊的引用 顯示填充狀態(tài)分值 下落速度 分?jǐn)?shù)速度提示下一個(gè)方塊提示等待時(shí)間public Controller(int x, int y, JPanel sc, boolean state, / 遞引用構(gòu)造器int sorce, int speed, JLabel jl1, JLabel jl2, JPanel jp, JPanel sc2) this.x = x;this.y = y;this.sc = sc;this.state = state;this.sorce = sorce;this.speed = speed;this.jl1 = jl1;this.jl2 = jl2;this.jp = jp;this.sc2 = sc2;this

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論