貪吃蛇實(shí)驗(yàn)報(bào)告-計(jì)11-118200字_第1頁(yè)
貪吃蛇實(shí)驗(yàn)報(bào)告-計(jì)11-118200字_第2頁(yè)
貪吃蛇實(shí)驗(yàn)報(bào)告-計(jì)11-118200字_第3頁(yè)
貪吃蛇實(shí)驗(yàn)報(bào)告-計(jì)11-118200字_第4頁(yè)
貪吃蛇實(shí)驗(yàn)報(bào)告-計(jì)11-118200字_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

貪吃蛇實(shí)驗(yàn)報(bào)告-計(jì)11-118200字

C語(yǔ)言課程設(shè)計(jì)報(bào)告系:級(jí)名:號(hào):20xx年12月27日競(jìng)技貪吃蛇院班姓學(xué)指導(dǎo)教師:11.11.2目錄課程設(shè)計(jì)目的和要求..............1課程設(shè)計(jì)目的和任務(wù)...............................................................................................1課程設(shè)計(jì)要求...........................................................................................................課程設(shè)計(jì)任務(wù)內(nèi)容................1本次課程設(shè)計(jì)的主要任務(wù)如下...............................................................................1游戲規(guī)則...................................................................................................................2流程設(shè)計(jì)...................................................................................................................233.13.2軟件使用說(shuō)明....................4編輯程序主要軟件...................................................................................................4程序使用過(guò)程...........................................................................................................43.2.1貪吃蛇進(jìn)入.......................................................................................................43.2.2貪吃蛇的玩法...................................................................................................53.2.3貪吃蛇的結(jié)束...................................................................................................544.14.2課程設(shè)計(jì)心得和體會(huì)..............6課程設(shè)計(jì)的心得.......................................................................................................6課程設(shè)計(jì)的體會(huì).......................................................................................................6參考文獻(xiàn)............................7附錄:部分程序清單..................8II1課程設(shè)計(jì)目的和要求1.1課程設(shè)計(jì)目的和任務(wù)1.鞏固和加深學(xué)生對(duì)C語(yǔ)言課程的基本知識(shí)的理解和掌握2.掌握C語(yǔ)言編程和程序調(diào)試的基本技能3.利用C語(yǔ)言進(jìn)行基本的程序設(shè)計(jì)4.掌握書(shū)寫(xiě)程序設(shè)計(jì)說(shuō)明文檔的能力5.提高運(yùn)用C語(yǔ)言解決實(shí)際問(wèn)題的能力1.2課程設(shè)計(jì)要求1.分析實(shí)訓(xùn)題目的要求2.寫(xiě)出詳細(xì)設(shè)計(jì)說(shuō)明3.編寫(xiě)程序代碼,調(diào)試程序使其能正確運(yùn)行4.設(shè)計(jì)完成的軟件要便于操作和使用5.設(shè)計(jì)完成后提交實(shí)訓(xùn)報(bào)告2課程設(shè)計(jì)任務(wù)內(nèi)容2.1本次課程設(shè)計(jì)的主要任務(wù)如下通過(guò)編寫(xiě)“貪吃蛇游戲”程序,掌握結(jié)構(gòu)化、模塊化程序設(shè)計(jì)的思想,培養(yǎng)解決實(shí)際問(wèn)題的能力。2)設(shè)計(jì)好數(shù)組元素與蛇、食物的對(duì)應(yīng)關(guān)系。3)隨機(jī)產(chǎn)生食物。4)有分?jǐn)?shù)統(tǒng)計(jì)、排行榜、分?jǐn)?shù)儲(chǔ)存等功能。5)有同步播放的動(dòng)畫(huà)、聲音效果。通過(guò)此次課程設(shè)計(jì),使我們能更深入地理解和掌握課程教學(xué)中的基本概念,培養(yǎng)了我們應(yīng)用基礎(chǔ)技術(shù)解決實(shí)際問(wèn)題的能力,從而進(jìn)一步提高分析問(wèn)題和解決問(wèn)題的能力。111)2.2游戲規(guī)則通過(guò)一個(gè)學(xué)期對(duì)C語(yǔ)言程序設(shè)計(jì)的學(xué)習(xí),經(jīng)過(guò)課程設(shè)計(jì),完善我們對(duì)C語(yǔ)言學(xué)習(xí)的漏洞和未學(xué)會(huì)的知識(shí)點(diǎn),更加熟練的掌握C語(yǔ)言程序設(shè)計(jì),鍛煉我們獨(dú)立自主設(shè)計(jì)程序編輯代碼的能力,通過(guò)設(shè)計(jì)出來(lái)的程序,提高我們對(duì)C語(yǔ)言學(xué)習(xí)的興趣,玩家通過(guò)鍵盤(pán)控制蛇在地圖上尋找食物,蛇吃蛇食物,可以加分,碰到四壁游戲結(jié)束。2.3流程設(shè)計(jì)總體的結(jié)構(gòu)模塊結(jié)構(gòu)圖如下所示。22貪吃蛇流程圖如圖1所示圖1貪吃蛇流程圖貪吃蛇運(yùn)行說(shuō)明圖如圖2所示圖2貪吃蛇運(yùn)行說(shuō)明圖333軟件使用說(shuō)明3.1編輯程序主要軟件對(duì)于這次課程設(shè)計(jì),主要使用的軟件是TurboC++3.0,在平日的學(xué)習(xí)中,我們也經(jīng)常使用這種軟件進(jìn)行編程,已基本掌握此軟件的用法,所以在此次實(shí)訓(xùn)中,我還是主要使用TurboC3.03.2程序使用過(guò)程3.2.1貪吃蛇進(jìn)入程序初始界面如圖3所示,點(diǎn)擊任意鍵進(jìn)入游戲.圖3程序初始界面443.2.2貪吃蛇的玩法3.2.3貪吃蛇玩法如圖4所示,使用鍵盤(pán)上的上下左右鍵,進(jìn)行控制,使蛇頭碰到圖中的食物。圖4貪吃蛇玩法3.2.4貪吃蛇的結(jié)束游戲結(jié)束界面如圖5所示,游戲結(jié)束后,會(huì)顯示玩家的得分,按ESC退出.55圖5游戲結(jié)束界面4課程設(shè)計(jì)心得和體會(huì)4.1課程設(shè)計(jì)的心得由于所學(xué)有限,自己經(jīng)驗(yàn)不足,代碼經(jīng)常出現(xiàn)錯(cuò)誤,一步一步總算流暢的進(jìn)行下來(lái),但在過(guò)程中也遇到不少問(wèn)題,比如貪吃蛇在吃食物過(guò)程中如何實(shí)現(xiàn)同步控制兩個(gè)貪吃蛇,這個(gè)問(wèn)題一直想了好久都未想出來(lái),最后請(qǐng)老師幫忙解決,最終是用了switch語(yǔ)句才解決,可謂不易。問(wèn)題出現(xiàn)不少,但總得一個(gè)一個(gè)解決,比如,在實(shí)訓(xùn)當(dāng)中遇到一些函數(shù),之前未學(xué),自己只能上網(wǎng)查詢(xún),一步一步重新學(xué)起,自己學(xué)習(xí)自己不會(huì)的東西,學(xué)成之后,很有滿(mǎn)足感,而且自己的信心又增強(qiáng)了。4.2課程設(shè)計(jì)的體會(huì)設(shè)計(jì)過(guò)程中,不僅是考察一個(gè)人的編程能力,更多的還是考察一個(gè)人的耐心,對(duì)C語(yǔ)言編程感興趣,才會(huì)更加投入的進(jìn)行下去,眼看C語(yǔ)言已經(jīng)學(xué)完了,自己多少還是掌握了一些技巧和規(guī)則。然而自己所學(xué)畢竟有限,在編寫(xiě)貪吃蛇過(guò)程中感覺(jué)并不輕松,查閱了大量資料,但總歸還是做了下來(lái),如同一場(chǎng)馬拉松,最終還是堅(jiān)持到了最后,感覺(jué)很滿(mǎn)足。課程設(shè)計(jì)不僅鍛煉了我們的編程能力,更加讓我們懂得堅(jiān)持就是勝利,為我們以后在學(xué)習(xí)軟件過(guò)程中點(diǎn)亮了燈塔,如果在漆黑66的夜晚中迷失了方向,只要我們想起實(shí)訓(xùn)中我們從未放棄,就可以為我們指明方向,繼續(xù)奮斗堅(jiān)持下去。對(duì)于所學(xué)知識(shí),我必須要說(shuō),通過(guò)課程設(shè)計(jì)不僅我查漏補(bǔ)缺,搞清了許多以前在C語(yǔ)言中的漏洞,使我的C語(yǔ)言知識(shí)更加全面了,而且還讓我鞏固了一些不熟練的操作,比如一些自定義函數(shù),自己不太熟練,通過(guò)實(shí)訓(xùn)過(guò)程中幾十次的調(diào)用,熟能生巧,讓我運(yùn)用起來(lái)更加熟練了,十分開(kāi)心。我想課程設(shè)計(jì)對(duì)我而言,不單單是對(duì)學(xué)習(xí)的一種鞏固,更多的還是一種精神上的鍛煉,鍛煉我們?yōu)榻窈蟮墓ぷ骱蛯W(xué)習(xí)作了鋪墊,我們可以在今后的學(xué)習(xí)或者工作當(dāng)中運(yùn)用這次課程設(shè)計(jì)所體驗(yàn)出來(lái)的堅(jiān)持不懈的精神,不斷的加強(qiáng)自己各方面的能力。我想,這次課程設(shè)計(jì)對(duì)我們而言是寶貴的,更是無(wú)法替代的,我很感激老師和學(xué)校能提供我們這樣一個(gè)機(jī)會(huì),讓我們可以學(xué)到專(zhuān)業(yè)知識(shí)以外的東西,這對(duì)我們來(lái)說(shuō),不單單是怎么樣處理問(wèn)題,而是培養(yǎng)了我們堅(jiān)持不懈的精神,讓我們更加有信心和勇氣去面對(duì)將來(lái)更大的挑戰(zhàn)。參考文獻(xiàn)[1]譚浩強(qiáng).C程序設(shè)計(jì)(第三版)[M].北京:清華大學(xué)出版社,2005.[2]王成端,魏先民.C語(yǔ)言程序設(shè)計(jì)實(shí)訓(xùn)—題解、實(shí)驗(yàn)、課程設(shè)計(jì)與樣題[M].北京:中國(guó)水利水電出版社,2005.[3]譚浩強(qiáng).C程序設(shè)計(jì)題解與上級(jí)指導(dǎo)(第三版)[M].北京:清華大學(xué)出版社,2005.77附錄:部分程序清單#include<stdio.h>#include<string.h>/*書(shū)中沒(méi)有,但后來(lái)程序中有strcpy函數(shù),所以要用此頭文件!*/#include<bios.h>/*書(shū)上沒(méi)有,但程序中有bioskey(0),所以用此頭文件!*/#include<time.h>#include<graphics.h>#include<conio.h>#include<stdlib.h>#include<dos.h>#defineN200/*從此處往下是定義的按鍵,wasd用來(lái)控制貪吃蛇1的方向,上下左右用來(lái)控制貪吃蛇2的方向。*/#defineLEFT0x1e61#defineRIGHT0x2064#defineDOWN0x1f73#defineUP0x1177#defineLEFT10x4b00#defineRIGHT10x4d00#defineDOWN10x5000#defineUP10x4800#defineESC0x011b/*定義推出鍵,用來(lái)退出程序*/#defineFILENAME1"c:\\person1.dat"/*定義一個(gè)文件名稱(chēng),用來(lái)儲(chǔ)存第一個(gè)排行榜的分?jǐn)?shù)情況!*/#defineFILENAME2"c:\\person2.dat"/*定義一個(gè)文件名稱(chēng),用來(lái)儲(chǔ)存第二個(gè)排行榜的分?jǐn)?shù)情況!*/structperson1{charname[20];intscore;};/*定義一個(gè)結(jié)構(gòu)體變量用來(lái)儲(chǔ)存第一個(gè)人的名字及分?jǐn)?shù)!*/structperson1per1[5];/*定義結(jié)構(gòu)體變量名稱(chēng)。*/structperson2{charname[20];intscore;};*定義一個(gè)結(jié)構(gòu)體變量用來(lái)儲(chǔ)存第二個(gè)人的名字及分?jǐn)?shù)!*/structperson2per2[5];/*定義第二個(gè)結(jié)構(gòu)體變量名稱(chēng)。*/structSnow{intx;inty;intspeed;88}snow[100];/*定義雪花結(jié)構(gòu)體變量!*/intsnownum=0;intsize;intchange=10;intscore1=0;intscore2=0;void*save;inti,key1;intgamespeed=400;/*在此設(shè)置游戲的速度!越大越慢,越小越快!*/structFood{intx;inty;intyes;}food[5];/*定義食物結(jié)構(gòu)體變量,用來(lái)出現(xiàn)食物!*/structSnake{intx[N];inty[N];intnode;intdirection;intlife;}snake[5];/*定義貪吃蛇結(jié)構(gòu)體變量,用來(lái)在屏幕中出現(xiàn)兩條貪吃蛇!*/voidDrawSnow();voidReadFiles();voidWriteFiles(structperson1*);/*利用結(jié)構(gòu)體變量指針找到所存的文件!*/voidWriteFiles(structperson2*);voidInitScoreFiles();voidCompareScore(structperson1);/*排行榜函數(shù)!*/voidCompareScore(structperson2);voidEndPlay();voidpain_board();voidPr(){ints[]={330,330,330,330,330,330,392,440,523,523,440,392,392,392,440,392,392,392,392,330,330,330,392,440,523,523,440,392,392,392,440,392,392,392,392,392,392,392,392,392,392,330,392,440,440,440,440,392,392,392,392,330,330,294,330,392,392,330,294,262,262,262,294,262,262,392,392,330,294,262,330,294,294,294,330,392,392,440,523,392,392,392,392,330,330,294,330,392,392,330,294,262,262,262,294,262,262,392,392};/*音樂(lè)函數(shù),開(kāi)機(jī)的時(shí)候響茉莉花!*/setcolor(change/10);/*背景顏色變化!*/settextstyle(0,0,4);/*設(shè)置字形,存在,字號(hào)。*/99outtextxy(20,100,"WELCOMETOOURGAME");settextstyle(4,0,5);outtextxy(20,200,"BEMADEBY:");settextstyle(4,0,5);outtextxy(20,300,"DRFJYDQLXHMQ");sound(s[change/2]);/*控制音樂(lè)響,及其頻率的函數(shù)!*/}voidDrawSnow(){inti;intsx[62];setcolor(YELLOW);setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*設(shè)置線條形狀,實(shí)線填充形!*/line(5,0,0,10);line(5,0,10,10);line(0,3,10,3);line(0,3,10,10);line(10,3,0,10);/開(kāi)場(chǎng)動(dòng)畫(huà)五角星形圖案!*/save=malloc(400);/*向系統(tǒng)申請(qǐng)400字節(jié)的儲(chǔ)存空間!*/getimage(0,0,10,10,save);/*申請(qǐng)的模塊為10*10的,并保存起來(lái)!*/cleardevice();/*清屏的函數(shù)!*/randomize();/*隨機(jī)數(shù)函數(shù)!用來(lái)控制雪花的隨機(jī)出現(xiàn)!*/for(i=0;i<62;i++)sx[i]=(i+2)*10;while(!kbhit()){Pr();if(snownum!=100){snow[snownum].speed=2+random(5);/*定義雪花出現(xiàn)的隨機(jī)速度!*/i=random(62);snow[snownum].x=sx[i];/*取橫坐標(biāo)*/snow[snownum].y=10-random(100);/*計(jì)算縱坐標(biāo)*/}/*循環(huán)放置snownum個(gè)雪花*/for(i=0;i<snownum;i++)putimage(snow[i].x,snow[i].y,save,COPY_PUT);delay(100);/*延遲100ms以便看到雪花*/cleardevice();/*清屏*/Pr();/*調(diào)用Pr函數(shù)輸出歡迎詞并播放聲音*/if(snownum!=100)snownum++;setfillstyle(SOLID_FILL,15);for(i=0;i<snownum;i++)/*循環(huán)畫(huà)出snownum個(gè)雪花*/{snow[i].y+=snow[i].speed;putimage(snow[i].x,snow[i].y,save,COPY_PUT);if(snow[i].y>500)snow[i].y=10-random(200);}1010change++;if(change==196)change=10;}nosound();/*關(guān)閉揚(yáng)聲器*/cleardevice();/*清屏*/}/*圖形系統(tǒng)初始化函數(shù)*/voidInit(void){intgd=DETECT,gm;initgraph(&gd,&gm,"D:\\tc3\\BGI");cleardevice();}/*游戲開(kāi)始畫(huà)面,左上角坐標(biāo)為(50,40),右下角坐標(biāo)為(610,460)的圍墻*/voidDrawK(void){inti;setcolor(YELLOW);setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*設(shè)置線形*/for(i=50;i<=313;i+=10)/*循環(huán)畫(huà)圍墻*/{circle(i+5,45,5);circle(i+5,455,5);}for(i=40;i<=450;i+=10){circle(55,i+5,5);circle(313,i+5,5);}for(i=343;i<600;i+=10){circle(i+5,45,5);circle(i+5,455,5);}for(i=40;i<450;i+=10){circle(343,i+5,5);circle(601,i+5,5);/*此為循環(huán)畫(huà)圍墻的程序,圍墻為半徑為5的圓!*/}outtextxy(20,5,"GreedySnakeGame1.4.0_1");outtextxy(480,10,"scorelevel");}voidGamePlay1(void){intlevel1=1,level2=1;/*記錄游戲的等級(jí)*/1111charbuffer[10];/*字符數(shù)組用于轉(zhuǎn)換整形數(shù)據(jù)*/randomize();/*設(shè)置隨機(jī)數(shù)的種子數(shù)*/food[1].yes=1;/*1表示需要出現(xiàn)新食物,0表示已經(jīng)存在食物*/food[2].yes=1;snake[1].life=0;/*蛇1活著*/snake[2].life=0;/*蛇1活著*/snake[1].direction=1;/*蛇1的方向往右*/snake[2].direction=1;/*蛇2的方向往右*/snake[1].x[1]=100;snake[1].y[1]=100;/*蛇1身坐標(biāo)初值*/snake[1].x[0]=110;snake[1].y[0]=100;/*蛇1頭坐標(biāo)初值。*/snake[2].x[1]=440;snake[2].y[1]=100;/*蛇2身坐標(biāo)初值*/snake[2].x[0]=450;snake[2].y[0]=100;/*蛇2頭坐標(biāo)初值。*/snake[1].node=3;/*蛇節(jié)數(shù)*/snake[2].node=3;while(1)/*玩游戲“死”循環(huán),按ESC鍵或蛇死時(shí)結(jié)束*/{while(!kbhit())/*在沒(méi)有按鍵的情況下,蛇自己移動(dòng)身體*/{if(food[1].yes==1)/*需要出現(xiàn)新食物*/{food[1].x=rand()%200+60;food[1].y=rand()%175+60;/*食物隨機(jī)出現(xiàn)后必須讓食物能夠在整格內(nèi),這樣才可以讓蛇吃到*/while(food[1].x%10!=0)food[1].x++;while(food[1].y%10!=0)food[1].y++;food[1].yes=0;/*畫(huà)面上有食物了*/}if(food[2].yes==1){food[2].x=rand()%257+343;food[2].y=rand()%350+60;/*此為定義食物隨機(jī)出現(xiàn)位置的函數(shù)。*/while(food[2].x%10!=0)food[2].x++;while(food[2].y%10!=0)food[2].y++;food[2].yes=0;}if(food[1].yes==0)/*畫(huà)面上有食物了就要顯示*/{setcolor(GREEN);rectangle(food[1].x,food[1].y,food[1].x+10,food[1].y-10);}if(food[2].yes==0){setcolor(GREEN);rectangle(food[2].x,food[2].y,food[2].x+10,food[2].y-10);1212}setfillstyle(1,1);bar(60,18,175,35);/*畫(huà)出顯示分?jǐn)?shù)及關(guān)數(shù)紅色矩形條*/setcolor(RED);itoa(score1,buffer,10);/*將整型數(shù)據(jù)分?jǐn)?shù)轉(zhuǎn)換成字符串*/outtextxy(65,20,buffer);/*輸出分?jǐn)?shù)*/itoa(level1,buffer,10);/*將整形數(shù)據(jù)關(guān)數(shù)轉(zhuǎn)換成字符串*/outtextxy(145,20,buffer);/*輸出關(guān)數(shù)*//*循環(huán)使蛇的每個(gè)環(huán)節(jié)往前移動(dòng),也就是貪吃蛇的關(guān)鍵算法*/for(i=snake[1].node-1;i>0;i--){snake[1].x[i]=snake[1].x[i-1];snake[1].y[i]=snake[1].y[i-1];}/*1、2、3、4表示右左上下四個(gè)方向,通過(guò)這個(gè)判斷來(lái)移動(dòng)蛇頭*/switch(snake[1].direction){case1:snake[1].x[0]+=10;break;case2:snake[1].x[0]-=10;break;case3:snake[1].y[0]-=10;break;case4:snake[1].y[0]+=10;break;}/*從蛇的第四節(jié)開(kāi)始判斷是否撞倒自己了,因?yàn)榈谌?jié)不可能拐過(guò)來(lái)*/for(i=3;i<snake[1].node;i++){if(snake[1].x[i]==snake[1].x[0]&&snake[1].y[i]==snake[1].y[0]){snake[1].life=1;/*置蛇死標(biāo)志*/break;}}/*判斷蛇是否撞倒墻壁*/if(snake[1].x[0]<55||snake[1].x[0]>303||snake[1].y[0]<55||snake[1].y[0]>455)snake[1].life=1;/*蛇置死標(biāo)記*//*以上兩種判斷以后,如果蛇死就跳出內(nèi)循環(huán)*/if(snake[1].life==1)break;if(snake[1].x[0]==food[1].x&&snake[1].y[0]==food[1].y)/*吃到食物以后*/{setcolor(0);/*把畫(huà)面上的食物擦除*/rectangle(food[1].x,food[1].y,food[1].x+10,food[1].y-10);snake[1].node++;蛇的身體長(zhǎng)一節(jié)*/food[1].yes=1;/*畫(huà)面上需要出現(xiàn)新的食物*/score1+=10;/*每吃一個(gè)食物贈(zèng)加10分*/1313if(score1%50==0)/*吃夠5個(gè)食物進(jìn)入下一關(guān)*/{level1+=1;/*關(guān)數(shù)加一*/gamespeed-=50;/*控制速度的值減少50,以便加快速度*/}}setfillstyle(1,1);bar(475,18,590,35);setcolor(RED);itoa(score2,buffer,10);outtextxy(480,20,buffer);itoa(level2,buffer,10);outtextxy(560,20,buffer);for(i=snake[2].node-1;i>0;i--){snake[2].x[i]=snake[2].x[i-1];snake[2].y[i]=snake[2].y[i-1];}switch(snake[2].direction){case1:snake[2].x[0]+=10;break;case2:snake[2].x[0]-=10;break;case3:snake[2].y[0]-=10;break;case4:snake[2].y[0]+=10;break;}for(i=3;i<snake[2].node;i++){if(snake[2].x[i]==snake[2].x[0]&&snake[2].y[i]==snake[2].y[0]){snake[2].life=1;break;}}if(snake[2].x[0]<338||snake[2].x[0]>590||snake[2].y[0]<55||snake[1].y[0]>455)snake[2].life=1;if(snake[2].life==1)break;if(snake[2].x[0]==food[2].x&&snake[2].y[0]==food[2].y){setcolor(0);rectangle(food[2].x,food[2].y,food[2].x+10,food[2].y-10);snake[2].node++;food[2].yes=1;score2+=10;1414if(score2%50==0){level2+=1;gamespeed-=50;}}setcolor(5);/*畫(huà)出粉色蛇的循環(huán)*/for(i=0;i<snake[1].node;i++)circle((snake[1].x[i]+snake[1].x[i]+10)/2,(snake[1].y[i]+snake[1].y[i]-10)/2,5);delay(gamespeed);/*延遲gamespeed毫秒,以便控制蛇的爬行速度*/setcolor(0);/*用背景色黑色去除蛇的最后一節(jié)*/circle((snake[1].x[snake[1].node-1]+snake[1].x[snake[1].node-1]+10)/2,(snake[1].y[snake[1].node-1]+snake[1].y[snake[1].node-1]-10)/2,5);/*畫(huà)出圓形蛇的身體。*/setcolor(4);/*設(shè)置蛇身體為紅色。*/for(i=0;i<snake[2].node;i++)circle((snake[2].x[i]+snake[2].x[i]+10)/2,(snake[2].y[i]+snake[2].y[i]-10)/2,5);delay(gamespeed);setcolor(0);circle((snake[2].x[snake[2].node-1]+snake[2].x[snake[2].node-1]+10)/2,(snake[2].y[snake[2].node-1]+snake[2].y[snake[2].node-1]-10)/2,5);}if(snake[1].life==1)break;/*如果蛇死就跳出循環(huán)*/key1=bioskey(0);/*接受按鍵*/if(key1==ESC)break;/*按ESC鍵退出*/switch(key1){caseUP:if(snake[1].direction!=4)snake[1].direction=3;break;snake[1].direction=1;break;snake[1].direction=2;break;snake[1].direction=4;break;snake[2].direction=3;break;caseRIGHT:if(snake[1].direction!=2)caseLEFT:if(snake[1].direction!=1)caseDOWN:if(snake[1].direction!=3)caseUP1:if(snake[2].direction!=4)caseRIGHT1:if(snake[2].direction!=2)snake[2].direction=1;break;caseLEFT1:if(snake[2].direction!=1)snake[2].direction=2;break;caseDOWN1:if(snake[2].direction!=3)snake[2].direction=4;break;}/*用switch函數(shù)實(shí)現(xiàn)兩條蛇的方向控制。只有這樣才能夠?qū)崿F(xiàn)兩條蛇的同步控制!*/1515}}/*讀取文件操作函數(shù)*/voidReadFiles(){FILE*fpread1;/*定義讀取指針*fpread1,用來(lái)讀取文件。*/FILE*fpread2;/*如果文件不存在,則創(chuàng)建一個(gè)空文件,否則打開(kāi)該文件*/if((fpread1=fopen(FILENAME1,"ab+"))==NULL){printf("can'topenthefileperson1.dat!");exit(0);}if((fpread2=fopen(FILENAME2,"ab+"))==NULL){printf("can'topenthefileperson2.dat!");exit(0);}/*如果該文件名為空,則進(jìn)行記錄初始化工作*/if(fgetc(fpread1)==EOF)InitScoreFiles();if(fgetc(fpread2)==EOF)InitScoreFiles();/*如果文件為空,就執(zhí)行文件的初始化功能!*/rewind(fpread1);/*重新復(fù)位文件位置指針*/rewind(fpread2);/*將排行榜信息讀入Per數(shù)組中*/fread(per1,sizeof(structperson1),5,fpread1);fclose(fpread1);/*關(guān)閉排行榜文件*/fread(per2,sizeof(structperson2),5,fpread2);fclose(fpread2);}/*文件寫(xiě)入操作函數(shù)*/voidWriteFiles(structperson1*tmp){FILE*fpwrite1;/*以讀寫(xiě)方式打開(kāi)文件,文件內(nèi)原有的函數(shù)將被清空*/if((fpwrite1=fopen(FILENAME1,"wb+"))==NULL){printf("can'topenthefileperson1.dat!");exit(0);}fwrite(tmp,sizeof(structperson1),5,fpwrite1);fclose(fpwrite1);}/*初始化記錄函數(shù),默認(rèn)的分?jǐn)?shù)值和名字可以自己更改*/voidWriteFiles(structperson2*tmp){FILE*fpwrite2;if((fpwrite2=fopen(FILENAME2,"wb+"))==NULL)1616{printf("can'topenthefileperson2.dat!");exit(0);}fwrite(tmp,sizeof(structperson2),5,fpwrite2);fclose(fpwrite2);}voidInitScoreFiles()/*定義分?jǐn)?shù)的初始化函數(shù)。*/{inti;structperson1a[5];for(i=0;i<5;i++){a[i].score=0;strcpy(a[i].name,"nobody");}WriteFiles(a);structperson2b[5];for(i=0;i<5;i++){a[i].score=0;strcpy(a[i].name,"nobody");}WriteFiles(b);}/*排序函數(shù),如果玩家分?jǐn)?shù)超過(guò)最低記錄,則將玩家分?jǐn)?shù)插入到合適的位置,同時(shí)刪除原先的最低記錄*/voidCompareScore(structperson1des){inti,j;for(i=0;i<5;i++){if(des.score>=per1[i].score){if(i<5)}}/*顯示排行榜函數(shù)*/voidCompareScore(structperson2des){inti,j;for(i=0;i<5;i++){if(des.score>=per2[i].score){if(i<5){for(j=4;j>=i+1;j--)per2[j]=per2[j-1];}{for(j=4;j>=i+1;j--)per1[j]=per1[j-1];}per1[i]=des;break;}1717per2[i]=des;break;}}}/*定義第一個(gè)貪吃蛇的排行榜函數(shù)。實(shí)現(xiàn)第一個(gè)排行榜的功能!*/voidpain1_board(){inti;charstring[10];ReadFiles();setfillstyle(1,9);bar(482,227,599,239);/*定義Highestboard所在區(qū)域的矩形框!*/outtextxy(490,230,"Highestboard");setcolor(15);設(shè)置Highestboard矩形框的背景色!*/rectangle(480,225,600,240);/*設(shè)置排行榜第一個(gè)人的矩形框位置!*/setcolor(8);/*設(shè)置背景顏色!*/rectangle(481,226,601,241);setfillstyle(1,7);bar(475,257,610,426);setcolor(15);line(475,257,610,257);line(475,257,475,426);setcolor(1);outtextxy(480,265,"namescore");for(i=0;i<5;i++){setcolor(4);outtextxy(480,290+i*30,per1[i].name);itoa(per1[i].score,string,10);setcolor(14);outtextxy(580,290+i*30,string);setcolor(8);line(476,280+i*30,609,280+i*30);setcolor(15);line(476,281+i*30,609,281+i*30);}getch();}/*定義第二個(gè)貪吃蛇的排行榜函數(shù)。實(shí)現(xiàn)第二個(gè)排行榜的功能!*/voidpain2_board(){inti;charstring[10];ReadFiles();setfillstyle(1,9);bar(182,227,299,239);1818outtextxy(190,230,"Highestboard");setcolor(15);rectangle(180,225,300,240);setcolor(8);rectangle(181,226,301,241);setfillstyle(1,

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論