久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

C語(yǔ)言編寫(xiě)俄羅斯方塊論文

時(shí)間:2019-05-12 00:12:03下載本文作者:會(huì)員上傳
簡(jiǎn)介:寫(xiě)寫(xiě)幫文庫(kù)小編為你整理了多篇相關(guān)的《C語(yǔ)言編寫(xiě)俄羅斯方塊論文》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫(xiě)寫(xiě)幫文庫(kù)還可以找到更多《C語(yǔ)言編寫(xiě)俄羅斯方塊論文》。

第一篇:C語(yǔ)言編寫(xiě)俄羅斯方塊論文

俄羅斯方塊

學(xué) 號(hào):

班 級(jí):

姓 名:

指導(dǎo)教師:

完成日期:2012年5月

1.引言..............................................................................................................................................1

1.1開(kāi)發(fā)工具............................................................................................................................1 1.1.1 C是中級(jí)預(yù)言......................................................................................................1

1.1.2 C是結(jié)構(gòu)化語(yǔ)言..................................................................................................1 1.1.3 C語(yǔ)言功能齊全..................................................................................................1 1.1.4 C語(yǔ)言可移植性好..............................................................................................1 游戲設(shè)計(jì)......................................................................................................................................2

2.1游戲設(shè)計(jì)要求....................................................................................................................2

2.1.1.設(shè)計(jì)題目:俄羅斯方塊游戲.............................................................................2

2.1.2.設(shè)計(jì)內(nèi)容:.........................................................................................................2 2.1.3.功能模塊劃分:.................................................................................................2 2.2 游戲設(shè)計(jì)思想...................................................................................................................2

2.2.1游戲界面:............................................................................................................2 2.2.2 設(shè)計(jì)思路.......................................................................................................................2 2.3:游戲功能......................................................................................................................3 2.3.1:開(kāi)始部分...........................................................................................................3

2.3.2.運(yùn)行部分...............................................................................................................3

3.實(shí)驗(yàn)總結(jié):..................................................................................................................................4

3.1 開(kāi)發(fā)背景與需求分析.......................................................................................................4 3.2 系統(tǒng)功能介紹...................................................................................................................4 4.核心代碼:................................................................................................................................8 總結(jié)................................................................................................................................................21 參考文獻(xiàn):....................................................................................................................................22

基于C語(yǔ)言的俄羅斯方塊游戲

[摘要]:俄羅斯方塊是一款風(fēng)靡全球的電視游戲機(jī)和掌上游戲機(jī)游戲。俄羅斯方塊的基本規(guī)則是移動(dòng)、旋轉(zhuǎn)和擺放游戲自動(dòng)輸出的各種方塊,使之排列成完整的一行或多行并且消除得分。由于上手簡(jiǎn)單、老少皆宜,從而家喻戶(hù)曉,風(fēng)靡世界。[關(guān)鍵詞]:C語(yǔ)言;心得體會(huì);影響

1.引言 隨著社會(huì)的發(fā)展,人們生活的步調(diào)日益加快,越來(lái)越多的人加入了全球化的世界.人們不在拘泥于一小塊天地.加班,出差成了現(xiàn)代人不可避免的公務(wù).而此時(shí)一款可以隨時(shí)隨地娛樂(lè)的游戲成了必需品.在手機(jī)和電腦成為人們?nèi)沼闷返纳鐣?huì),一款能在其上能便捷運(yùn)行的游戲成為買(mǎi)家的參考點(diǎn).現(xiàn)在我們所要設(shè)計(jì)的這一款基于C語(yǔ)言的游戲——貪吃蛇,就是滿(mǎn)足以上要求而設(shè)計(jì)出來(lái)的,希望能給玩家?guī)?lái)娛樂(lè).貪吃蛇這一游戲簡(jiǎn)單易行,操作方便,娛樂(lè)性較強(qiáng),吸引了不少人.這一款游戲緊緊地抓住了人們的心理,雖然簡(jiǎn)單,卻起樂(lè)無(wú)窮,在人們不斷追求更多的欲望下,該游戲給人們帶來(lái)了追逐的快感,以及成功后的滿(mǎn)足感,對(duì)于一直處于高壓下的現(xiàn)代人是很好的放松工具.1.1開(kāi)發(fā)工具

《C/C++程序設(shè)計(jì)學(xué)習(xí)與試驗(yàn)系統(tǒng)》

該系統(tǒng)繼承了Turbo C2.0/C++3.0、GCC、Visua C++6.0這四種常見(jiàn)的編譯器,可以很好滿(mǎn)足目前主流的C語(yǔ)言教材的實(shí)驗(yàn)需求。

C語(yǔ)言具有下列特點(diǎn):

1.1.1 C是中級(jí)預(yù)言

它把高級(jí)語(yǔ)言的基本結(jié)構(gòu)和語(yǔ)句與低級(jí)語(yǔ)言的實(shí)用性結(jié)合起來(lái),C語(yǔ)言可以像匯編語(yǔ)言一樣對(duì)位、字節(jié)和地址進(jìn)行操作,通常還是稱(chēng)C為高級(jí)語(yǔ)言。

1.1.2 C是結(jié)構(gòu)化語(yǔ)言

結(jié)構(gòu)化語(yǔ)言的特點(diǎn)是程序的各個(gè)部分除了必要地?cái)?shù)據(jù)交流外彼此獨(dú)立。這種結(jié)構(gòu)化方式可使程序?qū)哟吻逦阌谑褂茫S護(hù)及調(diào)試。

1.1.3 C語(yǔ)言功能齊全

C語(yǔ)言具有多種數(shù)據(jù)類(lèi)型,并引入了指針概念,可使程序效率更高;C語(yǔ)言也具有強(qiáng)大的圖形功能;具有較強(qiáng)的計(jì)算功能、邏輯判斷功能。

1.1.4 C語(yǔ)言可移植性好

與匯編語(yǔ)言相比,C語(yǔ)言程序適用范圍大,可用于各種操作系統(tǒng)和各種型號(hào)的計(jì)算機(jī)。游戲設(shè)計(jì)

2.1游戲設(shè)計(jì)要求

2.1.1.設(shè)計(jì)題目:俄羅斯方塊游戲 2.1.2.設(shè)計(jì)內(nèi)容:

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

2.1.3.功能模塊劃分:

系統(tǒng)功能模塊

2.2 游戲設(shè)計(jì)思想

2.2.1游戲界面:

方塊堆積。遇整則消。

2.2.2 設(shè)計(jì)思路

1、一個(gè)用于擺放小型正方形的平面虛擬場(chǎng)地,其標(biāo)準(zhǔn)大小:行寬為10,列高為20,以每個(gè)小正方形為單位。2.、一組由4個(gè)小型正方形組成的規(guī)則圖形,英文稱(chēng)為T(mén)etromino,中文通稱(chēng)為方塊共有7種,分別以S、Z、L、J、I、O、T這7個(gè)字母的形狀來(lái)命名。I:一次最多消除四層

J(左右):最多消除三層,或消除二層

L:最多消除三層,或消除二層

O:消除一至二層

S(左右):最多二層,容易造成孔洞

Z(左右):最多二層,容易造成孔洞

T:最多二層

(1)部分游戲有單格方塊,可以穿透固定的方塊到達(dá)最下層空位。其他的改版中出現(xiàn)更多特別的造型。

方塊會(huì)從區(qū)域上方開(kāi)始緩慢繼續(xù)落下。

(2)玩家可以做的操作有:以90度為單位旋轉(zhuǎn)方塊,以格子為單位左右移動(dòng)方塊,讓方塊加速落下。

(3)方塊移到區(qū)域最下方或是著地到其他方塊上無(wú)法移動(dòng)時(shí),就會(huì)固定在該處,而新的方塊出現(xiàn)在區(qū)域上方開(kāi)始落下。

(4)當(dāng)區(qū)域中某一列橫向格子全部由方塊填滿(mǎn),則該列會(huì)消失并成為玩家的得分。同時(shí)刪除的列數(shù)越多,得分指數(shù)上升。

(5)當(dāng)固定的方塊堆到區(qū)域最上方而無(wú)法消除層數(shù)時(shí),則游戲結(jié)束。

(6)一般來(lái)說(shuō),游戲還會(huì)提示下一個(gè)要落下的方塊,熟練的玩家會(huì)計(jì)算到下一個(gè)方塊,評(píng)估現(xiàn)在要如何進(jìn)行。由于游戲能不斷進(jìn)行下去對(duì)商業(yè)用游戲不太理想,所以一般還會(huì)隨著游戲的進(jìn)行而加速提高難度。

3、通過(guò)設(shè)計(jì)者預(yù)先設(shè)置的隨機(jī)發(fā)生器不斷地輸出單個(gè)方塊到場(chǎng)地頂部,以一定的規(guī)則進(jìn)行移動(dòng)、旋轉(zhuǎn)、下落和擺放,鎖定并填充到場(chǎng)地中。每次擺放如果將場(chǎng)地的一行或多行完全填滿(mǎn),則組成這些行的所有小正方形將被消除,并且以此來(lái)?yè)Q取一定的積分或者其他形式的獎(jiǎng)勵(lì)。而未被消除的方塊會(huì)一直累積,并對(duì)后來(lái)的方塊擺放造成各種影響。

4、如果未被消除的方塊堆放的高度超過(guò)場(chǎng)地所規(guī)定的最大高度(并不一定是20或者玩家所能見(jiàn)到的高度),則游戲結(jié)束。

具體到每一款不同的游戲,其中的細(xì)節(jié)規(guī)則都可能有千差萬(wàn)別,但是以上的基本規(guī)則是相同的。

2.3:游戲功能

2.3.1:開(kāi)始部分

游戲是運(yùn)行在圖形模式下的,所以第一步一定是初始化圖形模式,接著要有開(kāi)始的界面,就像書(shū)有封面一樣,我設(shè)置了一個(gè)游戲的標(biāo)題畫(huà)面,除了游戲標(biāo)題畫(huà)面我還設(shè)置了一個(gè)歡迎畫(huà)面。標(biāo)題畫(huà)面以后,還要為游戲的運(yùn)行部分作初始化,包括繪制游戲運(yùn)行時(shí)的背景,對(duì)游戲某些重 要變量的初始化。

2.3.2.運(yùn)行部分

俄羅斯方塊的要求為:不同形狀組合的方塊從界面上方落下。通過(guò)鍵盤(pán)上的四個(gè)光標(biāo)控制方塊下落時(shí)的形狀轉(zhuǎn)換和下落方向。方塊堆積在一起,將區(qū)域占滿(mǎn)時(shí)則會(huì)消除以增加

游戲分?jǐn)?shù)。

整個(gè)游戲過(guò)程分為三個(gè)步驟:

1、按游戲界面的“開(kāi)始”按鈕或者F2鍵來(lái)開(kāi)始游戲,自己使用右邊的窗口,對(duì)手使用左邊的窗口

2、鍵盤(pán)操作:系統(tǒng)缺省設(shè)置使用右邊的窗口,用光標(biāo)操作,“←”左移一格;“→”右移一格;“↑”旋轉(zhuǎn)方塊;↓ 方塊丟下(方塊下落到底),“End”健可以一格格的下落,用戶(hù)還可以自定義習(xí)慣的按鍵來(lái)操作游戲。

3、計(jì)分牌顯示的內(nèi)容:“分?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ù)。“比分”為雙方贏的局?jǐn)?shù)。2.3.3:結(jié)束部分:

游戲結(jié)束時(shí),顯示“GAME OVER”

3.實(shí)驗(yàn)總結(jié):

3.1 開(kāi)發(fā)背景與需求分析

隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,人們的生活越來(lái)越離不開(kāi)網(wǎng)絡(luò),網(wǎng)絡(luò)給人們帶來(lái)了各種各樣的信息和更多更新的娛樂(lè)。據(jù)統(tǒng)計(jì)。每天上網(wǎng)的人群中75%的人用來(lái)豐富自己的生活。其中游戲最為常見(jiàn)和普遍。所以,這次課程設(shè)計(jì)我想實(shí)現(xiàn)一個(gè)小游戲:俄羅斯方塊。需求分析

1)游戲面板(畫(huà)布)GameCanvas類(lèi),完成游戲顯示; 2)方塊繪畫(huà)drawUnit類(lèi),方塊下落過(guò)程中的各種形態(tài);

3)主界面實(shí)現(xiàn)游戲的開(kāi)始,退出,暫停,提高級(jí)數(shù),降低級(jí)數(shù)功能及圖像界面排版;

4)通過(guò)鍵盤(pán)按鍵實(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)的方塊隨機(jī)產(chǎn)生,自由下落,落下時(shí)可由玩家通過(guò)鍵盤(pán)上的上、下、左、右控制鍵來(lái)控制方塊的反轉(zhuǎn)、移動(dòng)和加速下落。如果下落時(shí),方塊填滿(mǎn)某一行則這一行消失,同時(shí)給玩家加分,若由存在空格的方塊填滿(mǎn)整個(gè)窗口,則游戲結(jié)束。

圖1-1 初始狀態(tài)

圖1-2 開(kāi)始游戲

圖1-3 消除一行

圖1-4 消除兩行

圖1-5 消除四行

圖1-6 游戲結(jié)束

4.核心代碼:

import java.awt.*;import java.awt.event.*;

//俄羅斯方塊類(lèi)

public class computer 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;//聲明一個(gè)屬于畫(huà)布類(lèi)得變量 public static void main(String[] argus){ computer ers = new computer(“俄羅斯方塊游戲 V1.0 Author:Vincent”);//運(yùn)用構(gòu)造方法為框架名

WindowListener win_listener = new WinListener();//定義一個(gè)窗口監(jiān)聽(tīng)事件對(duì)象

ers.addWindowListener(win_listener);//為框架添加該監(jiān)聽(tīng)器 }

computer(String title)// 俄羅斯方塊類(lèi)的構(gòu)造方法 { super(title);//調(diào)用父類(lèi)得構(gòu)造方法

setSize(600, 480);//設(shè)置框架的尺寸

setLayout(new GridLayout(1, 2));//設(shè)置框架的布局流

gameScr = new GameCanvas();gameScr.addKeyListener(gameScr);//為該對(duì)象注冊(cè)鍵盤(pán)點(diǎn)擊監(jiān)聽(tīng)器

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);

// 定義標(biāo)簽和初始值

Label scorep = new Label(“分?jǐn)?shù):”, Label.LEFT);Label levelp = new Label(“級(jí)數(shù):”, 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(“開(kāi)始游戲”);play_b.setSize(new Dimension(50, 200));play_b.addActionListener(new Command(Command.button_play, gameScr));

// 定義按鈕Level UP Button 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 Down Button level_down_b = new Button(“降低級(jí)數(shù)”);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();} }

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

// 游戲畫(huà)布類(lèi)

class GameCanvas extends Canvas implements KeyListener { final int unitSize = 30;// 小方塊邊長(zhǎng) int rowNum;// 正方格的行數(shù) int columnNum;// 正方格的列數(shù)

int maxAllowRowNum;// 允許有多少行未削 int blockInitRow;// 新出現(xiàn)塊的起始行坐標(biāo) int blockInitCol;// 新出現(xiàn)塊的起始列坐標(biāo) int[][] scrArr;// 屏幕數(shù)組 Block b;// 對(duì)方快的引用

// 畫(huà)布類(lèi)的構(gòu)造方法 GameCanvas(){ rowNum = 15;columnNum = 10;maxAllowRowNum = rowNum1;blockInitCol = columnNum / 2(row + 1)* unitSize, unitSize, unitSize, true);g.dispose();}

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

// 返回屏幕數(shù)組中(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]);}

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

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

// 滿(mǎn)行刪除方法

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 && k1, j, 0);else drawUnit(k1][j] = scrArr[i][j];} } for(int i = k1)){

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 boolean fallDown(){ if(blockState == 2)return(false);if(assertValid(blockType, turnState, rowi, 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(rowcomputer.level + 1)* 100);} catch(InterruptedException e){ } if(!scr.getBlock().fallDown()){ scr.deleteFullLine();if(scr.isGameEnd()){ computer.isPlay = false;suspend();} else scr.getBlock().reset();} } } }

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

1感悟:當(dāng)今計(jì)算機(jī)應(yīng)用在生活中可以說(shuō)得是無(wú)處不在。因此作為二十一世紀(jì)的大學(xué)來(lái)說(shuō)掌握程序開(kāi)發(fā)技術(shù)是十分重要的,而C語(yǔ)言又是最常見(jiàn),功能最強(qiáng)大的一種高級(jí)語(yǔ)言,因此做好C語(yǔ)言課程設(shè)計(jì)是十分必要的。回顧起此次課程設(shè)計(jì),至今我們?nèi)愿锌H多,的確,自從拿到題目到完成整個(gè)編程,從理論到實(shí)踐,在這么長(zhǎng)的時(shí)間里,可以學(xué)到很多很多的東西,同時(shí)不僅可以鞏固了以前所學(xué)過(guò)的知識(shí),而且學(xué)到了很多在書(shū)本上所沒(méi)有學(xué)到過(guò)的知識(shí)。通過(guò)這次課程設(shè)計(jì)使我們懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過(guò)程中遇到問(wèn)題,可以說(shuō)得是困難重重,這畢竟第一次做的,難免會(huì)遇到過(guò)各種各樣的問(wèn)題,同時(shí)在設(shè)計(jì)的過(guò)程中發(fā)現(xiàn)了自己的不足之處,對(duì)一些前面學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固,比如說(shuō)結(jié)構(gòu)體,指針,鏈表……通過(guò)這次課程設(shè)計(jì)之后,我們把前面所學(xué)過(guò)的知識(shí)又重新溫故了一遍。

