亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

《俄羅斯方塊》程序編寫(xiě)詳解

2019-11-17 05:45:58
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  Tc2.0 編寫(xiě)俄羅斯方塊游戲

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

  俄羅斯方塊游戲的程序中用到了一些方法。為了比較輕易理解這些方法,我在講述的同時(shí)寫(xiě)了些專門(mén)針對(duì)這些方法的示例程序。這些示例程序力求短小,目的是用最小的代碼能夠清楚的示例所用的方法。這些示例程序都經(jīng)過(guò)tc2.0測(cè)試。最后還附了完整的俄羅斯方塊游戲的源代碼,和最終的可執(zhí)行程序。假如你看了這份東東,有什么意見(jiàn)和想法,請(qǐng)發(fā)電子郵件告訴我。我將會(huì)繼續(xù)更新這分東東,最新的版本可以在我的個(gè)人主頁(yè)上下載。

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

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

******************************************************
新的問(wèn)題:
 我想有一個(gè)最高記錄的顯示,應(yīng)該怎么做呀?
 我想實(shí)現(xiàn)一個(gè)進(jìn)度存儲(chǔ)功能,應(yīng)該怎么做呀?



Tc2.0中怎么樣設(shè)置圖形顯示?

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

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

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

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

  pathtodriver指示存放圖形驅(qū)動(dòng)文件的路徑。圖形驅(qū)動(dòng)序號(hào)不同,圖形驅(qū)動(dòng)文件也不同。序號(hào)為VGA圖形驅(qū)動(dòng)對(duì)應(yīng)"egavga.bgi"這個(gè)圖形驅(qū)動(dòng)文件。"egavga.bgi"一般在Tc目錄下。

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

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中常用圖形函數(shù)的用法?

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

void far setcolor(int color);
  設(shè)置畫(huà)線、畫(huà)框和在圖形模式下顯示文字的當(dāng)前顏色。這個(gè)函數(shù)將影響line()、rectangle()和outtextxy()函數(shù)繪圖的顏色。
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);
用當(dāng)前顏色從(x1,y1)畫(huà)一條到(x2,y2)的線段。

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

void far settextjustify(int horz,int vert);
設(shè)置圖形模式下文字輸出的對(duì)齊方式。主要影響outtextxy()函數(shù)。
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)處用當(dāng)前
字體(缺省的字體是DEFAULT_FONT)顯示字符串textstring,字符串的對(duì)齊方式由settextjustify()指定。

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

  介紹完了前面兩個(gè)問(wèn)題,現(xiàn)在來(lái)寫(xiě)一個(gè)程序。這個(gè)程序演示前了面所介紹的幾個(gè)圖形函數(shù)。
程序prog1.c


怎樣獲取鍵盤(pán)輸入?

  在Tc2.0中有一個(gè)處理鍵盤(pán)輸入的函數(shù)bioskey();
int bioskey(int cmd);
  當(dāng)cmd為1時(shí),bioskey()檢測(cè)是否有鍵按下。沒(méi)有鍵按下時(shí)返回0;有鍵按下時(shí)返回按鍵碼(任何按鍵碼都不為0),但此時(shí)并不將檢測(cè)到的按
鍵碼從鍵盤(pán)緩沖隊(duì)列中清除。
  當(dāng)cmd為0時(shí),bioskey()返回鍵盤(pán)緩沖隊(duì)列中的按鍵碼,并將此按鍵碼從鍵盤(pán)緩沖隊(duì)列中清除。假如鍵盤(pán)緩沖隊(duì)列為空,則一直等到有鍵按
下,才將得到的按鍵碼返回。

  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


  完整的程序請(qǐng)參見(jiàn)prog2.c、prog3.c。
prog2.c獲取按鍵的按鍵碼,按Escape鍵退出程序。
prog3.c根據(jù)不同的按鍵進(jìn)行不同的操作,按Escape鍵退出程序。


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


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


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

  保留字interrupt指示函數(shù)是一個(gè)中斷處理函數(shù)。在調(diào)用中斷處理函數(shù)的時(shí)候,所有的寄存器將會(huì)被保存。中斷處理函數(shù)的返回時(shí)的指令是iret,而不是一般函數(shù)用到的ret指令。

