日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 學院 > 開發設計 > 正文

《俄羅斯方塊》程序編寫詳解

2019-11-17 05:45:58
字體:
來源:轉載
供稿:網友

  Tc2.0 編寫俄羅斯方塊游戲

很多編程愛好者都編寫過俄羅斯方塊的游戲程序。很久以前,我用Tc2.0也做過一個;最近有好些朋友看見我以前的俄羅斯方塊的程序后,
問我是怎么做的。我一直想把這個程序的整個過程寫一份具體的東西,與各位編程愛好者分享,一直沒空。正好現在放假了,而且離回家還有幾天。于是我就把這個程序重新寫了一遍,盡量使程序的結構比較清楚好懂一些。同時寫了下面的這份東西。

  俄羅斯方塊游戲的程序中用到了一些方法。為了比較輕易理解這些方法,我在講述的同時寫了些專門針對這些方法的示例程序。這些示例程序力求短小,目的是用最小的代碼能夠清楚的示例所用的方法。這些示例程序都經過tc2.0測試。最后還附了完整的俄羅斯方塊游戲的源代碼,和最終的可執行程序。假如你看了這份東東,有什么意見和想法,請發電子郵件告訴我。我將會繼續更新這分東東,最新的版本可以在我的個人主頁上下載。

  下面的問題是有關俄羅斯方塊程序的,其中有些是朋友問我的,有些是我認為可能會被問到的。我盡量按問題從易到難排列這些問題。 關于俄羅斯方塊程序的一些問題:
******************************************************

Tc2.0中怎么樣設置圖形顯示?
Tc2.0中常用圖形函數的用法?
怎樣獲取鍵盤輸入?
怎樣控制方塊的移動?
怎樣控制時間間隔(用于游戲中控制外形的下落)?
游戲中的各種外形及整個游戲空間怎么用數據表示?
游戲中怎么判定左右及向下移動的可能性?
游戲中怎么判定某一外形旋轉的可能性?
按向下方向鍵時加速某一外形下落速度的處理?
怎么判定某一外形已經到底?
怎么判定某一已經被填滿?
怎么消去已經被填滿的一行?
怎么消去某一外形落到底后能夠消去的所有的行?(如長條最多可以消去四行)
怎樣修改游戲板的狀態?
怎樣統計分數?
怎樣處理升級后的加速問題?
怎樣判定游戲結束?
關于計分板設計的問題。
關于“下一個”外形取法的問題。
剩下的問題。

******************************************************
新的問題:
 我想有一個最高記錄的顯示,應該怎么做呀?
 我想實現一個進度存儲功能,應該怎么做呀?



Tc2.0中怎么樣設置圖形顯示?

  Tc2.0中有兩種顯示模式,一種是我們所熟知的字符模式,另一種是圖形模式。在字符模式下只能顯式字符,如ASCII字符。一般是顯示25
行,每行80個字符。程序缺省的是字符模式。在字符模式下不能顯式圖形和進行繪圖操作。要想進行圖形顯示和繪圖操作,必須切換到圖形模
式下。

  Tc2.0中用initgraph()函數可以切換到圖形模式,用closegraph()可以從圖形模式切換回字符模式。initgraph()和closegraph()都是圖形
函數,使用圖形函數必須包括頭文件"graphics.h"。

  void far initgraph(int far *graphdriver,int far *graphmode,char far *pathtodriver);graphdriver是上漲指向圖形驅動序號變量的指針;graphmode是在graphdriver選定后,指向圖形顯示模式序號變量的指針。pathtodriver表示存放圖形驅動文件的路徑。

  Tc2.0中有多種圖形驅動,每種圖形驅動下又有幾種圖形顯示模式。在我的程序中圖形驅動序號為VGA,圖形顯示模式序號為VGAHI。這是一種分辨率為640*480(從左到右坐標依次為0-639,從上到下坐標依次為0-479),能夠顯示16種顏色的圖形模式。別的圖形驅動序號和圖形顯示模式序號,可以從手冊或聯機幫助中找到。

  pathtodriver指示存放圖形驅動文件的路徑。圖形驅動序號不同,圖形驅動文件也不同。序號為VGA圖形驅動對應"egavga.bgi"這個圖形驅動文件。"egavga.bgi"一般在Tc目錄下。

void far closegraph(void);
  沒有參數,從圖形模式直接返回字符模式。

initgraph()和closegraph()的常用用法如下:
int gdriver = VGA, gmode=VGAHI, errorcode;