我做的是做俄羅斯方塊游戲。簡(jiǎn)單的一個(gè),但對(duì)我來(lái)說(shuō)卻是一個(gè)很大的困難。更加是第一次做基于C語(yǔ)言的課程設(shè)計(jì),所以連續(xù)幾天翻閱書(shū)籍或是參考網(wǎng)上內(nèi)容卻絲毫沒(méi)有進(jìn)展,最主要是不知從何開(kāi)始,這個(gè)時(shí)候才知道上課老師們不厭其煩的教導(dǎo)是多么的寶貴,這個(gè)時(shí)候才后悔上課的時(shí)候

沒(méi)有認(rèn)真的聽(tīng)講。可是現(xiàn)在一切都晚了,還好時(shí)間還算是充裕,只好拿出書(shū)本重新復(fù)習(xí)一下。不過(guò)經(jīng)過(guò)幾天的努力,大體上把課本上的知識(shí)點(diǎn)看了一遍,知識(shí)點(diǎn)也都基本是撐握了,所以一下一步就是開(kāi)始正式的編程序了。不過(guò)畢竟水平有限,還是不知如何下手,于是就在網(wǎng)上下了一篇類(lèi)似的程序,經(jīng)過(guò)仔細(xì)的研究,終于讀懂了C語(yǔ)言編程的基本過(guò)程和方法。經(jīng)過(guò)一波三折,終于開(kāi)始正式編程。

而且編程是一件高精度、模范化的事情,稍有疏乎都會(huì)影響全局,也可能因?yàn)槟骋惶幍男〉腻e(cuò)誤而導(dǎo)致整個(gè)程序的無(wú)法運(yùn)行。所以認(rèn)真仔細(xì)就是非常重要的了。開(kāi)始的時(shí)候真的感覺(jué)編程是一件很無(wú)聊的事情,所以就在網(wǎng)上下載的程序的基礎(chǔ)上開(kāi)始行動(dòng)了,不過(guò)當(dāng)一個(gè)程序運(yùn)行成功的時(shí)候那種喜悅是無(wú)法言語(yǔ)的,那種成就感是無(wú)法比擬的。又經(jīng)過(guò)幾天的努力,終于把程序完成了,盡管程序還是有很多錯(cuò)誤和漏洞,不過(guò)還是很高興的。無(wú)論如何是自己的勞動(dòng)成果,是自己經(jīng)過(guò)努力得到的成績(jī),同時(shí)也是學(xué)習(xí)C語(yǔ)言的一次實(shí)踐作業(yè),自己進(jìn)步的證明。

通過(guò)這次課程設(shè)計(jì),使我對(duì)C語(yǔ)言有了更進(jìn)一步的認(rèn)識(shí)和了解,要想學(xué)好它要重在實(shí)踐,要通過(guò)不斷的上機(jī)操作才能更好地學(xué)習(xí)它,我也發(fā)現(xiàn)我的好多不足之處,首先是自己在指法上還不行,經(jīng)常按錯(cuò)字母,通過(guò)學(xué)習(xí)也有所改進(jìn);再有對(duì)C語(yǔ)言的一些標(biāo)準(zhǔn)庫(kù)函數(shù)不太了解,還有對(duì)函數(shù)調(diào)用的正確使用不夠熟悉,還有對(duì)C語(yǔ)言中經(jīng)常出現(xiàn)的錯(cuò)誤也不了解,通過(guò)實(shí)踐的學(xué)習(xí),我認(rèn)識(shí)到學(xué)好計(jì)算機(jī)要重視實(shí)踐操作,不僅僅是學(xué)習(xí)C語(yǔ)言,還是其它的語(yǔ)言,以及其它的計(jì)算機(jī)方面的知識(shí)都要重在實(shí)踐,所以后在學(xué)習(xí)過(guò)程中,我會(huì)更加注視實(shí)踐操作,使自己便好地學(xué)好計(jì)算機(jī)。

在該游戲設(shè)計(jì)過(guò)程中,收獲知識(shí),提高能力的同時(shí),我也學(xué)到了很多人生的哲理,懂得怎么樣去制定計(jì)劃,怎么樣去實(shí)現(xiàn)這個(gè)計(jì)劃,并掌握了在執(zhí)行過(guò)程中怎么樣去克服心理上的不良情緒。

2感謝:經(jīng)過(guò)兩個(gè)星期的苦心鉆研,系統(tǒng)終于制作完畢。在本次課程設(shè)計(jì)中困難遇到不少,也讓我學(xué)到了很多。在這次系統(tǒng)開(kāi)發(fā)的過(guò)程中,我深深地體會(huì)到了做一個(gè)系統(tǒng),首先進(jìn)行需求分析的重要性。了解了一個(gè)系統(tǒng)的制作,從功能分析到功能模塊分析,與其他系統(tǒng)的關(guān)系,這些都有待以后進(jìn)一步的改進(jìn)。通過(guò)實(shí)踐對(duì)我以后的學(xué)習(xí)是一筆不小的財(cái)富!

在此,感謝班上同學(xué)對(duì)我的幫助和指點(diǎn),沒(méi)有他們所提供的資料,僅憑我個(gè)人力量,在短短的兩周時(shí)間里是很難完成這個(gè)設(shè)計(jì)的。更要感謝的是我的老師,感謝老師孜孜不倦的教誨,一絲不茍的精神和一視同仁的教學(xué)風(fēng)格。我會(huì)僅記老師的教誨,一步一個(gè)腳印的完成自己的學(xué)業(yè)!

參考文獻(xiàn):

[1].裘宗燕 著,從問(wèn)題到程序科學(xué)出版社,北京大學(xué)出版社,1999年4月。[2].《C程序設(shè)計(jì)(第二版)》,譚浩強(qiáng)編,清華大學(xué)出版社,1999年12月。[3].《C語(yǔ)言編程常見(jiàn)問(wèn)題解答》,[美]Paul S.R.Chishohm等著,張芳妮 呂波譯,清華大學(xué)出版社,11996年12月。[4].《The C Programming Language》,by Brian W.Kernighan and Dennis M.Ritchie.,Pubilished by Prentice-Hall in 1988。

[5].朱若愚.數(shù)據(jù)結(jié)構(gòu)[M].北京: 電子工業(yè)出版社, 2006.1

[6].傅清祥,王曉東.數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)[M].北京: 電子工業(yè)出版社, 2006.3 [7].李春葆.數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)習(xí)題與解析[M].北京:清華大學(xué)出版社, 2006.1 [8].劉大有.數(shù)據(jù)結(jié)構(gòu)[M].北京: 高等教育出版社, 2006.3 [9].王敬華,陳靜.C語(yǔ)言程序設(shè)計(jì)[M].北京: 清華大學(xué)出版社, 2007.10 [10].徐孝凱.數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)明教程.[M].北京: 清華大學(xué)出版社, 2006.04

課程設(shè)計(jì)俄羅斯方塊游戲源代碼

本程序共三個(gè)類(lèi),建一個(gè)包 square。把三個(gè)類(lèi)都封裝到一個(gè)包里面,三個(gè)類(lèi)分別是

Controller,Main,Square

package square;import javax.swing.JPanel;import java.awt.Color;

// 事倒入java程序所需要的類(lèi)庫(kù)文件。如果不倒入相應(yīng)的文件。java程序是會(huì)報(bào)錯(cuò)的。import javax.swing.JLabel;public class Controller extends Thread //Controller類(lèi)從定義從父類(lèi)繼承來(lái)來(lái)的某些成員變量和成員方法,游戲控制線(xiàn)程

private int x;

//方塊左上角的坐標(biāo)

private int y;

private Square sq;

//方塊對(duì)象的引用當(dāng)前

private Square next;

//下一個(gè)方塊的引用

private JPanel[][] sc;

//顯示

private boolean[][] state;

//填充狀態(tài)

private int sorce;

//分值

private int speed;

//下落速度

private JLabel jl1;

//分?jǐn)?shù)速度提示

private JLabel jl2;

private JPanel jp;

//下一個(gè)方塊提示

private JPanel[][] sc2;

private int sleepTime;

//等待時(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.sleepTime = 200;

sq = new Square((int)(Math.random()* 4)+ 1);

next = new Square((int)(Math.random()* 4)+ 1);

}

public void init(){

for(int i = 0;i < state.length;i++){

for(int j = 0;j < state[i].length;j++){

state[i][j] = false;

}

}

update();

}

@Override

public void run()

//重設(shè)run()方法

{

while(true){

try {

if(!isGameOver()){

if(isHit()){

set();

} else {

fall();

}

check();

update();

Thread.sleep(sleepTime);

} else {

break;

}

} catch(InterruptedException e){

e.printStackTrace();

}

}

}

private void set()

//碼放方塊

{

for(int i = 0;i < 4;i++){

for(int j = 0;j < 4;j++){

if(sq.getState(i, j)== true){

state[i + x][y + j] = true;

}

}

}

x = 0;

y = 0;

sq = next;

next = new Square((int)(Math.random()* 4)+ 1);

sleepTime = 1000 /(speed + 2);

}

private void update()

//更新數(shù)據(jù)

{

for(int i = 0;i < sc.length;i++){

for(int j = 0;j < sc[i].length;j++){

if(state[i][j] == true){

sc[i][j].setBackground(Color.BLUE);

} else {

sc[i][j].setBackground(Color.WHITE);}

}

for(int i = 0;i < 4;i++){

for(int j = 0;j < 4;j++){

if(sq.getState(i, j)){

sc[i + x][j + y].setBackground(Color.BLUE);

}

}

}

for(int i = 0;i < sc2.length;i++){

for(int j = 0;j < sc2[i].length;j++){

if(next.getState(i, j)){

sc2[i][j].setBackground(Color.BLUE);

} else {

sc2[i][j].setBackground(Color.WHITE);

}

}

}

}

private boolean isHit()

//下落碰撞判斷

{

for(int i = 0;i < 4;i++){

for(int j = 0;j < 4;j++){

if(sq.getState(i, j)&&(x + i == 19 || state[i + x + 1][j + y])){

return true;

}

}

}

return false;

}

private void fall()

//下落

{

x++;

}

private boolean isLeftHit()

//左移碰撞判斷

{

if(y == 0){

return true;

}

for(int i = 0;i < 3;i++){

for(int j = 0;j < 3;j++){

if(sq.getState(i, j)&& state[x + i][y + j1][j];

}

}

sorce += 10;

speed = sorce / 100;

jl1.setText(String.valueOf(sorce));

jl2.setText(String.valueOf(speed));

sleepTime = 1000 /(speed + 2);

} catch(InterruptedException e){

e.printStackTrace();

}

}

}

}

public void moveLeft()

//向左

{

if(!isLeftHit()){

state[x][y] = false;

y--;

}

}

private boolean isRightHit()

//右移碰撞判斷

{

for(int i = 0;i < 3;i++){

for(int j = 0;j < 3;j++){

if(sq.getState(i, j)&&(y + j >= 9 || state[x + i][y + j + 1])){

return true;

}

}

}

return false;

}

public void moveRight()//向右

{

if(!isRightHit()){

state[x][y] = false;

y++;

}

}

public void rot()

//旋轉(zhuǎn)

{

sq.rot();

}

public void down()

//加速向下

{

sleepTime = 20;}

}

package square;import javax.swing.*;import java.awt.*;public class Main extends javax.swing.JFrame { private static final long serialVersionUID = 1L;private JPanel sc[][];

private JPanel sc2[][];

private boolean state[][];

Controller t;

/** Creates new form Square */

public Main()

{

initComponents();

sc = new JPanel[20][10];

sc2 = new JPanel[4][4];

state = new boolean[25][15];

jPanel1.setLayout(new GridLayout(20, 10, 2, 2));

jPanel3.setLayout(new GridLayout(4, 4, 2, 2));

jPanel3.setSize(150, 150);

for(int i = 0;i < sc.length;i++){

for(int j = 0;j < sc[i].length;j++){

sc[i][j] = new JPanel();

// sc[i][j].setSize(20, 20);

sc[i][j].setBackground(Color.WHITE);

jPanel1.add(sc[i][j]);

}

}

for(int i = 0;i < sc2.length;i++){

for(int j = 0;j < sc2[i].length;j++){

sc2[i][j] = new JPanel();

// sc2[i][j].setSize(20, 20);

sc2[i][j].setBackground(Color.WHITE);

jPanel3.add(sc2[i][j]);

}

}

jLabel3.setText(“0”);

jLabel4.setText(“0”);

this.setSize(460, 650);

}

/** This method is called from within the constructor to

* initialize the form.* WARNING: Do NOT modify this code.The content of this method is

* always regenerated by the Form Editor.*/

private void initComponents(){

jPanel2 = new javax.swing.JPanel();

jLabel1 = new javax.swing.JLabel();

jLabel2 = new javax.swing.JLabel();

jLabel3 = new javax.swing.JLabel();

jLabel4 = new javax.swing.JLabel();

jButton1 = new javax.swing.JButton();

jPanel1 = new javax.swing.JPanel();

jButton2 = new javax.swing.JButton();

jButton3 = new javax.swing.JButton();

jMenuBar1 = new javax.swing.JMenuBar();

jMenu1 = new javax.swing.JMenu();

jMenuItem1 = new javax.swing.JMenuItem();

jMenu2 = new javax.swing.JMenu();

jMenuBar2 = new javax.swing.JMenuBar();

jMenu3 = new javax.swing.JMenu();

jMenuItem2 = new javax.swing.JMenuItem();

jMenu4 = new javax.swing.JMenu();

jPanel3 = new javax.swing.JPanel();

jButton4 = new javax.swing.JButton();

jMenuBar3 = new javax.swing.JMenuBar();

jMenu5 = new javax.swing.JMenu();

jMenuItem3 = new javax.swing.JMenuItem();

jMenu6 = new javax.swing.JMenu();

jButton5 = new javax.swing.JButton();

jMenuBar4 = new javax.swing.JMenuBar();

jMenu7 = new javax.swing.JMenu();

jMenuItem4 = new javax.swing.JMenuItem();

jMenu8 = new javax.swing.JMenu();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

setMinimumSize(new java.awt.Dimension(400, 550));

jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());

jLabel1.setText(“Score”);

jLabel2.setText(“Speed”);

jLabel3.setText(“jLabel3”);

jLabel4.setText(“jLabel4”);

javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);

jPanel2.setLayout(jPanel2Layout);

jPanel2Layout.setHorizontalGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(jPanel2Layout.createSequentialGroup()

.addContainerGap()

.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(jPanel2Layout.createSequentialGroup()

.addComponent(jLabel1)

.addGap(18, 18, 18)

.addComponent(jLabel3))

.addGroup(jPanel2Layout.createSequentialGroup()

.addComponent(jLabel2)

.addGap(18, 18, 18)

.addComponent(jLabel4)))

.addContainerGap(35, Short.MAX_VALUE)));

jPanel2Layout.setVerticalGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(jPanel2Layout.createSequentialGroup()

.addContainerGap()

.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(jLabel1)

.addComponent(jLabel3))

.addGap(18, 18, 18)

.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(jLabel2)

.addComponent(jLabel4))

.addContainerGap(84, Short.MAX_VALUE)));

jButton1.setText(“Start”);

jButton1.addActionListener(new java.awt.event.ActionListener(){

public void actionPerformed(java.awt.event.ActionEvent evt){

jButton1ActionPerformed(evt);

}

});

jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());

jPanel1.setMinimumSize(new java.awt.Dimension(300, 500));

javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);

jPanel1.setLayout(jPanel1Layout);

jPanel1Layout.setHorizontalGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGap(0, 291, Short.MAX_VALUE));

jPanel1Layout.setVerticalGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGap(0, 504, Short.MAX_VALUE));

jButton2.setText(“L”);

jButton2.addActionListener(new java.awt.event.ActionListener(){

public void actionPerformed(java.awt.event.ActionEvent evt){

jButton2ActionPerformed(evt);

}

});

jButton3.setText(“R”);

jButton3.addActionListener(new java.awt.event.ActionListener(){

public void actionPerformed(java.awt.event.ActionEvent evt){

jButton3ActionPerformed(evt);

}

});

jMenu1.setText(“File”);

jMenuItem1.setText(“Start”);

jMenu1.add(jMenuItem1);

jMenuBar1.add(jMenu1);

jMenu2.setText(“Edit”);

jMenuBar1.add(jMenu2);

jMenu3.setText(“File”);

jMenuItem2.setText(“Start”);

jMenu3.add(jMenuItem2);

jMenuBar2.add(jMenu3);

jMenu4.setText(“Edit”);

jMenuBar2.add(jMenu4);

jPanel3.setBorder(javax.swing.BorderFactory.createEtchedBorder());

jPanel3.setMinimumSize(new java.awt.Dimension(120, 120));

jPanel3.setPreferredSize(new java.awt.Dimension(120, 120));

javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);

jPanel3.setLayout(jPanel3Layout);

jPanel3Layout.setHorizontalGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGap(0, 135, Short.MAX_VALUE));

jPanel3Layout.setVerticalGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGap(0, 116, Short.MAX_VALUE));

jButton4.setText(“Rot”);

jButton4.addActionListener(new java.awt.event.ActionListener(){

public void actionPerformed(java.awt.event.ActionEvent evt){

jButton4ActionPerformed(evt);

}

});

jMenu5.setText(“File”);

jMenuItem3.setText(“Start”);

jMenu5.add(jMenuItem3);

jMenuBar3.add(jMenu5);

jMenu6.setText(“Edit”);