getvect()根據(jù)中斷號(hào)interruptno獲取中斷號(hào)為interruptno的中斷處理函數(shù)的入口地址。
setvect()將中斷號(hào)為interruptno的中斷處理函數(shù)的入口地址改為isr()函數(shù)的入口地址。即中斷發(fā)生時(shí),將調(diào)用isr()函數(shù)。


  在程序開(kāi)始的時(shí)候截獲時(shí)鐘中斷,并設(shè)置新的中斷處理。在程序結(jié)束的時(shí)候,一定要記著恢復(fù)時(shí)鐘中斷哦,不然系統(tǒng)的計(jì)時(shí)功能會(huì)出問(wèn)題
的。具體演示程序請(qǐng)參見(jiàn)prog5.c。由于中斷處理大家可能用的不多,所以我把prog5.c這個(gè)程序完


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
毛片av免费在线观看| 色网站在线看| 日本一区二区不卡高清更新| aaa亚洲精品一二三区| 国模大尺度视频一区二区| 欧美在线黄色| 精品国产伦一区二区三| 中文字幕高清视频| 欧美91精品久久久久国产性生爱| 天天干,夜夜爽| 私拍精品福利视频在线一区| 欧美性色黄大片人与善| 亚洲成色777777女色窝| 久久国产视频网| 久久久久久久久99精品| chinese麻豆新拍video| 在线观看国产高清视频| 最新国产精品亚洲| 777免费视频| 高清不卡日本v二区在线| 欧美日本乱大交xxxxx| 亚洲一区中文字幕永久在线| 欧美成人免费播放| 热门国产精品亚洲第一区在线| 国产成人精品亚洲日本在线观看| 日韩欧美高清在线视频| 欧美一级艳片视频免费观看| 欧美日韩一区二区三区在线播放| 中文字幕欧美人妻精品| 欧美第一黄网免费网站| 九色视频网站| a免费在线观看| 91久久精品国产91久久性色| 中文字幕精品www乱入免费视频| 亚洲精品成人久久电影| 香蕉乱码成人久久天堂爱免费| 日本高清不卡码| 超级黄的软件| 麻豆精品蜜桃视频网站| 亚洲老妇激情| 欧美色图亚洲激情| 欧美不卡在线播放| 在线天堂中文资源最新版| 欧美一区二区久久久| 国产激情偷乱视频一区二区三区| 91精品中国老女人| 九一国产精品视频| 成人精品久久| 激情深爱综合网| 国产亚洲精品久久久久久豆腐| 深田咏美在线x99av| 99国产精品欲| 四虎永久在线精品免费一区二区| 极品白浆推特女神在线观看| 视频二区欧美毛片免费观看| 青青草97国产精品麻豆| 亚洲国产日韩欧美在线99| 日韩av在线中文| 先锋影音资源综合在线播放av| 国内不卡的二区三区中文字幕| 另类图片激情| 日韩成人中文字幕在线观看| 美女网站在线免费欧美精品| 一区二区三区国| 日本老太婆做爰视频| 国产精品天天看| 激情成人午夜视频| 精品久久久久久久久久久久久| 免费在线观看黄网站| 99久久99久久精品免费观看| 亚州国产精品久久久| 日韩视频在线观看视频| 免费成人深夜天涯网站| 国模视频一区二区三区| 丝袜美腿亚洲一区二区图片| 天堂社区 天堂综合网 天堂资源最新版| 国产一区二区三区亚洲| 91九色porn在线资源| 亚洲va中文字幕| 91老司机福利在线| 午夜一级毛片| 再深点灬舒服灬太大了添少妇视频| 先锋影音av中文资源| 亚洲国产精品免费在线观看| 久久亚洲视频| 成人福利视频网| 亚洲欧美日韩网站| 香蕉视频成人在线观看| 国产午夜精品理论片a级探花| 国产一区二区三区成人欧美日韩在线观看| 亚洲一区二区在线看| 亚洲精品乱码日韩| 久久天天躁夜夜躁狠狠躁2022| 日韩精品在线第一页| 伊人久久综合视频| 久热成人在线视频| 97精品中文字幕| 特级西西444www高清大视频| 久久xxxx精品视频| 黄网页在线观看| 在线看av的网址| 国产又黄又猛又爽| 欧美在线精品一区| 在线观看日韩专区| 日韩免费在线免费观看| 黄网视频在线观看| 免费成人性网站| 九九在线高清精品视频| 亚洲精品中文字幕在线| 日韩av在线中文| 狠狠色综合久久婷婷| 国产清纯美女被跳蛋高潮一区二区久久w| 青青草97国产精品免费观看无弹窗版| 99av国产精品欲麻豆| 99re6在线观看| 美女亚洲精品| 亚洲一二三区视频| 欧美一区二区三区爽爽爽| 8x8ⅹ拨牐拨牐拨牐在线观看| 色综合久久久网| 17videosex性欧美| 亚洲精品自拍| 精品72久久久久中文字幕| 久久久中精品2020中文| 天天操天天干天天| 国产精品电影久久久久电影网| 国产精品99久久久久久久女警| 女色窝人体色77777| 欧美色图久久| 欧美日韩日本视频| 麻豆精品在线看| 免费国产h视频在线观看86| 右手影院亚洲欧美| av中文字幕在线观看| 国产精品一区二区午夜嘿嘿嘿小说| 色综合www| 四虎影院一区二区三区| 成人性生活免费看| 正在播放亚洲一区| 欧美精品在线第一页| 欧美 日韩精品| 全程偷拍露脸中年夫妇| 九九热精品在线| 免费看的国产视频网站| 少女频道在线观看高清| 国产精品一区二区三区高清在线| 欧美日韩一区二区三区四区五区| 日韩成人精品视频在线观看| 欧美成人三级在线观看| 真实国产乱子伦对白视频| 爱爱视频网站免费| 在线观看入口黄最新永久免费国产| 黄色资源在线观看| 精精国产xxxx视频在线播放| 九九免费精品视频在线观看| 素人啪啪色综合| 久久免费视频播放| 日韩在线观看免费av| 波多野结衣一本| 日韩一区二区中文| 性欧美精品一区二区三区在线播放| 日韩女同一区二区三区| 成人亚洲激情网| 国内av一区二区| 欧美乱偷一区二区三区在线| 在线免费观看a视频| 自拍视频在线免费观看| 成人一级视频在线观看| 69堂成人精品免费视频| 超薄肉色丝袜脚交一区二区| 一二三区不卡| 日本一区视频在线观看| 亚洲自拍偷拍另类| www.综合网.com| 国产剧情在线观看一区| 国产欧美日韩一区二区三区在线| 国产女人18水真多18精品一级做| 色综合久久av| 国产欧美精品日韩区二区麻豆天美| 久久国产黄色片| 林心如三级全黄裸体| 99tv成人| 国产精品人人爱一区二区白浆| av白虎一区| 欧美一级色片| 玖玖精品在线| 成人日韩精品| 手机av在线| 免费在线一区观看| 欧美男女性生活在线直播观看| 亚洲深夜福利在线| 亚洲影院在线观看| 日韩精品手机在线| 快播av资源| 欧美亚洲精品在线观看| 日韩一卡二卡在线观看| 国产激情美女久久久久久吹潮| yellow中文字幕久久| 一级毛片久久久| 少妇熟女视频一区二区三区| 精品中文av资源站在线观看| 亚洲精品国产精品乱码在线观看| 欧美男生操女生| 国产成人麻豆免费观看| 一区二区不卡视频| 日韩欧美亚洲精品| 国内外激情在线| 国产日韩精品一区二区三区| av福利在线观看| 日韩av一区二区在线播放| 国精产品一区一区三区mba视频| 99re热这里只有精品免费视频| 亚洲欧洲日产国产综合网| 午夜精品久久久内射近拍高清| 欧美自拍偷拍一区二区| 日日夜夜操视频| eeuss免费天堂影院| 成年人在线免费观看| 久久久久久久香蕉网| 国产亚洲欧美精品久久久久久| 性感美女视频一二三| 在线看免费av| 亚洲天堂手机版| 无码人妻精品一区二区三区不卡| 久久精品欧美| 性欧美丰满熟妇xxxx性久久久| 国产一级av毛片| 先锋影音一区二区| 国产老熟女伦老熟妇露脸| 国产日韩中文字幕在线| 久久久久久中文字幕| 一二三区不卡| 福利二区91精品bt7086| 欧美一区二区三区视频免费播放| 一区二区三区激情| 欧美xingq一区二区| 四虎在线看片| 天天综合五月天| 日韩三级视频在线播放| 盗摄女厕thunder| 国产亚洲精品资源在线26u| 大胆欧美人体视频| 国产爆初菊在线观看免费视频网站| 99久久久无码国产精品免费蜜柚| 国产 日韩 欧美 在线| 色婷婷久久av| 欧美精品免费视频| 伊人在线视频观看| 日日欢夜夜爽一区| 日韩精品一区二区三区四区视频| 影音先锋5566资源网| 四虎国产精品成人免费影视| 日本在线一区二区三区| www操操操| 久久精品男女| 欧美片第1页| 精品国产二区三区| 99久久精品国产亚洲| 欧美日韩中文字幕一区二区三区| 美女视频黄免费的久久| 天堂中文在线网| 蜜臀一区二区三区| 超碰在线观看av| 欧美日韩国产精品一区二区| 亚洲成人精品一区二区三区| 亚洲一区二区三区四区视频| 久久精品成人欧美大片古装| 欧美在线视频全部完| 久久黄色片视频| 欧美日韩国产色综合一二三四| 国自产精品手机在线观看视频| av不卡一区二区| 蜜芽一区二区三区| www.xxx黄| 久久精品一区二区免费播放| www.色就是色| 日韩欧美精品电影| julia一区二区三区中文字幕| 日韩成人在线视频网站| 白白操在线视频| 欧美视频免费在线观看| 国产精品xxxx| 国产精品精品一区二区三区午夜版| 色偷偷福利视频| 午夜精品免费在线观看| **三级三级97片毛片| 日本高清视频网站www| 成人欧美一区二区三区在线湿哒哒| 红桃av永久久久| 欧美91在线| 久久青草视频| 狂野欧美性猛交xxxxx视频| 日韩精品一二三| 亚洲午夜精品一区二区国产| 久久久久久久亚洲精品| 日韩av免费在线播放| 无码人妻熟妇av又粗又大| xxxxxx国产精品视频| 欧美日韩中文精品| 欧美极品aaaaabbbbb| 日韩激情av在线免费观看| 蜜桃av一区二区三区电影| youjizz.com日本| 日本粉色视频在线观看| 18深夜视频在线观看| 少妇精品无码一区二区三区| 在线成人动漫av| 嗯用力啊快一点好舒服小柔久久| 思思99精品视频在线观看| 中文字幕视频一区二区在线有码| 91亚洲国产成人精品一区| 精品久久久久成人码免费动漫| 朝桐光av一区二区三区| 2020日本不卡一区二区视频| 精品人伦一区二区| 美女脱光内衣内裤视频久久影院| 欧美激情福利| 国产精品综合在线视频| 你懂的在线视频观看| 亚洲色成人www永久网站| 久久精品免视看国产成人| 一本色道久久88亚洲精品综合| 午夜在线精品偷拍| 国产又黄又粗又硬| 强制高潮抽搐sm调教高h| 中文精品无码中文字幕无码专区| 日本中文字幕成人| 久久久久网址|