版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 信息技術(shù)學(xué)院本科課程設(shè)計(jì)報(bào)告</p><p><b> 課程設(shè)計(jì)題目</b></p><p> 學(xué) 生 姓 名: </p><p> 學(xué) 院: 信息技術(shù)學(xué)院 </p><p> 專
2、 業(yè): 信息管理與信息系統(tǒng) </p><p> 班 級(jí): </p><p> 學(xué) 號(hào): </p><p> 指 導(dǎo) 教 師: </p><p>
3、 完 成 日 期: </p><p><b> 題目(問(wèn)題)描述</b></p><p> 貪吃蛇小游戲程序設(shè)計(jì)</p><p> 圖1 貪吃蛇系統(tǒng)界面</p><p><b> 功能分析</b></p><
4、;p> 貪吃蛇游戲是一個(gè)經(jīng)典小游戲,一條蛇在封閉圍墻里,圍墻里隨機(jī)出現(xiàn)一個(gè)食物,通過(guò)按鍵盤(pán)四個(gè)光標(biāo)鍵控制蛇向上下左右四個(gè)方向移動(dòng),蛇頭撞倒食物,則食物被吃掉,蛇身體長(zhǎng)一節(jié),同時(shí)記10分,接著又出現(xiàn)食物,等待蛇來(lái)吃,如果蛇在移動(dòng)中撞到墻或身體交叉蛇頭撞倒自己身體游戲結(jié)束。</p><p><b> 系統(tǒng)設(shè)計(jì)</b></p><p><b> 程序總
5、體結(jié)構(gòu)</b></p><p> 圖2貪吃蛇程序系統(tǒng)的構(gòu)圖</p><p><b> 2.界面設(shè)計(jì)</b></p><p> 如圖,通過(guò)W、S、A、D、space鍵進(jìn)行操作</p><p><b> 3.輸入方式設(shè)計(jì)</b></p><p> A 用W、
6、S、A、D、鍵控制蛇的上下左右移動(dòng),space鍵停止,esc鍵結(jié)束。</p><p> B 游戲目標(biāo):操縱屏幕上那條可愛(ài)的小蛇,在方框中不停吃豆豆,而每吃一個(gè)豆豆,蛇的身體都變的更長(zhǎng)一些,即增加一顆星星。游戲的難度也會(huì)隨之加大。</p><p> C 游戲終止:終止條件1——蛇頭撞到墻上;終止條件2——蛇身形成一個(gè)圈,也就是蛇頭碰到自身的任何一處</p><p>
7、; 4.重要數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)</p><p><b> 5.函數(shù)設(shè)計(jì)</b></p><p><b> 6.函數(shù)調(diào)用圖</b></p><p><b> 7. 實(shí)體屬性圖</b></p><p> 關(guān)鍵技術(shù)、難點(diǎn)及其解決方法</p><p>
8、;<b> 測(cè)試方法</b></p><p><b> 總結(jié)</b></p><p><b> 附錄1</b></p><p><b> 程序源代碼</b></p><p> #include <windows.h></p>
9、;<p> #include <stdlib.h></p><p> #include <time.h></p><p> #include <stdio.h></p><p> #include <string.h></p><p> #include <coni
10、o.h></p><p> #define N 21</p><p> int apple[3];</p><p> char score[3];</p><p> char tail[3]; </p><p> void gotoxy(int x, int y) //輸出坐標(biāo) </p>
11、;<p><b> {</b></p><p> COORD pos;</p><p> pos.X = x; </p><p> pos.Y = y;</p><p> SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
12、</p><p><b> }</b></p><p> void color(int b) //顏色函數(shù) </p><p><b> {</b></p><p> HANDLE hConsole = GetStdHandle((STD_OUTPUT_HANDLE)) ; &
13、lt;/p><p> SetConsoleTextAttribute(hConsole,b) ;</p><p><b> } </b></p><p> int Block(char head[2]) //判斷出界 </p><p><b> {</b></p><p&
14、gt; if ((head[0] < 1) || (head[0] > N) || (head[1] < 1) || (head[1] > N))</p><p><b> return 1;</b></p><p><b> return 0;</b></p><p><b>
15、}</b></p><p> int Eat(char snake[2]) //吃了蘋(píng)果 </p><p><b> {</b></p><p> if ((snake[0] == apple[0]) && (snake[1] == apple[1]))</p><p><b&
16、gt; {</b></p><p> apple[0] = apple[1] = apple[2] = 0;</p><p> gotoxy(N+44,10);</p><p> color(13);</p><p> printf("%d",score[0]*10);</p><
17、p> color(11);</p><p><b> return 1;</b></p><p><b> }</b></p><p><b> return 0;</b></p><p><b> }</b></p><
18、;p> void Draw(char **snake, int len) //蛇移動(dòng) </p><p><b> {</b></p><p> if (apple[2]) {</p><p> gotoxy(apple[1] * 2, apple[0]);</p><p> color(12);&l
19、t;/p><p> printf("●");</p><p> color(11);</p><p><b> }</b></p><p> gotoxy(tail[1] * 2, tail[0]);</p><p> if (tail[2]) </p>&
20、lt;p> { color(14);</p><p> printf("★");</p><p> color(11);</p><p><b> }</b></p><p><b> else </b></p><p> printf
21、("■");</p><p> gotoxy(snake[0][1] * 2, snake[0][0]);</p><p> color(14);</p><p> printf("★");</p><p> color(11);</p><p> putchar(
22、39;\n');</p><p><b> }</b></p><p> char** Move(char **snake, char dirx, int *len) //控制方向 </p><p><b> {</b></p><p> int i, full = Eat(sn
23、ake[0]);</p><p> memcpy(tail, snake[(*len)-1], 2);</p><p> for (i = (*len) - 1; i > 0; --i) </p><p> memcpy(snake[i], snake[i-1], 2);</p><p> switch (dirx) </
24、p><p><b> { </b></p><p> case 'w': case 'W': --snake[0][0]; break;</p><p> case 's': case 'S': ++snake[0][0]; break;</p><p>
25、 case 'a': case 'A': --snake[0][1]; break;</p><p> case 'd': case 'D': ++snake[0][1]; break;</p><p> default: ;</p><p><b> } </b><
26、;/p><p> if (full) </p><p><b> { </b></p><p> snake = (char **)realloc(snake, sizeof(char *) * ((*len) + 1));</p><p> snake[(*len)] = (char *)malloc(size
27、of(char) * 2);</p><p> memcpy(snake[(*len)], tail, 2);</p><p><b> ++(*len);</b></p><p> ++score[0];</p><p> if(score[3] < 16) </p><p>
28、++score[3];</p><p> tail[2] = 1;</p><p><b> }</b></p><p><b> else </b></p><p> tail[2] = 0;</p><p> return snake;</p>&
29、lt;p><b> }</b></p><p> void init(char plate[N+2][N+2], char ***snake_x, int *len) //初始化 </p><p><b> {</b></p><p><b> int i, j;</b></p&
30、gt;<p> char **snake = NULL;</p><p><b> *len = 3;</b></p><p> score[0] = score[3] =3;</p><p> snake = (char **)realloc(snake, sizeof(char *) * (*len));</p&
31、gt;<p> for (i = 0; i < *len; ++i)</p><p> snake[i] = (char *)malloc(sizeof(char) * 2);</p><p> for (i = 0; i < 3; ++i) </p><p><b> {</b></p><
32、;p> snake[i][0] = N/2 + 1;</p><p> snake[i][1] = N/2 + 1 + i;</p><p><b> } </b></p><p> for (i = 1; i <= N; ++i) </p><p> for (j = 1; j <= N;
33、++j) </p><p> plate[i][j] = 1;</p><p> apple[0] = rand()%N + 1; apple[1] = rand()%N + 1;</p><p> apple[2] = 1;</p><p> for (i = 0; i < N + 2; ++i) </p>&l
34、t;p><b> {</b></p><p> gotoxy(0, i);</p><p> for (j = 0; j < N + 2; ++j) </p><p><b> {</b></p><p> switch (plate[i][j]) </p>&l
35、t;p><b> {</b></p><p><b> case 0: </b></p><p> color(12);printf("□");color(11); continue;</p><p> case 1: printf("■"); continue;<
36、;/p><p> default: ;</p><p><b> }</b></p><p><b> }</b></p><p> putchar('\n');</p><p><b> } </b></p><
37、;p> for (i = 0; i < (*len); ++i)</p><p><b> {</b></p><p> gotoxy(snake[i][1] * 2, snake[i][0]);</p><p> printf("★");</p><p><b> }
38、 </b></p><p> putchar('\n');</p><p> *snake_x = snake;</p><p><b> }</b></p><p> void Manual()</p><p><b> {</b>&l
39、t;/p><p> gotoxy(N+30,2);</p><p> color(10);</p><p> printf("按 W S A D 移動(dòng)方向");</p><p> gotoxy(N+30,4);</p><p> printf("按 space 鍵暫停");
40、 </p><p> gotoxy(N+30,8);</p><p> color(11);</p><p> printf("歷史最高分為: ");</p><p> color(12);</p><p> gotoxy(N+44,8);</p><p> pr
41、intf("%d",score[1]*10);</p><p> color(11);</p><p> gotoxy(N+30,12);</p><p> printf("你現(xiàn)在得分為: 0"); </p><p><b> }</b></p>
42、<p> int File_in() //取記錄的分?jǐn)?shù) </p><p><b> {</b></p><p><b> FILE *fp;</b></p><p> if((fp = fopen("C:\\tcs.txt","a+")) == NULL
43、)</p><p><b> {</b></p><p> gotoxy(N+18, N+2);</p><p> printf("文件不能打開(kāi)\n");</p><p><b> exit(0);</b></p><p><b> }
44、</b></p><p> if((score[1] = fgetc(fp)) != EOF);</p><p><b> else</b></p><p> score[1] = 0;</p><p><b> return 0;</b></p><p>
45、;<b> }</b></p><p> int File_out() //存數(shù)據(jù) </p><p><b> {</b></p><p><b> FILE *fp;</b></p><p> if(score[1] > score[0]) </p
46、><p> {gotoxy(10,10);</p><p> color(12);</p><p> puts("闖關(guān)失敗 加油耶");</p><p> gotoxy(0,N+2); </p><p><b> return 0;</b></p><
47、p><b> }</b></p><p> if((fp = fopen("C:\\tcs.txt","w+")) == NULL)</p><p><b> {</b></p><p> printf("文件不能打開(kāi)\n");</p>
48、<p><b> exit(0);</b></p><p><b> }</b></p><p> if(fputc(--score[0],fp)==EOF)</p><p> printf("輸出失敗\n");</p><p> gotoxy(10,10)
49、;</p><p> color(12);</p><p> puts("恭喜您打破記錄"); </p><p> gotoxy(0,N+2);</p><p><b> return 0;</b></p><p><b> }</b></
50、p><p> void Free(char **snake, int len) //釋放空間 </p><p><b> {</b></p><p><b> int i;</b></p><p> for (i = 0; i < len; ++i) </p><
51、p> free(snake[i]);</p><p> free(snake);</p><p><b> }</b></p><p> int main(void)</p><p><b> {</b></p><p><b> int len;
52、</b></p><p> char ch = 'g';</p><p> char a[N+2][N+2] = {{0}};</p><p> char **snake;</p><p> srand((unsigned)time(NULL));</p><p> color(1
53、1);</p><p> File_in();</p><p> init(a, &snake, &len);</p><p><b> Manual();</b></p><p> while (ch != 0x1B) // 按 ESC 結(jié)束 </p><p><
54、;b> { </b></p><p> Draw(snake, len);</p><p> if (!apple[2]) {</p><p> apple[0] = rand()%N + 1;</p><p> apple[1] = rand()%N + 1;</p><p> appl
55、e[2] = 1;</p><p><b> }</b></p><p> Sleep(200-score[3]*10);</p><p> setbuf(stdin, NULL);</p><p> if (kbhit())</p><p><b> {</b>&
56、lt;/p><p> gotoxy(0, N+2);</p><p> ch = getche();</p><p><b> }</b></p><p> snake = Move(snake, ch, &len); </p><p> if (Block(snake[0])==1
57、) </p><p><b> {</b></p><p> gotoxy(N+2, N+2);</p><p> puts("你輸了");</p><p> File_out();</p><p> Free(snake, len);</p><
58、p><b> getche();</b></p><p><b> exit(0); </b></p><p> } </p><p><b> }</b></p><p> Free(snake, len);<
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 貪吃蛇java課程設(shè)計(jì)--貪吃蛇程序設(shè)計(jì)
- 貪吃蛇小游戲
- 基于mfc的貪吃蛇程序設(shè)計(jì)課程設(shè)計(jì)
- java貪吃蛇游戲 課程設(shè)計(jì)
- c語(yǔ)言程序設(shè)計(jì)課程設(shè)計(jì)(論文)-貪吃蛇
- qt課程設(shè)計(jì)--貪吃蛇游戲設(shè)計(jì)
- c語(yǔ)言貪吃蛇游戲課程設(shè)計(jì)
- c語(yǔ)言課程設(shè)計(jì)--貪吃蛇游戲
- 貪吃蛇游戲的實(shí)現(xiàn)課程設(shè)計(jì)
- java課程設(shè)計(jì)--設(shè)計(jì)一個(gè)貪吃蛇游戲程序
- java課程設(shè)計(jì)---java設(shè)計(jì)貪吃蛇游戲
- 貪吃蛇課程設(shè)計(jì)
- java課程設(shè)計(jì)報(bào)告貪吃蛇游戲
- 貪吃蛇課程設(shè)計(jì)
- 貪吃蛇課程設(shè)計(jì)
- 貪吃蛇c語(yǔ)言程序設(shè)計(jì)
- 課程設(shè)計(jì)--安卓手機(jī)游戲---貪吃蛇
- 貪吃蛇課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)貪吃蛇
- java課程設(shè)計(jì)--貪吃蛇
評(píng)論
0/150
提交評(píng)論