jMenuBar3.add(jMenu6);

jButton5.setText(“D”);

jButton5.addActionListener(new java.awt.event.ActionListener(){

public void actionPerformed(java.awt.event.ActionEvent evt){

jButton5ActionPerformed(evt);

}

});

jMenu7.setText(“File”);

jMenu7.addActionListener(new java.awt.event.ActionListener(){

public void actionPerformed(java.awt.event.ActionEvent evt){

jMenu7ActionPerformed(evt);

}

});

jMenuItem4.setText(“Start”);

jMenu7.add(jMenuItem4);

jMenuBar4.add(jMenu7);

jMenu8.setText(“Edit”);

jMenuBar4.add(jMenu8);

setJMenuBar(jMenuBar4);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

getContentPane().setLayout(layout);

layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()

.addComponent(jPanel1,javax.swing.GroupLayout.PREFERRED_SIZE,295, javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addComponent(jPanel2,javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

.addComponent(jPanel3, Short.MAX_VALUE)

.addComponent(jButton4,javax.swing.GroupLayout.DEFAULT_SIZE, 139,javax.swing.GroupLayout.PREFERRED_SIZE, 132, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGroup(layout.createSequentialGroup()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)

.addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()

.addComponent(jButton2)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addComponent(jButton5)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addComponent(jButton3)))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, Short.MAX_VALUE)))

.addContainerGap()));

layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addContainerGap()

.addComponent(jPanel2,javax.swing.GroupLayout.PREFERRED_SIZE,10,javax.swing.GroupLayout.Alignment.LEADING,javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addComponent(jPanel3,javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGap(44, 44, 44)

.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

javax.swing.GroupLayout.PREFERRED_SIZE,33,.addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(jButton5, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE)

.addContainerGap(63, Short.MAX_VALUE))

.addComponent(jPanel1,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE,38, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE));

pack();

}

//

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){

// TODO add your handling code here:

t = new Controller(0, 0, sc, state, 0, 0, jLabel3, jLabel4, jPanel3, sc2);

t.init();

t.start();}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt){

// TODO add your handling code here:

t.moveLeft();}

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt){

// TODO add your handling code here:

t.moveRight();}

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt){

// TODO add your handling code here:

t.rot();}

private void jButton5ActionPerformed(java.awt.event.ActionEvent evt){

// TODO add your handling code here:

t.down();

}

private void jMenu7ActionPerformed(java.awt.event.ActionEvent evt){

// TODO add your handling code here:

t.init();}

/**

* @param args the command line arguments

*/

public static void main(String args[]){

java.awt.EventQueue.invokeLater(new Runnable(){

public void run(){

new Main().setVisible(true);

}

});

}

// Variables declaration-do not modify

private javax.swing.JButton jButton1;

private javax.swing.JButton jButton2;

private javax.swing.JButton jButton3;

private javax.swing.JButton jButton4;

private javax.swing.JButton jButton5;

private javax.swing.JLabel jLabel1;

private javax.swing.JLabel jLabel2;

private javax.swing.JLabel jLabel3;

private javax.swing.JLabel jLabel4;

private javax.swing.JMenu jMenu1;

private javax.swing.JMenu jMenu2;

private javax.swing.JMenu jMenu3;

private javax.swing.JMenu jMenu4;

private javax.swing.JMenu jMenu5;

private javax.swing.JMenu jMenu6;

private javax.swing.JMenu jMenu7;

private javax.swing.JMenu jMenu8;

private javax.swing.JMenuBar jMenuBar1;

private javax.swing.JMenuBar jMenuBar2;

private javax.swing.JMenuBar jMenuBar3;

private javax.swing.JMenuBar jMenuBar4;

private javax.swing.JMenuItem jMenuItem1;

private javax.swing.JMenuItem jMenuItem2;

private javax.swing.JMenuItem jMenuItem3;

private javax.swing.JMenuItem jMenuItem4;

private javax.swing.JPanel jPanel1;

private javax.swing.JPanel jPanel2;

private javax.swing.JPanel jPanel3;

// End of variables declaration

}

package square;public class Square {

boolean[][][] state;

int condition;

//定義多種情況

public Square(int kind)

//

定義多種類(lèi)型

{

state = new boolean[4][4][4];

condition = 0;

switch(kind){

case 1:

//方形

每個(gè)case之后應(yīng)該有個(gè)break;否則在滿(mǎn)足條件之后會(huì)繼續(xù)向后進(jìn)行會(huì)跳出

state[0][0][0] = true;

state[0][0][1] = true;

state[0][1][0] = true;

state[0][1][1] = true;

state[1][0][0] = true;

state[1][0][1] = true;

state[1][1][0] = true;

state[1][1][1] = true;

state[2][0][0] = true;

state[2][0][1] = true;

state[2][1][0] = true;

state[2][1][1] = true;

state[3][0][0] = true;

state[3][0][1] = true;

state[3][1][0] = true;

state[3][1][1] = true;

break;

case 2:

//I型

state[0][0][0] = true;

state[0][1][0] = true;

state[0][2][0] = true;

state[0][3][0] = true;

state[1][0][0] = true;

state[1][0][1] = true;

state[1][0][2] = true;

state[1][0][3] = true;

state[2][0][0] = true;

state[2][1][0] = true;

state[2][2][0] = true;

state[2][3][0] = true;

state[3][0][0] = true;

state[3][0][1] = true;

state[3][0][2] = true;

state[3][0][3] = true;

break;

case 3:

//L型

state[0][0][0] = true;

state[0][1][0] = true;

state[0][2][0] = true;

state[0][2][1] = true;

state[1][0][2] = true;

state[1][1][0] = true;

state[1][1][1] = true;

state[1][1][2] = true;

state[2][0][0] = true;

state[2][0][1] = true;

state[2][1][1] = true;

state[2][2][1] = true;

state[3][0][0] = true;

state[3][0][1] = true;

state[3][0][2] = true;

state[3][1][0] = true;

break;

case 4:

//T型

state[0][0][0] = true;

state[0][0][1] = true;

state[0][0][2] = true;

state[0][1][1] = true;

state[1][0][1] = true;

state[1][1][0] = true;

state[1][1][1] = true;

state[1][2][1] = true;

state[2][0][1] = true;

state[2][1][0] = true;

state[2][1][1] = true;

state[2][1][2] = true;

state[3][0][0] = true;

state[3][1][0] = true;

state[3][1][1] = true;

state[3][2][0] = true;

break;

}

}

public boolean getState(int i, int j)//獲得是否為聲明的i,j變量的值

{

return state[condition][i][j];

}

public void rot(){

condition =(condition + 1)% 4;

} }

第二篇:個(gè)人簡(jiǎn)歷html語(yǔ)言編寫(xiě)

課后練習(xí)題五

姓 名 性別 出生年月 照片
畢業(yè)院校 專(zhuān)業(yè) 學(xué)歷
政治面貌 民族 身高
健康狀況 籍貫
身份證號(hào)碼 聯(lián)系電話(huà)
主修課程
英語(yǔ)水平
計(jì)算機(jī)水平
社會(huì)實(shí)踐
獎(jiǎng)勵(lì)情況
自我評(píng)價(jià)

第三篇:如何編寫(xiě)和語(yǔ)言程序解讀

如何編寫(xiě)和匯編語(yǔ)言程序

可以用普通文本編輯器編輯匯編語(yǔ)言源程序。常用的有 MS-DOS 下的 EDIT 文本編輯程序,Windows 下的寫(xiě)字板(WORDPAD.EXE)等。用戶(hù)通過(guò)屏幕編輯程序鍵入源程序,檢查無(wú)誤,可將源程序存到匯編系統(tǒng)盤(pán)上,該程序的擴(kuò)展名為· ASM。軟件運(yùn)行基本環(huán)境

運(yùn)行匯編程序必備的軟件環(huán)境: DOS 操作系統(tǒng);匯編系統(tǒng)。匯編系統(tǒng)盤(pán)應(yīng)包含如下文件: MASM 宏匯編程序文件 LISK 連接程序文件

CRFF 索引程序文件(也可不用)匯編源程序編寫(xiě))源程序的書(shū)寫(xiě)格式

當(dāng) CPU 訪(fǎng)問(wèn)內(nèi)存時(shí),是把存儲(chǔ)器分成若干個(gè)段,通過(guò) 4 個(gè)段寄存器中存放的地址對(duì)內(nèi)存儲(chǔ)器訪(fǎng)問(wèn),因此在編源程序時(shí)必須按段的結(jié)構(gòu)來(lái)編制程序。由于每個(gè)段的物理空間為≤ 64KB,所以程序中各段可以分別為一個(gè)或幾個(gè)。源程序的書(shū)寫(xiě)一般有如下形式:

邏輯堆棧段 堆棧段名 SEGMENT STACK 用變量定義預(yù)置的堆棧空間 · ·

堆棧段名 ENDS 邏輯數(shù)據(jù)段 數(shù)據(jù)段名 SEGMENT 用變量定義預(yù)置的數(shù)據(jù)空間 · ·

數(shù)據(jù)段名 ENDS 邏輯代碼段 代碼段名 SEGMENT ASSUME 定義各段尋址關(guān)系 過(guò)程名 PROC … 程序 · ·

過(guò)程名 ENDP 代碼段名 ENDS END 過(guò)程名或起始標(biāo)號(hào)

在源程序中最少要有一個(gè)代碼段,數(shù)據(jù)段根據(jù)需要可有可無(wú),也可以增設(shè)附加段。對(duì)于堆棧段也可以根據(jù)需要可有可無(wú),但在連接(LINK)時(shí)計(jì)算機(jī)將顯示警告性的錯(cuò)誤: Warning : N STACK segment There was 1 error detected.在程序中如果沒(méi)有用到堆棧時(shí),該錯(cuò)誤提示不影響程序的運(yùn)行,如果程序中用到堆棧時(shí)必須設(shè)置堆棧段。其中: SEGMENT、ASSUME、PROC … ENDP 為偽指令,偽指令是發(fā)給匯編程序 ASM 的,而不和微處理器打交道,在匯編時(shí)不產(chǎn)生目標(biāo)代碼,只是把源程序中各段的設(shè)置情況告訴匯編程序。)段寄存器的段地址的裝入

Assume 偽指令語(yǔ)句只是建立了當(dāng)前段與段寄存器的聯(lián)系,但不能把各段的段地址裝入相應(yīng)的段寄存器中,段寄存器的段地址的裝入是在程序中完成的。(1)DS、ES、SS 的裝入

由于段寄存器不能用立即數(shù)尋址方式直接傳送,所以段地址裝入可通過(guò)通用寄存器傳送給段寄存器。MOV AX,邏輯段名 MOV 段寄存器,AX 其中邏輯段名為程序中定義各邏輯段的名字,(不包括代碼段),段寄存器是指與各邏輯段相對(duì)應(yīng)的各段寄存器(DS、ES、SS)。(2)CS 的裝入

代碼段寄存器是裝當(dāng)前執(zhí)行目標(biāo)代碼的段地址,IP 是提供下一條要執(zhí)行的目標(biāo)代碼的偏移量,為了保證程序的正確執(zhí)行,CS 和 IP 裝入新值時(shí)是一起完成的。對(duì) CS 和 IP 的裝入有如下幾種情況:

①根據(jù)用戶(hù)程序中的偽指令 END 后的標(biāo)號(hào)為 CS 和 IP 提供代碼段的段地址和目標(biāo)代碼的偏移地址。

②在程序運(yùn)行過(guò)程中,當(dāng)執(zhí)行某些指令和操作時(shí),CPU 自動(dòng)修改 CS 和 IP 的值,使它們指向新的代碼段。)程序中的數(shù)據(jù)與變量

在匯編源程序中的數(shù)據(jù)除了立即數(shù),由指令產(chǎn)生的數(shù)和通過(guò)鍵盤(pán)輸入的數(shù)以外,還胡大量的數(shù)據(jù)是通過(guò)偽指令語(yǔ)句進(jìn)行預(yù)置和分配的,也就是在某邏輯段中(除代碼段),將所需的數(shù)據(jù)以某種形式存放起來(lái),在程序中可任意調(diào)用。在數(shù)據(jù)定義的同時(shí)還可以定義變量,將變量與數(shù)據(jù)結(jié)合在一起。可以為某個(gè)變量分配存儲(chǔ)空間以便在程序執(zhí)行過(guò)程中存放中間結(jié)果和最終結(jié)果,使用起來(lái)極為方便。

(1)變量與數(shù)據(jù)的定義

變量與數(shù)據(jù)的定義可以通過(guò)符號(hào)定義偽指令 EQU、=和數(shù)據(jù)定義偽指令 DB 或 DW 或 DD 來(lái)實(shí)現(xiàn)。EQU 和=可以出現(xiàn)在程序的邏輯段內(nèi)也可出現(xiàn)在邏輯段外。

(2)匯編程序中數(shù)據(jù)的提供方法 ①用數(shù)據(jù)定義偽指令提供數(shù)據(jù)

如果程序要求原始數(shù)據(jù)為一批數(shù)據(jù)時(shí),用數(shù)據(jù)定義偽指令 DB、DW 和 DD 來(lái)提供較為方便。②用立即數(shù)的形式提供數(shù)據(jù)

當(dāng)原始數(shù)據(jù)只有幾個(gè)時(shí),一般用立即數(shù)的方法來(lái)提供。當(dāng)然,用立即數(shù)的方法只是將一個(gè)數(shù)據(jù)傳送到通用寄存器中,它只是通過(guò)通用寄存器傳送數(shù)據(jù)。③用編程的方法提供數(shù)據(jù)

假如原始數(shù)據(jù)是一組有規(guī)律的數(shù)據(jù)項(xiàng),則用編程序的方法形成這一組數(shù)據(jù),不用專(zhuān)門(mén)為這組數(shù)據(jù)分配存儲(chǔ)單元,節(jié)省了存儲(chǔ)空間。④用鍵盤(pán)提供數(shù)據(jù)

當(dāng)原始數(shù)據(jù)為任意數(shù)據(jù)時(shí),一般用鍵盤(pán)輸入方法,調(diào)用 DOS 21H 中斷。

(3)數(shù)據(jù)的輸出方式 ①在顯示器上顯示一個(gè)字符

調(diào)用 02H 號(hào)功能調(diào)用號(hào),發(fā) 21H 號(hào)中斷,將要顯示的字符的 ASCII 碼送入 DL,就可在顯示器上顯示該字符。②在打印機(jī)上輸出一個(gè)字符

調(diào)用 05H 號(hào)功能調(diào)用號(hào),發(fā) 21H 號(hào)中斷,將要打印字符的 ASCII 碼送入 DL,就可在打印機(jī)上打印出 DL 中的字符。

4)返回 DOS 狀態(tài)的方法

當(dāng)執(zhí)行.EXE 文件時(shí),是在 DOS 狀態(tài)下進(jìn)行的,如果希望在執(zhí)行完.EXE 文件后正常返回 DOS 狀態(tài),一般用如下兩種方法:采用 DOS 4CH 功能調(diào)用和采用返回(RET)斷點(diǎn)的方法。

匯編處理 — 執(zhí)行宏匯編程序 MASM.EXE

用匯編語(yǔ)言編寫(xiě)的源程序必須是一個(gè)完整的源程序。宏匯編程序?qū)R編語(yǔ)言源程序的匯編過(guò)程包括語(yǔ)法檢查和數(shù)據(jù)代碼匯編兩部分,生成目標(biāo)程序和輔助信息文件。為了完成匯編任務(wù),匯編程序一般采用兩遍掃描的方法,第一遍掃描源程序產(chǎn)生符號(hào)表、處理偽指令等,第二遍掃描產(chǎn)生機(jī)器指令代碼、確定數(shù)據(jù)等。源程序用宏匯編程序翻譯(匯編)后,可以得到三個(gè)文件:一個(gè)是擴(kuò)展名為.OBJ 的目標(biāo)文件,在該文件中,將源程序的操作碼部分變?yōu)闄C(jī)器碼,但地址操作數(shù)是可浮動(dòng)的相對(duì)地址,而不是實(shí)際地址,因此需經(jīng) LINK 連接文件進(jìn)行連接才能形成可執(zhí)行文件。第二個(gè)文件是列表文件,擴(kuò)展名為.LST,它把源程序和目標(biāo)程序列表,以供檢查程序用。第三個(gè)文件是交叉索引文件,擴(kuò)展名為.CRF,它是一個(gè)對(duì)源程序所用的各種符號(hào)進(jìn)行前后對(duì)照的文件。其中目標(biāo)文件是必須產(chǎn)生的,而其它兩個(gè)文件在需要時(shí)給予命令就可產(chǎn)生,對(duì)連接和執(zhí)行匯編程序無(wú)直接的關(guān)系。)匯編操作過(guò)程

在 DOS 狀態(tài)下,鍵入 MASM ↓則調(diào)入宏匯編程序,屏幕顯示與操作如下: masm ↓ Microsoft(R)Macro Assemble Version 5.00 Copyright(C)Microsoft Corp 1981-1985,1987,All right reserved.Source filename [.ASM ]: MYFILE ↓ Object filename [MYFILE.OBJ ]: MYFILE ↓ Source listing [NUL.LST ]: MYFILE ↓ Cross-reference [NUL.CRF]: MYFILE ↓ 50678 + 410090 Bytes symbol space free 0 Warning Errors 0 Severe Errors 其中劃線(xiàn)部分為用戶(hù)鍵入部分,MYFILE 為源程序名(MYFILE.ASM),方括號(hào)中是機(jī)器規(guī)定的默認(rèn)文件名,如果用戶(hù)認(rèn)為方括號(hào)內(nèi)的文件名就是要鍵入的文件名,則可只在劃線(xiàn)部分鍵入回車(chē)符。如果不想要列表文件和交叉索引文件,則可在 [NUL.LST ] 和 [NUL.CRF] 后不鍵入文件名只鍵入回車(chē)符。

