俄羅斯方塊C課程設計論文(報告)_第1頁
俄羅斯方塊C課程設計論文(報告)_第2頁
俄羅斯方塊C課程設計論文(報告)_第3頁
俄羅斯方塊C課程設計論文(報告)_第4頁
俄羅斯方塊C課程設計論文(報告)_第5頁
已閱讀5頁,還剩11頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、遼 寧 工 業 大 學 C語言程序設計 課程設計(論文)題目: 俄羅斯方塊游戲 院(系): 軟件學院 專業班級: 電子商務112班 學 號: 111401043 學生姓名: 張歡廷 指導教師: 武志剛 教師職稱: 講師 起止時間: 2011.12.05至2011.12.18 課程設計(報告)任務及評語院(系):軟件學院 教研室:軟件教研窒學 號111401043學生姓名張歡廷專業班級電子商務112班程序設計(報告)題目機房收費管理系統程序設計(報告)任務程序設計的任務與要求:(1)掌握C語言編程的基礎知識。(2)較熟練地編寫C語言應用程序。(3)了解C語言的常用標準函數、編程技巧、異常處理。(

2、5)聯系已學過的內容,鞏固所學的理論,增強獨立工作能力。(6)通過設計主要使學生有一個獨立編寫程序的過程,對理論學習及動手能力都有一個很大的提高。(7)通過本次設計,進一步培養學生熱愛專業的思想,同時對本專業綜合素質的提高起一個積極的推動作用。課程設計過程中,要嚴格遵守實踐環節的時間安排,聽從指導教師的指導。正確地完成上述內容,記錄實習日記,規范完整地撰寫出課程設計報告。指導教師評語及成績成績: 指導教師簽字: 2011 年 12 月 22 日13 / 16文檔可自由編輯打印目 錄第1章 課程設計的目的與要求11.1 課程設計目的11.2 課程設計的實驗環境11.3 課程設計的預備知識11.4

3、 課程設計要求1第2章 課程設計內容22.1課程設計題目22.2課程設計整體設計說明22.2.1課程設計內容22.2.2系統功能模塊結構圖22.2.3數據結構設計及用法說明22.2.4程序結構(畫流程圖)22.2.5各模塊的功能22.3程序源代碼及注釋2第3章 課程設計總結3參考資料4第1章 課程設計的目的與要求1.1 課程設計目的本課程設計是計算機科學與技術專業重要的實踐性環節之一,是在學生學習完程序設計語言(C)課程后進行的一次全面的綜合練習。本課程設計的目的和任務: 1. 鞏固和加深學生對C語言課程的基本知識的理解和掌握 2. 掌握C語言編程和程序調試的基本技能 3. 利用C語言進行基本

4、的軟件設計4. 掌握書寫程序設計說明文檔的能力5. 提高運用C語言解決實際問題的能力1.2 課程設計的實驗環境硬件要求能運行Windows 2000/XP操作系統的微機系統。C語言程序設計及相應的開發環境。1.3 課程設計的預備知識熟悉C語言及C語言開發工具。1.4 課程設計要求1. 分析課程設計題目的要求2. 寫出詳細設計說明3. 編寫程序代碼,調試程序使其能正確運行4. 設計完成的軟件要便于操作和使用5. 設計完成后提交課程設計報告第2章 課程設計內容2.1程序功能介紹1、一個用于擺放小型正方形的平面虛擬場地,其標準大小:行寬為10,列高為20,以每個小正方形為單位。 2、一組由4個小型正

5、方形組成的規則圖形,英文稱為Tetromino,中文通稱為方塊共有7種,分別以S、Z、L、J、I、O、T這7個字母的形狀來命名。 I:一次最多消除四層 J(左右):最多消除三層,或消除二層 L:最多消除三層,或消除二層 O:消除一至二層 S(左右):最多二層,容易造成孔洞 Z (左右):最多二層,容易造成孔洞 T:最多二層2.2程序整體設計說明(1)部分游戲有單格方塊,可以穿透固定的方塊到達最下層空位。其他的改版中出現更多特別的造型。 方塊會從區域上方開始緩慢繼續落下。 (2)玩家可以做的操作有:以90度為單位旋轉方塊,以格子為單位左右移動方塊,讓方塊加速落下。 (3)方塊移到區域最下方或是著