/* initialize graphics mode */
initgraph(&gdriver, &gmode, "e://tc2");

/* read result of initialization */
errorcode = graphresult();

if (errorcode != grOk) /* an error occurred */
{
printf("Press any key to halt:");
getch();
exit(1); /* return with error code */
}

/* return to text mode */
closegraph();


Tc2.0中常用圖形函數的用法?

在這里講幾個游戲中用到的繪圖用的圖形函數:
setcolor();
line();
rectangle();
settextjustify();
outtextxy();
setfillstyle();
bar();

void far setcolor(int color);
  設置畫線、畫框和在圖形模式下顯示文字的當前顏色。這個函數將影響line()、rectangle()和outtextxy()函數繪圖的顏色。
color可以取常的顏色常量:
BLACK ? 0
BLUE ? 1
GREEN ? 2
CYAN ? 3
RED ? 4
MAGENTA ? 5
BROWN ? 6
LIGHTGRAY ? 7
DARKGRAY ? 8
LIGHTBLUE ? 9
LIGHTGREEN ?10
LIGHTCYAN ?11
LIGHTRED ?12
LIGHTMAGENTA ?13
YELLOW ?14
WH99vE ?15

void far line(int x1,int y1,int x2,int y2);
用當前顏色從(x1,y1)畫一條到(x2,y2)的線段。

void far rectangle(int left,int top,int right,int bottom);
用當前顏色畫一個左上角為(left,top)、右下角為(right,bottom)的矩形框。

void far settextjustify(int horz,int vert);
設置圖形模式下文字輸出的對齊方式。主要影響outtextxy()函數。
horiz和vert可取如下枚舉常量:
horiz ?LEFT_TEXT ? 0 ?Left-justify text
?CENTER_TEXT ? 1 ?Center text
?RIGHT_TEXT ? 2 ?Right-justify text
vert ?BOTTOM_TEXT ? 0 ?Justify from bottom
?CENTER_TEXT ? 1 ?Center text
?TOP_TEXT ? 2 ?Justify from top

void far outtextxy(int x,int y,char * textstring);
在(x,y)處用當前
字體(缺省的字體是DEFAULT_FONT)顯示字符串textstring,字符串的對齊方式由settextjustify()指定。

void far setfillstyle(int pattern,int color);
設置圖形的填充模式和填充顏色,主要影響bar()等函數。
pattern一般取枚舉常量值SOLID_FILL,color的取值與setcolor(int color)中color的取值范圍相同。

  介紹完了前面兩個問題,現在來寫一個程序。這個程序演示前了面所介紹的幾個圖形函數。
程序prog1.c


怎樣獲取鍵盤輸入?

  在Tc2.0中有一個處理鍵盤輸入的函數bioskey();
int bioskey(int cmd);
  當cmd為1時,bioskey()檢測是否有鍵按下。沒有鍵按下時返回0;有鍵按下時返回按鍵碼(任何按鍵碼都不為0),但此時并不將檢測到的按
鍵碼從鍵盤緩沖隊列中清除。
  當cmd為0時,bioskey()返回鍵盤緩沖隊列中的按鍵碼,并將此按鍵碼從鍵盤緩沖隊列中清除。假如鍵盤緩沖隊列為空,則一直等到有鍵按
下,才將得到的按鍵碼返回。

  Escape鍵的按鍵碼為0x11b,下面的小程序可以獲取按鍵的按鍵碼。

for (;;)
{
key=bioskey(0); /* wait for a keystroke */
printf("0x%x/n",key);
if (key==0x11b) break; /* Escape */
}

常用按鍵的按鍵碼如下:

#define VK_LEFT 0x4b00
#define VK_RIGHT 0x4d00
#define VK_DOWN 0x5000
#define VK_UP 0x4800
#define VK_HOME 0x4700
#define VK_END 0x4f00
#define VK_SPACE 0x3920
#define VK_ESC 0x011b
#define VK_ENTER 0x1c0d


  完整的程序請參見prog2.c、prog3.c。
prog2.c獲取按鍵的按鍵碼,按Escape鍵退出程序。
prog3.c根據不同的按鍵進行不同的操作,按Escape鍵退出程序。


怎樣控制方塊的移動?
  方塊移動的實現很簡單,將方塊原來的位置用背景色畫一個同樣大小的方塊,將原來的方塊涂去。然后在新的位置上重新繪制方塊就可以