當(dāng)回答完上述四個(gè)詢(xún)問(wèn)后,匯編程序就對(duì)源程序進(jìn)行匯編。在匯編過(guò)程中,如果發(fā)現(xiàn)源程序中有語(yǔ)法錯(cuò)誤,則提示出錯(cuò)信息,指出是什么性質(zhì)的錯(cuò)誤,錯(cuò)誤類(lèi)型,最后列出錯(cuò)誤的總數(shù)。之后可重新進(jìn)入屏幕編輯狀態(tài),調(diào)入源程序(MYFILE.ASM)進(jìn)行修改,修改完畢,再進(jìn)行匯編,直到匯編通過(guò)為止。

如果在匯編時(shí)不需要產(chǎn)生列表文件(.LST)和交叉索引文件(.CRF),調(diào)用匯編程序時(shí)可用分號(hào)結(jié)束。如果需要產(chǎn)生.OBJ 和.LST 文件,不需要.CRF 文件,則在分號(hào)前面加兩個(gè)逗號(hào)即可。如果 4 個(gè)文件都需要,用簡(jiǎn)便的操作方法是在分號(hào)前用了 3 個(gè)逗號(hào)。)列表文件(.LST)

列表文件(.LST)是通過(guò)匯編程序(MASM)產(chǎn)生的,可以在 DOS 狀態(tài)下用 TYPE 命令顯示或打印該文件,以便分析調(diào)試源程序。如顯示 D 盤(pán)上已存在的列表文件 MYFILE.LST 操作方法如下: D> TYPE MYFILE.LST ;↓ 列表程序由三部分組成:(1)源程序和目標(biāo)程序清單

列表程序同時(shí)列出源程序和對(duì)應(yīng)的機(jī)器語(yǔ)言清單。列表程序的第一列給出每條指令所在行號(hào);第二列給出從段的首地址開(kāi)始的每條指令存放的偏移地址;接著是數(shù)字列,給出對(duì)應(yīng)每條語(yǔ)句的機(jī)器碼和對(duì)應(yīng)于存放在棧段和數(shù)據(jù)段的值,在機(jī)器碼加上“ R ”的指令表示:這條指令在連接時(shí)可能產(chǎn)生與列出來(lái)的偏移地址不同的地址,因?yàn)檫@些偏移地址可能與其它模塊有關(guān);最右邊就是用匯編語(yǔ)言編寫(xiě)的源程序。(2)段信息匯總表

在段信息匯總表中列出該程序用了哪幾個(gè)段,如:代碼段 CODE、數(shù)據(jù)段 DATA 和堆棧段 STACK ;每個(gè)段所占存儲(chǔ)空間的長(zhǎng)度(字節(jié)數(shù));每個(gè)段的定位類(lèi)型,包括 PAGE(頁(yè))、PARA(節(jié))、WORD(字)和 BYTE(字節(jié)),它們表示此段的起始邊界要求,即起始邊界地址應(yīng)分別可以被 256、16、2 和 1 除盡。該列表清單 中是以 PARA 為 CODE 段、DATA 段和 STACK 段的起始邊界地址。最后一列為段的組合類(lèi)型;段的組合類(lèi)型是告訴連接程序,本段與其它段的關(guān)系,組合類(lèi)型有 NONE、PUBLIC、COMMOM、AT 表達(dá)式、STACK 和 MEMORY。NONE :表示本段與其它段不發(fā)生邏輯關(guān)系,即每段都有自己的基本地址。是隱含組合類(lèi)型。

STACK :表明連接程序首先要把本段與同名同類(lèi)別的其它段相鄰地連接在一起,然后為所有定義為棧段的連接在一起的段,定義一個(gè)共同的段基地址,即連接成一個(gè)物理段。

在列表程序的源程序中只有一個(gè)棧段,在棧段定義中給出了組合類(lèi)型為 STACK,因此在段信息匯總表中列出了該項(xiàng),在本程序中它沒(méi)有任何意義,因?yàn)闆](méi)有其它棧段與它連接,只是為了說(shuō)明這個(gè)問(wèn)題而設(shè)置的。(3)符號(hào)匯總表

在列表程序中最后部分列出了符號(hào)匯總,是指在源程序中用戶(hù)定義的符號(hào)名、類(lèi)型、值和所在段。

如果在源程序中存在某些語(yǔ)法錯(cuò)誤時(shí),列表文件可提示某條語(yǔ)句有哪些錯(cuò)誤,出錯(cuò)提示顯示在出錯(cuò)指令行的下面,因此用戶(hù)可借助列表文件很快地找到錯(cuò)誤行,以便調(diào)試。另外由于列表文件給出了各條指令的偏移地址,對(duì)和程序時(shí)設(shè)置斷點(diǎn)很方便。)交叉索引文件(.CRF)

匯編后產(chǎn)生的交叉索引文件,擴(kuò)展名為.CRF, 它列出了源程序中定義的符號(hào)(包括:標(biāo)號(hào)、變量等)和程序中引用這些符號(hào)的情況。如果要查看這個(gè)符號(hào)表,必須使用 CREF.EXE 的文件,它根據(jù).CRF 文件建立一個(gè)擴(kuò)展名為.REF 的文件,而后再用 DOS 的 TYPE 命令顯示,就可以看到這個(gè)符號(hào)使用情況表。具體操作方法如下: D> CREF ↓

cref filename [.CRF] : MYFILE ↓ list filename [MYFILE.REF] : ↓ D> TYPE MYFILE.REF ↓

目標(biāo)代碼鏈接程序----LINK.EXE

用匯編語(yǔ)言編寫(xiě)的源程序經(jīng)過(guò)匯編程序(MASM)匯編后產(chǎn)生了目標(biāo)程序(.OBJ),該文件是將源程序操作碼部分變成了機(jī)器碼,但地址是可浮動(dòng)的相對(duì)地址(邏輯地址),因此必須經(jīng)過(guò)連接程序 LINK 連接后才能運(yùn)行。連接程序 LINK 是把一個(gè)或多個(gè)獨(dú)立的目標(biāo)程序模塊裝配成一個(gè)可重定位的可執(zhí)行文件,擴(kuò)展名為.EXE 文件。此外還可以產(chǎn)生一個(gè)內(nèi)存映象文件,擴(kuò)展名為.MAP。1)連接程序執(zhí)行過(guò)程

在 DOS 狀態(tài)下,鍵入 LINK ↓(或 LINK MYFILE ↓)則系統(tǒng)調(diào)入 LINK 程序,屏幕顯示操作如下: D> LINK ↓

IBM Personal Computer Linker Version 2.00(C)Copyright IBM Corp 1981,1982,1983 Object Modules [.OBJ] : MYFILE ↓ Run File [MYFILE.EXE] : MYFILE ↓ List File [NUL.MAP] : MYFILE ↓ Libraries [.LIB] : ↓

其中劃線(xiàn)部分為用戶(hù)鍵入部分,MYFILE 為源程序名,方括號(hào)內(nèi)為機(jī)器默認(rèn)文件名,當(dāng)用戶(hù)認(rèn)為方括號(hào)中的文件名就是要鍵入的文件名時(shí),可在冒號(hào)后面只鍵入回車(chē)。

其中 MAP 文件是否需要建立,由用戶(hù)決定,需要?jiǎng)t鍵入文件名,不需要?jiǎng)t直接送入一個(gè)回車(chē)鍵。

最后一個(gè)詢(xún)問(wèn)是問(wèn)是否在連接時(shí)用到庫(kù)文件,對(duì)于連接匯編語(yǔ)言源程序的目標(biāo)文件,通常是不需要的,因此直接鍵入回車(chē)鍵。

與匯編程序一樣,可以在連接時(shí)用分號(hào)結(jié)束后續(xù)詢(xún)問(wèn)。例如:

D> LINK MYFILE ;↓

IBM Personal Computer Linker Version 2.00(C)Copyright IBM Corp 1981,1982,1983 連接后只產(chǎn)生 MYFILE.EXE 文件。如果除 MYFILE.EXE 文件外還要產(chǎn)生 MYFILE.MAP 文件,則在分號(hào)前加兩個(gè)逗號(hào)。D> LINK MYFILE,;↓ IBM Personal Computer Linker Version 2.00(C)Copyright IBM Corp 1981,1982,1983 2)內(nèi)存映象文件(.MAP)

由連接程序 LINK 產(chǎn)生的擴(kuò)展名為.MAP 文件,它實(shí)際上是連接程序的列表文件,它給出了每個(gè)段的地址分配情況及長(zhǎng)度。

在 DOS 狀態(tài)下,用 TYPE 命令顯示打印出來(lái)。例如: D> TYPE MYFILE.MAP ↓ Start Stop Length Name Class 00000H 0000FH 0010H DATA 00010H 0004FH 0040H STACK 00050H 0005FH 0010H CODE Origin Group Program entry point at 0005:0000 從中可以看到,源程序 MYFILE 中定義了三個(gè)段:數(shù)據(jù)段(DATA)起始地址為 00000H,終止地址為 0000FH,長(zhǎng)度為 0010H 個(gè)字節(jié);堆棧段(STACK)起始地址為 00010H,終止地址為 0004FH,長(zhǎng)度為 0040H 個(gè)字節(jié);代碼段(CODE)起始地址為 00050H,終止地址為 0005FH,長(zhǎng)度為 0010H 個(gè)字節(jié)。

應(yīng)用程序執(zhí)行

當(dāng)用連接程序 LINK 將目標(biāo)程序(.OBJ)連接定位后,可產(chǎn)生可執(zhí)行的應(yīng)用程序文件(.EXE),可以在 DOS 狀態(tài)下執(zhí)行該程序。執(zhí)行操作如下: D> MYFILE ↓ 或 D> MYFILE.EXE ↓

在源程序 MYFILE 中如果有顯示結(jié)果的指令,則在執(zhí)行程序后可以看到執(zhí)行結(jié)果;如需要?jiǎng)討B(tài)調(diào)試應(yīng)用程序 MYFILE.EXE,則可以借助動(dòng)態(tài)調(diào)試程序 DEBUG.COM 來(lái)進(jìn)行調(diào)試、運(yùn)行,DEBUG 是一種支持命令行方式的匯編語(yǔ)言編程調(diào)試工具。

動(dòng)態(tài)調(diào)試程序 DEBUG.COM 在編寫(xiě)和運(yùn)行匯編程序的過(guò)程中,會(huì)遇到一些錯(cuò)誤和問(wèn)題,需要對(duì)程序進(jìn)行分析和調(diào)試,調(diào)試程序 DEBUG 就是專(zhuān)為匯編語(yǔ)言設(shè)計(jì)的一種調(diào)試工具。它在調(diào)試匯編語(yǔ)言程序時(shí)有很強(qiáng)的功能,能使程序設(shè)計(jì)者接觸到機(jī)器內(nèi)部,能觀察和修改寄存器和存儲(chǔ)單元內(nèi)容,并能監(jiān)視目標(biāo)程序的執(zhí)行情況,使用戶(hù)真正接觸到 CPU 內(nèi)部,與計(jì)算機(jī)產(chǎn)生最緊密的工作聯(lián)系。

動(dòng)態(tài)和程序 DEBUG 的主要特點(diǎn) DEBUG 的執(zhí)行 DEBUG 命令格式 主要 DEBUG 命令

動(dòng)態(tài)和程序 DEBUG 的主要特點(diǎn))能夠在最小環(huán)境下運(yùn)行匯編程序

在 DOS 狀態(tài)下運(yùn)行匯編程序,必須將程序經(jīng)過(guò) MASM 匯編程序,而后還要經(jīng)過(guò) LINK 連接程序產(chǎn)生可執(zhí)行程序,才能最終運(yùn)行,比較麻煩。在 DEBUG 狀態(tài)下,為用戶(hù)提供了調(diào)試、控制測(cè)試的環(huán)境,可以在此環(huán)境下進(jìn)行編程、調(diào)試、監(jiān)督、執(zhí)行用戶(hù)編寫(xiě)的匯編程序。因此調(diào)試周期短,為用戶(hù)提供了極大的方便。2)提供極簡(jiǎn)單的修改手段

DEBUG 提供了修改命令,可以修改內(nèi)存單元內(nèi)容,修改寄存器的內(nèi)容,為調(diào)試程序、修改程序帶來(lái)了方便。3)提供用戶(hù)與計(jì)算機(jī)內(nèi)部聯(lián)系的窗口

DEBUG 具有顯示命令,它既可以使用戶(hù)看到某內(nèi)存單元或某一塊單元內(nèi)容,也可以看到 CPU 內(nèi)部各寄存器的內(nèi)容。用單步執(zhí)行命令實(shí)現(xiàn)跟蹤執(zhí)行,每執(zhí)行一步都使用戶(hù)看到各寄存器的內(nèi)容的變化,以便分析和調(diào)整程序。4)可裝入、修改或顯示任何文件

當(dāng)然在 DEBUG 狀態(tài)下運(yùn)行匯編程序也具有一定局限性。在 DEBUG 狀態(tài)下運(yùn)行的程序不能使用宏匯編程序中的宏指令,大部分偽指令也不能使用,因此只能把程序分段調(diào)試。此外,不能調(diào)試太長(zhǎng)的程序,只能分塊進(jìn)行中程序設(shè)計(jì)。在 DEBUG 狀態(tài)下調(diào)試好的程序不能形成可執(zhí)行文件(.EXE),因此調(diào)試好的程序只能記下,到編輯環(huán)境下重新鍵入調(diào)試好的程序,通過(guò)匯編程序(如 MASM),再通過(guò)連接程序(LINK)形成可執(zhí)行文件(.EXE)。

DEBUG 的執(zhí)行

在操作系統(tǒng)(DOS 或 WIndows)命令行方式下,直接調(diào)入 DEBUG 程序,鍵入命令的格式如下: D>DEBUG [d:][Path][filename[.ext]][Parm1][Parm2] 其中 [] 的內(nèi)容為可選項(xiàng),可以有也可以缺省。

[d:] 為驅(qū)動(dòng)器號(hào),指要調(diào)入 DEBUG 狀態(tài)的可執(zhí)行文件在哪個(gè)驅(qū)動(dòng)器中,如 A:、B:、C: 等。[Path] 為路徑,指要調(diào)入 DEBUG 狀態(tài)的可執(zhí)行文件是在哪個(gè)目錄下或子目錄下。

[filename[.ext]],指要調(diào)入 DEBUG 狀態(tài)下的可執(zhí)行文件的文件名,該文件可以是通過(guò)編輯、匯編、連接后產(chǎn)生的可執(zhí)行文件,也可以是在 DEBUG 狀態(tài)下匯編的程序 段,通過(guò)寫(xiě)盤(pán)命令 W 寫(xiě)入磁盤(pán)的文件。[Parm1][Parm2] 為任選參數(shù),是給定文件的說(shuō)明參數(shù)。

在啟動(dòng) DEBUG 時(shí),如果輸入 filename(文件名),則 DEBUG 程序把指定文件裝入內(nèi)存,用戶(hù)可以通過(guò) DEBUG 的命令對(duì)指定文件進(jìn)行修改、顯示或執(zhí)行。如果沒(méi)有文件名,則是以當(dāng)前內(nèi)存的內(nèi)容工作,或者用命名命令或裝入命令把需要的文件裝入內(nèi)存,然后再通過(guò) DEBUG 命令進(jìn)行修改、顯示或執(zhí)行。當(dāng)啟動(dòng) DEBUG 程序后,屏幕上出現(xiàn)“—”,說(shuō)明系統(tǒng)已進(jìn)入 DEBUG 狀態(tài)。DEBUG 命令格式(1)DEBUG 命令都是一個(gè)英文字母,后面跟著一個(gè)或多個(gè)有關(guān)參數(shù)。多個(gè)操作參數(shù)之間用“ , ”或空格隔開(kāi)。(2)DEBUG 命令必須接著按 ENTER 鍵,命令才有效。

(3)參數(shù)中不論是地址還是數(shù)據(jù),均用十六進(jìn)制數(shù)表示,但十六進(jìn)制數(shù)據(jù)后面不要用“ H ”。(4)可以用 Ctrl 和 Break 鍵來(lái)停止一個(gè)命令的執(zhí)行,返回到 DEBUG 的提示符“—”下。(5)用 Ctrl - Num Lock 鍵中止正在上卷的輸出行,再通過(guò)按任意鍵繼續(xù)輸出信息。主要 DEBUG 命令

(1)匯編命令 A

格式: a.A [ 段寄存器名 ]:[ 偏移地址 ] b.A [ 段地址 ]:[ 偏移地址 ] c.A [ 偏移地址 ] d.A 功能:用該命令可以將匯編語(yǔ)言程序直接匯編進(jìn)入內(nèi)存。

當(dāng)鍵入 A 命令后,顯示段地址和偏移地址等待用戶(hù)鍵入?yún)R編指令,每鍵入一條匯編指令回車(chē)后,自動(dòng)顯示下一條指令的段地址和偏移地址,再鍵入下一條匯編指令,直到匯編語(yǔ)言程序全部鍵入,又顯示下一地址時(shí)可直接鍵入回車(chē)返回到提示符“-”為止。

其中 a 的段地址在段地址寄存器中,因此在使用該命令時(shí)必須將段地址寄存器送入段地址,c 的地址在 CS 中,d 的段地址在 CS 中,偏移地址為 100H。