6、地到其他方塊上無法移動時,就會固定在該處,而新的方塊出現在區域上方開始落下。 (4)當區域中某一列橫向格子全部由方塊填滿,則該列會消失并成為玩家的得分。同時刪除的列數越多,得分指數上升。 (5)當固定的方塊堆到區域最上方而無法消除層數時,則游戲結束2.2.1設計思路1. 按游戲界面的"開始"按鈕或者F2鍵來開始游戲,自己使用右邊的窗口,對手使用左邊的窗口。 俄羅斯方塊2. 鍵盤操作:系統缺省設置使用右邊的窗口,用光標操作,""左移一格;""右移一格;""旋轉方塊; 方塊丟下(方塊下落到底),"End&qu

7、ot;健可以一格格的下落,用戶還可以自定義習慣的按鍵來操作游戲。 3. 計分牌顯示的內容: “分數”為雙方本局的分數,計分標準為下落一個塊10分,一次消一行100分、2行200分、3行400分、4行800分。 “等級”為雙方的游戲設置等級,當分數達到一定的值,等級就會提升、速度加快。 “行數”第一行為雙方消的行數,第二行是送給對方的行數。 “比分”為雙方贏的局數。2.2.2數據結構設計及用法說明 ,3、通過設計者預先設置的隨機發生器不斷地輸出單個方塊到場地頂部,以一定的規則進行移動、旋轉、下落和擺放,鎖定并填充到場地中。每次擺放如果將場地的一行或多行完全填滿,則組成這些行的所有小正方形將被消除

8、,并且以此來換取一定的積分或者其他形式的獎勵。而未被消除的方塊會一直累積,并對后來的方塊擺放造成各種影響。 4、如果未被消除的方塊堆放的高度超過場地所規定的最大高度(并不一定是20或者玩家所能見到的高度),則游戲結束。 2.2.3程序結構(流程圖)2.2.4各模塊的功能及程序說明2.2.5程序結果2.3程序源代碼及注釋#include "graphics.h" /*頭文件*/ #include "time.h" #include "stdlib.h" #include "bios.h" #include

9、"dos.h" #include "stdio.h" #define ESC 0x11b /*鍵盤掃描碼*/ #define UP 0x4800 #define DOWN 0x5000 #define LEFT 0x4b00 #define F1 0x3b00 #define RIGHT 0x4d00 #define YES 0x1579 #define NO 0x316e #define RESTART 0x1372 struct diamond /*記錄每種方塊每種狀態的信息*/ int x4; int y4; int start_x; int st

10、art_y; int color; struct diamond *next; ; int grid1223; /*記錄所有格子的狀態 (0)沒有方塊 (1)有固定方塊 (2)有活動方塊*/ int x; /*活動方塊所在位置*/ int y; int level; /*游戲難度*/ int count; /*計數器*/ int score;/*得分*/ struct diamond *nowinfo; /*當前活動方塊*/ struct diamond *nextinfo; /*下一個方塊*/ int color;/*畫格子的顏色*/ int backcolor;/*游戲區域背景色*/ vo

11、id show_interface (int mode);/*顯示游戲界面*/ void show_copsign (int topx,int topy,int size,int color);/*顯示公司標志-恒基偉業*/ void show_intro (int xs,int ys);/*顯示軟件介紹區*/ /*void print(); 測試用函數*/ void scandel();/*掃描所有格子看是否有可消除行*/ void show_down ();/*方塊下落后的下一個狀態*/ void show_next ();/*方塊翻轉后的下一個狀態*/ void show_left ()