了。這樣就實現了方塊的移動。完整的程序請參見prog4.c。這個用方向鍵控制一個黃色的小方塊在屏幕上上、下、左、右移動。這個程序用到了前面幾個問題講的內容,假如你有點忘了,還要回頭看看哦。:)


怎樣控制時間間隔(用于游戲中控制外形的下落)?
  解決這個問題要用到時鐘中斷。時鐘中斷大約每秒鐘發生18.2次。截獲正常的時鐘中斷后,在處理完正常的時鐘中斷后,將一個計時變量
加1。這樣,每秒鐘計時變量約增加18。需要控控制時間的時候,只需要看這個計時變量就行了。


  截獲時鐘中斷要用到函數getvect()和setvect()。
兩個函數的聲明如下:
?void interrupt (*getvect(int interruptno))();
?void setvect(int interruptno, void interrupt (*isr) ( ));

  保留字interrupt指示函數是一個中斷處理函數。在調用中斷處理函數的時候,所有的寄存器將會被保存。中斷處理函數的返回時的指令是iret,而不是一般函數用到的ret指令。

getvect()根據中斷號interruptno獲取中斷號為interruptno的中斷處理函數的入口地址。
setvect()將中斷號為interruptno的中斷處理函數的入口地址改為isr()函數的入口地址。即中斷發生時,將調用isr()函數。


  在程序開始的時候截獲時鐘中斷,并設置新的中斷處理。在程序結束的時候,一定要記著恢復時鐘中斷哦,不然系統的計時功能會出問題