(2)顯示內(nèi)存命令 D 格式: a.D [ 地址 ] b.D [ 地址范圍 ] c.D 功能:顯示指定內(nèi)存范圍的內(nèi)容。

顯示的內(nèi)容為兩種形式:一種為十六進(jìn)制內(nèi)容,一種為與十六進(jìn)制相對(duì)應(yīng)的 ASCII 碼字符,對(duì)不可見(jiàn)字符以“·”代替。

對(duì)于 a、c 每次顯示 128 個(gè)字節(jié)內(nèi)容,b 顯示的字節(jié)數(shù)由地址范圍來(lái)決定。

若命令中有地址,則顯示的內(nèi)容從指定地址開(kāi)始,若中中無(wú)地址(如 c)則從上一個(gè) D 命令所顯示的最后一個(gè)單元的下一個(gè)單元開(kāi)始。若以前沒(méi)有使用過(guò) D 命令,則以 DEBUG 初始化的段寄存器的內(nèi)容為起始段地址,起始偏移地址為 100H,即 CS:100。

對(duì)于 a 中的地址為偏移地址,段地址為 CS 的內(nèi)容,對(duì) b 中的地址范圍,可以指定段地址和起始偏移地址和終止偏移地址。

(3)修改存儲(chǔ)單元內(nèi)容命令 E 格式: a · E [ 地址 ] [ 內(nèi)容表 ] b · E [ 地址 ] 功能: a ·用命令所給定的內(nèi)容表去代替指定地址范圍的內(nèi)存單元內(nèi)容。b ·一個(gè)單元一個(gè)單元地連續(xù)修改單元內(nèi)容。

其中:內(nèi)容表為一個(gè)十六進(jìn)制數(shù),也可以是用單引號(hào)括起的一串字符。

(4)填充內(nèi)存命令 F

格式: F [ 范圍 ][ 單元內(nèi)容表 ] 功能:將單元內(nèi)容表中的內(nèi)容重復(fù)裝入內(nèi)存的指定范圍內(nèi)。

(5)內(nèi)存搬家命令 M

格式: M [ 源地址范圍 ][ 目標(biāo)起始地址 ] 其中源地址范圍和目的起始地址為偏移地址,段地址為 DS 的內(nèi)容。功能:把源地址范圍的內(nèi)容搬至以目標(biāo)起始地址開(kāi)始的存儲(chǔ)單元中。

(6)比較命令 C

格式: C [ 源地址范圍 ],[ 目標(biāo)地址 ] 其中源地址范圍是由起始地址和終止地址指出的一片連續(xù)的存儲(chǔ)單元,目標(biāo)地址為與源地址所指單元對(duì)比的目標(biāo)地址起始地址。功能:從源地址范圍是由起始的地址單元開(kāi)始逐個(gè)與目標(biāo)起始地址往后的單元順序比較每個(gè)單元內(nèi)容,比較到源終止地址為止。比較結(jié)果如果一致則不顯示任何信息,如果不一致,則以 [ 源地址 ][ 源內(nèi)容 ][ 目的內(nèi)容 ][ 目的地址 ] 的形式顯示失敗單元地址及內(nèi)容。

(7)搜索指定內(nèi)容命令 S 格式: S [ 地址范圍 ][ 表 ] 功能:在指定地址范圍內(nèi)搜索表中內(nèi)容,搜索到就顯示表中元素所在地址。

(8)檢查和修改寄存器內(nèi)容命令 R 格式: a · R b · R [ 寄存器名 ] 功能: a ·顯示 CPU 內(nèi)部所有寄存器的內(nèi)容和全部標(biāo)志位的狀態(tài)。b ·顯示和修改一個(gè)指定寄定器的內(nèi)容和標(biāo)志位的狀態(tài)。

其中對(duì)狀態(tài)標(biāo)志寄存器 FLAG 以位的形式顯示,顯示時(shí),8 個(gè)狀態(tài)標(biāo)志的顯示次序和符號(hào)如表 B - 1 所示。表 B - 1 狀態(tài)標(biāo)志顯示形式

標(biāo) 志 位 溢出標(biāo)志 OF 方向標(biāo)志 DF 中斷標(biāo)志 IF 符號(hào)標(biāo)志 SF 零標(biāo)志 ZF 輔助進(jìn)位 AF 奇偶標(biāo)志 PF 進(jìn)位標(biāo)志 CF

(9)跟蹤與顯示命令 T

格式: a · T[ =地址 ] 或 T [ 地址 ] b · T[ =地址 ][ 條數(shù) ] 或 T [ 地址 ][ 條數(shù) ] 功能: a ·執(zhí)行一條指定地址處的指令,停下來(lái),顯示 CPU 所有寄存器內(nèi)容和全部標(biāo)志位的狀態(tài),以及下一條指令的地址和內(nèi)容。

b ·為多條跟蹤命令,從指定地址開(kāi)始;若命令中用 [ 地址 ] 給定了起始地址,則從起始地址開(kāi)始,若未給定,則從當(dāng)前地址(CS:IP)開(kāi)始,執(zhí)行命令中的 [ 條數(shù) ] 決定一共跟蹤幾條指令后返回 DEBUG 狀態(tài)。

(10)反匯編命令 U 格式: a · U [ 地址 ] b · U [ 地址范圍 ] 功能:將指定范圍內(nèi)的代碼以匯編 語(yǔ)言形式顯示,同時(shí)顯示該代碼位于內(nèi)存的地址和機(jī)器。

若在命令中沒(méi)有指定地址則以上一個(gè) U 命令的最后一條指令地址的下一個(gè)單元作為起始地址;若沒(méi)有輸入過(guò) U 命令,則以 DEBUG 初始化段寄存器的值作為段地址,以 0100H 作為偏移地址。

(11)命名命令 N 格式: N 文件名

功能:在調(diào)用 DEBUG 時(shí),沒(méi)有文件名,則需要用 N 命令將要調(diào)用的文件名格式化到 CS:5CH 的文件控制塊中,才能用 L 命令把它調(diào)入內(nèi)存進(jìn)行調(diào)試(其它形式參考 DOS 手冊(cè))。

(12)讀盤(pán)命令 L

格式: a · L [ 地址 ][ 驅(qū)動(dòng)器號(hào) ][ 起始扇區(qū)號(hào) ][ 所讀扇區(qū)個(gè)數(shù) ] b · L [ 地址 ] c · L 功能: a ·把指定驅(qū)動(dòng)器和指定扇區(qū)范圍的內(nèi)容讀到內(nèi)存的指定區(qū)域中。其中地址是讀入內(nèi)存的起始地址,當(dāng)輸入時(shí)沒(méi)有給定地址,則隱含地址為 CS:100H。起始扇區(qū)號(hào)指邏輯扇區(qū)號(hào)的起始位置。所讀扇區(qū)個(gè)數(shù)是指從起始扇區(qū)號(hào)開(kāi)始讀到內(nèi)存幾個(gè)扇區(qū)的內(nèi)容。驅(qū)動(dòng)器號(hào)為 0 或 1,0 表示 A 盤(pán),1 表示 B 盤(pán)。

b ·讀入已在 CS:5CH 中格式化的文件控制塊所指定的文件。在使用該命令前用 N 命令命名即可將要讀入的文件名格式化到 CS:5CH 的文件控制塊中,其中地址為內(nèi)存地址。

狀 態(tài) 有 / 無(wú) 增 / 減 開(kāi) / 關(guān) 負(fù) / 正 零 / 非 有 / 無(wú) 偶 / 奇 有 / 無(wú)

顯示形式(置位 / 復(fù)位)

OV/NV DN/UP EI/DI NG/PL ZR/NZ AC/NA PE/PO CY/NC c ·同 b ·地址隱含在 CS : 100H 中。

當(dāng)讀入的文件有擴(kuò)展名.COM 或.EXE,則始終裝入 CS:100H 中,命令中指定了地址也沒(méi)用。其中 BX 和 CX 中存放所讀文件的字節(jié)數(shù)。

(13)寫(xiě)盤(pán)命令 W

格式: a · W[ 地址 ][ 驅(qū)動(dòng)器號(hào) ][ 起始扇區(qū)號(hào) ][ 所寫(xiě)扇區(qū)個(gè)數(shù) ] b · W[ 地址 ] c · W 功能: a · 把在 DEBUGU 狀態(tài)下調(diào)試的程序或數(shù)據(jù)寫(xiě)入指定的驅(qū)動(dòng)器中 , 起始扇區(qū)號(hào) , 所寫(xiě)扇區(qū)個(gè)數(shù)為要占盤(pán)中幾個(gè)扇區(qū)。

寫(xiě)盤(pán)指定扇區(qū)的操作應(yīng)十分小心,如有差錯(cuò)將會(huì)破壞盤(pán)上的原有內(nèi)容。如果在命令行中的地址只包含偏移地址,W 命令認(rèn)為段地址在 CS 中。

b ·當(dāng)鍵入不帶參數(shù)的寫(xiě)盤(pán)命令時(shí),(或只鍵入地址參數(shù)的寫(xiě)盤(pán)命令),寫(xiě)盤(pán)命令把文件寫(xiě)到軟盤(pán)上。該文件在用 W 命令之前用命名命令 N 將文件格式化在 CS:5CH 的文件控制塊中。c ·只有 W 命令以前而沒(méi)有任何參數(shù)時(shí),與 N 配合使用進(jìn)行寫(xiě)盤(pán)操作。在用 W 命令以前在 BX 和 CX 中應(yīng)寫(xiě)入文件的字節(jié)數(shù)。

(15)輸出命令 O

格式: O[ 端口地址 ] [ 字節(jié)值 ] 功能:向指定端口地址輸出一個(gè)字節(jié)。

(16)運(yùn)行命令 G

格式: G [ =地址 ][ 地址 [ 地址… ]] 功能:執(zhí)行用戶(hù)正在調(diào)試的程序。

其中地址為執(zhí)行的起始地址,以 CS 中內(nèi)容作為段地址,以等號(hào)后面的地址為偏移地址。再后面的地址為斷點(diǎn)地址。在命令行中只有起始地址,沒(méi)有斷點(diǎn)地址,則程序在執(zhí)行時(shí)不中斷。DEBUG 規(guī)定最多設(shè)置 10 個(gè)斷點(diǎn)地址。設(shè)置多個(gè)斷點(diǎn)用于調(diào)試較大的程序,即程序中有多個(gè)模塊、多個(gè)通路時(shí)用,比較方便,在執(zhí)行時(shí)不論走哪條通路,程序都可以在斷點(diǎn)處停下來(lái),以便調(diào)整程序。

斷點(diǎn)地址為程序中斷處的偏移地址,段地址在 CS 中。

當(dāng)執(zhí)行在 DEBUG 狀態(tài)下匯編的小段程序時(shí),只用 G 命令即可。

(17)十六進(jìn)制運(yùn)算命令 H 格式: H 數(shù)據(jù) 1 數(shù)據(jù) 2 其中數(shù)據(jù) 1 和數(shù)據(jù) 2 為十六進(jìn)制數(shù)據(jù)。

功能:將兩個(gè)十六進(jìn)制數(shù)進(jìn)行相加、減,結(jié)果顯示在屏幕上。(18)結(jié)束 DEBUG 返回到 DOS 命令 Q 格式: Q 功能:程序調(diào)試完退出 DEBUG 狀態(tài),返回到 DOS 狀態(tài)下。

Q 命令不能把內(nèi)存的文件存盤(pán),要想存盤(pán)必須在退出 DEBUG 之前用 W 命令寫(xiě)盤(pán)

讀書(shū)的好處

1、行萬(wàn)里路,讀萬(wàn)卷書(shū)。

2、書(shū)山有路勤為徑,學(xué)海無(wú)涯苦作舟。

3、讀書(shū)破萬(wàn)卷,下筆如有神。

4、我所學(xué)到的任何有價(jià)值的知識(shí)都是由自學(xué)中得來(lái)的。——達(dá)爾文

5、少壯不努力,老大徒悲傷。

6、黑發(fā)不知勤學(xué)早,白首方悔讀書(shū)遲。——顏真卿

7、寶劍鋒從磨礪出,梅花香自苦寒來(lái)。

8、讀書(shū)要三到:心到、眼到、口到

9、玉不琢、不成器,人不學(xué)、不知義。

10、一日無(wú)書(shū),百事荒廢。——陳壽

11、書(shū)是人類(lèi)進(jìn)步的階梯。

12、一日不讀口生,一日不寫(xiě)手生。

13、我撲在書(shū)上,就像饑餓的人撲在面包上。——高爾基

14、書(shū)到用時(shí)方恨少、事非經(jīng)過(guò)不知難。——陸游

15、讀一本好書(shū),就如同和一個(gè)高尚的人在交談——歌德

16、讀一切好書(shū),就是和許多高尚的人談話(huà)。——笛卡兒

17、學(xué)習(xí)永遠(yuǎn)不晚。——高爾基

18、少而好學(xué),如日出之陽(yáng);壯而好學(xué),如日中之光;志而好學(xué),如炳燭之光。——?jiǎng)⑾?/p>

19、學(xué)而不思則惘,思而不學(xué)則殆。——孔子

20、讀書(shū)給人以快樂(lè)、給人以光彩、給人以才干。——培根

第四篇:石油論文編寫(xiě)格式

科技論文的編寫(xiě)格式1.章、條、條、條的編號(hào)

按國(guó)家標(biāo)準(zhǔn)《標(biāo)準(zhǔn)化工作導(dǎo)則第1單元:標(biāo)準(zhǔn)的起草與表述規(guī)則第1部分:標(biāo)準(zhǔn)編寫(xiě)的基本規(guī)定》的規(guī)定,科技論文的章、條、條、條的劃分、編號(hào)和排列均應(yīng)采用阿拉伯?dāng)?shù)字分級(jí)編寫(xiě),即一級(jí)標(biāo)題的編號(hào)為1,2,…;二級(jí)標(biāo)題的號(hào)為1.1,1.2,…,2.1,2.2,…;三級(jí)標(biāo)題的編號(hào)為1.1.1,1.1.2,…,如此等等,詳細(xì)參見(jiàn)GB/T1.1-93和GB7713-87。

國(guó)標(biāo)規(guī)定的這一章條編號(hào)方式對(duì)著者、編者和讀者都具有顯著的優(yōu)越性。

2.題名(篇名)

題名是科技論文的必要組成部分。它要求用最簡(jiǎn)潔、恰當(dāng)?shù)脑~組反映文章的特定內(nèi)容,把論文的主題明白無(wú)誤地告訴讀者,并且使之具有畫(huà)龍點(diǎn)睛,啟迪讀者興趣的功能。一般情況下,題名中應(yīng)包括文章的主要關(guān)鍵詞。總之,題名的用詞十分重要,它直接關(guān)系到讀者對(duì)文章的取舍態(tài)度,務(wù)必字字斟酌。題名像一條標(biāo)簽,切忌用冗長(zhǎng)的主、謂、賓語(yǔ)結(jié)構(gòu)的完整語(yǔ)句逐點(diǎn)描述論文的內(nèi)容,以保證達(dá)到“簡(jiǎn)潔”的要求;而“恰當(dāng)”的要求應(yīng)反映在用詞的中肯、醒目、好讀好記上。當(dāng)然,也要避免過(guò)分籠統(tǒng)或嘩眾取寵的所謂簡(jiǎn)潔,缺乏可檢索性,以至于名實(shí)不符或無(wú)法反映出每篇文章應(yīng)有的主題特色。

題名應(yīng)簡(jiǎn)短,不應(yīng)很長(zhǎng),國(guó)際上不少著名期刊都對(duì)題名的用字有所限制。對(duì)于我國(guó)的科技期刊,論文題名用字不宜超過(guò)20個(gè)漢字,外文題名不超過(guò)10個(gè)實(shí)詞。使用簡(jiǎn)短題名而語(yǔ)意未盡時(shí),或系列工作分篇報(bào)告時(shí),可借助于副標(biāo)題名以補(bǔ)充論文的下層次內(nèi)容。

題名應(yīng)盡量避免使用化學(xué)結(jié)構(gòu)式、數(shù)學(xué)公式、不太為同行所熟悉的符號(hào)、簡(jiǎn)稱(chēng)、縮寫(xiě)以及商品名稱(chēng)等。

3.著者

著者署名是科技論文的必要組成部分。著者系指在論文主題內(nèi)容的構(gòu)思、具體研究工作的執(zhí)行及撰稿執(zhí)筆等方面的全部或局部上做出主要貢獻(xiàn)的人員,能夠?qū)φ撐牡闹饕獌?nèi)容負(fù)責(zé)答辯的人員,是論文的法定主權(quán)人和責(zé)任者。署名人數(shù)不宜太多,對(duì)論文涉及的部分內(nèi)容作過(guò)咨詢(xún)、給過(guò)某種幫助或參與常規(guī)勞動(dòng)的人員不宜按著者身份署名,但是可以注明他們?cè)鴧⑴c了哪一部分具體工作,或通過(guò)文末致謝的方式對(duì)他們的貢獻(xiàn)和勞動(dòng)表示謝意。

合寫(xiě)論文的諸著者應(yīng)按論文工作貢獻(xiàn)的多少順序排列。著者的姓名應(yīng)給出全名。科學(xué)技術(shù)文章一般均用著者的真實(shí)姓名,不用變化不定的筆名。同時(shí)還應(yīng)給出著者完成研究工作的單位或著者所在的工作單位或通信地址,以便讀者在需要時(shí)可與著者聯(lián)系。

[示例]:

熊易群1,賈改蓮2,鐘小鋒1,劉建君1

(1陜西師范大學(xué)教育系,陜西西安710062;2陜西省教育學(xué)院教育系,陜西西安710061)

4.摘要

摘要是現(xiàn)代科技論文的必要附加部分,只有極短的文章才能省略。它是解決讀者既要盡可能掌握浩瀚的信息海洋,又要面對(duì)自身精力十分有限這一對(duì)矛盾的有效手段。

根據(jù)GB6447-86的定義,摘要是以提供文獻(xiàn)內(nèi)容梗概為目的,不加評(píng)論和補(bǔ)充解釋?zhuān)?jiǎn)明確切地記述文獻(xiàn)重要內(nèi)容的短文。

摘要有兩種基本寫(xiě)法:報(bào)道性摘要--指明一次文獻(xiàn)的主題范圍及內(nèi)容梗概的簡(jiǎn)明摘要(也稱(chēng)簡(jiǎn)介);指示性摘要--指示一次文獻(xiàn)的陳述主題及取得的成果性質(zhì)和水平的簡(jiǎn)明摘要。介乎其間的是報(bào)道/指示性摘要--以報(bào)道性摘要形式表述一次文獻(xiàn)中信息價(jià)值較高的部分,而以指示性摘要形式表述其余部分的摘要。一般的科技論文都應(yīng)盡量寫(xiě)成報(bào)道性摘要,而對(duì)綜述性、資料性或評(píng)論性的文章可寫(xiě)成指示性或報(bào)道/指示性摘要。

摘要應(yīng)簡(jiǎn)明,它的詳簡(jiǎn)程度取決于文獻(xiàn)的內(nèi)容。通常中文摘要以不超過(guò)400字為宜,純指示性摘要可以簡(jiǎn)短一些,應(yīng)控制在200字上下(GB6447-86規(guī)定:報(bào)道性摘要和報(bào)道/指示性摘要一般以400字為宜;指示性摘要一般以200字左右為宜。GB7713-87規(guī)定:中文摘要一般不宜超過(guò)200~300字;外文摘要不宜超過(guò)250個(gè)實(shí)詞。如遇特殊需要字?jǐn)?shù)可以略多)。對(duì)于使用英、俄、德、日、法以外文種書(shū)寫(xiě)的一次文獻(xiàn),它們的摘要可以適當(dāng)詳盡一些。學(xué)位論文等文獻(xiàn)具有某種特殊性,為了評(píng)審,可寫(xiě)成變異式的摘要,不受字?jǐn)?shù)的限制。摘要的編寫(xiě)應(yīng)該客觀、真實(shí),切忌摻雜進(jìn)編寫(xiě)者的主觀見(jiàn)解、解釋和評(píng)論。如果發(fā)現(xiàn)一次文獻(xiàn)有原則性錯(cuò)誤,可加注“摘者注”。

摘要應(yīng)具有獨(dú)立性和自明性,并擁有與一次文獻(xiàn)同等量的主要信息,即不閱讀文獻(xiàn)的全文,就能獲得必要的信息。因此摘要是一種可以被引用的完整短文。

[編寫(xiě)摘要的注意事項(xiàng)]:

① 排除在本學(xué)科領(lǐng)域方面已經(jīng)成為常識(shí)的內(nèi)容;

② 不得簡(jiǎn)單地重復(fù)文章篇名中已經(jīng)表述過(guò)的信息;

③要求結(jié)構(gòu)嚴(yán)謹(jǐn),語(yǔ)義確切,表述簡(jiǎn)明,一氣呵成,一般不分或力求少分段落;忌發(fā)空洞的評(píng)語(yǔ),不作模棱兩可的結(jié)論。沒(méi)有得出結(jié)論的文章,可在摘要中作扼要的討論。

④ 要用第三人稱(chēng),不要使用“作者”、“我們”等作為摘要陳述的主語(yǔ);

⑤要采用規(guī)范化的名詞術(shù)語(yǔ)。尚未規(guī)范化的,以采用一次文獻(xiàn)所采用的為原則。如新術(shù)語(yǔ)尚無(wú)合適的中文術(shù)語(yǔ)譯名,可使用原文或譯名后加括號(hào)注明原文;

⑥不要使用圖、表或化學(xué)結(jié)構(gòu)式,以及相鄰專(zhuān)業(yè)的讀者尚難于清楚理解的縮略語(yǔ)、簡(jiǎn)稱(chēng)、代號(hào)。如果確有必要,在摘要首次出現(xiàn)時(shí)必須加以說(shuō)明;

⑦ 不得使用一次文獻(xiàn)中列出的章節(jié)號(hào)、圖號(hào)、表號(hào)、公式號(hào)以及參考文獻(xiàn)號(hào)等;

⑧ 必要提及的商品名應(yīng)加注學(xué)名。

當(dāng)然,應(yīng)該使用法定計(jì)量單位以及正確地書(shū)寫(xiě)規(guī)范字和標(biāo)點(diǎn)符號(hào)。

摘要的書(shū)寫(xiě)要求詳細(xì)見(jiàn)國(guó)標(biāo)GB6447-86。

5.關(guān)鍵詞

為了便于讀者從浩如煙海的書(shū)刊中尋找文獻(xiàn),特別是適應(yīng)計(jì)算機(jī)自動(dòng)檢索的需要,GB3179/T-92規(guī)定,現(xiàn)代科技期刊都應(yīng)在學(xué)術(shù)論文的摘要后面給出3~8個(gè)關(guān)鍵詞。關(guān)鍵詞的標(biāo)引應(yīng)按GB3860-83《文獻(xiàn)主題標(biāo)引規(guī)則》的規(guī)定,在審讀文獻(xiàn)題名、前言、結(jié)論、圖表,特別是在審讀文獻(xiàn)的基礎(chǔ)上,逐篇對(duì)文獻(xiàn)進(jìn)行主題分析,然后選定能反映文獻(xiàn)特征內(nèi)容,通用性比較強(qiáng)的關(guān)鍵詞。首先要選取列入《漢語(yǔ)主題詞表》、《MeSH》等詞表中的規(guī)范性詞(稱(chēng)敘詞或主題詞)。對(duì)于那些反映新技術(shù)、新學(xué)科而尚未被主題詞表錄入的新產(chǎn)生的名詞術(shù)語(yǔ),亦可用非規(guī)范的自由詞標(biāo)出,以供詞表編纂單位在修訂詞表時(shí)參照選用。要強(qiáng)調(diào)的一點(diǎn)是:一定不要為了強(qiáng)調(diào)反映文獻(xiàn)主題的全面性,把關(guān)鍵詞寫(xiě)成是一句句內(nèi)容“全面”的短語(yǔ)。

6.引言

引言(前言、序言、概述)經(jīng)常作為論文的開(kāi)端,主要回答“為什么研究(why)”這個(gè)問(wèn)題。它簡(jiǎn)明介紹論文的背景、相關(guān)領(lǐng)域的前人研究歷史與現(xiàn)狀(有時(shí)亦稱(chēng)這部分為文獻(xiàn)綜述),以及著者的意圖與分析依據(jù),包括論文的追求目標(biāo)、研究范圍和理論、技術(shù)方案的選取等。引言應(yīng)言簡(jiǎn)意賅,不要等同于摘要,或成為摘要的注釋。引言中不應(yīng)詳述同行熟知的,包括教科書(shū)上已有陳述的基本理論、實(shí)驗(yàn)方法和基本方程的推導(dǎo);除非是學(xué)位論文,為了反映著者的學(xué)業(yè)等等,允許有較詳盡的文獻(xiàn)綜述段落。如果在正文中采用比較專(zhuān)業(yè)化的術(shù)語(yǔ)或縮寫(xiě)詞時(shí),最好先在引言中定義說(shuō)明。

7.正文

正文是科技論文的核心組成部分,主要回答“怎么研究(how)”這個(gè)問(wèn)題。正文應(yīng)充分闡明論文的觀點(diǎn)、原理、方法及具體達(dá)到預(yù)期目標(biāo)的整個(gè)過(guò)程,并且突出一個(gè)“新”字,以反映論文具有的首創(chuàng)性。根據(jù)需要,論文可以分層深入,逐層剖析,按層設(shè)分層標(biāo)題。

正文通常占有論文篇幅的大部分。它的具體陳述方式往往因不同學(xué)科、不同文章類(lèi)型而有很大差別,不能牽強(qiáng)地做出統(tǒng)一的規(guī)定。一般應(yīng)包括材料、方法、結(jié)果、討論和結(jié)論等幾個(gè)部分。

試驗(yàn)與觀察、數(shù)據(jù)處理與分析、實(shí)驗(yàn)研究結(jié)果的得出是正文的最重要成分,應(yīng)該給予極大的重視。要尊重事實(shí),在資料的取舍上不應(yīng)該隨意摻入主觀成分,或妄加猜測(cè),不應(yīng)該忽視偶發(fā)性現(xiàn)象和數(shù)據(jù)。

寫(xiě)科技論文不要求有華麗的詞藻,但要求思路清晰,合乎邏輯,用語(yǔ)簡(jiǎn)潔準(zhǔn)確、明快流暢;內(nèi)容務(wù)求客觀、科學(xué)、完備,要盡量讓事實(shí)和數(shù)據(jù)說(shuō)話(huà);凡是用簡(jiǎn)要的文字能夠講解的內(nèi)容,應(yīng)用文字陳述。用文字不容易說(shuō)明白或說(shuō)起來(lái)比較繁瑣的,應(yīng)由表或圖(必要時(shí)用彩圖)來(lái)陳述。表或圖要具有自明性,即其本身給出的信息就能夠說(shuō)明欲表達(dá)的問(wèn)題。數(shù)據(jù)的引用要嚴(yán)謹(jǐn)確切,防止錯(cuò)引或重引,避免用圖形和表格重復(fù)地反映同一組數(shù)據(jù)。資料的引用要標(biāo)明出處。

物理量與單位符號(hào)應(yīng)采用《中華人民共和國(guó)法定計(jì)量單位》的規(guī)定,選用規(guī)范的單位和書(shū)寫(xiě)符號(hào);不得已選用非規(guī)范的單位或符號(hào)時(shí)應(yīng)考慮行業(yè)的習(xí)慣,或使用法定的計(jì)量單位和符號(hào)加以注解和換算。

教科書(shū)式的撰寫(xiě)方法是撰寫(xiě)科技論文的第一大忌。對(duì)已有的知識(shí)避免重新描述和論證,盡量采用標(biāo)注參考文獻(xiàn)的方法;對(duì)用到的某些數(shù)學(xué)輔佐手段,應(yīng)防止過(guò)分注意細(xì)節(jié)的數(shù)學(xué)推演,需要時(shí)可采用附錄的形式供讀者選閱。

8.結(jié)論

結(jié)論(或討論)是整篇文章的最后總結(jié)。盡管多數(shù)科技論文的著者都采用結(jié)論的方式作為結(jié)束,并通過(guò)它傳達(dá)自己欲向讀者表述的主要意向,但它不是論文的必要組成部分。

結(jié)論不應(yīng)是正文中各段小結(jié)的簡(jiǎn)單重復(fù),主要回答“研究出什么(what)”。它應(yīng)該以正文中的試驗(yàn)或考察中得到的現(xiàn)象、數(shù)據(jù)和闡述分析作為依據(jù),由此完整、準(zhǔn)確、簡(jiǎn)潔地指出:

① 由對(duì)研究對(duì)象進(jìn)行考察或?qū)嶒?yàn)得到的結(jié)果所揭示的原理及其普遍性;

② 研究中有無(wú)發(fā)現(xiàn)例外或本論文尚難以解釋和解決的問(wèn)題;

③ 與先前已經(jīng)發(fā)表過(guò)的(包括他人或著者自己)研究工作的異同;

④ 本論文在理論上與實(shí)用上的意義與價(jià)值;

⑤ 對(duì)進(jìn)一步深入研究本課題的建議。

9.致謝

致謝一般單獨(dú)成段,放在文章的最后面,但它不是論文的必要組成部分。它是對(duì)曾經(jīng)給予論文的選題、構(gòu)思或撰寫(xiě)以指導(dǎo)或建議,對(duì)考察或?qū)嶒?yàn)過(guò)程中做出某種貢獻(xiàn)的人員,或給予過(guò)技術(shù)、信息、物質(zhì)或經(jīng)費(fèi)幫助的單位、團(tuán)體或個(gè)人致以謝意。一般對(duì)例外的勞動(dòng)可不必專(zhuān)門(mén)致謝。

10.參考文獻(xiàn)

文后參考文獻(xiàn)是現(xiàn)代科技論文的重要組成部分,但如果撰寫(xiě)論文時(shí)未參考文獻(xiàn)也可以不寫(xiě)。它是反映文稿的科學(xué)依據(jù)和著者尊重他人研究成果而向讀者提供文中引用有關(guān)資料的出處,或?yàn)榱斯?jié)約篇幅和敘述方便,提供在論文中提及而沒(méi)有展開(kāi)的有關(guān)內(nèi)容的詳盡文本。任何不重視參考文獻(xiàn),甚至于使用“文后參考文獻(xiàn)從略”的編輯處理方法都是錯(cuò)誤的。

被列入的參考文獻(xiàn)應(yīng)該只限于那些著者親自閱讀過(guò)和論文中引用過(guò),而且正式發(fā)表的出版物,或其他有關(guān)檔案資料,包括專(zhuān)利等文獻(xiàn)。私人通信、內(nèi)部講義及未發(fā)表的著作,一般不宜作為參考文獻(xiàn)著錄,但可用腳注或文內(nèi)注的方式,以說(shuō)明引用依據(jù)。國(guó)內(nèi)外對(duì)文后參考文獻(xiàn)的著錄方法歷來(lái)很多,但自從ISO制訂國(guó)際標(biāo)準(zhǔn)以來(lái)已有漸趨一致的動(dòng)向,目前,我國(guó)文獻(xiàn)工作標(biāo)準(zhǔn)化技術(shù)委員會(huì)已經(jīng)根據(jù)國(guó)際標(biāo)準(zhǔn)化工作發(fā)展趨勢(shì),制訂出自己的國(guó)家標(biāo)準(zhǔn)--GB7714-87《文后參考文獻(xiàn)著錄規(guī)則》,明確規(guī)定我國(guó)的科技期刊采用國(guó)際上通行的“順序編碼制”和“著者-出版年制”。前者根據(jù)正文中引用參考文獻(xiàn)的先后,按著者、題名、出版事項(xiàng)的順序逐項(xiàng)著錄;后者首先根據(jù)文種(按中文、日文、英文、俄文、其他文種的順序)集中,然后按參考文獻(xiàn)著的姓氏筆畫(huà)或姓氏首字母的順序排列,同一著者有多篇文獻(xiàn)被參考引用時(shí),再按文獻(xiàn)出版年份的先后依次給出。

文后參考文獻(xiàn)的著錄形式還是比較復(fù)雜的,具體執(zhí)行時(shí)請(qǐng)隨時(shí)查閱GB7714-87的規(guī)定。

參考文獻(xiàn)著錄的條目以小于正文的字號(hào)編排在文末。其格式為:

專(zhuān)著、論文集、學(xué)位論文、報(bào)告--[序號(hào)]主要責(zé)任者.文獻(xiàn)題名[文獻(xiàn)類(lèi)型標(biāo)識(shí)].出版地,出版者,出版年,起止頁(yè)碼(任選)。

[示例]:

[1]周振甫.周易譯注[M].北京:中華書(shū)局。1991。

[2]陳崧.五四前后東方西文化問(wèn)題論戰(zhàn)文選[C].北京:中國(guó)社會(huì)科學(xué)出版社,1985。

[3]陳桐生.中國(guó)史官文化與《史記》[D].西安:陜西師范大學(xué)文學(xué)研究所,1992。

[4]白永秀,劉敢,任保平.西安金融、人才、技術(shù)三大要素市場(chǎng)培育與發(fā)展研究[R].西安:陜西師范大學(xué)西北經(jīng)濟(jì)發(fā)展研究中心,1998。

期刊文章--[序號(hào)]主要責(zé)任者.文獻(xiàn)題名[J].刊名,年,卷(期):起止頁(yè)碼。

[示例]:

[5]何齡修.讀顧城《南明史》[J].中國(guó)史研究,1998,(3):167-173。

論文集中的析出文獻(xiàn)--[序號(hào)]析出文獻(xiàn)主要責(zé)任者.析出文獻(xiàn)題名[A]。

原文獻(xiàn)主要責(zé)任者(任選).原文獻(xiàn)題名[C].出版地:出版者,出版年.析出文獻(xiàn)起止頁(yè)碼。

[示例]:

[6]瞿秋白.現(xiàn)代文明的問(wèn)題與社會(huì)主義[A].羅榮渠.從西化到現(xiàn)代化[c].北京:北京大學(xué)出版社,1990.121-133。

報(bào)紙文章--[序號(hào)]主要責(zé)任者.文獻(xiàn)題名[N].報(bào)紙名,出版日期(版次)。

[示例]:

[7]謝希德.創(chuàng)造學(xué)習(xí)的新思路[N].人民日?qǐng)?bào),1998-12-25(10)。

國(guó)際標(biāo)準(zhǔn)、國(guó)家標(biāo)準(zhǔn)--[序號(hào)]標(biāo)準(zhǔn)編號(hào),標(biāo)準(zhǔn)名稱(chēng)[S]。

[示例]:

[8]GB/T 16159-1996,漢語(yǔ)拼音正詞法基本規(guī)則。