12、;/*方塊向左移動后的下一個狀態*/ void show_right ();/*方塊向右移動后的下一個狀態*/ void interrupt (*oldtimer)();/*指向未安裝前的中斷向量,即函數指針,指向一段可執行的代碼*/ void install();/*安裝新的中斷向量,即將中斷服務程序安裝到中斷向量表中*/ void interrupt newtimer();/*中斷服務程序*/ struct diamond *get_diamond();/*隨機得到一個方塊*/ struct diamond *create_I();/*函數用來構造各種類形方塊的環形鏈表*/ struct

13、diamond *create_T();/*返回鏈表中隨機一個狀態的指針*/ struct diamond *create_L(); struct diamond *create_J(); struct diamond *create_Z(); struct diamond *create_N(); struct diamond *create_H(); void delinfo (struct diamond *info);/*釋放當前方塊所占用的空間*/ void addtobuffer(int c);/*向鍵盤緩沖區中增加一個DOWN*/ /*void clrkey();調用dos中斷清

14、空鍵盤緩沖區,未使用此方法.*/ void showsubwin(struct diamond *next);/*在小窗口顯示下一個方塊*/ void showscore(int scoreget);/*顯示分數*/ void startset();/*初始化游戲*/ main () int nowy; int i;/*計數器*/ int j; int haveit;/*當前格子是否已經顯示*/ struct diamond *next;/*當前方塊的翻轉后的下一個狀態*/ next=nowinfo->next; if (next=NULL) gotoxy(1,1);printf(&qu

15、ot;null"); for (i=0;i<=3;i+)/*判斷是否能夠翻轉,若不能,就直接退出該函數*/ if (gridx+next->xy+next->y=1) return; setfillstyle(SOLID_FILL,backcolor);/*設置背景色以消除不需要的格子*/ for (i=0;i<=3;i+) haveit=0; for (j=0;j<=3;j+) if (next->xj=nowinfo->x&&next->yj=nowinfo->y) haveit=1;break; if (ha

16、veit=0) /*判斷翻轉后該格子是否顯示,若不顯示,將該格子設為背景色*/ gridx+nowinfo->xy+nowinfo->y=0; if (y+nowinfo->y>=4)/*判斷該格子是否到了可以顯示的區域*/ floodfill(80+(nowinfo->x+x)*20+1,-20+(nowinfo->y+y)*20+1,color); nowinfo=next; nowx=x; nowy=y; setfillstyle(SOLID_FILL,nowinfo->color);/*設置填沖色為方塊的顏色*/ for (i=0;i<=

17、3;i+) if (gridx+nowinfo->xy+nowinfo->y!=2)/*如果該格子還沒有被顯示*/ nowx=x+nowinfo->x; nowy=y+nowinfo->y; if (y+nowinfo->y>=4) floodfill(80+nowx*20+1,-20+nowy*20+1,color); gridnowxnowy=2; /*設置該格子當前有活動方塊*/ return; void show_left () int i;/*計數器*/ int j; int haveit;/*當前格子是否已經顯示*/ int nowx;/*記錄當

18、前每個格子的位置*/ int nowy; for (i=0;i<=3;i+)/*判斷是否可以向左移動*/ if (gridx-1+nowinfo->xy+nowinfo->y=1) return; setfillstyle(SOLID_FILL,backcolor);/*設置背景色以消除不需要的格子*/ for (i=0;i<=3;i+) haveit=0; for (j=0;j<=3;j+) if (nowinfo->x=nowinfo->xj-1&&nowinfo->y=nowinfo->yj) haveit=1;bre

19、ak; if (haveit=0) /*判斷翻轉后該格子是否顯示,若不顯示,將該格子設為背景色*/ gridx+nowinfo->xy+nowinfo->y=0; if (y+nowinfo->y>=4)/*判斷該格子是否到了可以顯示的區域*/ floodfill(80+(nowinfo->x+x)*20+1,-20+(nowinfo->y+y)*20+1,color); setfillstyle(SOLID_FILL,nowinfo->color);/*設置填沖色為方塊的顏色*/ for (i=0;i<=3;i+) nowx=x+nowinfo