的。具體演示程序請參見prog5.c。由于中斷處理大家可能用的不多,所以我把prog5.c這個程序完


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
在线观看精品国产| 国产最新在线| 一区二区三区精品在线观看| 日韩精品在线免费播放| 日韩一级视频在线观看| 国产成人精品av久久| 国产欧美日韩第一页| 欧美日韩性视频一区二区三区| 欧美日韩一区二区在线视频| 亚洲一区精品电影| 久久久精品网| 中文网丁香综合网| 在线免费视频一区二区| 久久香蕉一区| 国产99对白在线播放| 国产v日产∨综合v精品视频| 日韩欧美字幕| 国产最顶级的黄色片在线免费观看| 日韩精品视频在线看| 欧美国产一级片| 欧美三级中文字幕| 一二三区精品福利视频| 日韩中文字幕观看| 国产高清一区| 伊人网站在线| 精品日韩欧美| 欧美中文字幕第一页| 国产久卡久卡久卡久卡视频精品| 99精品在线播放| 国产日韩精品在线| 精品久久蜜桃| 欧美亚洲免费高清在线观看| 91亚洲国产| 久久精品最新免费国产成人| 国产精品一区二三区| 国产免费播放一区二区| 日韩欧美在线中文字幕| 免费视频一区三区| 日韩视频在线观看一区| 欧美日韩国产综合久久| 欧美一级久久久久久久久大| 在线视频国产三级| 久久久精品福利| 国产蜜臀在线| 国产在线视频不卡| 一区二区精品区| 日韩av中文字幕一区| 色www精品视频在线观看| 一区二区不卡在线播放| 精品久久香蕉国产线看观看gif| 欧美日韩国产一二| 亚洲日本精品视频| 国产在线日韩精品| 在线中文免费视频| 伊人永久在线| 国产香蕉免费精品视频| 日韩av不卡在线观看| 午夜伦欧美伦电影理论片| 99亚洲视频| 亚洲成av人片| 亚洲一区中文字幕在线| 国产不卡一区二区在线观看 | 91精品国产自产91精品| 国产高清在线视频| 日韩中文字幕| 国产黄色在线免费观看| 中文在线中文字幕| 精品国产99| 精品久久久91| 国产123在线| 久久久水蜜桃| 日韩精品一二三四区| 日韩亚洲国产欧美| 国产在线观看精品| 欧美日韩一二| 在线亚洲免费| 中文字幕最新精品| 中文字幕日韩欧美| 中文字幕精品视频在线| 精品一区二区三区中文字幕 | 中文字幕 亚洲视频| 99久久精品国产成人一区二区| 中文天堂在线一区| 久久精品在线免费观看| 一区二区三区在线|网站| 国产在线观看91| www.精品视频| 在线视频你懂得一区| 国产黄色片大全| 一区二区三区精品在线| 欧美日韩视频免费播放| 日韩中文欧美在线| 欧美黄页在线免费观看| 欧美日韩在线不卡一区| 中文字幕五月欧美| 亚洲福利精品视频| 欧美激情一区二区三区在线| 91精品国产调教在线观看| 欧美日韩国产综合久久| 亚洲免费婷婷| 黄色片网站在线| 一级日韩一级欧美| 久久精品视频免费看| 亚洲黄色一区二区| 日韩欧美999| 亚洲午夜久久| 日韩精品在线播放| 日韩欧美在线看| 免费在线国产| a视频免费看| 欧美.日韩.国产.一区.二区| 国精品产品一区| 色www精品视频在线观看| 精品欧美日韩精品| 在线视频国产三级| 日韩精品在线观看视频| 91精品国产经典在线观看| 精品视频资源站| www.尤物.com| 午夜伦欧美伦电影理论片| 日韩免费不卡avV| 欧美一卡2卡三卡4卡5免费| 被陌生人带去卫生间啪到腿软| 国产偷国产偷亚洲清高网站 | 国产高清在线视频| 精品国产欧美成人夜夜嗨| 在线视频三区| 国产91大片| 日韩欧美视频一区二区三区四区| 久精品在线观看| 日本精品二区| 国产福利一区在线观看| 中文字幕在线视频第一页| 日韩欧美国产一二三区| 在线视频1区2区| 免费高清视频日韩| 99久久精品国产亚洲| 久久91精品久久久久久秒播| 欧美国产一区视频在线观看| 精品成人久久久| 国产一级免费| 久久综合久久综合九色| 日韩欧美不卡视频| aaa欧美日韩| a在线观看免费视频| 精品区一区二区| 91精品在线免费| 国产福利在线播放| 91精品国产手机| 欧美日韩国产免费观看视频| 91精品综合久久| 在线黄色国产电影| 亚洲影视资源网| 樱花草www在线| 亚洲乱码中文字幕| 国产95在线|亚洲| 亚洲大片免费看| 国产99亚洲| 中文字幕线观看| 欧美日韩国产一区在线| 欧美高清一区| av免费网站在线观看| 91精品久久久久久久91蜜桃| 最近中文字幕第一页| 一区二区高清视频| 中文字幕视频一区二区三区久| 国产羞羞视频在线播放| 日韩免费不卡avV| 国产福利一区在线观看| 精品久久在线| 久久激情一区| 日韩欧美色综合网站| 日韩中文字幕91| 日韩亚洲一区中文字幕| 国产欧美久久久久久久久| 国产欧美日韩在线播放| 欧美日韩免费不卡视频一区二区三区| 色综合天天综合网天天狠天天| 欧美日韩第一| 精品国产99| 亚洲一区在线观看免费| 日韩欧美国产不卡| 色综合婷婷久久| 一级片在线免费看| 一区二区在线看| 日韩在线a电影| 日韩精品首页| 久久人人精品| 日韩欧美一二三四区| 日韩精品视频中文字幕| 日韩国产在线观看一区| 国产亚洲视频中文字幕视频| 精产国产伦理一二三区| 精品人妻二区中文字幕| 国产视频二区| 一区免费在线| 亚洲欧美999| 欧美日韩国产一级片| 国产资源中文字幕| 日韩网站中文字幕| 日韩欧美中文在线| 亚洲国产福利视频| 日本不卡高清视频一区| 99精品999| 日韩欧美在线综合网| 在线综合 亚洲 欧美中文字幕| 91精品免费观看| wwwwww在线观看| 首页国产欧美久久| 国产亚洲短视频| 粉嫩喷白浆久久| 日韩欧美中文在线| 男人的天堂网av| 日韩精品视频免费在线观看| 99这里有精品视频| 久久精品视频免费看| 欧美一级免费观看| 国产三级在线播放| 亚洲成av人片一区二区密柚| 91精品视频在线| 国内精品99| 亚洲狠狠婷婷综合久久久久图片| 在线国产三级| 久久精品欧美日韩精品| 蜜臀91精品国产高清在线观看| 欧美日韩精品国产| 中文字幕日韩视频| 精品在线网站观看| 正在播放日韩精品| 亚洲黄色片在线观看| 久久久久久自在自线| 一区二区不卡视频| 91精品xxx在线观看| 欧美日韩亚洲国内综合网俺| 欧美日韩国产成人| 在线视频不卡国产V| 欧美日韩综合视频| 中文字幕日韩欧美在线| www中文字幕| www.狠狠干| 黄色国产网站在线观看| 成人一区二区不卡免费| 99视频在线看| 久久精品www| 福利在线国产| 欧美在线日韩| 欧美二三四区| 99日韩精品| 亚洲三级免费看| 久久麻豆视频| 在线免费播放av| 亚洲天堂国产视频| 99精品在线播放| 欧美日韩国产影片| 国产香蕉精品视频| 欧美日韩在线第一页| 日韩在线视频一区| 色综合影院在线| 色99中文字幕| 一本大道一区二区三区| 日韩在线一区二区| 欧美日韩精品在线播放| 一区在线视频观看| 黄色国产在线| a天堂在线资源| av一区二区高清| 欧美日韩中文字幕综合视频| www.中文字幕在线观看| a级在线免费观看| 欧美日韩视频网站| 91精品国产入口| 亚洲大胆人体av| 精品免费视频| 粉嫩喷白浆久久| 中文字幕日韩欧美在线| 91精品国产91久久久久久三级| 一区二区三区高清在线| 欧美 亚洲 精品 三区| 日韩精品视频在线播放| 日韩免费视频一区| 福利在线国产| 亚洲永久字幕| 亚洲一二三不卡| 欧美日韩在线三级| 国产欧美日韩第一页| 精品播放一区二区| 97国产视频| 日韩欧美国产片| 国产免费久久久| 视频一区不卡| 日韩精品欧美在线| 欧美日韩激情一区| 久久欧美中文字幕| 色综合影院在线| 中文字幕在线视频日韩| 麻豆精品99| 日韩精品在线私人| 日韩精品在线观| 一区二区三区在线播放欧美| 激情久久99| 精品在线一区二区三区| 中文字幕不卡三区| av免费观看国产| 久久精品www| 日本а中文在线天堂| 91欧美日韩| 日韩欧美一二三四区| 亚洲一区在线观看免费| 日韩视频中文字幕| 日韩 欧美 中文| 亚洲最新永久观看在线| 日韩av在线中文字幕| 精品国产网站在线观看| aaa免费看大片| 国产午夜精品久久| 国产在线观看精品| 日韩欧美999| 91亚洲国产| 日韩免费高清一区二区| 精产国产伦理一二三区| 国产成人精品日本亚洲专区61| 国产欧美三级| 国产日韩第一页v| 区日韩二区欧美三区| a级在线免费观看| 91精品国产免费| 国产在线观看黄色| 久久99精品久久久| 国产91一区| 日韩av二区| 91欧美在线| 久久激情中文| 交视频在线观看国产| 国产成人精品综合久久久| 日韩在线 中文字幕| 精品国产1区2区3区| 成年人看的羞羞网站| 日韩亚洲欧美中文在线| 日韩国产欧美在线视频| 中文字幕日韩第一页| 亚洲综合日韩中文字幕v在线| 国产在线看一区| av一区在线| 91精品国产91久久久久青草| 日韩精品在线免费观看视频| av三级在线观看| 日韩免费高清一区二区| 自拍日韩亚洲一区在线| 国产午夜精品全部视频播放| 欧美日韩中文| 日韩欧美三级| 久久香蕉精品| 日韩视频在线一区二区三区| 97国产视频| 国产极品嫩模在线视频一区| 中文字幕在线视频精品| 美女黄a一级视频| 中文字幕在线播放一区| 一级日韩一级欧美| 91精品国产91久久久久久久久| 精品在线一区二区| 日韩www在线| 日韩精品在线中文字幕| 中文网丁香综合网| 国产绿帽一区二区三区| 久久精品久久精品亚洲人| 日韩一级二级三级精品视频| 日韩在线中文字幕| 国产偷久久久精品专区| 日韩亚洲欧美中文在线| 天堂在线一区二区三区| 最近中文字幕第一页| 日韩国产在线观看一区| 日韩欧美一二三| 亚洲精品欧美二区三区中文字幕| 一区二区三区免费看视频| 日韩不卡在线播放| 欧美日韩高清| 亚洲视频中文字幕| 中文字幕在线观看国产| 日韩午夜中文字幕| 国产欧美久久久久久久久| 日韩欧美一二三区| 久久久另类综合| 欧美日韩在线观看一区| 国产在线精品日韩| 99在线精品视频免费观看20| 精品一二三区视频| 午夜一区二区视频| 亚洲国产一区自拍| 欧美日韩中文字幕| 亚洲乱码视频| 午夜一区二区视频| 亚洲一区在线观看网站| 亚洲 欧美 精品| 国产福利一区在线观看| 中文字幕线观看| 亚洲成av人片| 国产日韩综合| 日韩精品视频免费播放|