電子文獻(xiàn)--[序號(hào)]主要責(zé)任者.電子文獻(xiàn)題名[電子文獻(xiàn)及載體類(lèi)型標(biāo)識(shí)]-電子文獻(xiàn)的出處或可獲得地址,發(fā)表或更新日期/引用日期(任選)。[示例]:

[9]王明亮.關(guān)于中國(guó)學(xué)術(shù)期刊標(biāo)準(zhǔn)化數(shù)據(jù)庫(kù)系統(tǒng)工程的進(jìn)展[EB/OL].http://,1998-08-16/1998-10-04。

[10]萬(wàn)錦坤.中國(guó)大學(xué)學(xué)報(bào)論文文摘(1983-1993).英文版[DB/CD].北京:中國(guó)大百科全書(shū)出版社,1996.各種未定類(lèi)型的文獻(xiàn)--[序號(hào)]主要責(zé)任者.文獻(xiàn)題名[z].出版地:出版者,出版年。

[示例]:

[11]張永祿.唐代長(zhǎng)安詞典[z].西安:陜西人民出版社,1980。

11.附錄

附錄是論文的附件,不是必要組成部分。它在不增加文獻(xiàn)正文部分的篇幅和不影響正文主體內(nèi)容敘述連貫性的前提下,向讀者提供論文中部分內(nèi)容的詳盡推導(dǎo)、演算、證明、儀器、裝備或解釋、說(shuō)明,以及提供有關(guān)數(shù)據(jù)、曲線(xiàn)、照片或其他輔助資料如計(jì)算機(jī)的框圖和程序軟件等。

附錄與正文一樣,編入連續(xù)頁(yè)碼。

第五篇:51單片機(jī)課程設(shè)計(jì) 俄羅斯方塊

單片機(jī)課程設(shè)計(jì)

俄羅斯方塊

學(xué)院:工程技術(shù)學(xué)院

專(zhuān)業(yè):08級(jí)電子科學(xué)與技術(shù)

小組成員:

何冠羲,馬志祥,李洋,張世剛,葉彪,鄭先安,洪之

目錄

摘要

引言

1.程序整體思路

2.8X8LED模塊顯示原理 3.硬件電路仿真圖 4.圖形顯示 5.消層算法 6.旋轉(zhuǎn)算法 7.實(shí)物焊接

8.心得體會(huì)

附錄 程序代碼

摘 要

記得在很小的時(shí)候,有一種掌上游戲機(jī),里面有一款游戲叫做俄羅斯方塊,那時(shí)的我們只是簡(jiǎn)單的按照游戲規(guī)則進(jìn)行“堆積木”,而其中的原理卻很少有人去思考,畢竟當(dāng)時(shí)的我們都還很年幼。

基于單片機(jī)課程設(shè)計(jì)的機(jī)會(huì),我們這個(gè)小組將使用51單片機(jī)和8x8led的組合,來(lái)實(shí)現(xiàn)比較簡(jiǎn)單的俄羅斯方塊設(shè)計(jì)。

此次設(shè)計(jì)初期是在keil和proteus聯(lián)合仿真中進(jìn)行,編程語(yǔ)言為51匯編,后期是進(jìn)行實(shí)物焊接。

論文描述了俄羅斯方塊的主要功能函數(shù)的實(shí)現(xiàn),算法分析和實(shí)物焊接過(guò)程中遇到的問(wèn)題。

關(guān)鍵詞:俄羅斯方塊;算法; 8X8led;

引 言

游戲是人們活動(dòng)中一項(xiàng)非常重要的內(nèi)容,有人認(rèn)為如果哪一天人類(lèi)對(duì)所有的游戲都失去興趣,恐怕世界的末日就要到了。電腦對(duì)游戲的貢獻(xiàn)有目共睹,現(xiàn)在摸過(guò)電腦的人很少有沒(méi)玩過(guò)電腦游戲的,喜歡游戲的人也很少有不玩電腦的。

俄羅斯方塊是一款風(fēng)靡全球的電視游戲機(jī)和掌上游戲機(jī)游戲,它曾經(jīng)造成的轟動(dòng)與造成的經(jīng)濟(jì)價(jià)值可以說(shuō)是游戲史上的一件大事。這款游戲最初是由蘇聯(lián)的游戲制作人Alex Pajitnov制作的,它看似簡(jiǎn)單但卻變化無(wú)窮,令人上癮。相信大多數(shù)用戶(hù)都還記得為它癡迷得茶不思飯不想的那個(gè)俄羅斯方塊時(shí)代。究其歷史,俄羅斯方塊最早還是出現(xiàn)在PC機(jī)上,而我國(guó)的用戶(hù)都是通過(guò)紅白機(jī)了解、喜歡上它的。現(xiàn)在聯(lián)眾又將重新掀起這股讓人沉迷的俄羅斯方塊風(fēng)潮。對(duì)一般用戶(hù)來(lái)說(shuō),它的規(guī)則簡(jiǎn)單,容易上手,且游戲過(guò)程變化無(wú)窮,而在“聯(lián)眾俄羅斯方塊”中,更有一些聯(lián)眾網(wǎng)絡(luò)游戲所獨(dú)有的魅力――有單機(jī)作戰(zhàn)與兩人在線(xiàn)對(duì)戰(zhàn)兩種模式,用戶(hù)可任選一種進(jìn)行游戲。網(wǎng)絡(luò)模式還增加了積分制,使用戶(hù)既能感受到游戲中的樂(lè)趣,也給用戶(hù)提供了一個(gè)展現(xiàn)自己高超技藝的場(chǎng)所。

俄羅斯方塊游戲可以說(shuō)是隨計(jì)算機(jī)的發(fā)展而發(fā)展,并不斷推陳出新演變出各種類(lèi)似游戲, 深受廣大玩家喜愛(ài)。這個(gè)游戲有的簡(jiǎn)單, 有的復(fù)雜, 但其根本原理是一樣的都是對(duì)運(yùn)動(dòng)的方塊進(jìn)行組合, 來(lái)訓(xùn)練玩家的反應(yīng)能力。本文利用單片機(jī)進(jìn)行俄羅斯方塊設(shè)計(jì),采用51匯編語(yǔ)言進(jìn)行編程,基于匯編語(yǔ)言的原因是在編寫(xiě)程序的過(guò)程中,對(duì)于程序的執(zhí)行會(huì)有一個(gè)比較直觀的表現(xiàn)。

1.程序整體思路

單片機(jī)上的程序設(shè)計(jì)一般是一個(gè)大循環(huán)結(jié)構(gòu),對(duì)于俄羅斯方塊的程序設(shè)計(jì),首先產(chǎn)生一個(gè)偽隨機(jī)數(shù),其范圍是0-6,然后程序根據(jù)此數(shù)值所對(duì)應(yīng)的圖形模塊裝入ram的固定區(qū)域內(nèi),緊接著將此圖像寫(xiě)入led所對(duì)應(yīng)的顯示緩沖區(qū)中,顯示程序?qū)⒕彌_區(qū)內(nèi)的內(nèi)容顯示在led上,如果沒(méi)有控制鍵按下,圖形將自動(dòng)向下移動(dòng)。如果有鍵按下,程序?qū)⒏鶕?jù)按下的鍵來(lái)改變圖形存儲(chǔ)區(qū)的值,同時(shí)程序?qū)⑴袛鄨D形是否已到達(dá)邊界,當(dāng)圖形最上層到達(dá)顯示區(qū)頂部,則游戲結(jié)束,此時(shí)將清楚顯示緩沖的內(nèi)容,游戲重新開(kāi)始。2.8x8led顯示原理

8x8led顯示屏的原理圖如下

由于人眼的視覺(jué)暫留現(xiàn)象,通過(guò)逐行掃描顯示的方式來(lái)顯示要顯示的內(nèi)容,當(dāng)每一行掃描的時(shí)間很小時(shí)人眼觀察的將是一幅完整的圖像。

3. 硬件電路仿真圖

.4.圖形顯示

8x8led一共有64個(gè)led,可以從下至上一次對(duì)其編號(hào),對(duì)于顯示類(lèi)的基本操作是任意點(diǎn)亮一個(gè)點(diǎn),熄滅一個(gè)點(diǎn),任意點(diǎn)亮n(0

我們將ram中從21h單元到28h單元作為led的顯示緩沖區(qū),這里面的每一位對(duì)應(yīng)led的一個(gè)點(diǎn),led將實(shí)時(shí)顯示緩沖區(qū)的內(nèi)容,也就是當(dāng)此緩沖區(qū)內(nèi)容一改變,led上看到的也會(huì)做出相應(yīng)的改變。同時(shí)在俄羅斯方塊中那些方塊被存放在一個(gè)類(lèi)似于一維的數(shù)組之中,每一個(gè)方塊對(duì)應(yīng)四個(gè)小方塊,根據(jù)偽隨機(jī)數(shù)將這四個(gè)小方塊對(duì)應(yīng)的值裝入ram固定的區(qū)域內(nèi)。如果要顯示方塊只需將這些方塊所對(duì)應(yīng)的點(diǎn)寫(xiě)入緩沖區(qū)。5.消層算法

設(shè)置循環(huán)變量數(shù)R2=8,即總共至少要掃描8次,每一次循環(huán)過(guò)程中檢測(cè)此行是否已滿(mǎn),也就是檢測(cè)這一行所對(duì)應(yīng)的存儲(chǔ)單元是否全為一,如果全為一則將消去此行,即將此行對(duì)應(yīng)的ram清零。同時(shí)將此行上面ram的內(nèi)容按每列依次下移,下移完之后重新將R2=0,又從第一行開(kāi)始檢測(cè)。此行不全為零時(shí)只需將R2=R2+1。直到R2=9消層過(guò)程結(jié)束。6.旋轉(zhuǎn)算法

首先要確定一個(gè)旋轉(zhuǎn)中心,假如旋轉(zhuǎn)中心的編號(hào)是34,將34除以8,商是4存入R1余數(shù)是2存入R2,及時(shí)用商和余數(shù)建立坐標(biāo)系。此時(shí)若以此為旋轉(zhuǎn)中心的圖形需要旋轉(zhuǎn),則將每一個(gè)小方塊對(duì)應(yīng)編號(hào)除以8,商減去R1,余數(shù)減去R2,而每一個(gè)方塊一次將旋轉(zhuǎn)90度,所以有公式x1,y1,x2,y2

x2=-y1,y2= x1 其中x1,y1為旋轉(zhuǎn)之前的坐標(biāo),x2,y2為旋轉(zhuǎn)之后的坐標(biāo)。旋轉(zhuǎn)完之后將x2加上R1將y2加上R2,然后將x2乘以8再加上y2。執(zhí)行四次此過(guò)程旋轉(zhuǎn)結(jié)束。7.實(shí)物焊接

器件:stc51單片機(jī)一塊,8x8led顯示模塊一塊,電阻10k10個(gè),開(kāi)關(guān)5個(gè),與門(mén),12m晶振一個(gè),電容3個(gè)。

首先按照目的進(jìn)行進(jìn)行元器件布局,然后按照電路圖里的導(dǎo)線(xiàn)的連接次序?qū)⒃骷冈陔娐钒迳希负弥筮M(jìn)行調(diào)試。8.心得體會(huì)

寫(xiě)程序的過(guò)程中,首先應(yīng)該把程序思路理清,然后再寫(xiě)代碼,否則寫(xiě)到一半感覺(jué)行不通時(shí)是很令人心煩的。還有就是焊接是一個(gè)技術(shù)活,因?yàn)樵陔娮庸に噷?shí)習(xí)之后大家便沒(méi)有碰過(guò)電烙鐵,所以焊的過(guò)程還是很辛苦的。

附錄:程序代碼

ORG

0000H AJMP

START ORG

0003H AJMP

INTERRUPT AA

EQU

10000000B BB

EQU

11111111B HANG

EQU

32H LIE

EQU

33H COUNT

EQU

34H REMOVEROW

EQU

35H STEPS

EQU

36H XUNHUAN

EQU

37H BIANLIANG

EQU

38H GRAPHRAM1

EQU

39H GRAPHRAM2

EQU

40H GRAPHRAM3

EQU

41H GRAPHRAM4

EQU

42H XXX

EQU

43H YYY

EQU

44H KEY

EQU

45H LEDHEAD

EQU

21H

TEST

BIT 100 BITS

BIT 99 RIGHT

BIT 98 LEFT

BIT 97 DOWN

BIT 96 HARD

BIT 95 TURN

BIT 94 KEYDOWN

BIT 93 TESTING

BIT 92 BOTTOM

BIT 91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;程序由此處開(kāi)始執(zhí)行;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;START: MOV

TCON,#00000001B;;;;;;;;;;;;;設(shè)置外部中斷0響應(yīng)方式為下降沿觸發(fā) SETB

EX0 SETB

EA MOV

SP,#60H;;;;;;;;;;;;;;;;;;;;;將堆棧指針SP設(shè)置在RAM的高地址處 MOV

R7,#6;;;;;;;;;;;;;;;;;;;;;;R7作為存放0-6這7個(gè)隨機(jī)數(shù)的變量

MOV

P0,#11111111B;;;;;;;;;;;;;;;;;;;;;;將P0口最為輸入口 LCALL

WRITEGRAPHTORAM CLR

TESTING GAMELOOP:;CLR

EA LCALL

SHOWGRAPH MOV

R6,#30 TIMING: LCALL

SHOWLEDRAM LCALL

DJNZ

LCALL

JNB

ABCD: MOV

CJNE

LCALL

LCALL

JMP

NEXT1:;JB

JMP

KEY1: CLR

CLR

MOV

CJNE

LCALL

JB

LCALL

LCALL

LCALL

KEY2: CJNE

LCALL

JB

LCALL

LCALL

LCALL

KEY3: CJNE

;LCALL

;JNB

DELAY

R6,TIMING

DOWNTEST DOWN,NEXT1

A,28H A,#0,GAMEOVER

REMOVEBLOCK

WRITEGRAPHTORAM GAMELOOP KEYDOWN,KEY1 KEY4 TESTING KEYDOWN

A,KEY A,#1,KEY2;1-LEFT

LEFTTEST LEFT,KEY4

CLEANGRAPH

MOVELEFT

GAMELOOP A,#2,KEY3;2-RIGHT

RIGHTTEST RIGHT,KEY4

CLEANGRAPH

MOVERIGHT

GAMELOOP A,#4,KEY4;4-ROTATE

ROTATIONTEST

TURN,KEY4

LCALL

CLEANGRAPH LCALL

ROTATION JMP

GAMELOOP KEY4: CJNE

A,#8,KEY5 SWEAT: LCALL

DOWNTEST JB

DOWN,GAMELOOP LCALL

CLEANGRAPH LCALL

MOVEDOWN JMP

SWEAT KEY5: LCALL

CLEANGRAPH LCALL

MOVEDOWN INC

R7 CJNE

R7,#7,NEXT5 MOV

R7,#0 NEXT5: JMP

GAMELOOP GAMEOVER: MOV

R0,#8 MOV

R1,#LEDHEAD CLEAR: LCALL

CLEANGRAPH MOV

@R1,#0 INC

R1 DJNZ

R0,CLEAR MOV

R0,#4 MOV

R1,#GRAPHRAM1 ASDF: MOV

A,@R1 ADD

A,#16 MOV

@R1,A INC

R1 DJNZ

R0,ASDF JMP

GAMELOOP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;測(cè)試圖形是否能向下移動(dòng);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;DOWNTEST: PUSH

0 PUSH

PUSH

PUSH

PUSH

B PUSH

ACC

MOV

R2,#4 MOV

R0,#GRAPHRAM1 DOWN0: MOV

A,@R0 SUBB

A,#8 MOV

B,A MOV

R3,#4 CLR

C MOV

R1,#GRAPHRAM1 DOWN2: CLR

C SUBB

A,@R1 JZ

DOWN1 INC

R1 MOV

A,B DJNZ

R3,DOWN2 LCALL

TESTBIT JB

BITS,DOWN3 DOWN1: INC

R0 DJNZ

R2,DOWN0 CLR

DOWN JMP

HOPE DOWN3: SETB

DOWN;DOWN WEI YI BIAO SHI BU NENG WANG CPL

P3.4 JMP

DOWN4 HOPE: MOV

R2,#4 MOV

R0,#GRAPHRAM1 YOUQIANG2: MOV

R3,#1 CCC2: MOV

A,R3 MOV

B,A CLR

C SUBB

A,@R0 JNZ

CCC1 SETB

DOWN SETB

BOTTOM JMP

DOWN4

XIA YI DONG CCC1: MOV

A,B INC

R3 CJNE

R3,#9,CCC2 INC

R0 DJNZ

R2,YOUQIANG2 DOWN4: POP

ACC POP

B POP POP POP POP

0 RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;外部中斷0中斷處理程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;INTERRUPT: PUSH

0 PUSH

PUSH

ACC INC

R7 CJNE

R7,#7,INTT MOV

R7,#0 INTT: SETB

TESTING SETB

KEYDOWN MOV

A,P0 CPL

A MOV

KEY,A POP

ACC POP POP

0 RETI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;測(cè)試能否旋轉(zhuǎn)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;向下移動(dòng)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MOVEDOWN: PUSH

0 PUSH

PUSH

ACC MOV

R0,#GRAPHRAM1 MOV

R1,#4 MOVE1: MOV

A,@R0 CLR

C SUBB

A,#8 MOV

@R0,A INC

R0 DJNZ

R1,MOVE1 POP

ACC POP POP

0 RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;向左移動(dòng)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MOVELEFT: PUSH

0 PUSH

PUSH

ACC MOV

R0,#GRAPHRAM1 MOV