20、->x-1; nowy=y+nowinfo->y; if (gridnowxnowy!=2)/*如果該格子還沒有被顯示*/ if (nowy>=4) if (gridnowxnowy!=2) if (nowy>=4)/*判斷該格子是否到了可以顯示的區域*/ floodfill(80+nowx*20+1,-20+nowy*20+1,color); gridnowxnowy=2; x=x+1; return; void show_down () int i;/*計數器*/ int j; int haveit;/*當前格子是否已經顯示*/ int nowx;/*記錄當前每個格

21、子的位置*/ int nowy; int key; for (i=0;i<=3;i+) if (gridx+nowinfo->xy+nowinfo->y+1=1)/*判斷方塊是否能夠下落*/ for (j=0;j<=3;j+) gridx+nowinfo->xjy+nowinfo->yj=1; if (y+nowinfo->yj<=3) /*判斷游戲是否已經玩完*/ install(oldtimer); setfillstyle(SOLID_FILL,1); bar(0,465,640,480); outtextxy(5,469,"Do

22、 you want to restart (Y/N)."); for (;)key=bioskey(0); if (key=YES) startset(); setfillstyle(SOLID_FILL,9); bar(0,465,640,480); return; if (key=NO) closegraph(); exit (0); gridnowxnowy=2; y=y+1; return; /*void print()測試用函數 int i; int j; gotoxy(1,1); for (j=0;j<=22;j+) for (i=0;i<=11;i+) pr

23、intf ("%d",gridj); printf ("n"); */ void scandel() int i; int k; int j; int num; int scoreadd; scoreadd=0; for (k=21;k>=4;k-) num=0; for (i=1;i<=10;i+) if (gridk=1) num+; disable(); setvect(0x1c,paddr); enable(); void delinfo (struct diamond *info)/*釋放開辟的空間*/ struct diamond

24、 *now; struct diamond *next; now=info->next; next=info->next; while(next!=info) next=now->next; free(now); now=next; free(info); void addtobuffer(int c)/*向鍵盤緩沖區中增加一個DOWN*/ unsigned i; i=*(unsigned far *)0x0040001CL; *(unsigned far *)(0x00400000L | i)=c; i+=2; if (i>=*(unsigned far *)0x00

25、400082L) i=*(unsigned far *)0x00400080L; *(unsigned far *)0x0040001CL=i; /*void clrkey()調用dos中斷清空鍵盤緩沖區,未使用此方法. union REGS in ; in.h.ah = 0x0c ; in.h.al = 0x00 ; intdos(&in , &in) ; */ void showsubwin(struct diamond *next) int i;/*計數器*/ int j; setfillstyle (SOLID_FILL,backcolor); for (i=0;i&l

26、t;=3;i+) for(j=0;j<=3;j+) floodfill(361+20*i,61+20*j,color); setfillstyle (SOLID_FILL,next->color); for (i=0;i<=3;i+) floodfill(381+next->x*20,81+next->y*20,color); void showscore(int scoreget) char sscore6; char slevel2; score+=scoreget; if (score<1000) level=score/100+1; sprintf(

27、sscore,"%d",score); sprintf(slevel,"%d",level); setfillstyle(SOLID_FILL,9); bar(406,179,490,203); setcolor(14); outtextxy (408,180,slevel); outtextxy (408,195,sscore); void startset() int i; int j; setfillstyle(SOLID_FILL,backcolor); for(i=0;i<=21;i+)/*重新初始化*/ for(j=1;j<=10;j+) if (gridj!=0) gridj=0; if (i>=4) floodfill(80+j*20+1,-20+i*20+1,color); score=0; showscore(0); nowinfo=get_diamond ();/*得到一個當前方塊*/ x=nowinfo->start_x;/*初始化方塊位置

溫馨提示

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

評論

0/150

提交評論