R1,#4 MOVE2: MOV

A,@R0 CLR

C SUBB

A,#1 MOV

@R0,A INC

R0 DJNZ

R1,MOVE2 POP

ACC POP POP

0 RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;向右移動(dòng)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MOVERIGHT: PUSH

0 PUSH

PUSH

ACC MOV

R0,#GRAPHRAM1 MOV

R1,#4 MOVE3: MOV

A,@R0 CLR

C INC

A

MOV

@R0,A INC

R0 DJNZ

R1,MOVE3 POP

ACC POP POP

0 RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;將圖形寫(xiě)入RAM緩存中;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WRITEGRAPHTORAM: PUSH

ACC PUSH

B PUSH

0 PUSH PUSH PUSH MOV

R1,#4 MOV

A,R7 MOV

B,#4 MUL

AB MOV

R2,A MOV

R0,#GRAPHRAM1 MOV

DPTR,#GRAPH WRITEGRAPH: MOV

A,R2 MOVC

A,@A+DPTR;SUBB

A,#16 MOV

@R0,A INC

R2 INC

R0 DJNZ

R1,WRITEGRAPH POP

POP

POP

POP

0 POP

B POP

ACC RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;測(cè)試某一個(gè)二進(jìn)制位是否為1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;TESTBIT: PUSH

0 PUSH PUSH

B PUSH

ACC MOV

B,#8 DIV

AB MOV

R0,A MOV

A,B CJNE

A,#0,TEST3 MOV

A,R0 DEC

A JMP

TEST4 TEST3: MOV

A,R0 TEST4:

MOV

DPTR,#TAB1

MOV

R1,#LEDHEAD ADD

A,R1 MOV

R1,A MOV

A,B MOVC

A,@A+DPTR ANL

A,@R1 CJNE

A,#0,TEST1 CLR

BITS JMP

TEST2 TEST1: SETB

BITS TEST2: POP

ACC POP

B POP

POP

0 RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;測(cè)試圖形是否能向左移動(dòng);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

LEFTTEST: PUSH

0 PUSH

PUSH

PUSH

PUSH

B PUSH

ACC MOV

R2,#4 MOV

R0,#GRAPHRAM1 LEFT0: MOV

A,@R0 CLR

C SUBB

A,#1 MOV

B,A MOV

R3,#4;CLR

C MOV

R1,#GRAPHRAM1 LEFT2: CLR

C SUBB

A,@R1 JZ

LEFT1 INC

R1 MOV

A,B DJNZ

R3,LEFT2 LCALL

TESTBIT JB

BITS,LEFT3

LEFT1: INC

R0 DJNZ

R2,LEFT0 CLR

LEFT JMP

LEFT4 LEFT3: SETB

LEFT;DOWN WEI YI BIAO SHI BU NENG WANG CPL

P3.4 JMP

LEFT5 LEFT4: MOV

R2,#4 MOV

R0,#GRAPHRAM1 YOUQIANG: MOV

R3,#9 MOV

A,#1 HHH2:

MOV

B,A CLR

C

XIA YI DONG SUBB

A,@R0 JNZ

HHH1 SETB

LEFT JMP

LEFT5 HHH1: MOV

A,B ADD

A,#8 DJNZ

R3,HHH2 INC

R0 DJNZ

R2,YOUQIANG LEFT5: POP

ACC POP

B POP POP POP POP

0 RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;測(cè)試圖形是否能向右移動(dòng);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;RIGHTTEST: PUSH

0 PUSH

PUSH

PUSH

PUSH

B PUSH

ACC MOV

R2,#4 MOV

R0,#GRAPHRAM1 RIGHT0: MOV

A,@R0 ADD

A,#1 MOV

B,A MOV

R3,#4;CLR

C MOV

R1,#GRAPHRAM1 RIGHT2: SUBB

A,@R1 JZ

RIGHT1 INC

R1 MOV

A,B DJNZ

R3,RIGHT2

LCALL

TESTBIT JB

BITS,RIGHT3 RIGHT1: INC

R0 DJNZ

R2,RIGHT0 CLR

RIGHT JMP

RIGHT4 RIGHT3: SETB

RIGHT;DOWN WEI YI BIAO SHI BU NENG WANG CPL

P3.4 JMP

RIGHT5 RIGHT4: MOV

R2,#4 MOV

R0,#GRAPHRAM1 YOUQIANG1: MOV

R3,#8 MOV

A,#8 III2:

MOV

B,A CLR

C SUBB

A,@R0 JNZ

III1 SETB

RIGHT JMP

RIGHT5 III1: MOV

A,B ADD

A,#8 DJNZ

R3,III2 INC

R0 DJNZ

R2,YOUQIANG1 RIGHT5: POP

ACC POP

B POP POP POP POP

0 RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;圖形旋轉(zhuǎn)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

XIA YI DONG ROTATION: PUSH

0 PUSH PUSH PUSH PUSH

B PUSH

ACC MOV

A,GRAPHRAM1;A=50 MOV

B,#8 DIV

AB

;A=6 B= 2 MOV

HANG,A

;HANG = 6 MOV

LIE,B

;LIE = 2 MOV

R3,#4 MOV

R0,#GRAPHRAM1 ROTATESTART: MOV

A,@R0 MOV

B,#8 DIV

AB

CLR

C SUBB

A,HANG

MOV

R1,A

MOV

A,B CLR

C SUBB

A,LIE MOV

R2,A;;;;;;;;;;;;;;;;;;X2=-Y1 Y2=X1 MOV

A,#0 CLR

C SUBB

A,R2;-Y1 MOV

B,R1;X1 MOV

R1,A;X2=-Y1 MOV

R2,B;Y2=X1 MOV

A,R1 ADD

A,HANG MOV

R1,A MOV

A,R2 ADD

A,LIE MOV

R2,A MOV

A,R1 MOV

B,#8 MUL

AB ADD

A,R2

MOV

@R0,A

INC

R0 DJNZ

R3,ROTATESTART POP

ACC POP

B POP

POP

POP

POP

0 RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;顯示LEDRAM中的內(nèi)容;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SHOWLEDRAM: PUSH

0 PUSH PUSH

B PUSH

ACC MOV

R0,#LEDHEAD MOV

R1,#8 MOV

A,#AA SHOW1: MOV

P1,A MOV

P2,@R0

LCALL

DELAY

INC

R0 RL

A DJNZ

R1,SHOW1 POP

ACC POP

B POP

POP

0 RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;軟件延時(shí)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;DELAY: PUSH PUSH MOV

R1,#5 FQFQ: MOV

R2,#200 FWFW: DJNZ

R2,FWFW DJNZ

R1,FQFQ POP

POP

RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;清楚圖形在LEDRAM中的內(nèi)容;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CLEANGRAPH: PUSH

ACC PUSH MOV

A,#GRAPHRAM1 MOV

XUNHUAN,#4 MOV

R1,A DADA1: MOV

A,@R1;SUBB

A,#16 LCALL

WRITEPOINT0 INC

R1 DJNZ

XUNHUAN,DADA1 POP

POP

ACC

RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;顯示圖形在LEDRAM中的內(nèi)容;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SHOWGRAPH: PUSH

ACC PUSH

MOV

A,#GRAPHRAM1 MOV

XUNHUAN,#4 MOV

R1,A DADA2: MOV

A,@R1;SUBB

A,#16 LCALL

WRITEPOINT1 INC

R1 DJNZ

XUNHUAN,DADA2 POP

POP

ACC

RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;消除已經(jīng)填滿(mǎn)的行

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;REMOVEBLOCK: PUSH

0 PUSH PUSH

B PUSH

ACC REMOVESTART: MOV

R0,#1 MOV

R1,#LEDHEAD REMOVE2: MOV

A,@R1 CJNE

A,#11111111B,REMOVE1

MOV

@R1,#00000000B MOV

REMOVEROW,R0 LCALL

DOWNBLOCK

JMP

REMOVESTART REMOVE1: INC

R0 INC

R1 MOV

A,R0 CJNE

A,#9,REMOVE2 POP

ACC POP

B POP

POP

0 RET DOWNBLOCK: PUSH

0 PUSH PUSH

B PUSH

ACC MOV

R0,#1 DOWN11: MOV

A,REMOVEROW MOV

B,#8 MUL

AB ADD

A,R0 LCALL

DOWNSTEP LCALL

JUSTMOVE INC

R0 MOV

A,R0 CJNE

A,#9,DOWN11 POP

ACC POP

B POP

POP

0 RET

DOWNSTEP: PUSH

0 PUSH PUSH

B PUSH

ACC MOV

R0,#0 MOV

R1,REMOVEROW STEP2: CLR

C SUBB

A,#8 LCALL

TESTBIT JB

BITS,STEP1 INC

R0 DJNZ

R1,STEP2 STEP1: MOV

STEPS,R0 POP

ACC POP

B POP

POP

0 RET

JUSTMOVE: PUSH

0 PUSH PUSH PUSH

B PUSH

ACC MOV

R0,A MOV

A,STEPS MOV

B,#8 MUL

AB MOV

B,A MOV

A,R0 CLR

C SUBB

A,B MOV

R1,A MOV

R2,REMOVEROW

MOV

A,#8 CLR

C SUBB

A,R2 MOV

JUST3: MOV

LCALL

JB

MOV

LCALL

JMP

JUST1: MOV

LCALL

JUST2: MOV

ADD

MOV

MOV

ADD

MOV

DJNZ

MOV

DDD: MOV

LCALL

MOV

ADD

MOV

DJNZ

JUSTEND:

POP

POP

POP

POP

POP

RET R2,A A,R0 TESTBIT BITS,JUST1 A,R1 WRITEPOINT0 JUST2 A,R1 WRITEPOINT1 A,R0 A,#8 R0,A A,R1 A,#8 R1,A R2,JUST3 R2,REMOVEROW A,R1 WRITEPOINT0 A,R1 A,#8 R1,A R2,DDD ACC B 2 1 0

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;將某個(gè)二進(jìn)制位寫(xiě)1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WRITEPOINT1: PUSH

0 PUSH PUSH PUSH PUSH

B PUSH

PUSH

PUSH

CLR

MOV

SUBB

JNC

MOV

MOV

MOV

DIV

MOV

MOV

CJNE

MOV

DEC

JMP

WRITE11: MOV

WRITE12: ADD

MOV

MOV

MOV

MOV

MOV

MOVC

ORL

MOV

END1: POP

POP

POP

POP

POP

ACC DPH DPL C R0,A A,#65 END1 A,R0 R1,#LEDHEAD B,#8 AB R0,A A,B A,#0,WRITE11 A,R0 A WRITE12 A,R0 A,R1 R1,A A,@R1 R2,A DPTR,#TAB1 A,B A,@A+DPTR A,R2 @R1,A DPL DPH ACC B 3

POP

POP

POP

0 RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;將某個(gè)二進(jìn)制位寫(xiě)0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WRITEPOINT0: PUSH

0 PUSH PUSH PUSH

B PUSH

ACC PUSH

DPH PUSH

DPL

MOV

R0,A CLR

C SUBB

A,#65 JNC

END2 MOV

A,R0 MOV

R1,#LEDHEAD MOV

B,#8 DIV

AB MOV

R0,A MOV

A,B CJNE

A,#0,WRITE01 MOV

A,R0 DEC

A JMP

WRITE02 WRITE01: MOV

A,R0 WRITE02: ADD

A,R1 MOV

R1,A MOV

A,@R1 MOV

R2,A MOV

DPTR,#TAB2 MOV

A,B MOVC

A,@A+DPTR ANL

A,R2 MOV

@R1,A END2: POP

DPL POP

DPH POP

ACC POP

B POP

POP

POP

0 RET GRAPH:

DB

69,60,61,62,69,68,61,62,69,70,60,61,69,70,61,62,69,77,61,62,69,77,61,60,69,69,61,77

TAB1:

DB

00000001B,10000000B,01000000B,00100000B,00010000B,00001000B,00000100B,00000010B TAB2:

DB

11111110B,01111111B,10111111B,11011111B,11101111B,11110111B,11111011B,11111101B

END

下載C語(yǔ)言編寫(xiě)俄羅斯方塊論文word格式文檔
下載C語(yǔ)言編寫(xiě)俄羅斯方塊論文.doc
將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
點(diǎn)此處下載文檔

文檔為doc格式


聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶(hù)自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

相關(guān)范文推薦

    C語(yǔ)言 程序代碼編寫(xiě)規(guī)范

    C語(yǔ)言 程序代碼編寫(xiě)規(guī)范(初級(jí)程序員 討論版)前言 一個(gè)好的程序編寫(xiě)規(guī)范是編寫(xiě)高質(zhì)量程序的保證。清晰、規(guī)范的源程序不僅僅是方便閱讀,更重要的是能夠便于檢查錯(cuò)誤,提高調(diào)試效......

    c語(yǔ)言編寫(xiě)單片機(jī)感想

    用C語(yǔ)言對(duì)單片機(jī)編程感想 起先接觸單片機(jī),單片機(jī)的程序是用匯編語(yǔ)言編寫(xiě)的。匯編語(yǔ)言是面向機(jī)器的低級(jí)語(yǔ)言,保持了機(jī)器語(yǔ)言的優(yōu)點(diǎn),具有直接和簡(jiǎn)捷的特點(diǎn),目標(biāo)代碼簡(jiǎn)短,占用內(nèi)存少......

    如何編寫(xiě)論文[優(yōu)秀范文5篇]

    ? 畢業(yè)論文的撰寫(xiě)及答辯是學(xué)生畢業(yè)的必備條件,是高等職業(yè)教育中專(zhuān)業(yè)教育的重要組成部分,是學(xué)習(xí)階段“收束”的標(biāo)志,是每個(gè)學(xué)生專(zhuān)業(yè)知識(shí)運(yùn)用與創(chuàng)新的重要體現(xiàn)。它是應(yīng)考者的總結(jié)......

    技術(shù)論文編寫(xiě)技巧

    齒輪箱濾油技術(shù) 1 題目是科技論文的中心和總綱。 要求準(zhǔn)確恰當(dāng)、簡(jiǎn)明扼要、醒目規(guī)范、便于檢索。一篇論文題目不要超出20個(gè)字。用小2號(hào)黑體加粗,居中。 步驟閱讀 2 署名 署......

    論文編寫(xiě)原則與方法大全

    前幾天談到了論文提綱的定義、重要性,今天來(lái)談?wù)務(wù)撐奶峋V的編寫(xiě)原則與方法。一、論文提綱的編寫(xiě)原則(一)要有全局觀念,從整體出發(fā)去檢查每一部分在論文中所占的地位和作用。看......

    Word編寫(xiě)論文十大技巧

    現(xiàn)在正是大學(xué)畢業(yè)生完成畢業(yè)設(shè)計(jì)、撰寫(xiě)畢業(yè)論文的時(shí)候,大家往往要苦熬一個(gè)多月才能完成自己的畢業(yè)論文。現(xiàn)在大家主要都是用Microsoft Word來(lái)編輯論文(不論各位用哪個(gè)版本,基......

    論文編寫(xiě)格式及其說(shuō)明(共5則范文)

    論文編寫(xiě)格式及其說(shuō)明作者1作者2/(1.某某單位名稱(chēng)1;2.某某單位名稱(chēng)2)【摘要】 摘要內(nèi)容摘要內(nèi)容摘要內(nèi)容,摘要內(nèi)容摘要內(nèi)容摘要內(nèi)容摘要內(nèi)容摘要內(nèi)容摘要內(nèi)容,摘要內(nèi)容摘要內(nèi)容摘......

    論文后附“參考文獻(xiàn)”編寫(xiě)體例

    論文后附“參考文獻(xiàn)”編寫(xiě)體例參考文獻(xiàn)是在學(xué)術(shù)研究過(guò)程中,對(duì)某一著作或論文的整體的參考或借鑒。征引過(guò)的文獻(xiàn)在注釋中已注明,不再出現(xiàn)于文后參考文獻(xiàn)中。 簡(jiǎn)介 (1)文后參......

主站蜘蛛池模板: 国产成人无码精品一区在线观看| 精品国产不卡在线观看免费| 国产亚洲美女精品久久久2020| 综合亚洲综合图区网友自拍| 亚洲国产精品一区二区久久| 99久久国产综合精品五月天喷水| 最新色国产精品精品视频| 国产精品偷伦视频观看免费| 国产露脸无套对白在线播放| 亚洲日韩∨a无码中文字幕| 日韩成人大屁股内射喷水| 全部孕妇毛片| 无码午夜人妻一区二区三区不卡视频| 国产av一码二码三码无码| 亚洲熟妇无码av| 久久亚洲粉嫩高潮的18p| 亚洲国产美女精品久久久久∴| 国产乱xxⅹxx国语对白| 日本黄h兄妹h动漫一区二区三区| 无码精品日韩中文字幕| 久久久久久99av无码免费网站| 窝窝影院午夜看片| 人妻互换一二三区激情视频| 电影内射视频免费观看| 国产激情电影综合在线看| 色拍自拍亚洲综合图区| 国产在线拍揄自揄视频网站| av在线播放日韩亚洲欧| 亚洲午夜理论无码电影| 中文成人无码精品久久久动漫| 亚洲午夜无码久久yy6080| 国产午夜亚洲精品不卡下载| 久久人人爽人人爽人人片dvd| 国精产品一区一区三区| 99国产欧美久久久精品蜜芽| 国产精品天天看天天狠| 人妻一本久道久久综合久久鬼色| 国产蜜芽尤物在线一区| 久久精品成人免费观看| 国产精品青青青在线观看| 大伊香蕉精品视频在线|